Python source
git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@1171 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
129
src/Python/Unittests/test_trimesh_others.py
Normal file
129
src/Python/Unittests/test_trimesh_others.py
Normal file
@@ -0,0 +1,129 @@
|
||||
import unittest
|
||||
import openmesh
|
||||
|
||||
from math import pi, fabs
|
||||
|
||||
class Others(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.mesh = openmesh.TriMesh()
|
||||
self.vhandle = []
|
||||
|
||||
def test_is_estimated_feature_edge(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(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)
|
||||
|
||||
# ===============================================
|
||||
# Setup complete
|
||||
# ===============================================
|
||||
|
||||
|
||||
# Check one Request only vertex normals
|
||||
# Face normals are required for vertex and halfedge normals, so
|
||||
# that prevent access to non existing properties are in place
|
||||
|
||||
self.mesh.request_vertex_normals()
|
||||
self.mesh.request_halfedge_normals()
|
||||
self.mesh.request_face_normals()
|
||||
|
||||
# Automatically compute all normals
|
||||
# As only vertex normals are requested and no face normals, this will compute nothing.
|
||||
self.mesh.update_normals()
|
||||
|
||||
he = self.mesh.halfedges().__next__()
|
||||
|
||||
self.assertTrue(self.mesh.is_estimated_feature_edge(he, 0.0))
|
||||
self.assertTrue(self.mesh.is_estimated_feature_edge(he, 0.125 * pi))
|
||||
self.assertTrue(self.mesh.is_estimated_feature_edge(he, 0.250 * pi))
|
||||
self.assertTrue(self.mesh.is_estimated_feature_edge(he, 0.375 * pi))
|
||||
self.assertTrue(self.mesh.is_estimated_feature_edge(he, 0.500 * pi))
|
||||
self.assertFalse(self.mesh.is_estimated_feature_edge(he, 0.625 * pi))
|
||||
self.assertFalse(self.mesh.is_estimated_feature_edge(he, 0.750 * pi))
|
||||
self.assertFalse(self.mesh.is_estimated_feature_edge(he, 0.875 * pi))
|
||||
self.assertFalse(self.mesh.is_estimated_feature_edge(he, 1.000 * pi))
|
||||
|
||||
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)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
suite = unittest.TestLoader().loadTestsFromTestCase(Others)
|
||||
unittest.TextTestRunner(verbosity=2).run(suite)
|
||||
Reference in New Issue
Block a user