feat: strengthen modeling, configuration, and assembly workflows
Preserve linked sketch identities through deterministic face projection and resizing. Fix origin-corner picking, persistent inline navigation, appearance editing, configuration styles, component properties, contact sweeps, sheet exports, analytic STEP offsets, and bounded rolling-ball fit accuracy. Validated with full cargo xtask ci, native workflow screenshots, repeated enclosure replays, and analytic geometry regressions.
This commit is contained in:
1 parent
22672585c9
commit
d71bdb78ec
54 files changed
+4179
-316
No files matched your search
@@ -0,0 +1,33 @@
|
||||
# Assembly physical properties
|
||||
|
||||
The Browser's component **Properties** action measures the selected assembly placement,
|
||||
including its nested components. Select the root design to measure every instance in the
|
||||
assembly. The window shows material-aware mass, volume, surface area, center of mass and
|
||||
the world bounding box. Pending occurrence moves are included without capturing them.
|
||||
|
||||
The same measurements are available through commands:
|
||||
|
||||
```json
|
||||
{"command":"component.properties","params":{"component":"Bracket"}}
|
||||
{"command":"component.properties","params":{"component":"root"}}
|
||||
{"command":"component.properties","params":{"component":"Subassembly","descendants":false}}
|
||||
{"command":"occurrence.properties","params":{"occurrence":"Bracket:2"}}
|
||||
```
|
||||
|
||||
`component.properties` defaults to the active component and measures its first placement.
|
||||
`occurrence.properties` measures the chosen instance. A nested occurrence can appear beneath
|
||||
several instances of its parent; supply `path` (the complete list of occurrence ids from the
|
||||
root) to choose one of those placements. An ambiguous occurrence without a path returns an
|
||||
error. Both commands accept `descendants: false` to measure only directly owned bodies.
|
||||
|
||||
Results contain a `bodies` list and a `total` object. Each body's entry identifies the original
|
||||
body name, owning component and occurrence path. Physical material density is resolved from
|
||||
that original body, so copies keep their material and mass. Values use millimetres, square
|
||||
millimetres, cubic millimetres and grams; coordinates use the world frame.
|
||||
|
||||
Mass and center of mass account for each body's density. Volume and area are summed over
|
||||
placed bodies, including overlapping bodies and repeated instances. Measurements use the
|
||||
kernel's tessellation-based body measurement. An empty component reports zero totals and
|
||||
null center of mass and bounding box. A failed body measurement returns an error instead of
|
||||
presenting an incomplete assembly total. These commands leave geometry, pending placements
|
||||
and undo history unchanged.
|
||||
@@ -20,3 +20,12 @@ couples two joints. Contact sets stop motion where bodies would pass through eac
|
||||
volumes in red.
|
||||
|
||||
STEP export writes the component tree as an assembly.
|
||||
|
||||
Right-click a component in the Browser and choose **Properties** to inspect
|
||||
material-aware mass, volume, surface area, centre of mass and world bounds. Descendants and
|
||||
repeated instances contribute to assembly totals; pending moves are included. A component
|
||||
uses its first placement; `occurrence.properties` selects a specific instance. Root Properties
|
||||
measures the complete assembly. Volumes are summed, including overlapping bodies, rather than
|
||||
measuring their union. The same workflow is available through `component.properties` and
|
||||
`occurrence.properties`; see
|
||||
[placement and measurement details](https://github.com/bherbruck/solvecraft/blob/main/docs/assembly-properties.md).
|
||||
@@ -18,4 +18,8 @@ existing geometry.
|
||||
|
||||
Parameters export to and import from CSV or JSON (`parameters.export`, `parameters.import`).
|
||||
**Configurations** (`config.*`) keep a table of rows, each with its own parameter values and
|
||||
suppressed features, switched with `config.activate`.
|
||||
suppressed features, physical materials and body appearances, switched with `config.activate`.
|
||||
The table's Library picker selects material or appearance values. Choose **Follow material**
|
||||
to clear an appearance override. Custom looks retain their colour and opacity across
|
||||
activation, undo and save/reopen. See
|
||||
[configuration commands and examples](https://github.com/bherbruck/solvecraft/blob/main/docs/configurations.md).
|
||||
@@ -9,7 +9,22 @@ The SHEET METAL tab builds parts from a sheet of constant thickness under a **sh
|
||||
- **Unfold / Refold** (`sheet.unfold`, `sheet.refold`) for working on the flat part.
|
||||
- **Convert** (`sheet.convert`) turns a solid of constant thickness into sheet metal.
|
||||
- **Create Flat Pattern** (`sheet.flat_pattern`) shows the flat part with its bend lines and a
|
||||
bend table, and exports it as DXF.
|
||||
bend table, and exports it as DXF or a bend-table CSV through the save picker.
|
||||
|
||||
Bends follow the rule's K-factor, so flat lengths match what a press brake will make. The
|
||||
oracle checks these against parts built in Fusion.
|
||||
|
||||
For a shop drawing or spreadsheet, `sheet.export_bend_table` returns CSV by default; choose
|
||||
`format: "json"` for structured data. It includes the sheet rule, thickness, bend angles,
|
||||
radii, allowances and flat centre-line coordinates. Lengths use millimetres and angles use
|
||||
degrees. Supply `path` to save it, or omit `path` to receive the content through the command
|
||||
response. `body` defaults to the last sheet body. Exporting does not add a timeline entry or
|
||||
consume an undo step.
|
||||
|
||||
```json
|
||||
{"command":"sheet.export_bend_table","params":{"format":"csv","path":"bracket-bends.csv"}}
|
||||
{"command":"sheet.export_dxf","params":{"path":"bracket-flat.dxf"}}
|
||||
```
|
||||
|
||||
DXF cutout geometry preserves lines, circles and circular arcs; other curves are sampled
|
||||
adaptively. The `OUTLINE`, `BEND_UP` and `BEND_DOWN` layers separate cuts from bend centres.
|
||||
@@ -0,0 +1,43 @@
|
||||
# Design configurations
|
||||
|
||||
The configuration table stores named design variants. Add parameter, feature suppression,
|
||||
physical material, and body appearance columns with `config.configure` or `config.column`.
|
||||
The desktop Configuration Table's **Add Column** menu offers the same targets. Material and
|
||||
appearance cells have a **Library** picker; their text fields also accept exact saved values.
|
||||
|
||||
```json
|
||||
{"command":"config.configure","params":{"params":["width"],"materials":["Box1"],"appearances":["Box1"]}}
|
||||
{"command":"config.row","params":{"name":"Aluminum blue","values":{"param:width":"80 mm","material:Box1":"Aluminum","appearance:Box1":"Aluminum - Anodized Blue"}}}
|
||||
{"command":"config.activate","params":{"row":"Aluminum blue"}}
|
||||
```
|
||||
|
||||
Use the body's actual Browser name in place of `Box1`. `config.table` returns the column keys,
|
||||
rows, active name, and `matches`: whether the current design still has the active row's values.
|
||||
Changing an assignment by hand makes `matches` false. Activating another row is undoable.
|
||||
|
||||
Material values are names from `material.list` (case insensitive), with `Default` clearing the
|
||||
body's physical material assignment. Appearance values are names from `appearance.library`,
|
||||
an empty string or `Default` to clear the body's appearance, or a custom look object:
|
||||
|
||||
```json
|
||||
{"command":"config.row","params":{"name":"Transparent blue","from":"Aluminum blue","values":{"appearance:Box1":{"name":"Custom blue","color":[40,90,186],"opacity":0.4}}}}
|
||||
```
|
||||
|
||||
The table stores custom looks without losing colour or opacity. `color` contains three byte
|
||||
values, names support up to 128 Unicode characters, and `opacity` must be finite and between
|
||||
zero and one. Style values are validated when
|
||||
editing a row and again when activating a saved row. An invalid value leaves the design unchanged.
|
||||
Clearing a body appearance allows component appearance or material colour to show through;
|
||||
face appearances keep their existing priority. Physical material changes affect measured mass.
|
||||
|
||||
`config.row` supports `from` to copy another row, `rename` to rename an existing row, and
|
||||
`delete` to remove it. Names must be unique. To remove a style column, use
|
||||
`config.column` with `material` or `appearance` set to the target body and `delete: true`.
|
||||
|
||||
Style columns target body names. Assignments remain stored when a row suppresses the feature
|
||||
that produces that body, and become visible when it returns. Component and face appearance
|
||||
columns and conditional configuration rules are not yet supported.
|
||||
|
||||
Designs saved with these columns use file format 7. Older designs upgrade on opening without
|
||||
changing their existing configuration values. Older SolveCraft versions must be updated to
|
||||
open newly saved designs.
|
||||
@@ -0,0 +1,34 @@
|
||||
# Contact sets and joint motion
|
||||
|
||||
Contact sets constrain **Drive Joints**, motion-study playback and exported motion samples.
|
||||
Bodies belonging to different members of an enabled set are checked along the requested
|
||||
joint motion. A collision between clear start and end poses can therefore stop the motion,
|
||||
including slider travel through a blocker and revolute travel across one.
|
||||
|
||||
```json
|
||||
{"command":"contact.create","params":{"occurrences":["Base:1","Carriage:1"]}}
|
||||
{"command":"joint.drive","params":{"joint":"Rail","value":30}}
|
||||
```
|
||||
|
||||
A stopped command returns `stopped_by_contact`, identifying the occurrence pair and the
|
||||
fraction of the requested motion reached. The first detected collision interval is refined
|
||||
to leave the bodies just short of penetration, within the tessellated contact tolerance.
|
||||
Motion links and limits participate in the trajectory checks. Moving a body between
|
||||
components preserves its placement for contact checks through its body offset.
|
||||
|
||||
The trajectory uses bounded samples of cached tessellated geometry. Spacing accounts for
|
||||
effective joint travel, angular motion, distance from joint pivots and whole-body widths
|
||||
along sampled face directions. This handles tilted thin plates while keeping curved bodies
|
||||
practical to drive. It is not exact continuous collision detection: locally thin walls in
|
||||
a larger body, unsampled face directions and very small geometric details remain limitations.
|
||||
|
||||
When a motion or assembly exceeds the sampling, geometry or collision-work budget, the
|
||||
command returns an error and restores the document. Use smaller drive increments or a
|
||||
smaller contact set. Mesh bodies in contact sets are currently rejected for swept driving.
|
||||
An assembly already overlapping at the start retains the recovery behaviour that allows
|
||||
it to move out of that invalid placement. Disable contact to move freely.
|
||||
|
||||
`motion.export` uses the same checks between its requested poses, including sparse exports,
|
||||
and leaves the source document unchanged. Contact checks interpolate joint values between
|
||||
those poses; they do not reconstruct intermediate motion-study keyframes omitted by the
|
||||
requested sample steps.
|
||||
+10
-10
@@ -2,9 +2,9 @@
|
||||
|
||||
Generated by `cargo xtask parity` from `xtask/data/fusion-catalog.tsv` (the toolbar commands of Fusion's Design workspace, ids and names only) and the live command registry (`solvecraft-cli commands`). A command counts as live when SolveCraft registers the same command id. This measures breadth, not depth; see ROADMAP.md and docs/oracle.md for depth.
|
||||
|
||||
**In scope (SOLID, SKETCH, ASSEMBLY, SHEET METAL, PLASTIC enclosure subset): 328 / 541 commands live (61%).** SOLID + SKETCH: 185 / 291 (64%). Registered commands: 300.
|
||||
**In scope (SOLID, SKETCH, ASSEMBLY, SHEET METAL, PLASTIC enclosure subset): 331 / 541 commands live (61%).** SOLID + SKETCH: 186 / 291 (64%). Registered commands: 307.
|
||||
|
||||
Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE beyond what solids need, PCB, render, animation, simulation, manufacture, drawings, MANAGE, UTILITIES and the rest of PLASTIC. All Design tabs together: 616 / 1175 (52%).
|
||||
Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE beyond what solids need, PCB, render, animation, simulation, manufacture, drawings, MANAGE, UTILITIES and the rest of PLASTIC. All Design tabs together: 623 / 1175 (53%).
|
||||
|
||||
| Tab | Panel | Live | Total | % |
|
||||
|---|---|---:|---:|---:|
|
||||
@@ -12,7 +12,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
| SOLID | MODIFY | 19 | 32 | 59% |
|
||||
| SOLID | ASSEMBLE | 12 | 21 | 57% |
|
||||
| SOLID | CONFIGURE | 2 | 3 | 67% |
|
||||
| SOLID | CONSTRUCT | 18 | 20 | 90% |
|
||||
| SOLID | CONSTRUCT | 19 | 20 | 95% |
|
||||
| SOLID | INSPECT | 12 | 25 | 48% |
|
||||
| SOLID | INSERT | 6 | 11 | 55% |
|
||||
| SOLID | SELECT | 0 | 15 | 0% |
|
||||
@@ -30,7 +30,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
| SHEET METAL | MODIFY | 12 | 21 | 57% |
|
||||
| SHEET METAL | ASSEMBLE | 11 | 20 | 55% |
|
||||
| SHEET METAL | CONFIGURE | 2 | 3 | 67% |
|
||||
| SHEET METAL | CONSTRUCT | 18 | 20 | 90% |
|
||||
| SHEET METAL | CONSTRUCT | 19 | 20 | 95% |
|
||||
| SHEET METAL | INSPECT | 12 | 25 | 48% |
|
||||
| SHEET METAL | INSERT | 6 | 11 | 55% |
|
||||
| SHEET METAL | SELECT | 0 | 15 | 0% |
|
||||
@@ -43,7 +43,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
| ASSEMBLY | MODIFY | 8 | 11 | 73% |
|
||||
| ASSEMBLY | CONTACT | 2 | 2 | 100% |
|
||||
| ASSEMBLY | CONFIGURE | 2 | 3 | 67% |
|
||||
| ASSEMBLY | CONSTRUCT | 18 | 20 | 90% |
|
||||
| ASSEMBLY | CONSTRUCT | 19 | 20 | 95% |
|
||||
| ASSEMBLY | INSPECT | 12 | 25 | 48% |
|
||||
| ASSEMBLY | SELECT | 0 | 15 | 0% |
|
||||
| ASSEMBLY | POSITION | 2 | 2 | 100% |
|
||||
@@ -57,7 +57,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
| SURFACE | MODIFY | 17 | 26 | 65% |
|
||||
| SURFACE | ASSEMBLE | 11 | 20 | 55% |
|
||||
| SURFACE | CONFIGURE | 2 | 3 | 67% |
|
||||
| SURFACE | CONSTRUCT | 18 | 20 | 90% |
|
||||
| SURFACE | CONSTRUCT | 19 | 20 | 95% |
|
||||
| SURFACE | INSPECT | 12 | 25 | 48% |
|
||||
| SURFACE | INSERT | 6 | 11 | 55% |
|
||||
| SURFACE | SELECT | 0 | 15 | 0% |
|
||||
@@ -67,7 +67,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
| MESH | MODIFY | 6 | 30 | 20% |
|
||||
| MESH | ASSEMBLE | 12 | 21 | 57% |
|
||||
| MESH | CONFIGURE | 2 | 3 | 67% |
|
||||
| MESH | CONSTRUCT | 18 | 20 | 90% |
|
||||
| MESH | CONSTRUCT | 19 | 20 | 95% |
|
||||
| MESH | INSPECT | 12 | 25 | 48% |
|
||||
| MESH | INSERT | 5 | 10 | 50% |
|
||||
| MESH | SELECT | 0 | 10 | 0% |
|
||||
@@ -77,7 +77,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
| FORM | MODIFY | 5 | 31 | 16% |
|
||||
| FORM | SYMMETRY | 0 | 6 | 0% |
|
||||
| FORM | UTILITIES | 0 | 5 | 0% |
|
||||
| FORM | CONSTRUCT | 18 | 20 | 90% |
|
||||
| FORM | CONSTRUCT | 19 | 20 | 95% |
|
||||
| FORM | INSPECT | 12 | 25 | 48% |
|
||||
| FORM | INSERT | 7 | 13 | 54% |
|
||||
| FORM | ASSEMBLE | 0 | 1 | 0% |
|
||||
@@ -88,7 +88,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
| PLASTIC | MODIFY | 19 | 32 | 59% |
|
||||
| PLASTIC | ASSEMBLE | 11 | 20 | 55% |
|
||||
| PLASTIC | CONFIGURE | 2 | 3 | 67% |
|
||||
| PLASTIC | CONSTRUCT | 18 | 20 | 90% |
|
||||
| PLASTIC | CONSTRUCT | 19 | 20 | 95% |
|
||||
| PLASTIC | INSPECT | 12 | 26 | 46% |
|
||||
| PLASTIC | INSERT | 6 | 11 | 55% |
|
||||
| PLASTIC | SELECT | 0 | 15 | 0% |
|
||||
@@ -170,6 +170,7 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
- SOLID › CONSTRUCT › Plane at Angle
|
||||
- SOLID › CONSTRUCT › Tangent Plane
|
||||
- SOLID › CONSTRUCT › Midplane
|
||||
- SOLID › CONSTRUCT › Perpendicular Plane
|
||||
- SOLID › CONSTRUCT › Plane Through Two Edges
|
||||
- SOLID › CONSTRUCT › Plane Through Three Points
|
||||
- SOLID › CONSTRUCT › Plane Along Path
|
||||
@@ -333,7 +334,6 @@ Deferred until further notice (not in the in-scope figure): MESH, FORM, SURFACE
|
||||
- SOLID › ASSEMBLE › As-Built Constraint
|
||||
- SOLID › CONFIGURE › Create Configuration Rules
|
||||
- SOLID › CONSTRUCT › User Coordinate System (UCS)
|
||||
- SOLID › CONSTRUCT › Perpendicular Plane
|
||||
- SOLID › INSPECT › Validate
|
||||
- SOLID › INSPECT › Component Connection Analysis
|
||||
- SOLID › INSPECT › DOF Analysis
|
||||
|
||||
Reference in new issue
Block a user