Example #1
0
 def test_vertex_iter(self):
     # Add some vertices
     self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
     self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
     self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
     self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
     
     # Add two faces
     self.mesh.add_face(self.vhandle[2], self.vhandle[1], self.vhandle[0])
     self.mesh.add_face(self.vhandle[2], self.vhandle[0], self.vhandle[3])
     
     # Test setup:
     #  1 === 2
     #  |   / |    
     #  |  /  |
     #  | /   |
     #  0 === 3
     
     v_it = self.mesh.vertices()
     
     self.assertEqual(v_it.__next__().idx(), 0)
     self.assertEqual(v_it.__next__().idx(), 1)
     self.assertEqual(v_it.__next__().idx(), 2)
     self.assertEqual(v_it.__next__().idx(), 3)
     
     self.assertRaises(StopIteration, v_it.__next__)
Example #2
0
    def test_add_quad_to_polymesh(self):
        self.mesh = openmesh.PolyMesh()
        self.vhandle = []

        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))

        # Add one face
        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)

        # Test setup:
        #  1 === 2
        #  |     |
        #  |     |
        #  |     |
        #  0 === 3

        # Check setup
        self.assertEqual(self.mesh.n_vertices(), 4)
        self.assertEqual(self.mesh.n_faces(), 1)
Example #3
0
 def test_face_iter_empty_mesh_one_deleted_face(self):
     # Request delete_face capability
     self.mesh.request_vertex_status()
     self.mesh.request_edge_status()
     self.mesh.request_face_status()
     
     # Add some vertices
     self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
     self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
     self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
     
     # Add one face
     fh = self.mesh.add_face(self.vhandle[2], self.vhandle[1], self.vhandle[0])
     
     is_delete_isolated_vertex = False
     self.mesh.delete_face(fh, is_delete_isolated_vertex)
     
     # Test setup:
     #  1 === 2
     #  |   /
     #  |  /
     #  | /
     #  0
     
     # Normal iterators
     f_it = self.mesh.faces()
     
     self.assertEqual(f_it.__next__().idx(), 0)
     self.assertRaises(StopIteration, f_it.__next__)
     
     # Same with skipping iterators
     f_it = self.mesh.sfaces()
     
     self.assertRaises(StopIteration, f_it.__next__)
Example #4
0
    def test_add_triangles_to_trimesh(self):
        self.mesh = openmesh.TriMesh()
        self.vhandle = []

        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))

        # Add two faces
        face_vhandles = []
        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[0])

        self.mesh.add_face(face_vhandles)

        face_vhandles = []
        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[3])

        self.mesh.add_face(face_vhandles)

        # Test setup:
        #  1 === 2
        #  |   / |
        #  |  /  |
        #  | /   |
        #  0 === 3

        # Check setup
        self.assertEqual(self.mesh.n_vertices(), 4)
        self.assertEqual(self.mesh.n_faces(), 2)
    def test_check_status_properties_halfedge_edge_all_deleted(self):
        self.mesh.request_vertex_status()
        self.mesh.request_face_status()
        self.mesh.request_halfedge_status()
        self.mesh.request_edge_status()

        # Define positions
        p1 = openmesh.Vec3d(0, 0, 0)
        p2 = openmesh.Vec3d(0, 1, 0)
        p3 = openmesh.Vec3d(1, 1, 0)
        p4 = openmesh.Vec3d(0, 0, 1)
        
        # Add some vertices
        vh1 = self.mesh.add_vertex(p1)
        vh2 = self.mesh.add_vertex(p2)
        vh3 = self.mesh.add_vertex(p3)
        vh4 = self.mesh.add_vertex(p4)

        # Add some faces
        f1 = self.mesh.add_face(vh1, vh3, vh2)
        f2 = self.mesh.add_face(vh1, vh2, vh4)
        f3 = self.mesh.add_face(vh2, vh3, vh4)
        f4 = self.mesh.add_face(vh3, vh1, vh4)

        # Delete all faces
        self.mesh.delete_face(f1)
        self.mesh.delete_face(f2)
        self.mesh.delete_face(f3)
        self.mesh.delete_face(f4)

        for heh in self.mesh.halfedges():
            self.assertTrue(self.mesh.status(self.mesh.edge_handle(heh)).deleted())
            self.assertTrue(self.mesh.status(heh).deleted())
    def test_equality_operator_vec3d(self):
        vec1 = openmesh.Vec3d(0.0, 1.0, 0.0)
        vec2 = openmesh.Vec3d(1.0, 0.0, 0.0)
        vec3 = openmesh.Vec3d(1.0, 0.0, 0.0)

        self.assertFalse(vec1 == vec2)
        self.assertTrue(vec3 == vec2)
    def test_collapse_quad_with_center(self):

        # 0--------1
        # |\      /|
        # | \    / |
        # |  \  /  |
        # |    2   |
        # |  /  \  |
        # | /    \ |
        # 3--------4

        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 2, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 2, 0)))

        # Add four faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[1])
        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[2])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[4])
        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[4])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.mesh.add_face(face_vhandles)

        self.mesh.request_vertex_status()
        self.mesh.request_edge_status()
        self.mesh.request_face_status()

        # Get the halfedge
        v2v1 = self.mesh.find_halfedge(self.vhandle[2], self.vhandle[1])

        self.assertTrue(v2v1.is_valid())
        self.assertTrue(self.mesh.is_collapse_ok(v2v1))

        # Execute it as a crash test
        self.mesh.collapse(v2v1)
Example #8
0
    def test_dereference(self):
        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, -1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, -1, 0)))

        # Add four faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[3])
        face_vhandles.append(self.vhandle[4])
        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[1])
        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[4])
        self.mesh.add_face(face_vhandles)

        # Test setup:
        #  0 ==== 2
        #  |\  0 /|
        #  | \  / |
        #  |2  1 3|
        #  | /  \ |
        #  |/  1 \|
        #  3 ==== 4
        # Starting vertex is 1->4

        # output from fh_it.current_halfedge_handle()
        current_halfedge_handles = [4, 0, 2, 10, 6, 8, 1, 12, 7, 14, 3, 11]

        i = 0
        for f in self.mesh.faces():
            for he in self.mesh.fh(f):
                self.assertEqual(he.idx(), current_halfedge_handles[i])
                i += 1
Example #9
0
    def setUp(self):
        self.mesh = openmesh.TriMesh()

        # Add some vertices
        self.vhandle = []

        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, -1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, -1, 0)))
Example #10
0
    def setUp(self):
        self.mesh = openmesh.TriMesh()
        
        self.mesh.request_vertex_status()
        self.mesh.request_edge_status()
        self.mesh.request_halfedge_status()
        self.mesh.request_face_status()

        # Add some vertices
        self.vhandle = []
        
        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
        self.mesh.add_face(self.vhandle[0], self.vhandle[1], self.vhandle[3])
        self.mesh.add_face(self.vhandle[1], self.vhandle[2], self.vhandle[3])
        self.mesh.add_face(self.vhandle[7], self.vhandle[6], self.vhandle[5])
        self.mesh.add_face(self.vhandle[7], self.vhandle[5], self.vhandle[4])
        self.mesh.add_face(self.vhandle[1], self.vhandle[0], self.vhandle[4])
        self.mesh.add_face(self.vhandle[1], self.vhandle[4], self.vhandle[5])
        self.mesh.add_face(self.vhandle[2], self.vhandle[1], self.vhandle[5])
        self.mesh.add_face(self.vhandle[2], self.vhandle[5], self.vhandle[6])
        self.mesh.add_face(self.vhandle[3], self.vhandle[2], self.vhandle[6])
        self.mesh.add_face(self.vhandle[3], self.vhandle[6], self.vhandle[7])
        self.mesh.add_face(self.vhandle[0], self.vhandle[3], self.vhandle[7])
        self.mesh.add_face(self.vhandle[0], self.vhandle[7], self.vhandle[4])
    def test_compute_triangle_surface_with_cross_product(self):
        # vec1
        #  y
        #  |
        #  |
        #  |
        #  x------>x vec2

        vec1 = openmesh.Vec3d(0.0, 1.0, 0.0)
        vec2 = openmesh.Vec3d(1.0, 0.0, 0.0)

        area = 0.5 * openmesh.cross(vec1, vec2).norm()
        self.assertEqual(area, 0.5)

        area = 0.5 * (vec1 % vec2).norm()
        self.assertEqual(area, 0.5)
Example #12
0
    def test_calc_vertex_normal_loop(self):
        self.mesh.request_vertex_normals()
        self.mesh.request_halfedge_normals()
        self.mesh.request_face_normals()

        normal = openmesh.Vec3d()

        self.mesh.calc_vertex_normal_loop(self.vhandle[2], normal)
    def setUp(self):
        self.mesh = openmesh.TriMesh()

        # Add some vertices
        self.vhandle = []

        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, -1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, -1, 0)))

        # Add four faces
        self.mesh.add_face(self.vhandle[0], self.vhandle[1], self.vhandle[2])
        self.mesh.add_face(self.vhandle[1], self.vhandle[3], self.vhandle[4])
        self.mesh.add_face(self.vhandle[0], self.vhandle[3], self.vhandle[1])
        self.mesh.add_face(self.vhandle[2], self.vhandle[1], self.vhandle[4])
        '''
    def test_face_face_iter_with_holes(self):
        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(3, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(4, 1, 0)))

        # Add three faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        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[3])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[3])
        face_vhandles.append(self.vhandle[4])
        self.mesh.add_face(face_vhandles)

        # Test setup:
        #
        # 0 ------ 2 ------ 4
        #  \      / \      /
        #   \  0 /   \  2 /
        #    \  /  1  \  /
        #     1 ------- 3

        ff_it = self.mesh.ff(self.mesh.face_handle(1))

        self.assertEqual(ff_it.__next__().idx(), 2)
        self.assertEqual(ff_it.__next__().idx(), 0)
        self.assertRaises(StopIteration, ff_it.__next__)
    def test_write_and_read_vertex_colors_to_and_from_off_file(self):
        self.mesh.request_vertex_colors()

        self.mesh.add_vertex(openmesh.Vec3d(0, 0, 1))
        self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0))
        self.mesh.add_vertex(openmesh.Vec3d(0, 1, 1))
        self.mesh.add_vertex(openmesh.Vec3d(1, 0, 1))

        # Using the default openmesh Python color type
        testColor = openmesh.Vec4f(1.0, 0.5, 0.25, 1.0)

        # Setting colors (different from black)
        for v in self.mesh.vertices():
            self.mesh.set_color(v, testColor)

        # Check if the colors are correctly set
        count = 0
        for v in self.mesh.vertices():
            color = self.mesh.color(v)
            if color[0] != testColor[0] or color[1] != testColor[1] or color[
                    2] != testColor[2]:
                count += 1

        self.assertEqual(count, 0)

        options = openmesh.Options()
        options += openmesh.Options.VertexColor
        options += openmesh.Options.ColorFloat

        openmesh.write_mesh(self.mesh, "temp.off", options)
        openmesh.read_mesh(self.mesh, "temp.off", options)

        # Check if vertices still have the same color
        count = 0
        for v in self.mesh.vertices():
            color = self.mesh.color(v)
            if color[0] != testColor[0] or color[1] != testColor[1] or color[
                    2] != testColor[2]:
                count += 1

        self.assertEqual(count, 0)

        self.mesh.release_vertex_colors()
Example #16
0
    def setUp(self):
        self.mesh = openmesh.TriMesh()

        # Add some vertices
        self.vhandle = []

        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, -1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, -1, 0)))

        # Add four faces using Python lists
        vertex_list = [self.vhandle[0], self.vhandle[1], self.vhandle[2]]
        self.mesh.add_face(vertex_list)
        vertex_list = [self.vhandle[1], self.vhandle[3], self.vhandle[4]]
        self.mesh.add_face(vertex_list)
        vertex_list = [self.vhandle[0], self.vhandle[3], self.vhandle[1]]
        self.mesh.add_face(vertex_list)
        vertex_list = [self.vhandle[2], self.vhandle[1], self.vhandle[4]]
        self.mesh.add_face(vertex_list)
    def test_face_face_iter_without_holes(self):
        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))

        # Add two faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[1])
        fh1 = 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[2])
        fh2 = self.mesh.add_face(face_vhandles)

        # Test setup:
        #
        #  1 -------- 2
        #  | f0  /    |
        #  |    / f1  |
        #  0 -------- 3

        # Check setup
        self.assertEqual(self.mesh.n_vertices(), 4)
        self.assertEqual(self.mesh.n_faces(), 2)

        face_iter = self.mesh.ff(fh1)

        # Get the face via the handle
        faceHandle1 = face_iter.__next__()
        face1 = self.mesh.face(faceHandle1)

        self.assertEqual(faceHandle1.idx(), 1)
Example #18
0
    def test_write_triangle(self):
        filename = "triangle-minimal.om"

        # Generate data
        v1 = self.mesh.add_vertex(openmesh.Vec3d(1.0, 0.0, 0.0))
        v2 = self.mesh.add_vertex(openmesh.Vec3d(0.0, 1.0, 0.0))
        v3 = self.mesh.add_vertex(openmesh.Vec3d(0.0, 0.0, 1.0))
        self.mesh.add_face(v1, v2, v3)

        # Save
        ok = openmesh.write_mesh(self.mesh, filename)
        self.assertTrue(ok)

        # Reset
        self.mesh.clear()

        # Load
        ok = openmesh.read_mesh(self.mesh, filename)
        self.assertTrue(ok)

        # Compare
        self.assertEqual(self.mesh.n_vertices(), 3)
        self.assertEqual(self.mesh.n_edges(), 3)
        self.assertEqual(self.mesh.n_faces(), 1)

        self.assertEqual(self.mesh.point(v1), openmesh.Vec3d(1.0, 0.0, 0.0))
        self.assertEqual(self.mesh.point(v2), openmesh.Vec3d(0.0, 1.0, 0.0))
        self.assertEqual(self.mesh.point(v3), openmesh.Vec3d(0.0, 0.0, 1.0))

        # Cleanup
        os.remove(filename)
    def test_split_copy_polymesh(self):
        self.mesh = openmesh.PolyMesh()
        self.vhandle = []

        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0.5, 0.5, 0)))

        # Add one face
        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])

        fh = self.mesh.add_face(face_vhandles)

        # Test setup:
        #  1 === 2
        #  |     |
        #  |     |
        #  |     |
        #  0 === 3

        # Set property
        fprop_int = openmesh.FPropHandle()
        self.mesh.add_property(fprop_int)
        self.mesh.set_property(fprop_int, fh, 999)

        # Split face with new vertex
        self.mesh.split_copy(fh, self.vhandle[4])

        # Check setup
        for f in self.mesh.faces():
            self.assertEqual(self.mesh.property(fprop_int, f), 999)
Example #20
0
    def setUp(self):
        self.mesh = openmesh.TriMesh()

        # Add some vertices
        self.vhandle = []

        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 1)))

        # Add four faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        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[2])
        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[3])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[0])
        self.mesh.add_face(face_vhandles)
    def test_halfedge_loop_without_face(self):
        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(3, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(4, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, -1, 0)))

        # Add three faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[3])
        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[5])
        face_vhandles.append(self.vhandle[3])
        self.mesh.add_face(face_vhandles)

        # Test setup:
        #
        # H => hole (no face)
        # fx => face #x
        # edge 0 => halfedge 0/1
        #
        # 0 --4--- 2 -10--- 4
        #  \      / \      /
        #   0 f0 2   6 f2 8
        #    \  /  H  \  /
        #     1 ---16---3
        #      \       /
        #      12 f3 14
        #        \   /
        #         \ /
        #          5

        # Circle around the hole
        hl_it = self.mesh.hl(self.mesh.halfedge_handle(3))

        self.assertEqual(hl_it.__next__().idx(), 3)
        self.assertEqual(hl_it.__next__().idx(), 17)
        self.assertEqual(hl_it.__next__().idx(), 7)
        self.assertRaises(StopIteration, hl_it.__next__)
    def setUp(self):
        self.mesh = openmesh.TriMesh()

        # Add some vertices
        self.vhandle = []

        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0,-1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2,-1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(3, 0, 0)))
        
        # Single point
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0,-2, 0)))
        
        # Add five faces
        self.fhandle = []
        
        face_vhandles = []
        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.fhandle.append(self.mesh.add_face(face_vhandles))
        
        face_vhandles = []
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[3])
        face_vhandles.append(self.vhandle[4])
        self.fhandle.append(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[1])
        self.fhandle.append(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[4])
        self.fhandle.append(self.mesh.add_face(face_vhandles))
        
        face_vhandles = []
        face_vhandles.append(self.vhandle[5])
        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[4])
        self.fhandle.append(self.mesh.add_face(face_vhandles))
Example #23
0
    def test_is_estimated_feature_edge(self):
        # Test setup:
        #  1 -- 2
        #  |  / |
        #  | /  |
        #  0 -- 3

        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))

        # Add two faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[3])
        self.mesh.add_face(face_vhandles)

        # ===============================================
        # Setup complete
        # ===============================================

        he = self.mesh.halfedge_handle(4)

        self.assertEqual(self.mesh.to_vertex_handle(he).idx(), 0)
        self.assertEqual(self.mesh.from_vertex_handle(he).idx(), 2)
        self.assertEqual(self.mesh.edge_handle(he).idx(), 2)

        eh = self.mesh.edge_handle(he)
        self.assertEqual(self.mesh.calc_dihedral_angle(eh), 0.0)

        # Modify point
        tmp = (openmesh.Vec3d(0.0, 0.0, -1.0) +
               openmesh.Vec3d(1.0, 1.0, -1.0)) * 0.5
        self.mesh.set_point(self.vhandle[2], tmp)

        difference = fabs(1.36944 - self.mesh.calc_dihedral_angle(eh))

        self.assertTrue(difference < 0.00001)
Example #24
0
    def test_create_strange_config(self):
        self.mesh = openmesh.TriMesh()
        self.vhandle = []

        #    2 x-----------x 1
        #       \         /
        #        \       /
        #         \     /
        #          \   /
        #           \ /
        #          0 x ---x 6
        #           /|\   |
        #          / | \  |
        #         /  |  \ |
        #        /   |   \|
        #       x----x    x
        #       3    4    5

        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 1)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 2, 2)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(3, 3, 3)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(4, 4, 4)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(5, 5, 5)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(6, 6, 6)))

        self.mesh.add_face(self.vhandle[0], self.vhandle[1], self.vhandle[2])
        self.mesh.add_face(self.vhandle[0], self.vhandle[3], self.vhandle[4])
        self.mesh.add_face(self.vhandle[0], self.vhandle[5], self.vhandle[6])

        # non-manifold!
        invalid_fh = self.mesh.add_face(self.vhandle[3], self.vhandle[0],
                                        self.vhandle[4])

        # Check setup
        self.assertEqual(self.mesh.n_vertices(), 7)
        self.assertEqual(self.mesh.n_faces(), 3)
        self.assertEqual(invalid_fh, openmesh.TriMesh.InvalidFaceHandle)
Example #25
0
    def test_vv_iter(self):
        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, -1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, -1, 0)))

        # Add four faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[3])
        face_vhandles.append(self.vhandle[4])
        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[1])
        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[4])
        self.mesh.add_face(face_vhandles)

        # Test setup:
        #  0 ==== 2
        #  |\  0 /|
        #  | \  / |
        #  |2  1 3|
        #  | /  \ |
        #  |/  1 \|
        #  3 ==== 4
        # Starting vertex is 1->4

        # output from vv_it.current_halfedge_handle()
        current_halfedge_handles = [
            5, 0, 12, 11, 6, 1, 2, 15, 3, 4, 13, 7, 8, 9, 10, 14
        ]

        eh0 = []
        eh1 = []

        i = 0

        for v in self.mesh.vertices():
            for vv in self.mesh.vv(v):
                he = openmesh.HalfedgeHandle(current_halfedge_handles[i])
                eh0.append(self.mesh.edge_handle(he))
                i += 1
        for v in self.mesh.vertices():
            for he in self.mesh.voh(v):
                eh1.append(self.mesh.edge_handle(he))

        self.assertEqual(len(eh0), len(eh1))
        for i in range(len(eh0)):
            self.assertEqual(eh0[i], eh1[i])
Example #26
0
    def test_vf_iter_boundary(self):
        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(3, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(4, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, -1, 0)))

        # Add three faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[3])
        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[5])
        face_vhandles.append(self.vhandle[3])
        self.mesh.add_face(face_vhandles)

        # Test setup:
        #
        # 0 ------ 2 ------ 4
        #  \      / \      /
        #   \  0 /   \  1 /
        #    \  /     \  /
        #     1 ------- 3
        #      \       /
        #       \  2  /
        #        \   /
        #         \ /
        #          5

        # output from fe_it.current_halfedge_handle()
        current_halfedge_handles = [0, 2, 12, 4, 6, 8, 16, 10, 14]

        fh0 = []
        fh1 = []

        i = 0

        for v in self.mesh.vertices():
            for f in self.mesh.vf(v):
                he = openmesh.HalfedgeHandle(current_halfedge_handles[i])
                fh0.append(self.mesh.face_handle(he))
                i += 1
        for v in self.mesh.vertices():
            for f in self.mesh.vf(v):
                fh1.append(f)

        self.assertEqual(len(fh0), len(fh1))
        for i in range(len(fh0)):
            self.assertEqual(fh0[i], fh1[i])
Example #27
0
    def test_fe_iter(self):
        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, -1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(2, -1, 0)))

        # Add four faces
        face_vhandles = []

        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[2])
        self.mesh.add_face(face_vhandles)

        face_vhandles = []

        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[3])
        face_vhandles.append(self.vhandle[4])
        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[1])
        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[4])
        self.mesh.add_face(face_vhandles)

        # Test setup:
        #  0 ==== 2
        #  |\  0 /|
        #  | \  / |
        #  |2  1 3|
        #  | /  \ |
        #  |/  1 \|
        #  3 ==== 4
        # Starting vertex is 1->4

        # output from fe_it.current_halfedge_handle()
        current_halfedge_handles = [4, 0, 2, 10, 6, 8, 1, 12, 7, 14, 3, 11]

        heh0 = []
        heh1 = []

        i = 0

        for f in self.mesh.faces():
            for e in self.mesh.fe(f):
                heh0.append(
                    openmesh.HalfedgeHandle(current_halfedge_handles[i]))
                i += 1
        for f in self.mesh.faces():
            for he in self.mesh.fh(f):
                heh1.append(he)

        self.assertEqual(len(heh0), len(heh1))
        for i in range(len(heh0)):
            self.assertEqual(heh0[i], heh1[i])
    def test_vertex_property_copy_properties_int(self):
        # Add some vertices
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 0, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(0, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 1, 0)))
        self.vhandle.append(self.mesh.add_vertex(openmesh.Vec3d(1, 0, 0)))
        
        # Add two faces
        face_vhandles = []
        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[1])
        face_vhandles.append(self.vhandle[0])
        self.mesh.add_face(face_vhandles)
        
        face_vhandles = []
        face_vhandles.append(self.vhandle[2])
        face_vhandles.append(self.vhandle[0])
        face_vhandles.append(self.vhandle[3])
        self.mesh.add_face(face_vhandles)
        
        # Test setup:
        #  1 === 2
        #  |   / |
        #  |  /  |
        #  | /   |
        #  0 === 3
        
        # Check setup
        self.assertEqual(self.mesh.n_vertices(), 4)
        self.assertEqual(self.mesh.n_faces(), 2)
        
        # Add a vertex property
        intHandle = openmesh.VPropHandle()
        self.assertFalse(self.mesh.get_property_handle(intHandle, "intProp"))
        self.mesh.add_property(intHandle, "intProp")
        self.assertTrue(self.mesh.get_property_handle(intHandle, "intProp"))
        
        # Fill property
        for vh in self.mesh.vertices():
            self.mesh.set_property(intHandle, vh, vh.idx())
        
        # Check if property it is ok
        v_it = self.mesh.vertices()
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 0)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 1)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 2)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 3)
        
        # Check vertex positions
        v_it = self.mesh.vertices()
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 0)
        self.assertEqual(self.mesh.point(vh)[1], 0)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 0)
        self.assertEqual(self.mesh.point(vh)[1], 1)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 1)
        self.assertEqual(self.mesh.point(vh)[1], 1)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 1)
        self.assertEqual(self.mesh.point(vh)[1], 0)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        
        # Copy from vertex 1 to 0, with skipping build in properties
        self.mesh.copy_all_properties(self.vhandle[1], self.vhandle[0])
        v_it = self.mesh.vertices()
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 0)
        self.assertEqual(self.mesh.point(vh)[1], 0)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 0)
        self.assertEqual(self.mesh.point(vh)[1], 1)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 1)
        self.assertEqual(self.mesh.point(vh)[1], 1)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 1)
        self.assertEqual(self.mesh.point(vh)[1], 0)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        v_it = self.mesh.vertices()
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 1)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 1)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 2)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 3)

        # Copy from vertex 2 to 3, including build in properties
        self.mesh.copy_all_properties(self.vhandle[2], self.vhandle[3], True)
        v_it = self.mesh.vertices()
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 0)
        self.assertEqual(self.mesh.point(vh)[1], 0)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 0)
        self.assertEqual(self.mesh.point(vh)[1], 1)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 1)
        self.assertEqual(self.mesh.point(vh)[1], 1)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        vh = v_it.next()
        self.assertEqual(self.mesh.point(vh)[0], 1)
        self.assertEqual(self.mesh.point(vh)[1], 1)
        self.assertEqual(self.mesh.point(vh)[2], 0)
        v_it = self.mesh.vertices()
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 1)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 1)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 2)
        self.assertEqual(self.mesh.property(intHandle, v_it.next()), 2)
Example #29
0
    def test_write_triangle_vertex_integer_color(self):
        self.mesh.request_vertex_colors()

        options = openmesh.Options()
        options += openmesh.Options.VertexColor
        options += openmesh.Options.ColorFloat

        filename = "triangle-minimal-ColorsPerVertex.om"

        # Generate data
        v1 = self.mesh.add_vertex(openmesh.Vec3d(1.0, 0.0, 0.0))
        v2 = self.mesh.add_vertex(openmesh.Vec3d(0.0, 1.0, 0.0))
        v3 = self.mesh.add_vertex(openmesh.Vec3d(0.0, 0.0, 1.0))
        self.mesh.add_face(v1, v2, v3)

        c1 = openmesh.Vec4f(0.00, 0.00, 0.50, 1.00)
        c2 = openmesh.Vec4f(0.25, 0.00, 0.00, 1.00)
        c3 = openmesh.Vec4f(0.00, 0.75, 0.00, 1.00)

        self.mesh.set_color(v1, c1)
        self.mesh.set_color(v2, c2)
        self.mesh.set_color(v3, c3)

        # Save
        ok = openmesh.write_mesh(self.mesh, filename, options)
        self.assertTrue(ok)

        self.mesh.release_vertex_colors()

        # Load
        cmpMesh = openmesh.TriMesh()
        cmpMesh.request_vertex_colors()
        ok = openmesh.read_mesh(cmpMesh, filename, options)
        self.assertTrue(ok)

        self.assertTrue(cmpMesh.has_vertex_colors())

        # Compare
        self.assertEqual(self.mesh.n_vertices(), 3)
        self.assertEqual(self.mesh.n_edges(), 3)
        self.assertEqual(self.mesh.n_faces(), 1)

        self.assertEqual(cmpMesh.point(v1), openmesh.Vec3d(1.0, 0.0, 0.0))
        self.assertEqual(cmpMesh.point(v2), openmesh.Vec3d(0.0, 1.0, 0.0))
        self.assertEqual(cmpMesh.point(v3), openmesh.Vec3d(0.0, 0.0, 1.0))

        self.assertAlmostEqual(cmpMesh.color(v1)[0], c1[0], 2)
        self.assertAlmostEqual(cmpMesh.color(v1)[1], c1[1], 2)
        self.assertAlmostEqual(cmpMesh.color(v1)[2], c1[2], 2)
        self.assertAlmostEqual(cmpMesh.color(v1)[3], c1[3], 2)

        self.assertAlmostEqual(cmpMesh.color(v2)[0], c2[0], 2)
        self.assertAlmostEqual(cmpMesh.color(v2)[1], c2[1], 2)
        self.assertAlmostEqual(cmpMesh.color(v2)[2], c2[2], 2)
        self.assertAlmostEqual(cmpMesh.color(v2)[3], c2[3], 2)

        self.assertAlmostEqual(cmpMesh.color(v3)[0], c3[0], 2)
        self.assertAlmostEqual(cmpMesh.color(v3)[1], c3[1], 2)
        self.assertAlmostEqual(cmpMesh.color(v3)[2], c3[2], 2)
        self.assertAlmostEqual(cmpMesh.color(v3)[3], c3[3], 2)

        # Clean up
        cmpMesh.release_vertex_colors()
        os.remove(filename)
 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)