Skip to content

Add screw holes, teardrop, and sketch clipboard features - #1

Closed
plazmabokor wants to merge 110 commits into
mainfrom
spring-exact
Closed

plazmabokor wants to merge 110 commits into
mainfrom
spring-exact

Conversation

@plazmabokor

Copy link
Copy Markdown
Owner

Summary

This release adds three major feature groups and supporting infrastructure:

  1. Screw hole shapes – New counterbore and countersink shapes for creating holes that accommodate screw heads. Includes exact CAD solid generation via threadSolid.ts and springSolid.ts.

  2. Teardrop shape – A new teardrop shape for horizontal holes that print without support, with exact CAD solid generation.

  3. Sketch clipboard – Copy, paste, and duplicate functionality within sketches via new sketchClipboard.ts module. Includes UI updates to the sketch toolbar and keyboard shortcuts.

  4. Supporting infrastructure:

    • New measurement unit functions (displayStepFromMillimeters, formatLengthMm, etc.)
    • Section view utilities for cross-section analysis
    • Object snap system for alignment during transforms
    • Sketch selection and path utilities
    • Round body geometry and roundness calculation constants
    • Thread profile type checking
    • CAD mesh accuracy utilities
  5. Documentation and guides:

    • New video guide chapter linking to community-created content
    • Updated shape guides with new shapes
    • Enhanced sketch and mechanics documentation
    • New startup scripts for Linux/macOS/Windows
  6. Testing:

    • Comprehensive e2e tests for new CAD bodies (threads, springs, tapered bodies, bent tubes, round shapes, bores, tessellation, imported STEP)
    • Unit tests for new utilities (sketch clipboard, sketch paths, sketch selection, object snap, roundness, imperial units, etc.)
    • Updated existing tests for new shape types
  7. UI/UX improvements:

    • Dashboard welcome videos styling
    • Guide link button styling
    • Sketch toolbar reorganization (clipboard section added)
    • New icons for screw hole shapes
    • Updated printer presets (added Bambu Lab A2L)

Testing

  • npm run typecheck – All type checks pass
  • Unit tests added for new utilities (clipboard, paths, selection, snap, roundness)
  • E2E tests added for CAD body generation (threads, springs, tapered, bent tubes, rounds, bores, tessellation, imports)
  • Existing tests updated for new shape types
  • Manually tested sketch clipboard (copy/paste/duplicate)
  • Manually tested new screw hole and teardrop shapes

Notes

  • Version bumped to 1.27.1
  • Printer presets regenerated from OrcaSlicer commit 3384daa
  • All new shapes integrated into shape catalog and guide system
  • Sketch clipboard survives across sketches within a session
  • CAD solids for threads and springs use exact kernel geometry for precision

https://claude.ai/code/session_01TrCgK6vV1pX3r3DuF6ayxW

plazmabokor and others added 30 commits September 29, 2026 17:35
…text

Multilanguage (helvetiker) and Rounded lacked umlauts, ß, é or €, and
three.js draws a question mark for a missing letter. They now borrow what
they lack from Sans, scaled to their units, so saved designs show the right
letters. New text starts in Sans, which has everything.

create_shape dropped textCurved, textRadius, textSize, textInward and
textFlipped: makeShapeFromAsset did not copy them, so the layout never ran.
Both found by plazmabokor in henmedia#48.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…spinner without selected edges

The green coordinates at the corner ruler now also appear when several bodies
are selected; they measure the shared outline, and a typed value moves all of
them together in one undo step. Changing the fillet/chamfer size before any
edge is selected no longer leaves the Apply spinner running forever.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…xt; fresh pictures

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The edge tool meshed every treated body with a fixed angular deflection (0.16 rad in standard), however tight the chord already was. The angle limit now loosens as the chord tightens (angular x linear stays at its value at the cap, up to 0.5 rad); at the cap nothing changes. On torus faces OCCT does not hold the chord with the looser angle, so meshTreatedBody checks them and, if the mesh strays, meshes fresh copies with the old angle.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018PZgw7hpWq3uABHCn8iZMo
A new catalog shape for horizontal holes that print without support: a
round part with a point on top, so no layer has to bridge the hole. Width is
the diameter, depth the length along the hole, height runs up to the tip;
the tip angle (default 90 degrees, flanks at 45) follows from width and
height and can be typed in the inspector, which then sets the height. A new
diameter keeps the tip angle. Set to hole and grouped, it cuts a teardrop
through the part with the point up.

Wired through catalog, viewport, editor mesh, inspector, shape defaults,
.lyl, MCP (creatable kind, no extra keys) and the shape icon; listed in the
start page's library text and in the guide (shapes and mechanics chapters).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The sentence "Read the full guide, with pictures" sat inside a grey line and
did not read as a link. It is now a button of its own below the help text,
in the accent colour, with an arrow, in light and dark mode.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Teardrop now follows the bent tube; star, heart and crescent close the list
just before the ruler. The inspector header fits long names on one line: a
name with a word of twelve letters or more gets a smaller size, the header
icons are a little narrower and closer together.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The "too many triangles" message and the guide (edges and threads chapters,
German and English) now tell the reader to chamfer or round the body first
and add the thread afterwards.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Two cutters for screw heads that sit in the part: a round pocket for a
socket-head screw (DIN 912) and a cone for a countersunk screw (DIN 7991),
both standing head end up. Width is the head diameter, height the whole
length; the shaft diameter, the pocket depth (counterbore) or the cone angle
(countersink, 90 degrees by default) are set in the inspector. Defaults fit
an M3 screw. They sit in front of the teardrop in the shape list.

Wired through catalog, viewport, editor mesh, inspector, shape defaults,
.lyl, MCP (new keys screwHoleShaft, screwHoleHeadDepth, screwHoleAngle),
icons, start page text and the guide.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The three bore shapes now go to the edge tool as real solids, not display
meshes. The teardrop is its front-view outline (a circular arc and two
lines) pushed along the depth; the screw holes are a half-section turned
around the axis, so they carry plane, cylinder and cone faces. The profile
part gets a "revolution" kind and a frame that lays the body into the
shape's local frame. Oval screw holes and a teardrop without room for a
tip keep the mesh.

Kernel test: faces, surface types, volume, placement, turn, fillet and
chamfer on real OCCT.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The teardrop, counterbore and countersink get the same "sides" controls as a
cylinder (follow the size, or set them), in the inspector and in the shape
defaults; the count only shapes the display mesh.

Ellipse, oval cylinder, tube (and ring), half sphere, round roof and
rounded box now go to the edge tool as exact solids. The half sphere is a
quarter ellipse turned around the axis, the round roof a half ellipse
pushed along the depth, the rounded box a rounded rectangle whose flat ends
are rounded in the kernel when asked. Edges in the default shapes: ellipse
348 -> 6, tube 600 -> 6, half sphere 3008 -> 2, round roof 387 -> 6,
rounded box 108 -> 24.

Kernel test: volumes, placement and fillets on real OCCT.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The STEP export no longer skips shapes that are an outline pushed up or
turned around an axis: star, heart, crescent, slot, polygon, honeycomb,
spur gear, dovetail, single-glyph text, ellipse, oval cylinder, tube,
half sphere, round roof, rounded box, teardrop, counterbore and countersink
go out as the same exact bodies the edge tool gets, and as holes too. The
raw kernel behind brepjs is now reachable through occtKernel().

Kernel test: volumes after a STEP round trip, and a counterbore cut out of a
plate.

The guide gets a section on the side count (what the slider shapes, where it
matters, where it does not, how to use it) in the shapes chapter and an
updated STEP row in the files chapter.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Teardrop, counterbore and countersink shapes; more shapes as exact CAD
bodies (ellipse, oval cylinder, tube, half sphere, round roof, rounded
box); STEP export of outline shapes; side-count sliders and guide section;
finer meshes for small fillets (henmedia#50) and sketch zoom like the 3D editor
(henmedia#49); guide pictures of the shape menu and start page retaken.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The word Anleitung/Guide next to the logo name sat centred, not on the
baseline of "layerling". Both now share a baseline.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The join type for shell and offset (andymai/occt-wasm#366) is part of 5.4.0, so the
own build from henmedia/occt-wasm is no longer needed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…for dimensions on selection

Follows the merge of PR henmedia#51 (@gogades): F, Home and Shift+F in the sketch are listed in the
shortcuts dialog (and so in the guide), the sketches chapter says that dimensions show for
the selection, and the sketch pictures are retaken. Changelog entry under Unreleased.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… per ellipse; turned domes pass the plausibility check

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018PZgw7hpWq3uABHCn8iZMo
henmedia and others added 28 commits October 1, 2026 23:16
…deselect, drag and other edits (henmedia#65)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… load (henmedia#65)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…henmedia#68), Imperial fixes (henmedia#65)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Add section view tool to camera controls bar with interactive popover panel
- Support slicing along X, Y, or Z axes with normal flip and centering
- Continuous offset slider and numeric input bounded to scene/selection extents
- Purely visual non-destructive clipping via Three.js localClippingEnabled on shape layers
- Raycast filtering so clipped geometry cannot be clicked, enabling interior inspection
- 3D cutting plane helper overlay with toggle
- Full localization in German and English, and support for light, dark, and graphite themes
- Unit tests in tests/unit/sectionView.test.ts
…as selected and the property inspector is collapsed. Now it always appears.
…triangles

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018PZgw7hpWq3uABHCn8iZMo
…ens upwards, no shader rebuild per move; guide, start page, changelog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ector, import/export shortcuts, edge tool on STEP imports

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dragging a shape locks its edges or centre onto edges or centres of other
shapes, with a pink guide line. Alt pauses it; a checkbox in the snap grid
menu and in the settings switches it off. Suggested by darkwingbreydin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The thread shape (rod, screw, nut, tapped hole; V, trapezoidal, round and Whitworth profiles, either hand) is built as an exact solid from the same measures its mesh is drawn from: the profile swept along a helix half a turn at a time, sewn together, the ends cut by the chamfered solid of revolution, plus the screw head or the nut's hex body. Whitworth crests and roots are true arcs. The mesh stays for display and as the fallback; no .lyl field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018PZgw7hpWq3uABHCn8iZMo
The spring is built as an exact solid from the same measures its mesh is drawn from (springBuildPlan, shared with createSpringGeometry): a round wire swept along the helix half a turn at a time, the copies sewn together with the two square end discs. Footprint stretch, rotation and mirroring come from the same transform as the mesh. The mesh stays for display and as the fallback; no .lyl field.

The display mesh draws the wire as a polygon, so the worker's volume check takes the mesh volume up by that polygon's share of the circle.

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants