From cc7df4554ca0b400a56c96861f522a15169da75b Mon Sep 17 00:00:00 2001 From: Roger Maitland Date: Sun, 8 Mar 2026 11:01:35 -0400 Subject: [PATCH] Adding Drawing with Constraints to the docs --- docs/assets/blend_curve_ex.svg | 229 +++++++++ docs/assets/coincident_ex.svg | 22 + docs/assets/complex_ex.svg | 38 ++ docs/assets/complex_sketch.png | Bin 0 -> 106953 bytes docs/assets/enclosing_ex.svg | 26 ++ docs/assets/intersect_ex.svg | 24 + docs/assets/lines_angle_ex.svg | 24 + docs/assets/lines_tan2_ex.svg | 26 ++ docs/assets/lines_tan_pnt_ex.svg | 24 + docs/assets/offset_ex.svg | 22 + docs/assets/perpendicular_ex.svg | 22 + docs/assets/pnt_center_ex.svg | 21 + docs/assets/tan2_on_ex.svg | 25 + docs/assets/tan2_rad_ex.svg | 26 ++ docs/assets/tan3_ex.svg | 24 + docs/assets/tan_rad_on_ex.svg | 24 + docs/assets/tangent_circles.svg | 19 + docs/assets/tangent_ex.svg | 22 + docs/tutorial_constraints.rst | 773 +++++++++++++++++++++++++++++++ docs/tutorials.rst | 1 + 20 files changed, 1392 insertions(+) create mode 100644 docs/assets/blend_curve_ex.svg create mode 100644 docs/assets/coincident_ex.svg create mode 100644 docs/assets/complex_ex.svg create mode 100644 docs/assets/complex_sketch.png create mode 100644 docs/assets/enclosing_ex.svg create mode 100644 docs/assets/intersect_ex.svg create mode 100644 docs/assets/lines_angle_ex.svg create mode 100644 docs/assets/lines_tan2_ex.svg create mode 100644 docs/assets/lines_tan_pnt_ex.svg create mode 100644 docs/assets/offset_ex.svg create mode 100644 docs/assets/perpendicular_ex.svg create mode 100644 docs/assets/pnt_center_ex.svg create mode 100644 docs/assets/tan2_on_ex.svg create mode 100644 docs/assets/tan2_rad_ex.svg create mode 100644 docs/assets/tan3_ex.svg create mode 100644 docs/assets/tan_rad_on_ex.svg create mode 100644 docs/assets/tangent_circles.svg create mode 100644 docs/assets/tangent_ex.svg create mode 100644 docs/tutorial_constraints.rst diff --git a/docs/assets/blend_curve_ex.svg b/docs/assets/blend_curve_ex.svg new file mode 100644 index 0000000..9eaa3b6 --- /dev/null +++ b/docs/assets/blend_curve_ex.svg @@ -0,0 +1,229 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/coincident_ex.svg b/docs/assets/coincident_ex.svg new file mode 100644 index 0000000..9411907 --- /dev/null +++ b/docs/assets/coincident_ex.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/complex_ex.svg b/docs/assets/complex_ex.svg new file mode 100644 index 0000000..c1c60a7 --- /dev/null +++ b/docs/assets/complex_ex.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/complex_sketch.png b/docs/assets/complex_sketch.png new file mode 100644 index 0000000000000000000000000000000000000000..232216d3bf1aad0e781224f3b43ee8719c0cad18 GIT binary patch literal 106953 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
~QY;|Z^6mzf$tG&H_-RIf&p))kQjyJ2D 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 literal 0 HcmV?d00001 diff --git a/docs/assets/enclosing_ex.svg b/docs/assets/enclosing_ex.svg new file mode 100644 index 0000000..7254e40 --- /dev/null +++ b/docs/assets/enclosing_ex.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/intersect_ex.svg b/docs/assets/intersect_ex.svg new file mode 100644 index 0000000..5e114a6 --- /dev/null +++ b/docs/assets/intersect_ex.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/lines_angle_ex.svg b/docs/assets/lines_angle_ex.svg new file mode 100644 index 0000000..19771b9 --- /dev/null +++ b/docs/assets/lines_angle_ex.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/lines_tan2_ex.svg b/docs/assets/lines_tan2_ex.svg new file mode 100644 index 0000000..905c839 --- /dev/null +++ b/docs/assets/lines_tan2_ex.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/lines_tan_pnt_ex.svg b/docs/assets/lines_tan_pnt_ex.svg new file mode 100644 index 0000000..65d6b21 --- /dev/null +++ b/docs/assets/lines_tan_pnt_ex.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/offset_ex.svg b/docs/assets/offset_ex.svg new file mode 100644 index 0000000..54e39c2 --- /dev/null +++ b/docs/assets/offset_ex.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/perpendicular_ex.svg b/docs/assets/perpendicular_ex.svg new file mode 100644 index 0000000..7037b4a --- /dev/null +++ b/docs/assets/perpendicular_ex.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/pnt_center_ex.svg b/docs/assets/pnt_center_ex.svg new file mode 100644 index 0000000..d03e416 --- /dev/null +++ b/docs/assets/pnt_center_ex.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/tan2_on_ex.svg b/docs/assets/tan2_on_ex.svg new file mode 100644 index 0000000..ef8d12e --- /dev/null +++ b/docs/assets/tan2_on_ex.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/tan2_rad_ex.svg b/docs/assets/tan2_rad_ex.svg new file mode 100644 index 0000000..4794c1a --- /dev/null +++ b/docs/assets/tan2_rad_ex.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/tan3_ex.svg b/docs/assets/tan3_ex.svg new file mode 100644 index 0000000..30b0b03 --- /dev/null +++ b/docs/assets/tan3_ex.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/tan_rad_on_ex.svg b/docs/assets/tan_rad_on_ex.svg new file mode 100644 index 0000000..b9afecf --- /dev/null +++ b/docs/assets/tan_rad_on_ex.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/tangent_circles.svg b/docs/assets/tangent_circles.svg new file mode 100644 index 0000000..4373883 --- /dev/null +++ b/docs/assets/tangent_circles.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/assets/tangent_ex.svg b/docs/assets/tangent_ex.svg new file mode 100644 index 0000000..f872fbe --- /dev/null +++ b/docs/assets/tangent_ex.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/tutorial_constraints.rst b/docs/tutorial_constraints.rst new file mode 100644 index 0000000..88c5278 --- /dev/null +++ b/docs/tutorial_constraints.rst @@ -0,0 +1,773 @@ +######################## +Drawing with Constraints +######################## + +************ +Introduction +************ + +CAD constraints are geometric and dimensional rules that define how sketch or assembly entities +relate to one another. They control degrees of freedom (for example, parallel, +perpendicular, tangent, coincident, distance, or angle), so edits preserve design intent instead +of introducing unintended shape changes. This is the foundation of parametric +modeling: behavior is driven by explicit relationships, not fixed manually drawn geometry. +This section only addresses sketch constraints. + +In graphical CAD systems, sketching is usually a two-step workflow: first draw approximate +geometry, then add dimensions and constraints so a global solver can infer exact positions. +That model works well for interactive drawing, but it also encourages tightly coupled +constraint networks that can become difficult to predict and maintain as a design evolves. +It is also typically strongest for lines and circular arcs, with more limited and less +robust behavior for ellipses, splines, and other higher-order curves. + +In build123d, the primary workflow is different. Geometry is defined precisely at creation +time using coordinates, parameters, and explicit geometric relationships in code. Instead of +building a large interdependent constraint graph and asking a global solver to resolve it, +you express intent directly: mirror about a plane, construct tangent features, derive points +and frames from existing topology, and compose operations deterministically. + +This does not eliminate constrained construction; it scopes it. build123d provides targeted +geometric local solvers for common high-value problems, including objects such as +:class:`~objects_curve.BlendCurve`, :class:`~objects_curve.ConstrainedLines`, +:class:`~objects_curve.ConstrainedArcs`, :class:`~objects_curve.IntersectingLine`, and +:class:`~objects_sketch.Triangle`. +It also provides geometric operations that enforce clear relationships +directly, such as :class:`~operations_sketch.make_hull`, :class:`~operations_generic.mirror`, +and :class:`~operations_generic.offset`. Together, these tools solve specific +constraint patterns while keeping model behavior explicit, deterministic, and readable in +code. + +The result is a practical hybrid approach: precise programmatic modeling by default, with +specialized constrained constructors when they provide clear leverage. For most production +parts, this yields robust, maintainable sketches without the overhead and fragility of a +general-purpose sketch solver. + +**************** +Constraint Types +**************** + +build123d supports several practical forms of constrained construction. Rather than relying on +a single global sketch solver, it provides targeted tools that enforce specific geometric +relationships directly and predictably. + +Analytical Constraints +====================== + +:class:`~objects_sketch.Triangle` + Constructs a triangle from any three parameters (side lengths and/or interior angles) + and solves for the others. Angle naming follows standard convention: side ``a`` is opposite + angle ``A``, side ``b`` is opposite angle ``B``, and side ``c`` is opposite angle ``C``. + +Continuity Constraints +====================== + +:class:`~objects_curve.BlendCurve` + Creates a smooth Bézier transition between two existing edges. + + In this context, *continuity* describes how smoothly the new blend joins the input edges + at each endpoint: + + - C0 (positional continuity): endpoints meet, but direction may kink. + - C1 (tangent continuity): endpoints and tangent directions match, giving a visually smooth join with no corner. + - C2 (curvature continuity): endpoints, tangents, and curvature trend match, reducing curvature jumps and producing a smoother fairing. + + :class:`~objects_curve.BlendCurve` builds a Bézier curve that satisfies these endpoint constraints: + + - cubic Bézier for C1 blending (position + first derivative), + - quintic Bézier for C2 blending (position + first and second derivatives). + + The derivatives are sampled from the two source edges at the selected connection points, + then converted into Bézier control points that enforce the requested continuity. + Optional tangent scaling factors let you tune how strongly the blend departs from each + source edge, which adjusts perceived tension and transition shape without changing the + endpoint constraints. + +Geometric Relationship Constraints +================================== + +``@`` and ``%`` operators + Use ``@`` (position-at) and ``%`` (tangent-at) to construct geometry relative to existing + geometry. Typical uses include starting a new edge at an exact point on another edge, + or aligning a new edge direction to a sampled tangent. + +:class:`~operations_generic.mirror` + Enforces symmetry by reflecting geometry about a plane, producing mirrored entities with + exact geometric correspondence to the source. + +Intersection Constraints +======================== + +:class:`~objects_curve.IntersectingLine` + Constructs a line from a point/direction definition and an intersection condition against + another line-like reference, ensuring the resulting geometry satisfies the intersection + requirement. + + +Offset / Equidistance Constraints +================================= + +:class:`~operations_generic.offset` + Creates geometry at a constant normal distance from a source edge or wire. + + This enforces an equidistance relationship commonly used for wall thickness, clearances, + toolpaths, and parallel profile construction. Join behavior (for example at corners) can + be controlled to match the design intent. + +Tangency Constraints +==================== + +:class:`~objects_curve.ConstrainedArcs` and :class:`~objects_curve.ConstrainedLines` + Provide local constrained solving for 2D + line-and-circle constructions. These APIs solve common geometric construction problems + from explicit numeric and geometric constraints relative to existing curves. + + Supported constraint patterns include: + + - circle with specified radius, + - line at a specified angle to another line, + - tangency of a line or circle to a reference curve, + - line or circle passing through a point, + - circle center constrained to a point or to lie on a curve. + + For example, you can construct a circle with a given radius whose center lies on a + specified line and which is tangent to another circle. This style of targeted solving + covers high-value sketch workflows while keeping branch selection explicit and + deterministic in code. + +Multiple Solutions and Qualification +------------------------------------ + +Tangency construction is typically multi-solution. A single problem statement can produce +several valid geometric branches depending on where the solution lies relative to the +reference entities. + +For example, a circle of fixed radius tangent to two secant circles can produce up to +eight valid solutions as shown below. This is expected behavior, not an error. + +.. figure:: ./assets/tangent_circles.svg + :align: center + +To reduce ambiguity, tangency constraints support **qualification** of relative position: + +- ``Tangency.ENCLOSING``: the solution must enclose the argument. +- ``Tangency.ENCLOSED``: the solution must be enclosed by the argument. +- ``Tangency.OUTSIDE``: the solution and argument must be external to each other. +- ``Tangency.UNQUALIFIED``: no positional filtering; all valid branches are returned. + +These qualifiers are intuitive for circles (inside/outside). For general oriented curves, +interior is defined as the left-hand side of the curve with respect to its orientation. + +Even with qualification, more than one solution may remain. In that case, use a +``selector`` to choose deterministic outputs. + +Selecting results +----------------- + +In Algebra mode, select from returned edges after construction: + +.. code-block:: build123d + + arcs = ConstrainedArcs(..., sagitta=Sagitta.BOTH) + chosen = arcs.edges().sort_by(Edge.length)[0] + +In Builder mode, prefer the constructor ``selector`` argument so only desired branches +are added to the active context: + +.. code-block:: build123d + + with BuildLine(): + ConstrainedArcs( + ..., + selector=lambda edges: edges.sort_by_distance((0, 0))[0], + ) + +This combination of qualification + selection gives robust, explicit control over +tangency branch choice. + +****************** +Practical Examples +****************** + +The following examples show how each constraint type is used in production-style sketching. +Each example is intentionally small, with construction geometry kept visible in code so the +relationship logic is explicit and reusable. + +Analytical Constraints +====================== + +build123d includes a built-in :class:`~objects_sketch.Triangle` object that has an internal solver such that one can +specify any three parameters of a triangle and solve for the others. For example: + +.. code-block:: build123d + + >>> isosceles = Triangle(a=30, b=30, C=60) + >>> isosceles.c + 29.999999999999996 + >>> isosceles.A + 60.00000000000001 + >>> isosceles.B + 60.00000000000001 + >>> isosceles.vertex_A + Vertex(-1.7763568394002505e-15, 17.32050807568877, 0.0) + +In this example, side lengths ``a`` and ``b`` with included angle ``C`` are provided. +The object then computes the remaining side, angles, and vertices. This is useful when a +design intent is naturally expressed as triangle dimensions instead of explicit coordinates. + +One can easily use external solvers, say the symbolic solver ``sympy``, within your build123d code +as follows: + +.. code-block:: build123d + + from math import sin, cos, tan, radians + from build123d import * + from ocp_vscode import * + import sympy + + # This problem uses the sympy symbolic math solver + + # Define the symbols for the unknowns + # - the center of the radius 30 arc (x30, y30) + # - the center of the radius 66 arc (x66, y66) + # - end of the 8° line (l8x, l8y) + # - the point with the radius 30 and 66 arc meet i30_66 + # - the start of the horizontal line lh + y30, x66, xl8, yl8 = sympy.symbols("y30 x66 xl8 yl8") + x30 = 77 - 55 / 2 + y66 = 66 + 32 + + # There are 4 unknowns so we need 4 equations + equations = [ + (x66 - x30) ** 2 + (y66 - y30) ** 2 - (66 + 30) ** 2, # distance between centers + xl8 - (x30 + 30 * sin(radians(8))), # 8 degree slope + yl8 - (y30 + 30 * cos(radians(8))), # 8 degree slope + (yl8 - 50) / (55 / 2 - xl8) - tan(radians(8)), # 8 degree slope + ] + # There are two solutions but we want the 2nd one + solution = {k: float(v) for k,v in sympy.solve(equations, dict=True)[1].items()} + + # Create the critical points + c30 = Vector(x30, solution[y30]) + c66 = Vector(solution[x66], y66) + l8 = Vector(solution[xl8], solution[yl8]) + + ... + +This pattern is useful when the governing relationships are algebraic but awkward to +construct directly with primitives. Solve unknown parameters first, then feed the solved +values into standard build123d geometry construction. + + +Continuity Constraints +====================== + +One may want to join two curves with a third curve such that the connector satisfies a +given continuity where they meet as shown here where a semi-circle (on the left) is joined +to a spline (on the right). + +.. code-block:: build123d + + m1 = CenterArc((-2, 0.6), 1, -10, 200).reversed() + m2 = Spline((0.4, -0.6), (1, -1.6), (2, 0)) + connector = BlendCurve(m1, m2, tangent_scalars=(2, 1), continuity=ContinuityLevel.C2) + comb = Curve(Wire([m1, connector, m2]).curvature_comb(200)) + +.. figure:: ./assets/blend_curve_ex.svg + :align: center + +The key call is ``BlendCurve(..., continuity=ContinuityLevel.C2)``. ``C2`` continuity +matches endpoint curvature trend in addition to position and tangent, which reduces visible +fairness breaks at joins. ``tangent_scalars`` controls how strongly the connector departs +from each source curve. + +``curvature_comb`` is used here as a diagnostic. The normal "comb" lines represent local +curvature magnitude; smoother transitions produce gradual comb variation rather than abrupt +spikes. + +Geometric Relationship Constraints +================================== + +Coincident +---------- + +.. code-block:: build123d + + with BuildLine() as coincident_ex: + l1 = Line((0, 0), (1, 2)) + l2 = Line(l1 @ 1, l1 @ 1 + (1, 0)) + +.. figure:: ./assets/coincident_ex.svg + :align: center + +The second line starts at ``l1 @ 1`` (the end of ``l1``), creating an exact coincident +relationship without a separate constraint object. + +Tangent +------- + +.. code-block:: build123d + + with BuildLine() as tangent_ex: + l1 = Line((0, 0), (1, 1)) + l2 = JernArc(start=l1 @ 1, tangent=l1 % 1, radius=1, arc_size=70) + +.. figure:: ./assets/tangent_ex.svg + :align: center + +The arc starts at the line endpoint and uses ``l1 % 1`` as its initial tangent direction. +This is a direct tangent construction: continuity is encoded in the creation call. + +Perpendicular +------------- + +.. code-block:: build123d + + with BuildLine() as perpendicular_ex: + l1 = CenterArc((0, 0), 1.5, 0, 45) + l2 = PolarLine( + start=l1 @ 1, length=1, direction=l1.tangent_at(1).rotate(Axis.Z, -90) + ) + +.. figure:: ./assets/perpendicular_ex.svg + :align: center + +The direction vector is built from ``l1.tangent_at(1)`` rotated by 90 degrees, giving an +explicit perpendicular relationship relative to curve orientation. + +Intersection Constraints +======================== + +.. code-block:: build123d + + with BuildLine() as intersect_ex: + c1 = EllipticalCenterArc((0, 0), 1.2, 1.8, 0, 90, mode=Mode.PRIVATE) + l1 = IntersectingLine( + start=(0, 0), direction=Vector(1, 0).rotate(Axis.Z, 10), other=c1 + ) + l2 = IntersectingLine( + start=(0, 0), direction=Vector(1, 0).rotate(Axis.Z, 80), other=c1 + ) + l3 = add(c1.trim(l1 @ 1, l2 @ 1)) + +.. figure:: ./assets/intersect_ex.svg + :align: center + +:class:`~objects_curve.IntersectingLine` creates each line from a point and direction, then trims it to the +intersection with the ellipse. This is often cleaner than creating long helper lines and +manually trimming afterward. + +Offset / Equidistance Constraints +================================= + +.. code-block:: build123d + + inside = FilletPolyline((1.5, 0), (1.5, 1), (-1.5, 1), (-1.5, 0), radius=0.2) + perimeter = offset(inside, amount=0.2, side=Side.RIGHT) + + +.. figure:: ./assets/offset_ex.svg + :align: center + +:class:`~operations_generic.offset` preserves the source profile shape while enforcing constant wall thickness. +This is a common pattern for clearances, shells, and manufacturing margins. + +Tangency Constraints +==================== + +Both :class:`~objects_curve.ConstrainedArcs` and :class:`~objects_curve.ConstrainedLines` +return a :class:`~topology.Curve` containing one or more :class:`~topology.Edge` objects. + +These constructors solve tangent/contact problems from mixed numeric and geometric inputs. +Because tangency is often ambiguous, multiple valid branches are expected. + + +Multiple solutions +------------------ + +Constraint systems often yield multiple valid results. The ``selector`` callback is the +main tool for choosing the subset to keep. + +.. code-block:: build123d + + # Keep all solutions + ConstrainedArcs(..., selector=lambda arcs: arcs) + + # Keep first + ConstrainedArcs(..., selector=lambda arcs: arcs[0]) + + # Keep shortest + ConstrainedArcs(..., selector=lambda arcs: arcs.sort_by(Edge.length)[0]) + +In Builder mode, omitting ``selector`` can add all solutions to context, which is often +not what you want for production sketches. + +Tangency qualifiers +~~~~~~~~~~~~~~~~~~~ + +Tangency qualifiers come from OCCT and are exposed as ``Tangency``: + +- ``Tangency.UNQUALIFIED``: + no side preference (OCCT ``Unqualified``). +- ``Tangency.OUTSIDE``: + tangent on the exterior side of the target (OCCT ``Outside``). +- ``Tangency.ENCLOSING``: + solution encloses/includes the target (OCCT ``Enclosing``). +- ``Tangency.ENCLOSED``: + solution is enclosed/included by the target (OCCT ``Enclosed``). + +These semantics are most visible for curve-vs-curve constraints (for example circle +to circle, line to circle). In many practical cases, ``UNQUALIFIED`` is a good default +followed by filtering via ``selector``. + +.. code-block:: build123d + + with BuildLine() as egg_plant: + # Construction Geometry + c1 = CenterArc((-2, 0), 0.75, 80, 240, mode=Mode.PRIVATE) + c2 = CenterArc((2, 0), 1, 220, 250, mode=Mode.PRIVATE) + + # egg_plant perimeter + l1 = ConstrainedArcs((c2, Tangency.OUTSIDE), (c1, Tangency.OUTSIDE), radius=6) + l2 = ConstrainedArcs( + (c2, Tangency.ENCLOSING), + (c1, Tangency.ENCLOSING), + radius=8, + selector=lambda a: a.sort_by(Axis.Y)[-1], + ) + l3 = add(c1.trim(l1 @ 1, l2 @ 1)) + l4 = add(c2.trim(l1 @ 0, l2 @ 0)) + +.. figure:: ./assets/enclosing_ex.svg + :align: center + +In the "egg-plant" example, ``Tangency.OUTSIDE`` and ``Tangency.ENCLOSING`` reduce the +candidate branches to the intended outer profile. The selector on ``l2`` then resolves +the remaining ambiguity deterministically by choosing the highest branch in ``Y``. + +OCCT defines exterior/interior using orientation: + +- Circle: exterior is on the right side when traversing by its orientation + (interior/material is on the left side). +- Line/open curve: interior is the left side with respect to traversal direction, + exterior is the opposite side. + +Because of this, changing an input edge direction can change which branches satisfy +``OUTSIDE``/``ENCLOSING``/``ENCLOSED``. + +If qualifier behavior appears inverted, inspect input edge orientation first. + +ConstrainedArcs +--------------- + +Overview +~~~~~~~~ + +:class:`~objects_curve.ConstrainedArcs` supports several signature families for planar circular arcs: + +1. Two tangency/contact objects + fixed radius +2. Two tangency/contact objects + center constrained on a locus +3. Three tangency/contact objects +4. One tangency/contact object + fixed center +5. One tangency/contact object + fixed radius + center constrained on a locus + +``sagitta`` selects short/long/both arc branches: + +- ``Sagitta.SHORT`` +- ``Sagitta.LONG`` +- ``Sagitta.BOTH`` + +In practice, use qualifiers and ``sagitta`` to reduce branch count, then finalize with +``selector`` for deterministic output. + +Signature A: Two constraints + ``radius`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: build123d + + ConstrainedArcs( + tangency_one, + tangency_two, + radius=..., + sagitta=Sagitta.SHORT, + selector=lambda arcs: arcs, + ) + +.. figure:: ./assets/tan2_rad_ex.svg + :align: center + +Use when radius is known and arc must satisfy two contact/tangency conditions. + +Signature B: Two constraints + ``center_on`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: build123d + + ConstrainedArcs( + tangency_one, + tangency_two, + center_on=Axis(...), # or Edge + sagitta=Sagitta.SHORT, + selector=lambda arcs: arcs, + ) + +.. figure:: ./assets/tan2_on_ex.svg + :align: center + +Use when center must lie on a specific line/curve rather than radius being fixed. + +Signature C: Three constraints +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: build123d + + ConstrainedArcs( + tangency_one, + tangency_two, + tangency_three, + sagitta=Sagitta.BOTH, + selector=lambda arcs: arcs, + ) + +.. figure:: ./assets/tan3_ex.svg + :align: center + +Use for "arc tangent/contact to three entities". This can produce several branches; +always consider using ``selector``. + +Signature D: One constraint + fixed ``center`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: build123d + + ConstrainedArcs( + tangency_one, + center=(x, y), + selector=lambda arcs: arcs[0], + ) + +.. figure:: ./assets/pnt_center_ex.svg + :align: center + +Useful for "center-known" constructions. + +Signature E: One constraint + radius + ``center_on`` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: build123d + + ConstrainedArcs( + tangency_one, + radius=..., + center_on=some_edge, + selector=lambda arcs: arcs, + ) + +.. figure:: ./assets/tan_rad_on_ex.svg + :align: center + +Useful for guided-center constructions with fixed radius. + +Allowed constraint objects +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For arc constraints, accepted objects include: + +- :class:`~topology.Edge` +- :class:`~geometry.Axis` +- :class:`~geometry.Vertex` / :class:`~geometry.VectorLike` point +- optional qualifier wrapper: ``(object, Tangency.XXX)`` + +ConstrainedLines +---------------- + +Overview +~~~~~~~~ + +:class:`~objects_curve.ConstrainedLines` supports these signature families: + +1. Tangent/contact to two objects +2. Tangent/contact to one object and passing through a fixed point +3. Tangent/contact to one object with fixed orientation (``angle`` or ``direction``) + +Signature A: Two constraints +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: build123d + + ConstrainedLines( + tangency_one, + tangency_two, + selector=lambda lines: lines, + ) + +.. figure:: ./assets/lines_tan2_ex.svg + :align: center + + +Signature B: One constraint + through point +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: build123d + + ConstrainedLines( + tangency_one, + (x, y), # through point + selector=lambda lines: lines, + ) + +.. figure:: ./assets/lines_tan_pnt_ex.svg + :align: center + +Signature C: One constraint + fixed orientation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. code-block:: build123d + + ConstrainedLines( + tangency_one, + Axis.Y, + angle=30, # OR direction=(dx, dy) + selector=lambda lines: lines, + ) + +.. figure:: ./assets/lines_angle_ex.svg + :align: center + +Exactly one of ``angle`` or ``direction`` should be provided. + +For all signatures, qualifiers can be attached to tangency inputs when side selection +must be controlled. + +Builder vs Algebra mode +----------------------- + +Algebra mode +~~~~~~~~~~~~ + +Use direct assignment and post-selection: + +.. code-block:: build123d + + arcs = ConstrainedArcs(..., sagitta=Sagitta.BOTH) + chosen = arcs.edges().sort_by(Edge.length)[0] + +Builder mode +~~~~~~~~~~~~ + +Prefer selecting inside the call to avoid adding unwanted candidates to context: + +.. code-block:: build123d + + with BuildLine() as bl: + ConstrainedArcs( + ..., + sagitta=Sagitta.BOTH, + selector=lambda arcs: arcs.sort_by(Edge.length)[0], + ) + +Selection recipes +----------------- + +.. code-block:: build123d + + # Nearest to point + selector=lambda edges: edges.sort_by_distance((0, 0))[0] + + # Longest + selector=lambda edges: edges.sort_by(Edge.length)[-1] + + # Right most + selector=lambda edges: edges.sort_by(Axis.X)[-1] + + # Keep two branches + selector=lambda edges: edges[:2] + +Prefer geometric selection criteria (distance, axis ordering, length) over positional +indexing when upstream geometry may change. + +*********************** +Complex Drawing Example +*********************** + +This example pulls many of the techniques described above into a single example +where the following full constrained, complex sketch is converted into build123d code. + +.. figure:: ./assets/complex_sketch.png + :align: center + +When working with a drawing such as this one, the ``ImageFace`` functionality of the +`ocp-vscode `_ viewer is very handy as +it allows the image to be used as a visual guide when creating the sketch. + +Within the following code the following conventions are used: + +- construction geometry is labeled with a ``c_...`` +- arcs are labeled with a ``a`` +- lines and polylines are labeled with a ``l...`` + +The code starts immediately above the origin (arbitrarily set to the origin of the circle) +where a straight line 10° off the x-axis originates. The code then walks around the diagram +clockwise creating the perimeter of the object. + +.. code-block:: build123d + + image = ImageFace( + "complex_sketch.png", + scale=29 / 264, + origin_pixels=(297, 390), + location=Location((0, 0, -0.1)), + ) + + with BuildSketch() as sketch: + with BuildLine() as perimeter: + c_l1 = PolarLine((0, 32 - 14), 50, -10, mode=Mode.PRIVATE) + a19 = ConstrainedArcs(c_l1, (-14 + 81 - 29, -14 - 19 + 57), radius=19) + l2 = Polyline(a19 @ 1, a19 @ 1 + (29 - 5, 0), a19 @ 1 + (29, -5), (-14 + 81, 0)) + l3 = Line(l2 @ 1, (-14 + 81 - 29, (-14 - 19))) + c_l4 = Line((-14, -14), (-14 + 81, -14), mode=Mode.PRIVATE) + c_a29_arc_center = l3.intersect(c_l4)[0] + c_a29 = CenterArc(c_a29_arc_center, 29, 180, 50, mode=Mode.PRIVATE) + l5 = IntersectingLine(l3 @ 1, (-1, 0), c_a29) + a5 = ConstrainedArcs( + c_a29, c_l4, radius=5, selector=lambda a: a.sort_by(Axis.X)[0] + ) + a29 = add(c_a29.trim(l5 @ 1, a5 @ 0)) + l6 = Polyline( + a5 @ 1, + (-14 + 7, -14), + (-14, -14 + 7), + (-14, -14 + 32 - 7), + (-14 + 7, -14 + 32), + (0, -14 + 32), + a19 @ 0, + ) + make_face() + a14 = Circle(14 / 2, mode=Mode.SUBTRACT) + +.. figure:: ./assets/complex_ex.svg + :align: center + +Implementation notes: + +1. Build in traversal order around the perimeter. This keeps references local and makes + later edits easier because each segment depends on nearby geometry. +2. Keep helper entities private (``mode=Mode.PRIVATE``) so only final profile edges + contribute to the resulting face. +3. Use named construction geometry (``c_...``) for intersections and arc centers; this + improves readability and debugability. +4. Use constrained constructors only where they add value (for example :class:`~objects_curve.ConstrainedArcs`), + and use direct primitives elsewhere. +5. Create a :class:`~topology.Face` (``make_face`` then center-hole subtraction) only after + the perimeter is fully defined. + +Troubleshooting +=============== + +- Too many results: + add qualifiers and a stricter ``selector``. +- No results: + relax qualifier (start with ``UNQUALIFIED``) and verify geometry is coplanar. +- Unstable branch selection: + avoid index-only selection when topology changes; prefer geometric sorting. +- Builder mode unexpectedly adds many edges: + provide ``selector`` explicitly in the constructor call. diff --git a/docs/tutorials.rst b/docs/tutorials.rst index 5ae7c96..d32800d 100644 --- a/docs/tutorials.rst +++ b/docs/tutorials.rst @@ -11,6 +11,7 @@ as later tutorials build on the concepts introduced in earlier ones. tutorial_design.rst tutorial_selectors.rst + tutorial_constraints.rst tutorial_lego.rst tutorial_joints.rst examples_1.rst