Support Fins — FreeCAD add-on
printfins.com's breakaway support fins as a parametric object in FreeCAD: select a
part, Add Support Fins, and a … fins mesh appears under it. Change the part (a Pad
length, a fillet, its tilt) and the fins recompute to the new shape.
Same engine as the site and every plugin: the part is tessellated exactly the way the
site tessellates a STEP (OpenCascade, 0.01 mm / 0.1 rad), then computeFins runs in V8
(vendored mini-racer) through the shared host, plugins/shared/py/supportfins_host.py.
No fin geometry lives in the add-on.
Use
- Select a part (a Part solid, a PartDesign Body or any feature in it, an App::Link, or a mesh), then Support Fins ▸ Add Support Fins (toolbar, or the Tools menu) in any workbench.
- Bed = the document's XY plane at the part's lowest point: the part prints the way it sits in the model, z up. Tilt it with its Placement (or the Body's) to change the pose. Moving a group the part sits in (an App::Part) moves the fins too.
- Settings are the fins object's properties, the site's settings with the site's
defaults (generated from
plugins/shared/engine/options.json). Ones the engine would ignore are hidden, as on the site; numbers are held to the engine's range. Report says what was placed and what wasn't reached; it's also printed to the Report view. - Auto update (on) recomputes with the part. Turn it off on a big part to keep editing snappy: the fins keep their last result, the Report says they're out of date, and Update Support Fins recomputes them (the selected ones, or all).
- Export the part and its fins together (select both, File ▸ Export, .stl or .3mf).
Output is a mesh. Converting to a solid for STEP export comes later (local issue 016).
Install (for now, until the Addon Manager listing)
Download your computer's support-fins-freecad-<platform>.zip (printfins.com ▸ Plugins,
or the plugins-latest release) and unzip it into the Mod folder of FreeCAD's user
data folder (Help ▸ About ▸ Copy to clipboard shows it; FreeCAD 1.0 on macOS:
~/Library/Application Support/FreeCAD/Mod), so you get Mod/SupportFins/. Restart
FreeCAD. python3 plugins/freecad/build.py --all builds those zips.
From a checkout:
python3 plugins/freecad/build.py --install ~/Library/Application\ Support/FreeCAD # macOS
then restart FreeCAD. --install takes FreeCAD's user data folder (Help ▸ About shows it).
The build vendors mini-racer for this machine's platform (FreeCAD 1.0 on macOS has no
V8 or Qt WebEngine of its own, so this is the only runner).
Code
SupportFins/supportfins_freecad.py— theSupportFinsobject (Mesh::FeaturePython): tessellate the source, call the shared host, set the mesh and report.SupportFins/supportfins_props.py— options.json ⇄ properties. No FreeCAD imports.SupportFins/InitGui.py— the two commands, a global "Support Fins" toolbar (made once; delete it in Tools ▸ Customize and it stays deleted) and Tools-menu entries.build.py— the add-on folder: add-on + shared host + options.json + engine bundle + vendored mini-racer.
Tests
python3 -m pytest -q plugins/freecad/tests/test_props.py # anywhere; CI runs it
python3 plugins/freecad/build.py && \
/Applications/FreeCAD.app/Contents/Resources/bin/freecadcmd plugins/freecad/tests/smoke.py
cat plugins/freecad/build/smoke.json # last line: PASS / FAIL
smoke.py runs the real FreeCAD headless (35 checks: fins under the part on its lowest
point; following a length change, a tilt, a PartDesign feature and a moved App::Part;
Auto update off/Update; STEP parity with the site, asked live from site_step.js via deno;
Mesh, placed App::Part and App::Link sources; fins dropped into a placed group; settings
reaching the engine, hidden when ignored, clamped to its range; errors in the Report;
export of part + fins; save and reopen).