go3dp Roadmap
Status snapshot, organised by area. Things in italics are user-facing decisions still open.
Universal Mount
- v0 size series — XS / S / M / L solid octagonal frustums, 1 / 2 / 3 / 3 wood-screw fixings
- v0 covers — matching octagonal-frustum cap with same screw-hole pattern; stacks on the block
- v0 slide-on adaptor (first family member) —
V0SlideOnlateral sleeve with half-octagonal closed end + 5 mm extension on the open end. PLA defaults at 0.15 mm tolerance / 1.5 mm wall thickness. - Per-material tolerance presets — currently only
V0AdaptorPLA. AddV0AdaptorPETG(~0.20 mm),V0AdaptorABS(~0.25 mm),V0AdaptorSLA(~0.05 mm). First validate by printing a PLA tolerance sweep and confirming the slide-on fit. - More adaptor types — share the same
V0Adaptor*mating pocket geometry but vary the outer "utility" portion: hooks, brackets, pipe saddles (15/22 mm copper, 32/40 mm waste), J-hooks, light shelves. (Was previously called the "v2 example catalogue".) - WASM-exposed parametric build — let the user adjust
Tolerance(and pickV0Size) live in-browser, regenerate the 3MF, and download.gsdfalready runs on WASM; the only new piece is a small UI form + glue. - Strength testing — bench rig + load measurement on each variant. Inputs: pull-out from PLA wall, shear at the screw heads, torsional resistance. Open: which screw spacing / wall material gives the best strength-to-cost ratio across the four sizes.
- v1 — U-tube puck — full design in
cmd/UniversalMount/README.md§2 onward. Telescoping mating, 8-position rotation indexing, integrated cover. Picks up after v0 is validated in print. - v2 — example catalogue — folded into the "More adaptor types" item above; tracking there.
Fasteners
-
pkg/fastenerstaxonomy —WoodScrew,Head,Drive,ThreadKind,Renderenums; vendor metadata - WoodScrew.Schematic — bicone head + cylindrical shank + cone tip (cheap, for cutouts)
- WoodScrew.Threaded — helical thread via
gsdf/forge/threads(visual only, ISO threadform) - WoodScrew.WallCutout — through-block cone+cylinder negative for clearance + countersink holes
- Catalogue: Spax 3.5 × 16, Spax 4 × 20
- DIN 7997 catalogue entry — slot drive, full thread, plain steel. Differences are documented in
cmd/fasteners/README.md; the Go entry is straightforward once a real use case appears. - Drive recess negatives — torx / posidriv / slot SDF profiles to subtract from the head bicone, so screw heads in renders aren't smooth domes.
- Custom WoodThreader — current threaded render uses ISO 60° at the screw's nominal Ø, which produces a thinner core than real wood screws. Add a
threads.WoodThreader for accurate visual / strength simulation. Skip until visual fidelity actually bites. - Machine screws — lift
cmd/UniversalMount/screws.go(M3–M6 DIN 7991 + heat-set inserts) intopkg/fasteners/machine.goonce the API has settled.
Documentation site
- Repo-level docs site —
index.mdlanding page at root,task docs:buildaggregates per-section content intodocs/, deployed via task-plus + statichost ash3-go3dp - 3D in-browser previews — Three.js + 3MFLoader,
<div class="model-viewer">blocks in markdown, hydrated byweb/viewer.js. Both Universal Mount and Fasteners pages. - Self-hosted Three.js — files mirrored under
web/three/, no jsdelivr dependency at runtime.task docs:fetch-threere-downloads on version bumps. - Favicon —
web/favicon.svgoctagonal-frustum silhouette, copied todocs/bydocs:build. - Web-resolution renders — current
-resdiv 200produces oversampled 3MFs (e.g. 800 KB for v0-XS, 4.5 MB for the matching STL) because resolution is bbox-relative and tiny parts get tiny cells. Add a separate web-output target with a fixed mm-resolution (≈ 0.3 mm) so browser previews download in ~1/4 the bytes without touching the print-quality STL. Defer. - glTF migration — eventually swap 3MF→glTF + Three.js→
<model-viewer>for a smaller JS payload. Requires writing agsdf-gltfanalogue. Only worth it if total docs JS becomes a problem.
Strength + materials
- Material datasheet entries — PLA, PETG, ABS, PA12 with shrinkage / pull-out / shear numbers; pair with the Universal Mount strength tests.
- Wall-material guidance — separate notes per substrate: drywall + plug, masonry + plug, timber stud, plastic. Recommended size class per substrate.
Parts (pkg/parts)
-
Partabstraction —Shape(true) +Insert(oversized) forms withTolerance(Radial/Axial).CompositeandExplodedhelpers. - Worked example — three-stage exploded → together → final cutaway in
pkg/parts/README.md, generated by snapshot tests. - Brick-wall demo — show a wall built from many individual
BlockParts at a running-bond offset (≈40+ placements). Stress-testsCompositeat scale and demonstrates the abstraction working for purely built assemblies (no external fasteners). Live-deployable as a docs page once the SVG output is reasonable. - Anisotropic tolerance — current
Tolerance{Radial, Axial}assumes axis-aligned parts. For parts with non-axial features (angled holes, helical threads) we may want aTolerance{X, Y, Z}or afunc(p)projection. Defer until a real case bites.
Slicing / SVG (pkg/svgslice)
- Front-overlay cutaway — render two parallel planes per slice: a "back" slice as solid
#e8e8e8and a "front" slice (offset toward the viewer) at reduced opacity (e.g.fill-opacity="0.4"). Internal features like screw holes and pockets become visible behind the front silhouette. Cheap: same marching-squares pipeline run twice. Add asOptions.FrontOffset+Options.FrontOpacity. - Depth-shaded slabs — sample the SDF at N depth steps along the view axis and emit each as a layer with decreasing opacity front-to-back, approximating a true cutaway. Richer than the two-plane overlay but heavier; needs a slab-thickness option and a sensible default for N. Open: how to combine with labelled dimensions — anchor to a single reference depth?
- Per-axis grid override —
Options.GridX/GridYalready supports this, but a "px per cell" knob would help when callers want consistent visual fidelity without computing pixel ratios themselves. Currently fixed atCellPx=6.
Tooling
- Refactor pre-existing legacy
cmd/*directories —BrabantiaPin,cap.go,ButtonCleaner,breadboard,plugsare all on the retireddeadsy/sdfxAPI or pre-refactorgsdfand don't compile against current dependencies. Either port to currentgsdfor delete; either way they shouldn't sit in this state. -
pkg/fastener-rendering— small shared helper for thegsdf → glrender → 3mf/stlpipeline duplicated betweencmd/UniversalMount/main.goandcmd/fasteners/main.go. Wait for a third caller before extracting.