Merge origin/main into feat/profiles-by-curve-ids
This commit is contained in:
commit
4c466466a2
62 files changed
+3591
-347
No files matched your search
@@ -52,6 +52,45 @@ Feature references to faces and edges are stored by name, so an upstream edit th
|
||||
keeps them on the right face (see [Persistent naming](../dev/naming.md)). When a reference can't
|
||||
be found, the feature warns instead of silently picking another face.
|
||||
|
||||
## Editing a feature from a script
|
||||
|
||||
`timeline.inspect {feature}` returns a feature's `definition`: the fields `timeline.edit` changes,
|
||||
with their current values. `timeline.edit {feature, set}` merges `set` into that definition
|
||||
(objects are merged field by field, anything else replaces the value), rebuilds the feature and
|
||||
reports `recomputed` and `restored`. The feature's type cannot change, and sketch geometry is
|
||||
edited with the sketch commands. Expressions are text (`"30"`, `"30 mm"`, `"width / 2"`,
|
||||
`"45 deg"`); a bare number is a length in the design's units, or degrees for an angle.
|
||||
|
||||
```json
|
||||
{"command": "timeline.inspect", "params": {"feature": "Slab"}}
|
||||
→ {"type": "ExtrudeFeature",
|
||||
"definition": {"sketch": 1, "profiles": {"type": "all"}, "operation": "new_body",
|
||||
"extent": {"distance": "10", "direction": "positive"}},
|
||||
"inputs": [{"label": "Distance", "param": "d1", "expression": "10", "unit": "mm"}], …}
|
||||
{"command": "timeline.edit", "params": {"feature": "Slab", "set": {"extent": {"distance": "12"}}}}
|
||||
```
|
||||
|
||||
`inputs` lists the feature's named inputs. `parameters.change {name: "d1", expression}` sets one
|
||||
of those directly. Optional fields that are not set do not appear in the definition; they can
|
||||
still be added through `set`. The fields of the common features:
|
||||
|
||||
| Feature | Fields |
|
||||
|---|---|
|
||||
| Extrude | `extent`: {`distance`, `direction`: positive\|negative\|symmetric, `distance2`, `start_offset`, `through_all`, `taper`, `to`, `to_offset`, `from`}; `operation`: new_body\|join\|cut\|intersect; `targets`; `profiles`; `sketch` |
|
||||
| Revolve | `angle`, `angle2`, `symmetric`, `axis`, `to`, `operation`, `targets`, `profiles`, `sketch` |
|
||||
| Fillet | `radius`, `edges` (a point on each edge), `body`, `style` |
|
||||
| Chamfer | `distance`, `distance2` or `angle`, `flip`, `edges`, `body` |
|
||||
| Box | `length`, `width`, `height`, `corner`, `operation` |
|
||||
| Cylinder | `radius`, `height`, `base`, `axis`, `operation` |
|
||||
| Hole | `diameter`, `depth`, `position`, `direction`, `hole` (simple, drilled, counterbore, countersink), `thread`, `to` |
|
||||
| Shell | `thickness`, `faces`, `direction`, `body`, `tangent_chain` |
|
||||
| Draft | `angle`, `faces`, `neutral`, `pull`, `body` |
|
||||
| Offset face | `distance`, `faces`, `body` |
|
||||
| Pattern | `pattern` (its kind and counts/spacing), `features`, `bodies` |
|
||||
| Mirror | `plane`, `features`, `bodies`, `combine` |
|
||||
|
||||
For any other feature, `timeline.inspect` shows the fields.
|
||||
|
||||
Press **Delete** on anything selected (bodies, faces, sketches, features, planes, components,
|
||||
canvases). It runs as one undoable step and lists the features that would go with it or fail.
|
||||
|
||||
|
||||
@@ -15,6 +15,11 @@ fillet, chamfer, offset (O), mirror, patterns, move/copy and scale.
|
||||
**Project** (P) and **Intersect** bring model edges into the sketch as linked geometry that
|
||||
follows later changes. Sketching on a face projects its edges automatically.
|
||||
|
||||
Run from a script or the control channel, every command that adds sketch geometry returns the
|
||||
ids of what it added (`created: {points, curves, constraints, dimensions}`). Ids are stable and
|
||||
never reused within a sketch, even after a delete, so a script can dimension or constrain the new
|
||||
geometry right away.
|
||||
|
||||
Extend finds intersections with exact ellipses, rational conics and spline spans. It keeps the
|
||||
original line or circular support and extends only beyond the selected endpoint; conflicting
|
||||
constraints or an ambiguous overlap leave the sketch unchanged.
|
||||
@@ -54,12 +59,21 @@ fresh link once the source is available; their stored point values are preserved
|
||||
|
||||
## Constraints and dimensions
|
||||
|
||||
**Horizontal/Vertical** accepts a click on a line or clicks on two distinct sketch points,
|
||||
including the origin, endpoints and circle centres. For two points, it chooses horizontal
|
||||
or vertical alignment from their current positions. Esc cancels a pending first point.
|
||||
|
||||
The solver is SolveCraft's own (damped Gauss–Newton with degree-of-freedom analysis). Constraints:
|
||||
coincident, horizontal/vertical, parallel, perpendicular, tangent, equal, concentric, collinear,
|
||||
midpoint, symmetry, fix, curvature (G2) and polygon. **Sketch Dimension** (D) adds linear,
|
||||
aligned, horizontal, vertical, radius, diameter and angle dimensions. Each is a parameter
|
||||
(`d1`, `d2`, …), so it can hold an expression.
|
||||
|
||||
For Parallel, Perpendicular, Equal, Tangent, Concentric and Collinear, select exactly two
|
||||
sketch curves (Shift-click to add the second) and choose the constraint to apply it immediately.
|
||||
You can also start the constraint first and then pick its curves. An incomplete or mixed
|
||||
selection starts that pick workflow; a rejected constraint keeps the selection for correction.
|
||||
|
||||
Under-constrained geometry is blue and fully constrained geometry turns dark, and the status
|
||||
shows the remaining degrees of freedom. A constraint or dimension that would over-constrain the
|
||||
sketch is refused rather than applied. Drag a point to move it; the solver keeps every
|
||||
|
||||
Reference in new issue
Block a user