From e95aeec855f971e8cc770dfe9f3a7177d6ba17c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Wed, 26 Apr 2017 12:46:30 +0200 Subject: [PATCH 1/5] Respect vector Traits in Quadric --- src/OpenMesh/Core/Geometry/QuadricT.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenMesh/Core/Geometry/QuadricT.hh b/src/OpenMesh/Core/Geometry/QuadricT.hh index fdec0c9c..8d2943ae 100644 --- a/src/OpenMesh/Core/Geometry/QuadricT.hh +++ b/src/OpenMesh/Core/Geometry/QuadricT.hh @@ -218,7 +218,7 @@ public: template Scalar operator()(const _Vec& _v) const { - return evaluate(_v, GenProg::Int2Type<_Vec::size_>()); + return evaluate(_v, GenProg::Int2Type::size_>()); } Scalar a() const { return a_; } From d5582628dc417f75a9471bc76d6b3104aab00548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Thu, 27 Apr 2017 07:53:14 +0200 Subject: [PATCH 2/5] Updated changelog --- Doc/changelog.docu | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Doc/changelog.docu b/Doc/changelog.docu index a798ae16..b7442bcb 100644 --- a/Doc/changelog.docu +++ b/Doc/changelog.docu @@ -18,8 +18,15 @@
  • Implemented a cast from polyMesh to Mesh and vice versa using static_cast(polymeshInstance) or static_cast(trimeshInstance)
  • make all negative handles invalid, not just -1
  • Several warnings fixed (Including the checked iterators)
  • +
  • fix halfedge indices in OpenMeshTrimeshCirculatorHalfedgeLoop CWAndCCWCheck
  • +
  • Fix wrong behaviour of HalfedgeLoopIterators by changing the template parameter
  • +
  • Added 1-4 triangle split funtion(splits all edges at Midpoints)
  • +Utils +
      +
    • enable c++11 features of many classes for Visual Studio 2013
    • +
    Tools
      @@ -30,6 +37,7 @@ Geometry
      • QuadricT: implement Q+Q and Q*scalar operators for convenience.
      • +
      • Vector11T: Make converting ctor only accept 2 arguments
      @@ -41,6 +49,9 @@
    • OBJ Loader: fixed handling of negative indices in OBJ loader
    • OM Writer: Fixed OMWriter when no faces are available (Thanks to Jamie Kydd for the patch)
    • OM Writer: Added Mark to the format header to identify end of stream correctly (Thanks to Jamie Kydd for the patch)
    • +
    • PLY Reader: Skip reading extra elements after face
    • +
    • PLY Reader: Return error when reaching EOF
    • +
    Unittests From 8e355069cd156dcb47d17f30e4029c9139b5be9f Mon Sep 17 00:00:00 2001 From: Martin Schultz Date: Tue, 2 May 2017 14:18:13 +0200 Subject: [PATCH 3/5] changed the path for the cmake finder to lookup gtest fixes #43 --- cmake/FindGoogleTest.cmake | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/FindGoogleTest.cmake b/cmake/FindGoogleTest.cmake index d75ba753..6918c7d9 100644 --- a/cmake/FindGoogleTest.cmake +++ b/cmake/FindGoogleTest.cmake @@ -45,7 +45,7 @@ else(GTEST_INCLUDE_DIRS AND GTEST_LIBRARIES AND GTEST_MAIN_LIBRARIES) ~/sw/gtest-1.8.0/include ~/sw/gtest-1.7.0/include ~/sw/gtest/include - /ACG/acgdev/gcc-4.7-x86_64/gtest/include + /ACG/acgdev/gcc-x86_64/gtest/include /opt/local/include /usr/local/include /usr/include @@ -56,7 +56,7 @@ else(GTEST_INCLUDE_DIRS AND GTEST_LIBRARIES AND GTEST_MAIN_LIBRARIES) ~/sw/gtest-1.8.0/lib ~/sw/gtest-1.7.0/lib ~/sw/gtest/lib - /ACG/acgdev/gcc-4.7-x86_64/gtest/lib + /ACG/acgdev/gcc-x86_64/gtest/lib /opt/local/lib /usr/local/lib /usr/lib @@ -67,7 +67,7 @@ else(GTEST_INCLUDE_DIRS AND GTEST_LIBRARIES AND GTEST_MAIN_LIBRARIES) ~/sw/gtest-1.8.0/lib ~/sw/gtest-1.7.0/lib ~/sw/gtest/lib - /ACG/acgdev/gcc-4.7-x86_64/gtest/lib + /ACG/acgdev/gcc-x86_64/gtest/lib /opt/local/lib /usr/local/lib /usr/lib From fba2f98c8cd36ebf2c2d641c1f742a303ed7a8ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Tue, 23 May 2017 16:27:03 +0200 Subject: [PATCH 4/5] Boost range support (Thanks to Bastian Pranzas for the patch) --- src/OpenMesh/Core/Mesh/PolyConnectivity.hh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/OpenMesh/Core/Mesh/PolyConnectivity.hh b/src/OpenMesh/Core/Mesh/PolyConnectivity.hh index 5dfc9daf..3a93941f 100644 --- a/src/OpenMesh/Core/Mesh/PolyConnectivity.hh +++ b/src/OpenMesh/Core/Mesh/PolyConnectivity.hh @@ -1123,6 +1123,9 @@ public: ITER_TYPE (CONTAINER_TYPE::*end_fn)() const> class EntityRange { public: + typedef ITER_TYPE iterator; + typedef ITER_TYPE const_iterator; + EntityRange(CONTAINER_TYPE &container) : container_(container) {} ITER_TYPE begin() const { return (container_.*begin_fn)(); } ITER_TYPE end() const { return (container_.*end_fn)(); } @@ -1184,12 +1187,15 @@ public: ITER_TYPE (CONTAINER_TYPE::*end_fn)(CENTER_ENTITY_TYPE) const> class CirculatorRange { public: + typedef ITER_TYPE iterator; + typedef ITER_TYPE const_iterator; + CirculatorRange( const CONTAINER_TYPE &container, CENTER_ENTITY_TYPE center) : container_(container), center_(center) {} - ITER_TYPE begin() { return (container_.*begin_fn)(center_); } - ITER_TYPE end() { return (container_.*end_fn)(center_); } + ITER_TYPE begin() const { return (container_.*begin_fn)(center_); } + ITER_TYPE end() const { return (container_.*end_fn)(center_); } private: const CONTAINER_TYPE &container_; From 5de6021880c4b26b5dd8aa4b691f2a23b3eaeb61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Mon, 19 Jun 2017 16:05:14 +0200 Subject: [PATCH 5/5] Added a combined unittest for iterator and circulator --- src/Unittests/unittests_cpp_11_features.cc | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/src/Unittests/unittests_cpp_11_features.cc b/src/Unittests/unittests_cpp_11_features.cc index c6d673e4..fa992673 100644 --- a/src/Unittests/unittests_cpp_11_features.cc +++ b/src/Unittests/unittests_cpp_11_features.cc @@ -249,6 +249,72 @@ TEST_F(OpenMesh_Poly, cpp11_vvrange_test) { EXPECT_EQ(iteration_counter,4); } + +/** + * @brief Test combined vertex iterator and vertex vertex iter. + */ +TEST_F(OpenMesh_Triangle, cpp11_test_enumerate_combined_run) { + //check empty vv_range + mesh_.clear(); + Mesh::VertexHandle vhandle[5]; + vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0)); + for(Mesh::VertexHandle t : mesh_.vv_range(vhandle[0])) + { + FAIL() << "The vvrange for a single vertex in a TriMesh is not empty"; + EXPECT_TRUE(t.is_valid()); // Just so we don't get an unused variable warning. + } + + //add more vertices + vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0)); + vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 3)); + vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 4)); + vhandle[4] = mesh_.add_vertex(Mesh::Point(2,3, 5)); + + // Add 4 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[1]); + face_vhandles.push_back(vhandle[3]); + face_vhandles.push_back(vhandle[4]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[0]); + face_vhandles.push_back(vhandle[3]); + face_vhandles.push_back(vhandle[1]); + mesh_.add_face(face_vhandles); + + face_vhandles.clear(); + + face_vhandles.push_back(vhandle[2]); + face_vhandles.push_back(vhandle[1]); + face_vhandles.push_back(vhandle[4]); + mesh_.add_face(face_vhandles); + + Mesh::Point p = Mesh::Point(0,0,0); + for ( auto vh : mesh_.vertices() ) { + + for ( auto vv_it : mesh_.vv_range(vh) ) { + p += mesh_.point(vv_it); + } + + } + + EXPECT_EQ(p[0],16); + EXPECT_EQ(p[1],12); + EXPECT_EQ(p[2],36); + +} + + #endif }