woodshop/tests/test_geometry.py

40 lines
1.3 KiB
Python

"""Geometry tests that exercise the build123d boolean features."""
import pytest
pytest.importorskip("build123d")
from woodshop.geometry import part_solid # noqa: E402
from woodshop.scene import Scene # noqa: E402
def test_hole_reduces_volume():
s = Scene()
s.place("2x4", 12)
base = part_solid(s.get_part("p1")).volume
s.add_feature("p1", "hole", face="top", along_in=6, diameter_in=1.0, depth_in=0) # through
assert part_solid(s.get_part("p1")).volume < base
def test_mortise_reduces_volume():
s = Scene()
s.place("2x4", 12)
base = part_solid(s.get_part("p1")).volume
s.add_feature("p1", "mortise", face="top", along_in=6, width_in=1, height_in=2, depth_in=0.75)
assert part_solid(s.get_part("p1")).volume < base
def test_tenon_adds_volume():
s = Scene()
s.place("2x4", 12)
base = part_solid(s.get_part("p1")).volume
s.add_feature("p1", "tenon", face="end_b", width_in=1.5, height_in=0.75, depth_in=1.5)
assert part_solid(s.get_part("p1")).volume > base
def test_featured_part_tessellates():
s = Scene()
s.place("2x4", 12)
s.add_feature("p1", "hole", face="top", along_in=6, diameter_in=0.5, depth_in=0)
verts, tris = part_solid(s.get_part("p1")).tessellate(0.05)
assert len(verts) > 8 and len(tris) > 12