Files
openmesh/src/Python/Unittests/test_delete_face.py

531 lines
20 KiB
Python
Raw Normal View History

import unittest
import openmesh
class DeleteFaceTriangleMesh(unittest.TestCase):
def test_delete_half_triangle_mesh_cube_no_edge_status(self):
self.mesh = openmesh.TriMesh()
self.vhandle = []
# Add some vertices
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, -1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, -1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, 1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, 1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, -1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, -1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, 1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, 1, -1)))
# Add six faces to form a cube
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[3])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[3])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[6])
face_vhandles.append(self.vhandle[5])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[5])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[4])
face_vhandles.append(self.vhandle[5])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[5])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[5])
face_vhandles.append(self.vhandle[6])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[6])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[6])
face_vhandles.append(self.vhandle[7])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[7])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
# Test setup:
#
# 3 ======== 2
# / /|
# / / | z
# 0 ======== 1 | |
# | | | | y
# | 7 | 6 | /
# | | / | /
# | |/ |/
# 4 ======== 5 -------> x
# Check setup
self.assertEqual(self.mesh.n_edges(), 18)
self.assertEqual(self.mesh.n_halfedges(), 36)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 12)
# =====================================================
# Now we delete half of the mesh
# =====================================================
self.mesh.request_face_status()
self.mesh.request_vertex_status()
self.mesh.request_halfedge_status()
n_face_to_delete = self.mesh.n_faces() / 2
# Check the variable
self.assertEqual(n_face_to_delete, 6)
for i in range(int(n_face_to_delete)):
self.mesh.delete_face(self.mesh.face_handle(i))
# =====================================================
# Check config afterwards
# =====================================================
self.assertEqual(self.mesh.n_edges(), 18)
self.assertEqual(self.mesh.n_halfedges(), 36)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 12)
# =====================================================
# Cleanup and recheck
# =====================================================
self.mesh.garbage_collection()
self.assertEqual(self.mesh.n_edges(), 18)
self.assertEqual(self.mesh.n_halfedges(), 36)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 6)
def test_delete_half_triangle_mesh_cube_with_edge_status(self):
self.mesh = openmesh.TriMesh()
self.vhandle = []
# Add some vertices
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, -1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, -1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, 1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, 1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, -1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, -1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, 1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, 1, -1)))
# Add six faces to form a cube
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[3])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[3])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[6])
face_vhandles.append(self.vhandle[5])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[5])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[4])
face_vhandles.append(self.vhandle[5])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[5])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[5])
face_vhandles.append(self.vhandle[6])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[6])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[6])
face_vhandles.append(self.vhandle[7])
self.mesh.add_face(face_vhandles)
#=======================
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[7])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
# Test setup:
#
# 3 ======== 2
# / /|
# / / | z
# 0 ======== 1 | |
# | | | | y
# | 7 | 6 | /
# | | / | /
# | |/ |/
# 4 ======== 5 -------> x
# Check setup
self.assertEqual(self.mesh.n_edges(), 18)
self.assertEqual(self.mesh.n_halfedges(), 36)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 12)
# =====================================================
# Now we delete half of the mesh
# =====================================================
self.mesh.request_face_status()
self.mesh.request_vertex_status()
self.mesh.request_edge_status()
self.mesh.request_halfedge_status()
n_face_to_delete = self.mesh.n_faces() / 2
# Check the variable
self.assertEqual(n_face_to_delete, 6)
for i in range(int(n_face_to_delete)):
self.mesh.delete_face(self.mesh.face_handle(i))
# =====================================================
# Check config afterwards
# =====================================================
self.assertEqual(self.mesh.n_edges(), 18)
self.assertEqual(self.mesh.n_halfedges(), 36)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 12)
# =====================================================
# Cleanup and recheck
# =====================================================
self.mesh.garbage_collection()
self.assertEqual(self.mesh.n_edges(), 13)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 6)
def test_deletete_half_poly_mesh_cube_without_edge_status(self):
self.mesh = openmesh.PolyMesh()
self.vhandle = []
# Add some vertices
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, -1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, -1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, 1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, 1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, -1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, -1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, 1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, 1, -1)))
# Add six faces to form a cube
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[3])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[6])
face_vhandles.append(self.vhandle[5])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[4])
face_vhandles.append(self.vhandle[5])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[5])
face_vhandles.append(self.vhandle[6])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[6])
face_vhandles.append(self.vhandle[7])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
# Test setup:
#
# 3 ======== 2
# / /|
# / / | z
# 0 ======== 1 | |
# | | | | y
# | 7 | 6 | /
# | | / | /
# | |/ |/
# 4 ======== 5 -------> x
# Check setup
self.assertEqual(self.mesh.n_edges(), 12)
self.assertEqual(self.mesh.n_halfedges(), 24)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 6)
# =====================================================
# Now we delete half of the mesh
# =====================================================
self.mesh.request_face_status()
self.mesh.request_vertex_status()
self.mesh.request_halfedge_status()
n_face_to_delete = self.mesh.n_faces() / 2
# Check the variable
self.assertEqual(n_face_to_delete, 3)
for i in range(int(n_face_to_delete)):
self.mesh.delete_face(self.mesh.face_handle(i))
# =====================================================
# Check config afterwards
# =====================================================
self.assertEqual(self.mesh.n_edges(), 12)
self.assertEqual(self.mesh.n_halfedges(), 24)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 6)
# =====================================================
# Cleanup and recheck
# =====================================================
self.mesh.garbage_collection()
self.assertEqual(self.mesh.n_edges(), 12)
self.assertEqual(self.mesh.n_halfedges(), 24)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 3)
def test_deletete_half_poly_mesh_cube_with_edge_status(self):
self.mesh = openmesh.PolyMesh()
self.vhandle = []
# Add some vertices
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, -1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, -1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, 1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, 1, 1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, -1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, -1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d( 1, 1, -1)))
self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(-1, 1, -1)))
# Add six faces to form a cube
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[3])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[6])
face_vhandles.append(self.vhandle[5])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[4])
face_vhandles.append(self.vhandle[5])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[1])
face_vhandles.append(self.vhandle[5])
face_vhandles.append(self.vhandle[6])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[2])
face_vhandles.append(self.vhandle[6])
face_vhandles.append(self.vhandle[7])
self.mesh.add_face(face_vhandles)
face_vhandles = []
face_vhandles.append(self.vhandle[0])
face_vhandles.append(self.vhandle[3])
face_vhandles.append(self.vhandle[7])
face_vhandles.append(self.vhandle[4])
self.mesh.add_face(face_vhandles)
# Test setup:
#
# 3 ======== 2
# / /|
# / / | z
# 0 ======== 1 | |
# | | | | y
# | 7 | 6 | /
# | | / | /
# | |/ |/
# 4 ======== 5 -------> x
# Check setup
self.assertEqual(self.mesh.n_edges(), 12)
self.assertEqual(self.mesh.n_halfedges(), 24)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 6)
# =====================================================
# Now we delete half of the mesh
# =====================================================
self.mesh.request_face_status()
self.mesh.request_vertex_status()
self.mesh.request_edge_status()
self.mesh.request_halfedge_status()
n_face_to_delete = self.mesh.n_faces() / 2
# Check the variable
self.assertEqual(n_face_to_delete, 3)
for i in range(int(n_face_to_delete)):
self.mesh.delete_face(self.mesh.face_handle(i))
# =====================================================
# Check config afterwards
# =====================================================
self.assertEqual(self.mesh.n_edges(), 12)
self.assertEqual(self.mesh.n_halfedges(), 24)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 6)
# =====================================================
# Cleanup and recheck
# =====================================================
self.mesh.garbage_collection()
self.assertEqual(self.mesh.n_edges(), 10)
self.assertEqual(self.mesh.n_halfedges(), 20)
self.assertEqual(self.mesh.n_vertices(), 8)
self.assertEqual(self.mesh.n_faces(), 3)
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(DeleteFaceTriangleMesh)
unittest.TextTestRunner(verbosity=2).run(suite)