def test_equality(): """Test the equality of Polyface3D objects.""" pts = [ Point3D(0, 0, 0), Point3D(0, 2, 0), Point3D(2, 2, 0), Point3D(2, 0, 0), Point3D(0, 0, 2), Point3D(0, 2, 2), Point3D(2, 2, 2), Point3D(2, 0, 2) ] face_indices = [[(0, 1, 2, 3)], [(0, 4, 5, 1)], [(0, 3, 7, 4)], [(2, 1, 5, 6)], [(2, 3, 7, 6)], [(4, 5, 6, 7)]] face_indices_2 = [[(0, 1, 2, 3)], [(0, 4, 5, 1)], [(0, 3, 7, 4)], [(2, 1, 5, 6)], [(2, 3, 7, 6)]] polyface = Polyface3D(pts, face_indices) polyface_dup = polyface.duplicate() polyface_alt = Polyface3D(pts, face_indices_2) assert polyface is polyface assert polyface is not polyface_dup assert polyface == polyface_dup assert hash(polyface) == hash(polyface_dup) assert polyface != polyface_alt assert hash(polyface) != hash(polyface_alt)
def test_polyface3d_init_open(): """Test the initalization of Poyface3D and basic properties of open objects.""" pts = [ Point3D(0, 0, 0), Point3D(0, 2, 0), Point3D(2, 2, 0), Point3D(2, 0, 0), Point3D(0, 0, 2), Point3D(0, 2, 2), Point3D(2, 2, 2), Point3D(2, 0, 2) ] face_indices = [[(0, 1, 2, 3)], [(0, 4, 5, 1)], [(0, 3, 7, 4)], [(2, 1, 5, 6)], [(2, 3, 7, 6)]] polyface = Polyface3D(pts, face_indices) assert len(polyface.vertices) == 8 assert len(polyface.face_indices) == 5 assert len(polyface.faces) == 5 assert len(polyface.edge_indices) == 12 assert len(polyface.edges) == 12 assert len(polyface.naked_edges) == 4 assert len(polyface.non_manifold_edges) == 0 assert len(polyface.internal_edges) == 8 assert polyface.area == 20 assert polyface.volume == 0 assert polyface.is_solid is False for face in polyface.faces: assert face.area == 4 assert face.is_clockwise is False
def test_polyface3d_init_solid(): """Test the initialization of Polyface3D and basic properties of solid objects.""" pts = [Point3D(0, 0, 0), Point3D(0, 2, 0), Point3D(2, 2, 0), Point3D(2, 0, 0), Point3D(0, 0, 2), Point3D(0, 2, 2), Point3D(2, 2, 2), Point3D(2, 0, 2)] face_indices = [[(0, 1, 2, 3)], [(0, 4, 5, 1)], [(0, 3, 7, 4)], [(2, 1, 5, 6)], [(2, 3, 7, 6)], [(4, 5, 6, 7)]] polyface = Polyface3D(pts, face_indices) assert len(polyface.vertices) == 8 assert len(polyface.face_indices) == 6 assert len(polyface.faces) == 6 assert len(polyface.edge_indices) == 12 assert len(polyface.edges) == 12 assert len(polyface.naked_edges) == 0 assert len(polyface.non_manifold_edges) == 0 assert len(polyface.internal_edges) == 12 assert polyface.area == 24 assert polyface.volume == 8 assert polyface.is_solid for face in polyface.faces: assert face.area == 4 assert face.is_clockwise is False assert polyface.faces[0].normal == Vector3D(0, 0, -1) assert polyface.faces[1].normal == Vector3D(-1, 0, 0) assert polyface.faces[2].normal == Vector3D(0, -1, 0) assert polyface.faces[3].normal == Vector3D(0, 1, 0) assert polyface.faces[4].normal == Vector3D(1, 0, 0) assert polyface.faces[5].normal == Vector3D(0, 0, 1)
def test_is_point_inside(): """Test the is_point_inside method.""" pts = [Point3D(0, 0, 0), Point3D(0, 2, 0), Point3D(2, 2, 0), Point3D(2, 0, 0), Point3D(0, 0, 2), Point3D(0, 2, 2), Point3D(2, 2, 2), Point3D(2, 0, 2)] face_indices = [[(0, 1, 2, 3)], [(0, 4, 5, 1)], [(0, 3, 7, 4)], [(2, 1, 5, 6)], [(2, 3, 7, 6)], [(4, 5, 6, 7)]] polyface = Polyface3D(pts, face_indices) assert polyface.is_point_inside(Point3D(1, 1, 1)) is True assert polyface.is_point_inside(Point3D(4, 1, 1)) is False assert polyface.is_point_inside(Point3D(-1, 1, 1)) is False assert polyface.is_point_inside(Point3D(4, 4, 4)) is False