130 lines
4.5 KiB
Python
130 lines
4.5 KiB
Python
|
|
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)
|