git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@1171 fdac6126-5c0c-442c-9429-916003d36597
531 lines
20 KiB
Python
531 lines
20 KiB
Python
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)
|