14 Commits
Author SHA1 Message Date
matthewtrahan 6fe5746a6e plugins: Direction and Pin depth in options.json, so every dialog, the CLI (--tine-dir, --pin-depth) and the MCP server offer resin pins; the report says pins (#309) 2026-10-17 09:47:53 -05:00
matthewtrahan 93c36f9561 plugins: gap review fixes -- Blender's float32 gap at 0.4 is in range, Onshape's gap bounds are the site's 0.1-0.4, Cura README 2026-10-14 07:54:03 -05:00
matthewtrahan 93bb5565f4 plugins: the Material option becomes the site's Support gap -- PLA's pad numbers, a 0.1-0.4 gap field in every dialog, Cura's Match Cura and Onshape's PLA/PETG/Custom go 2026-10-14 07:54:03 -05:00
Matthew Trahanandmatthewtrahan f2147bd19f Plate only: every support on the build plate, none on the part (#218) (#221)
* engine: plateOnly -- every support on the build plate, none on the part (#218). Auto and the short walls drop a line the part-attached path would take (built or floored) and count it as skipped.onPart, never stilting it to the plate through the part; drawnWall refuses a line with part under it, naming the setting, and its squat fallback skips the part; the fill pass never retries a wall on the part. Off by default: sweep vs main identical. tests: plate_only -- a drawn line over the part refused, over open plate byte-identical; Auto and Full on the portal at Y90 build nothing on the part and count it; off, the lbracket is unchanged

* ui + plugins: a Plate only checkbox under Walls (#218) -- read by the auto build and the drawn walls; the readout says how many supports it left off and why, and names it when it emptied a part; undoable; German strings. options.json gains plateOnly, so every plugin dialog shows it, and both entries pass it on. tests: the dead-control check runs it on the portal at Y90 (the lbracket has no wall on the part); FreeCAD and Blender unit fixtures list it

* plate only: Full refuses a line over the part before building it, and a mixed line keeps its plate stretch (review) -- the local pass turned the on-part retry back on, and every try reached drawnWall to be refused: the portal at Y90 spent all 120 tries and blamed the wall limit. stationClear's `plate` now refuses a station with part under it on every try. Auto hands a line the part-attached path claims to the plate path (its column probes trim the stations over the part) instead of dropping it whole. The readout names Plate only when it emptied a part in any mode, not only Prop; German help line. tests: every built support reaches the plate, Full isn't capped

---------

Co-authored-by: matthewtrahan <mathyout@pm.me>
2026-10-08 22:32:15 -05:00
matthewtrahan 59848dc207 blender smoke: its too-short drawn line is 1 mm, under DRAW_MIN_LEN (2 mm is now a wall) 2026-10-04 14:09:50 -05:00
matthewtrahan 48d12cbe98 blender: export review fixes -- red overhangs stayed red (a shared material painted both overlays amber), no empty 3MF objects
- Both overlays used the material "Support Fins overhangs", and _material repaints a
  material by name: on a part with both kinds of face, the amber pass turned the red
  overlay amber too (Blender's solid view colours by material), mixing up "held" with
  "too small to fin". Each overlay now has its own material; the smoke test builds the
  bracket + a 1.5 mm nub (both kinds) and checks each colour (fails without the fix).
- A fin whose triangles all fall to the degenerate filter is left out of the 3MF
  (an object with no triangles isn't valid 3MF).
- README: Blender's own STL export needs Selection Only, or the overlay sheets go too.
2026-10-01 14:34:41 -05:00
matthewtrahan 7071a598ba blender: 3MF export skips an empty drawn wall -- one that no longer fits is emptied, and failed the export if unhidden 2026-10-01 14:34:41 -05:00
matthewtrahan 0ad4db7a05 blender: Show overhangs -- the site's red (held) and amber (too small to fin) faces over the part
Generate paints the overhangs the fins hold red and the faces past the angle but too
small to fin amber, as on printfins.com, so an overhang nothing holds is shown rather
than hidden. They are unselectable, unrendered objects under the part, drawn in front;
Show overhangs (after Generate) toggles them, skipping any in an excluded collection.
Lay face flat and Clear remove them with the fins.
2026-10-01 14:34:41 -05:00
matthewtrahanandRemusTL 26252741ec blender: Export part + fins (.3mf) -- one assembly in mm, the fins where the engine put them
Blender has no 3MF exporter. The part and each visible fin / drawn wall are their own
3MF objects, all in one build item, so a slicer opens them as one object in their
original places. Triangles the weld closed are dropped (invalid in 3MF), and the export
warns when the fins are out of date. The manifest asks for file access for it.

Co-authored-by: RemusTL <336249490+RemusTL@users.noreply.github.com>
2026-10-01 14:34:41 -05:00
matthewtrahan 20b707c22c blender: draw review fixes -- Clear works for a drawn-only part, a wall that no longer fits is emptied, a click off the part doesn't select
- A part that only ever had drawn walls never gets a result line: with those walls
  deleted by hand, Clear was disabled while the pose stamp stayed (out of date
  forever). Clear now also runs for the stamp alone.
- A drawn wall that no longer fits the pose was hidden but kept its old-pose mesh,
  which Blender's own STL export (Visible Only is off by default) would still write.
  It is now emptied as well; its ends stay, so it comes back when the part does.
- A click in the viewport that misses the part no longer passes through to Blender
  (it changed the selection mid-tool); the header says to click on the part.
  Clicks outside the viewport still pass through.
2026-10-01 14:24:13 -05:00
matthewtrahanandRemusTL 08c0a2b1ce blender: Draw wall + Lay face flat -- click the part for one hand-placed wall (the site's Draw), or the face to put on the bed
Draw wall: two clicks under an overhang make one wall through drawWall, with an orange
preview line between the first click and the mouse; a line the engine refuses says why.
Each drawn wall keeps its ends in the part's frame, so Generate re-stands it for the
part's current pose (the site's rebuildDrawn) or says why it no longer fits; a drawn
wall alone marks the fins out of date when the part moves. Lay face flat turns the part
so the clicked face is down, keeping its lowest point, and drops the old pose's fins.

The tools start from the sidebar but cast from the 3D View's window region, and any
error ends them cleanly (no preview handler or header text left behind).

Co-authored-by: RemusTL <336249490+RemusTL@users.noreply.github.com>
2026-10-01 14:24:13 -05:00
matthewtrahan ce7dbed736 blender: hand-test fixes -- panel messages wrap to the sidebar's width (were cut off with ...), Clear works once every fin was deleted by hand
- Blender cuts a label longer than the sidebar off with an ellipsis; the fixed
  42-character wrap was wider than the default sidebar, so "That size looks wrong for
  a print: is ..." and long result lines lost their ends. The wrap now follows the
  sidebar's width and UI scale.
- Clear needed a fin to exist; with every fin deleted by hand the result line and the
  pose stamp stayed (and the out-of-date check ran against fins that were gone).
- The manifest's Import-Export tag waits for the 3MF export.
2026-10-01 13:51:02 -05:00
matthewtrahanandRemusTL aaf962c648 ci: blender job -- tests + a zip per platform, and a headless-Blender smoke test (4.2 LTS, 5.2) of the Linux zip
The smoke test installs the zip into a checksum-verified official Blender with its user
folders in a temp dir, then: lbracket @35 gets the site's 4 walls / ~20 tines as closed
objects on the bed; moved / settings / edited / unit scale mark the fins out of date;
settings hide as the engine says; the panel draws in every state; Clear.
The zips go to plugins-latest with the others.

Co-authored-by: RemusTL <336249490+RemusTL@users.noreply.github.com>
2026-10-01 13:51:02 -05:00
matthewtrahan 0cddbe2460 blender: Support Fins extension core -- Generate puts the site's fins under the part as objects, on the shared engine path
Rebuild of #145 on the plugins' model: the panel is generated from options.json and a
setting shows only when the engine uses it; the fins come from computeFins through the
shared host (mini-racer as a manifest wheel, JIT on), one object per wall / sway brace
/ pad (pieces); the result line is host_report, so overhangs that weren't reached and
floating pieces are always said. Moving the part, editing its mesh (caught across a
save + reopen by a mesh fingerprint), changing a setting or the unit scale marks the
fins out of date. Units: Unit Scale x 1000 = mm; the panel offers Use millimetres when
the part's size looks wrong.

build.py makes one zip per platform and flattens mini-racer's wheel: it publishes the
package under .data/purelib/, which Blender 4.2 / 4.3's installer leaves unimportable.

GPL-3.0-or-later (Blender's rule for add-ons); the bundled engine stays MIT. Draw wall,
Lay face flat, 3MF export and the overhang overlay follow on their own branches.
2026-10-01 13:51:02 -05:00