woodshop/src/woodshop
rob a0072e6271 Add joinery features (parametric boolean tenon/mortise/hole/slot)
Features as re-editable objects attached to a board, each a boolean op:
- scene.py: Feature dataclass (kind/face/position/size/depth), Part.features,
  add_feature/edit_feature/delete_feature/find_feature, serialization + counter.
- geometry.py: part_solid now builds the local board then fuses tenons / cuts
  mortise/hole/slot/dado/rabbet via build123d booleans, then places it. _face_frame
  maps each board face; holes are oriented cylinders, others oriented boxes.
- viewer.py: featured boards render the tessellated true solid (edges off to
  avoid triangle noise); plain boards keep the fast pyvista box.
- cli.py: feature / feature-edit / feature-delete / features commands; status
  shows feature kinds. gui/controller: wood-feature(-delete) dispatch.
- 21 wood-* tools (added wood-feature, wood-feature-delete).

64 tests pass (feature model + build123d volume/tessellation checks). Verified
with a render: tenon + mortise + through-hole on one board, and STEP/STL export.

Phase A (model + geometry + CLI/voice). Next: GUI feature panel; chamfers.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 13:27:57 -03:00
..
gui Add joinery features (parametric boolean tenon/mortise/hole/slot) 2026-05-29 13:27:57 -03:00
__init__.py Add PoC core: scene model, operations, geometry, viewer 2026-05-29 01:15:01 -03:00
__main__.py Add PoC core: scene model, operations, geometry, viewer 2026-05-29 01:15:01 -03:00
cli.py Add joinery features (parametric boolean tenon/mortise/hole/slot) 2026-05-29 13:27:57 -03:00
cutlist.py Add 3D orientation, richer operations, and cut list 2026-05-29 01:42:33 -03:00
driver.py Add multi-select + numberpad control panel 2026-05-29 12:47:39 -03:00
geometry.py Add joinery features (parametric boolean tenon/mortise/hole/slot) 2026-05-29 13:27:57 -03:00
lumber.py Add PoC core: scene model, operations, geometry, viewer 2026-05-29 01:15:01 -03:00
scene.py Add joinery features (parametric boolean tenon/mortise/hole/slot) 2026-05-29 13:27:57 -03:00
units.py Add 3D orientation, richer operations, and cut list 2026-05-29 01:42:33 -03:00
viewer.py Add joinery features (parametric boolean tenon/mortise/hole/slot) 2026-05-29 13:27:57 -03:00