Skip to main content

Crate arael_sketch_solver

Crate arael_sketch_solver 

Source
Expand description

2D parametric constraint-based sketch solver.

Work in progress – a parametric CAD sketching tool built on the arael optimization framework. Draw geometry, apply constraints, and the solver keeps everything consistent in real time.

§Entities

Three entity types, each owning its own parameters:

  • Point – 2D position (x, y)
  • Line – two endpoints p1, p2 (4 params), plus optional horizontal/vertical/length constraints
  • Arc – center, radius, start/end angle (5 params for arcs, 3 for circles where angles are fixed)

Shared geometry (e.g. two lines meeting at a point) is enforced via coincident constraints, not shared references.

§Constraints

Over 40 constraint types including: coincident (point-point, line-line, point-on-line, point-on-arc), parallel, perpendicular, tangent, equal length/radius, distance, horizontal/vertical distance, and more. All constraints are symbolically differentiated at compile time.

§Solving

The Sketch::solve() method runs Levenberg-Marquardt optimization with drift regularization. Locking: use Param::fixed(value) to pin individual parameters. The solver skips fixed params entirely.

Re-exports§

pub use symbol_bag::SymbolBag;
pub use expr_constraint::ExpressionConstraint;
pub use blocker::BlockerReport;
pub use blocker::analyze as analyze_blockers;
pub use dimensions::*;

Modules§

blocker
Blocker analysis for DOF-rejected constraints.
dimensions
expr_constraint
Expression-based constraints for parametric dimensions.
symbol_bag
Symbol bag: runtime mapping from user-friendly names to parameter indices and symbolic expressions. Used for parametric equations in dimensions.

Structs§

AngleConstraint
AngleConstraintSym
Arc
ArcArcParallel
ArcArcParallelSym
ArcConstraints
ArcConstraintsSym
ArcLineParallel
ArcLineParallelSym
ArcSym
AxisDistanceAACeCe
AxisDistanceAACeCeSym
AxisDistanceAACeE
AxisDistanceAACeESym
AxisDistanceAACeS
AxisDistanceAACeSSym
AxisDistanceAAECe
AxisDistanceAAECeSym
AxisDistanceAAEE
AxisDistanceAAEESym
AxisDistanceAAES
AxisDistanceAAESSym
AxisDistanceAASCe
AxisDistanceAASCeSym
AxisDistanceAASE
AxisDistanceAASESym
AxisDistanceAASS
AxisDistanceAASSSym
AxisDistanceArcCenterL1
AxisDistanceArcCenterL2
AxisDistanceArcCenterL1Sym
AxisDistanceArcCenterL2Sym
AxisDistanceArcCenterP
AxisDistanceArcCenterPSym
AxisDistanceArcEndL1
AxisDistanceArcEndL2
AxisDistanceArcEndL1Sym
AxisDistanceArcEndL2Sym
AxisDistanceArcEndP
AxisDistanceArcEndPSym
AxisDistanceArcStartL1
AxisDistanceArcStartL2
AxisDistanceArcStartL1Sym
AxisDistanceArcStartL2Sym
AxisDistanceArcStartP
AxisDistanceArcStartPSym
AxisDistanceLL11
AxisDistanceLL12
AxisDistanceLL21
AxisDistanceLL22
AxisDistanceLL11Sym
AxisDistanceLL12Sym
AxisDistanceLL21Sym
AxisDistanceLL22Sym
AxisDistanceLP1
AxisDistanceLP2
AxisDistanceLP1Sym
AxisDistanceLP2Sym
CoincidentArcCenter
CoincidentArcCenterEnd
CoincidentArcCenterEndSym
CoincidentArcCenterStart
CoincidentArcCenterStartSym
CoincidentArcCenterSym
CoincidentArcEnd
CoincidentArcEndCenter
CoincidentArcEndCenterSym
CoincidentArcEndEnd
CoincidentArcEndEndSym
CoincidentArcEndStart
CoincidentArcEndStartSym
CoincidentArcEndSym
CoincidentArcStart
CoincidentArcStartCenter
CoincidentArcStartCenterSym
CoincidentArcStartEnd
CoincidentArcStartEndSym
CoincidentArcStartStart
CoincidentArcStartStartSym
CoincidentArcStartSym
CoincidentLL11
CoincidentLL12
CoincidentLL21
CoincidentLL22
CoincidentLL11Sym
CoincidentLL12Sym
CoincidentLL21Sym
CoincidentLL22Sym
CoincidentLP1
CoincidentLP2
CoincidentLP1ArcCenter
CoincidentLP1ArcCenterSym
CoincidentLP1ArcEnd
CoincidentLP1ArcEndSym
CoincidentLP1ArcStart
CoincidentLP1ArcStartSym
CoincidentLP1Sym
CoincidentLP2ArcCenter
CoincidentLP2ArcCenterSym
CoincidentLP2ArcEnd
CoincidentLP2ArcEndSym
CoincidentLP2ArcStart
CoincidentLP2ArcStartSym
CoincidentLP2Sym
CoincidentPP
CoincidentPPSym
Collinear
CollinearSym
Concentric
ConcentricSym
DistanceAACeCe
DistanceAACeCeSym
DistanceAACeE
DistanceAACeESym
DistanceAACeS
DistanceAACeSSym
DistanceAAECe
DistanceAAECeSym
DistanceAAEE
DistanceAAEESym
DistanceAAES
DistanceAAESSym
DistanceAASCe
DistanceAASCeSym
DistanceAASE
DistanceAASESym
DistanceAASS
DistanceAASSSym
DistanceArcCenterL
DistanceArcCenterL1
DistanceArcCenterL2
DistanceArcCenterL1Sym
DistanceArcCenterL2Sym
DistanceArcCenterLSym
DistanceArcCenterP
DistanceArcCenterPSym
DistanceArcEndL
DistanceArcEndL1
DistanceArcEndL2
DistanceArcEndL1Sym
DistanceArcEndL2Sym
DistanceArcEndLSym
DistanceArcEndP
DistanceArcEndPSym
DistanceArcStartL
DistanceArcStartL1
DistanceArcStartL2
DistanceArcStartL1Sym
DistanceArcStartL2Sym
DistanceArcStartLSym
DistanceArcStartP
DistanceArcStartPSym
DistanceConcentric
DistanceConcentricSym
DistanceLL11
DistanceLL12
DistanceLL21
DistanceLL22
DistanceLL11Sym
DistanceLL12Sym
DistanceLL21Sym
DistanceLL22Sym
DistanceLP1
DistanceLP2
DistanceLP1L
DistanceLP1LSym
DistanceLP1Sym
DistanceLP2L
DistanceLP2LSym
DistanceLP2Sym
DistancePL
DistancePLSym
DistancePP
DistancePPSym
DofResult
Result of DOF (degrees of freedom) analysis.
DragAutoAnchorState
Snapshot returned by Sketch::add_drag_auto_anchors and consumed by Sketch::remove_drag_auto_anchors to roll auto-anchors back at drag-end. Cloneable so the GUI can also roll anchors back from a serialized clone of the live sketch.
EqualLength
EqualLengthSym
EqualRadius
EqualRadiusSym
HorizontalDistancePP
HorizontalDistancePPSym
Line
LineConstraints
LineConstraintsSym
LineP1OnArc
LineP1OnArcSym
LineP1OnLine
LineP1OnLineSym
LineP2OnArc
LineP2OnArcSym
LineP2OnLine
LineP2OnLineSym
LineStyleSym
LineSym
MidpointArcEnd
MidpointArcEndArc
MidpointArcEndArcSym
MidpointArcEndSym
MidpointArcPoint
MidpointArcPointSym
MidpointArcStart
MidpointArcStartArc
MidpointArcStartArcSym
MidpointArcStartSym
MidpointConstraint
MidpointConstraintSym
MidpointLP1
MidpointLP2
MidpointLP1Arc
MidpointLP1ArcSym
MidpointLP1Sym
MidpointLP2Arc
MidpointLP2ArcSym
MidpointLP2Sym
Parallel
ParallelSym
Perpendicular
PerpendicularSym
Point
PointConstraints
PointConstraintsSym
PointOnArc
PointOnArcSym
PointOnLine
PointOnLineSym
PointSym
SharedEndpointSym
Sketch
SketchSym
SymmetryAA
SymmetryAASym
SymmetryLL
SymmetryLLSym
SymmetryPP
Two points forced symmetric about a mirror line. Residual: reflect a across line, compare to c. Dense 3-entity coupling: packed CrossBlocks for each pair beat TripletBlock’s COO push. hb_ac is unambiguous by type (only Point-Point pair); the two Point-Line blocks need explicit cross = (..) to pick their ref.
SymmetryPPSym
TangentAA
TangentAASym
TangentLA
TangentLASym
VerticalDistancePP
VerticalDistancePPSym

Enums§

LineStyle
SharedEndpoint
Which endpoints are shared between two arcs for tangent constraints.

Functions§

format_flag_name
Format a synthetic constraint name for a flag-style constraint on a named entity. Pattern: “C”, e.g. “CL0H”, “CL3V”.
parse_flag_name
Parse a synthetic constraint name into its entity-name + flag-char components. Returns None for names that don’t match “CF” where the first char is ‘C’ and the final char is an uppercase ASCII flag tag (‘H’ or ‘V’ today).