diff --git a/src/OpenMesh/Core/Mesh/PolyMeshT.hh b/src/OpenMesh/Core/Mesh/PolyMeshT.hh index 43c7a11e..1719a6bf 100644 --- a/src/OpenMesh/Core/Mesh/PolyMeshT.hh +++ b/src/OpenMesh/Core/Mesh/PolyMeshT.hh @@ -472,11 +472,11 @@ public: // calculates the dihedral angle on the edge _eh Scalar calc_dihedral_angle(EdgeHandle _eh) const - { return calc_dihedral_angle(halfedge_handle(_eh,0)); } + { return calc_dihedral_angle(this->halfedge_handle(_eh,0)); } /** tags an edge as a feature if its dihedral angle is larger than _angle_tresh returns the number of the found feature edges, requires edge_status property*/ - uint find_feature_edges(Scalar _angle_tresh = OpenMesh::deg_to_rad(44.0)); + unsigned int find_feature_edges(Scalar _angle_tresh = OpenMesh::deg_to_rad(44.0)); // --- misc --- /// Face split (= 1-to-n split) diff --git a/src/OpenMesh/Tools/Subdivider/Adaptive/Composite/RulesT.hh b/src/OpenMesh/Tools/Subdivider/Adaptive/Composite/RulesT.hh index 4ad2fe1b..f3ff7eee 100644 --- a/src/OpenMesh/Tools/Subdivider/Adaptive/Composite/RulesT.hh +++ b/src/OpenMesh/Tools/Subdivider/Adaptive/Composite/RulesT.hh @@ -101,7 +101,7 @@ public: void raise(typename M::FaceHandle& _fh, state_t _target_state); void raise(typename M::VertexHandle& _vh, state_t _target_state); - MIPS_WARN_WA(Edge); // avoid warning + MIPS_WARN_WA(Edge) // avoid warning }; @@ -153,8 +153,8 @@ public: VF(M& _mesh) : Inherited(_mesh) {} void raise(typename M::FaceHandle& _fh, state_t _target_state); - MIPS_WARN_WA(Edge); - MIPS_WARN_WA(Vertex); + MIPS_WARN_WA(Edge) + MIPS_WARN_WA(Vertex) }; @@ -175,8 +175,8 @@ public: FF(M& _mesh) : Inherited(_mesh) {} void raise(typename M::FaceHandle& _fh, state_t _target_state); - MIPS_WARN_WA(Vertex); // avoid warning - MIPS_WARN_WA(Edge ); // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning + MIPS_WARN_WA(Edge ) // avoid warning }; @@ -197,8 +197,8 @@ public: FFc(M& _mesh) : Inherited(_mesh) {} void raise(typename M::FaceHandle& _fh, state_t _target_state); - MIPS_WARN_WA(Vertex); // avoid warning - MIPS_WARN_WA(Edge ); // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning + MIPS_WARN_WA(Edge ) // avoid warning }; @@ -219,8 +219,8 @@ public: FV(M& _mesh) : Inherited(_mesh) {} void raise(typename M::VertexHandle& _vh, state_t _target_state); - MIPS_WARN_WA(Face); // avoid warning - MIPS_WARN_WA(Edge); // avoid warning + MIPS_WARN_WA(Face) // avoid warning + MIPS_WARN_WA(Edge) // avoid warning }; @@ -241,8 +241,8 @@ public: FVc(M& _mesh) : Inherited(_mesh) { init_coeffs(50); } void raise(typename M::VertexHandle& _vh, state_t _target_state); - MIPS_WARN_WA(Face); // avoid warning - MIPS_WARN_WA(Edge); // avoid warning + MIPS_WARN_WA(Face) // avoid warning + MIPS_WARN_WA(Edge) // avoid warning static void init_coeffs(size_t _max_valence); static const std::vector& coeffs() { return coeffs_; } @@ -278,8 +278,8 @@ public: VV(M& _mesh) : Inherited(_mesh) {} void raise(typename M::VertexHandle& _vh, state_t _target_state); - MIPS_WARN_WA(Face); // avoid warning - MIPS_WARN_WA(Edge); // avoid warning + MIPS_WARN_WA(Face) // avoid warning + MIPS_WARN_WA(Edge) // avoid warning }; @@ -300,8 +300,8 @@ public: VVc(M& _mesh) : Inherited(_mesh) {} void raise(typename M::VertexHandle& _vh, state_t _target_state); - MIPS_WARN_WA(Face); // avoid warning - MIPS_WARN_WA(Edge); // avoid warning + MIPS_WARN_WA(Face) // avoid warning + MIPS_WARN_WA(Edge) // avoid warning }; @@ -322,8 +322,8 @@ public: VE(M& _mesh) : Inherited(_mesh) {} void raise(typename M::EdgeHandle& _eh, state_t _target_state); - MIPS_WARN_WA(Face ); // avoid warning - MIPS_WARN_WA(Vertex); // avoid warning + MIPS_WARN_WA(Face ) // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning }; @@ -344,8 +344,8 @@ public: VdE(M& _mesh) : Inherited(_mesh) {} void raise(typename M::EdgeHandle& _eh, state_t _target_state); - MIPS_WARN_WA(Face ); // avoid warning - MIPS_WARN_WA(Vertex); // avoid warning + MIPS_WARN_WA(Face ) // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning }; @@ -366,8 +366,8 @@ public: VdEc(M& _mesh) : Inherited(_mesh) {} void raise(typename M::EdgeHandle& _eh, state_t _target_state); - MIPS_WARN_WA(Face ); // avoid warning - MIPS_WARN_WA(Vertex); // avoid warning + MIPS_WARN_WA(Face ) // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning }; @@ -388,8 +388,8 @@ public: EV(M& _mesh) : Inherited(_mesh) {} void raise(typename M::VertexHandle& _vh, state_t _target_state); - MIPS_WARN_WA(Face); // avoid warning - MIPS_WARN_WA(Edge); // avoid warning + MIPS_WARN_WA(Face) // avoid warning + MIPS_WARN_WA(Edge) // avoid warning }; @@ -411,8 +411,8 @@ public: EVc(M& _mesh) : Inherited(_mesh) { init_coeffs(50); } void raise(typename M::VertexHandle& _vh, state_t _target_state); - MIPS_WARN_WA(Face); // avoid warning - MIPS_WARN_WA(Edge); // avoid warning + MIPS_WARN_WA(Face) // avoid warning + MIPS_WARN_WA(Edge) // avoid warning static void init_coeffs(size_t _max_valence); static const std::vector& coeffs() { return coeffs_; } @@ -447,8 +447,8 @@ public: EF(M& _mesh) : Inherited(_mesh) {} void raise(typename M::FaceHandle& _fh, state_t _target_state); - MIPS_WARN_WA(Edge ); // avoid warning - MIPS_WARN_WA(Vertex); // avoid warning + MIPS_WARN_WA(Edge ) // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning }; @@ -469,8 +469,8 @@ public: FE(M& _mesh) : Inherited(_mesh) {} void raise(typename M::EdgeHandle& _eh, state_t _target_state); - MIPS_WARN_WA(Face ); // avoid warning - MIPS_WARN_WA(Vertex); // avoid warning + MIPS_WARN_WA(Face ) // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning }; @@ -491,8 +491,8 @@ public: EdE(M& _mesh) : Inherited(_mesh) {} void raise(typename M::EdgeHandle& _eh, state_t _target_state); - MIPS_WARN_WA(Face ); // avoid warning - MIPS_WARN_WA(Vertex); // avoid warning + MIPS_WARN_WA(Face ) // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning }; @@ -513,8 +513,8 @@ public: EdEc(M& _mesh) : Inherited(_mesh) {} void raise(typename M::EdgeHandle& _eh, state_t _target_state); - MIPS_WARN_WA(Face ); // avoid warning - MIPS_WARN_WA(Vertex); // avoid warning + MIPS_WARN_WA(Face ) // avoid warning + MIPS_WARN_WA(Vertex) // avoid warning }; // ---------------------------------------------------------------------------- diff --git a/src/Unittests/unittests_trimesh_others.hh b/src/Unittests/unittests_trimesh_others.hh index 27ad649e..b5bbabd7 100644 --- a/src/Unittests/unittests_trimesh_others.hh +++ b/src/Unittests/unittests_trimesh_others.hh @@ -113,4 +113,65 @@ TEST_F(OpenMeshOthers, IsEstimatedFeatureEdge) { } +/* + * Checking for feature edges based on angle + */ +TEST_F(OpenMeshOthers, CalcDihedralAngre ) { + + mesh_.clear(); + + /* Test setup: + * + * 1 -- 2 + * | / | + * | / | + * 0 -- 3 + */ + + // Add some vertices + Mesh::VertexHandle vhandle[4]; + + vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 0, 0)); + vhandle[1] = mesh_.add_vertex(Mesh::Point(0, 1, 0)); + vhandle[2] = mesh_.add_vertex(Mesh::Point(1, 1, 0)); + vhandle[3] = mesh_.add_vertex(Mesh::Point(1, 0, 0)); + + // Add four faces + std::vector face_vhandles; + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[2]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[2]); + face_vhandles.push_back(vhandle[3]); + mesh_.add_face(face_vhandles); + + // =============================================== + // Setup complete + // =============================================== + + Mesh::HalfedgeHandle he = mesh_.halfedge_handle(4); + + EXPECT_EQ( 0 , mesh_.to_vertex_handle(he).idx() ) << "Wrong halfedge!" << std::endl; + EXPECT_EQ( 2 , mesh_.from_vertex_handle(he).idx() ) << "Wrong halfedge!" << std::endl; + EXPECT_EQ( 2 , mesh_.edge_handle(he).idx() ) << "Wrong Edge!" << std::endl; + + Mesh::EdgeHandle eh = mesh_.edge_handle(he); + EXPECT_EQ( 0.0 , mesh_.calc_dihedral_angle(eh) ) << "Wrong Dihedral angle!" << std::endl; + + // Modify point + Mesh::Point tmp = ( Mesh::Point(0.0, 0.0, -1.0) + Mesh::Point(1.0, 1.0, -1.0) ) * 0.5; + mesh_.point(vhandle[2]) = tmp; + + double difference = fabs( 1.36944 - mesh_.calc_dihedral_angle(eh) ); + + EXPECT_TRUE( (difference < 0.00001 ) ) << "Wrong Dihedral angle, Difference is to big!" << std::endl; + +} + #endif // INCLUDE GUARD