feat: strengthen sketches, feature editing, and independent assemblies
This commit is contained in:
1 parent
07932d0f42
commit
0398a813c8
65 files changed
+7082
-268
No files matched your search
@@ -11,6 +11,13 @@ component, and **Paste New** creates an independent copy. Move an occurrence wit
|
||||
triad, then **Capture Position** to keep it or **Revert** to put it back. SolveCraft asks before
|
||||
the next command if a move wasn't captured. **Ground** fixes an occurrence in place.
|
||||
|
||||
Paste New copies nested component definitions, sketches, feature histories and generated
|
||||
dimension parameters. Repeated child instances remain shared within the new copy. Materials,
|
||||
appearances and wholly internal joints/motion records receive copied references. Design-wide
|
||||
user parameters remain shared; retained external links and omitted cross-boundary motion
|
||||
records are reported. Unsupported destructive links refuse the entire copy. See
|
||||
[individual-instance and copy details](https://github.com/bherbruck/solvecraft/blob/main/docs/occurrence-workflows.md).
|
||||
|
||||
**Joints** (`joint.create`, J) connect two components by joint origins that snap to faces, edges,
|
||||
circles and vertices: rigid, revolute, slider, cylindrical, pin-slot, planar and ball, with
|
||||
offsets, flip and limits. **As-built Joint** keeps the current position, **Rigid Group** locks
|
||||
|
||||
@@ -18,6 +18,22 @@ Extruding into existing material selects **Cut**. In an empty component it selec
|
||||
choose **New Body** explicitly to keep an addition separate. Changing the default does not alter
|
||||
operations already saved in a design.
|
||||
|
||||
Editing an extrusion retains its signed distances, From/To Object inputs, taper expressions
|
||||
and explicit body targets. Revolve edits retain world, sketch and explicit-line axes, both
|
||||
angle expressions and To Object targets. An unchanged **All profiles** selection continues
|
||||
to include profiles added later. Cancel restores the complete timeline; a successful edit is
|
||||
one undo step, including downstream parameter changes. Editing a placed component previews the
|
||||
edited feature before its downstream history. Cylindrical Emboss profile guides follow the
|
||||
sketch's chosen occurrence frame.
|
||||
|
||||
For cylindrical **Emboss**, select a supported exterior cylinder face and a tangent sketch
|
||||
profile. **Deboss** cuts radially into the wall. Orthogonal line profiles, including holes and
|
||||
concave outlines, wrap with exact radial walls; the profile must stay clear of seams and ends.
|
||||
Complete cylinders and coaxial sleeves are supported. Capture pending component positions
|
||||
before applying. The feature stores the selected target and author occurrence paths, so edits
|
||||
and reopening retain the chosen instances. Other curved surfaces and free-form profiles remain
|
||||
unsupported; omitting the face retains the planar emboss behavior.
|
||||
|
||||
Fillets and chamfers handle straight edges between planar faces, whole smooth loops, runs of
|
||||
neighbouring edges with mitred or spherical corners, and closed chains of curved edges (a rolling
|
||||
ball). See the roadmap's known limitations for the rest.
|
||||
|
||||
@@ -17,3 +17,8 @@ Saves are atomic: a crash at any moment leaves either the old file or the new on
|
||||
replaced version is kept as `<file>.bak`. Unsaved changes are autosaved to a recovery folder,
|
||||
and the next launch offers to recover them. Older design files are upgraded on open, and files
|
||||
from a newer version are refused with a message.
|
||||
|
||||
Current designs use format 9 for semantic configuration styles, associative free-form offsets
|
||||
and explicit cylindrical emboss selections. Older geometry and expressions retain their
|
||||
meaning during upgrade; missing new fields use defaults. Association records and occurrence
|
||||
paths are bounded and checked before they can alter geometry.
|
||||
@@ -15,6 +15,20 @@ 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.
|
||||
|
||||
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.
|
||||
|
||||
Offsets of smooth ellipses, conics and splines follow their source after dimension changes,
|
||||
dragging and reopening a design. Their stored cubic spline has a whole-span normal-distance
|
||||
error bound of 0.002 mm. Singular tangents, curvature cusps, possible self-intersections and
|
||||
excessive subdivisions are refused. Offset these curves individually: mixed chain junctions
|
||||
currently require separate geometry. `sketch.offset.break` releases an offset for independent
|
||||
editing, and undo restores its association. Older independently sampled offsets remain independent.
|
||||
Smooth open offsets can be offset again, including bounded refinement after a source edit.
|
||||
A closed offset uses a natural cubic spline whose seam can have different end tangents;
|
||||
offsetting that result again is refused when the seam has no unique normal.
|
||||
|
||||
## Constraints and dimensions
|
||||
|
||||
The solver is SolveCraft's own (damped Gauss–Newton with degree-of-freedom analysis). Constraints:
|
||||
|
||||
+43
-5
@@ -1,7 +1,8 @@
|
||||
# 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`.
|
||||
physical material, body appearance, component appearance, and semantic face 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.
|
||||
|
||||
@@ -34,9 +35,46 @@ face appearances keep their existing priority. Physical material changes affect
|
||||
`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 are not yet supported.
|
||||
Body 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 appearances
|
||||
|
||||
**Add Column** offers component appearances and a **Face Appearance** submenu organized by
|
||||
body and semantic role. You can also select a viewport face before opening the menu and use
|
||||
**Selected face on ...**. These assignments affect every occurrence sharing the definition.
|
||||
Component columns use stable component IDs, so renaming a component preserves its rows.
|
||||
Face columns use a definition body and semantic lineage, never a saved display face index.
|
||||
|
||||
```json
|
||||
{"command":"config.configure","params":{"component_appearances":["Part"],"face_appearances":[{"body":"Box1","point":[5,5,10]}]}}
|
||||
```
|
||||
|
||||
Use a point on the current surface to capture a face. World occurrence picks are converted
|
||||
to the shared definition coordinates. `config.table` returns canonical keys and readable
|
||||
target labels. Use its returned face key when editing a row or deleting a face column:
|
||||
`config.column` accepts `face_appearance: "<returned key>"` with `delete: true`.
|
||||
Component columns can be removed with `component_appearance: "Part"` and `delete: true`.
|
||||
|
||||
Supported stable face roles are box axis faces, cylinder caps and unsplit side, profile-plane
|
||||
extrude caps, and one-sided revolve caps. From/nonzero or variable Start Offset/Two Sides extrude caps and
|
||||
symmetric/Two Sides revolve caps are not yet certified. Mesh faces, ambiguous cap names,
|
||||
generic index-derived names, and sketch side names based on nearest-curve heuristics are
|
||||
rejected. Coplanar split pieces of one supported semantic face share
|
||||
the configured appearance. If that lineage disappears while its body remains, Apply and
|
||||
Preview reject the row atomically. There is no nearest-face substitution; later ordinary
|
||||
topology edits also cannot transfer its paint to a replacement face. A suppressed owning
|
||||
feature keeps the assignment dormant until it returns.
|
||||
|
||||
The Library's **Follow inherited appearance** removes only the selected direct component
|
||||
or face override. Face paint takes priority over body, component, and physical material;
|
||||
clearing it reveals inherited or imported paint. Body renames maintain face targets.
|
||||
Deleting a component or originating feature removes its configured targets and row cells.
|
||||
Deleting one occurrence preserves the shared definition configuration.
|
||||
|
||||
Independent component copies duplicate mapped configuration columns, row values, and rules
|
||||
without retargeting the source. Copying a strict configured face from a foreign body frozen
|
||||
as an import currently fails explicitly because imported face lineage is not certified.
|
||||
|
||||
Activation evaluates all row parameter expressions together, so column order does not create
|
||||
temporary dependency cycles. Preview and activation reject new or changed geometry errors
|
||||
@@ -96,6 +134,6 @@ value lists support up to 128 expressions. These bounds are checked before saved
|
||||
decoded. Driven appearance/material rules and repeated fixed-point evaluation are outside
|
||||
the current rule scope.
|
||||
|
||||
Designs saved with rules use file format 8. Older designs upgrade on opening without
|
||||
Designs saved with component or strict face styles use file format 9. Older designs upgrade on opening without
|
||||
changing their existing configuration values. Older SolveCraft versions must be updated to
|
||||
open newly saved designs.
|
||||
@@ -37,3 +37,11 @@ Visibility is an independent view setting for exact placements. Hide a path and
|
||||
Paths are checked for missing links, repeated IDs, component mismatches and a maximum depth of 64. Descendant expansion rejects more than 100,000 placements or bodies instead of returning incomplete results. Computed body names normally retain their readable occurrence labels; collisions use full occurrence IDs so visibility and body commands still address the correct source.
|
||||
|
||||
Placed bodies retain their definition identity separately from display names. Body materials and appearances remain shared, with body overrides taking precedence over component overrides and material colors. Face overrides follow the placed geometry, including pending positions, and painted exports retain these colors.
|
||||
|
||||
Paste New copies the reachable component definition graph and its feature history. Repeated children stay shared within the new copy, while the copied definitions, sketches and generated dimension/input parameters are independent of the originals. Materials and body, component and face appearances follow the copied definition identities. Pattern and mirror output names remain explicit, so later body operations follow the copied bodies.
|
||||
|
||||
Configuration columns, row values and internal rules are duplicated for copied targets. Certified native face appearances follow the new feature lineage. Selected cylindrical Emboss target and authoring paths inside the copied graph follow the copied occurrences; an incompatible external authoring context is rejected before adoption.
|
||||
|
||||
A body reassigned from an external component receives an independent BaseFeature before the first copied feature that modifies it. Copied modifiers then replay once. The command reports these frozen bodies. Public user parameters remain design-wide; retained external sketch, project and feature links are reported. Joints and motion records wholly inside the copied occurrence graph receive new references. Records crossing its boundary are omitted with notices.
|
||||
|
||||
Copy evaluates on a scratch document, checks that original bodies remain unchanged, and verifies copied body measurements and sampled material occupancy before adopting it. Unsupported cross-boundary destructive operations, configured foreign faces without certified semantic lineage, reassigned mesh bodies, rolled-back timelines and exceeded work limits return errors without a partial copy. A successful copy selects the new occurrence, preserves your active component and unrelated pending positions, and places the copy under the chosen parent occurrence path. Activate the new occurrence to author features in it. Existing 3D sketch wire coordinate behavior is copied unchanged.
|
||||
Reference in new issue
Block a user