connect() now RECORDS a Connection (anchor feature, moving feature) instead of just moving a board, so connected parts form an assembly: - scene.groups(): connected-component part groups via the connection graph. - explode(distance): back each moving board off along its joint axis (exploded view); assemble(): re-seat all (reverse); disconnect(cid/part): break a connection — pieces stay in place but become independent. - _seat() extracted from connect() so re-fit re-runs the mate math. - delete() drops connections referencing the removed part; clear() resets them; connections persist in scene.json. Parts stay SEPARATE boards (not fused) so the cut list and disassembly keep working — the assembly is a group, not a merge. CLI: connections / disconnect / explode / assemble; voice: wood-connect/explode/ assemble/disconnect (25 tools). Fit dialog shows part names. 83 tests pass (records+groups, explode/assemble roundtrip, disconnect keeps position). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| test_cutlist.py | ||
| test_driver.py | ||
| test_geometry.py | ||
| test_gui_controller.py | ||
| test_scene.py | ||