15 Commits
Author SHA1 Message Date
matthewtrahan d0a27be131 plugins: Separate walls is Auto / On / Off, Auto on for resin tines -- the site ticks its box when Vertical (resin) tines is picked, but a dialog host stores what it holds and sends it every build, so a checkbox defaulting off left resin plugin prints with joined walls the site prevents (#309). Auto (the default) follows tineDir; On/Off force it; the CLI takes --separate-walls <auto|on|off> and MCP the same strings; direct engine callers may still pass true/false 2026-10-23 08:45:35 -05:00
Boris 52e1fde4aa Expose Separate walls in shared plugin interfaces 2026-10-23 08:45:35 -05:00
Boris 2a82cba1fa Forward nozzle diameter through CLI and preserved projects 2026-10-22 08:12:42 -05:00
Boris 38eaaa7d9f CLI: select project plates and list plate summaries 2026-10-20 21:29:26 -05:00
matthewtrahan 0c1fc1c168 plugins: real version numbers, stamped by every build -- 0.7.<n>, n = the position on main of the last commit that changed what that plugin ships (its folder, tests and notes aside, plus every file esbuild bundles into it and the shared Python host), so a plugin gets a new version exactly when it changes and never otherwise (the PrusaSlicer port doesn't move with the engine); plugins/shared/version.py computes it, each build stamps it into the plugin's own manifest (Orca header, Fusion manifest, Cura plugin.json + package, Blender manifest, Rhino package, SolidWorks assembly, Prusa manifest via a new build.py, a FreeCAD VERSION its console line shows) and the command line and MCP server compile it in (support-fins --version); sources hold the unstamped 0.7.0, above every hand-set number before (Fusion 0.6.2) so no host sees a downgrade; CI checks out full history for it and refuses a shallow clone; release labels show the same numbers 2026-10-19 18:13:31 -05:00
matthewtrahan a189a8ffc7 plugins: Placement mode review fixes -- Fusion's hand-built dialog gets Full coverage too (its own style list, the coverage slider greys out in Full as on the site), Long walls is pinned not to move Auto, and the CLI's Full parity test passes the page's island starts and compares the walls triangle for triangle 2026-10-19 09:31:08 -05:00
matthewtrahan cba9156d1b plugins: Placement mode (Auto / Full coverage) and Long walls in options.json -- every plugin dialog, the CLI (--mode full, --no-long-walls) and MCP can run Full coverage, which they couldn't (a user's wide roof parts got a handful of walls in Auto; Full holds most of them); Auto stays the default; Full builds at the default coverage as the site does, so the slider hides there and Long walls shows only in Full; labelled "Placement mode" since FreeCAD names a property after its label and every FreeCAD object already has a Placement, and its add-on now refuses such a label 2026-10-19 09:31:08 -05:00
matthewtrahan 6582065595 cli: .obj input, --object picks from a multi-object OBJ as from a 3MF plate; the MCP server's path says so 2026-10-16 10:00:56 -05:00
matthewtrahan 07bd5ca224 cli: a 3MF output carries a slicer's own parts back out the way the site does, in the separate form so a negative part can't cut the walls in its hole (#104); an STL output says it left the modifiers out 2026-10-14 21:25:19 -05:00
matthewtrahan 31228abb1d cut: a slicer's negative parts are cut out of the part on import, so the fins are built for what prints (#104) -- Manifold (manifold-3d 3.5.4, Apache-2.0, vendored, loaded only for a file with one); a scanned negative of closed shells plus sliver debris still cuts, a part or negative that is not a closed solid is said and left uncut; paint stays on the faces the cut leaves whole; the CLI bundle carries the WASM; the import note says how many were cut 2026-10-14 20:21:26 -05:00
matthewtrahan f4166105e6 3mf negative parts: review fixes -- a PrusaSlicer 2 second instance (a wrapper over the first one's mesh) keeps its negative out (it read solid), a part placed twice is two extras rather than one merged shell, the CLI warns when it leaves one out, and a Bambu plate whose part ids collide is pinned 2026-10-14 20:21:26 -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
chromaglow 0887505092 tests: build file paths with fileURLToPath so the suite runs on Windows (#230)
URL.pathname gives '/C:/dir%20with%20space/...' on Windows, so every test that
reads a model or fixture failed there (75 of 265). import() specifiers keep the
URL; disk reads take a filesystem path.
2026-10-10 13:35:51 -05:00
matthewtrahan 597aaa33db cli: review fixes -- --rot reads the site's X·Y·Z readout, --fins-only lines up with the file's part, own 3MF refused
- --rot is three.js Euler XYZ (Rx*Ry*Rz), the order printfins.com shows under
  the part, so a pose found on the site carries over
- --fins-only maps the fins back onto the part as it is in the file; it can't
  take --rot, and writes nothing when there are no fins
- a Support Fins 3MF (part + fins) is refused instead of finned again
- settings the site would hide warn on stderr; -o can't overwrite the input;
  -- ends the options; Node 20.10+
- the summary rounds ties to even, word for word with Python's host_report
2026-09-30 18:30:03 -05:00
matthewtrahan 070f36384a cli: support-fins part.stl -> part-fins.3mf, the site's engine from a terminal (local issue 017)
Deno or Node 20+, or a deno compile binary. Poses the part (--rot, X then Y
then Z), runs the plugins' computeFins, writes a 3MF (part + fins), a merged
STL, or the fins alone. Flags come from options.json in the site's units.
Reports overhangs it couldn't reach; exit 1 only for a file that failed (the
others still run), exit 2 for bad arguments. Tests: CLI fins equal computeFins
on the posed part and the website's own path on lbracket@35.
2026-09-30 18:30:03 -05:00