Boards now connect like real lumber: B's end butts flush against A's surface, offset from A's centerline by A's cross-section half-extent in B's approach direction (width/thickness, whichever B faces). Previously B's center landed on A's centerline, so boards interpenetrated and shared centerlines. - Added Part.local_frame() (length/width/thickness world axes via composed rotation matrices, matching geometry/viewer). - join() computes the surface-contact offset; handles perpendicular T/L joints and vertical legs (leg base butts the rail face). - Tests: butt joint meets surface not centerline; example sentence updated; vertical-leg join still correct. 45 passing. Default alignment is B centered on A at the attach point. Not yet: joinery cuts and flush-outer-face alignment options. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| test_cutlist.py | ||
| test_driver.py | ||
| test_scene.py | ||