altium-export-molecule

Install?

Direct Altium -> OCCT molecule/board path: STEP export (bodies) + Gerber export (copper + silkscreen) -> composited top-face overlay -> step2glb molecule mode. Includes make_overlay.py. Hands off to molecule-publish.

adom-wiki pkg install adom/altium-export-molecule

Latest: v2.3.1, published

Dependencies 3 apps

Contents

README

markdown

altium-export-molecule

Take an Altium Designer board to a GLB that actually looks like the board — pads, silkscreen and all — and on to a wiki molecule.

Altium board exported to GLB with pads and silkscreen

The thing everyone gets wrong

Altium's STEP export contains the board substrate and component 3D bodies. Nothing else. No copper, no silkscreen. Convert it on its own and you get a bare green slab with no pads and no designators, and it is not obvious why.

Copper and silk have to be rebuilt from Gerbers and composited onto the board's top face:

  • silkscreen = .GTO
  • exposed pads = .GTL.GTS.GTS is TF.FilePolarity,Negative, so its features are the mask openings. Using all of .GTL paints the covered ground pour gold (~76% of the board) instead of the ~8% that is really exposed metal.

make_overlay.py does that composite, aligned to the .GM1 board rect so it registers exactly.

Which path to use today

Goal Status
GLB / render of an Altium board (pads + silkscreen) ✅ proven end to end
Full molecule (anchored GLB + footprint.json + symbol.json) ⚠️ blocked — Stage ② needs .kicad_pcb emit from altium-pcbdoc; use the v1 KiCad-importer route

Getting the files out of Altium

What How Headless?
STEP OutJob with an ExportSTEP output ❌ one human click on Generate content
Gerbers OutJob with a Gerber output ✅ fully headless via altium_run_outjob

There is no headless STEP-export process in Altium. Pcb:ExportSTEP does not exist, and because Altium silently ignores unknown process ids, calling it reports success and writes nothing. The real PCB:Export is index-based and opens a file dialog. This is settled — do not go hunting for a process id.

Convert

python3 make_overlay.py --gerber-dir gerber --out overlay_top.png
step2glb convert board.step -o board.glb --molecule --silk-top overlay_top.png --compress quantize

--silk-top is silently ignored without --molecule (the GLB comes back byte-identical). Check the response says silkscreen_applied: true. --compress quantize avoids the Draco default, which needs a decoder plain three.js viewers do not have.

The overlay renders coplanar with the board face, so it z-fights: in your viewer set polygonOffset and depthWrite = false on the silkscreen_top material, and keep the camera's near/far tight (0.05 / 20, not 0.001 / 100).

See SKILL.md for the full stage-by-stage recipe and the transfer gotchas.