diff --git a/Doc/changelog.docu b/Doc/changelog.docu
index c6ed2916..00fbc7f5 100644
--- a/Doc/changelog.docu
+++ b/Doc/changelog.docu
@@ -18,6 +18,7 @@
- TriConnectivity: Added two functions split_edge and split_edge_copy to mask the PolyConnectivity functions of the same name (Prevents creation of valence 2 vertices on trimeshes)
- PolyConnectivity: Fixed PolyConnectivity is_collapse_ok, missing some configurations (Thanks to Simon Flöry for the patch)
+- Connectivity type is now set at compile time
IO
diff --git a/src/OpenMesh/Core/Mesh/PolyMeshT.hh b/src/OpenMesh/Core/Mesh/PolyMeshT.hh
index 88afd9fc..e21fc5d7 100644
--- a/src/OpenMesh/Core/Mesh/PolyMeshT.hh
+++ b/src/OpenMesh/Core/Mesh/PolyMeshT.hh
@@ -60,6 +60,7 @@
#include
#include
#include
+#include
#include
@@ -95,11 +96,12 @@ public:
//--- item types ---
//@{
- /// Determine whether this is a PolyMeshT or TriMeshT ( This function does not check the per face vertex count! It only checks if the datatype is PolyMeshT or TriMeshT )
+ /// Determine whether this is a PolyMeshT or TriMeshT (This function does not check the per face vertex count! It only checks if the datatype is PolyMeshT or TriMeshT)
+ static constexpr bool is_polymesh() { return true; }
+ static constexpr bool is_trimesh() { return false; }
+ using ConnectivityTag = PolyConnectivityTag;
enum { IsPolyMesh = 1 };
enum { IsTriMesh = 0 };
- static bool is_polymesh() { return true; }
- static bool is_trimesh() { return false; }
//@}
/// \name Mesh Items
diff --git a/src/OpenMesh/Core/Mesh/Tags.hh b/src/OpenMesh/Core/Mesh/Tags.hh
new file mode 100644
index 00000000..ba3d9a96
--- /dev/null
+++ b/src/OpenMesh/Core/Mesh/Tags.hh
@@ -0,0 +1,52 @@
+/* ========================================================================= *
+ * *
+ * OpenMesh *
+ * Copyright (c) 2001-2015, RWTH-Aachen University *
+ * Department of Computer Graphics and Multimedia *
+ * All rights reserved. *
+ * www.openmesh.org *
+ * *
+ *---------------------------------------------------------------------------*
+ * This file is part of OpenMesh. *
+ *---------------------------------------------------------------------------*
+ * *
+ * Redistribution and use in source and binary forms, with or without *
+ * modification, are permitted provided that the following conditions *
+ * are met: *
+ * *
+ * 1. Redistributions of source code must retain the above copyright notice, *
+ * this list of conditions and the following disclaimer. *
+ * *
+ * 2. Redistributions in binary form must reproduce the above copyright *
+ * notice, this list of conditions and the following disclaimer in the *
+ * documentation and/or other materials provided with the distribution. *
+ * *
+ * 3. Neither the name of the copyright holder nor the names of its *
+ * contributors may be used to endorse or promote products derived from *
+ * this software without specific prior written permission. *
+ * *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
+ * *
+ * ========================================================================= */
+
+#pragma once
+
+namespace OpenMesh {
+
+/// Connectivity tag indicating that the tagged mesh has polygon connectivity.
+struct PolyConnectivityTag {};
+/// Connectivity tag indicating that the tagged mesh has triangle connectivity.
+struct TriConnectivityTag {};
+
+} // namespace OpenMesh
+
diff --git a/src/OpenMesh/Core/Mesh/TriMeshT.hh b/src/OpenMesh/Core/Mesh/TriMeshT.hh
index 58534288..582f71f5 100644
--- a/src/OpenMesh/Core/Mesh/TriMeshT.hh
+++ b/src/OpenMesh/Core/Mesh/TriMeshT.hh
@@ -58,6 +58,7 @@
#include
#include
+#include
#include
@@ -98,11 +99,12 @@ public:
typedef PolyMeshT PolyMesh;
//@{
- /// Determine whether this is a PolyMeshT or TriMeshT ( This function does not check the per face vertex count! It only checks if the datatype is PolyMeshT or TriMeshT )
+ /// Determine whether this is a PolyMeshT or TriMeshT (This function does not check the per face vertex count! It only checks if the datatype is PolyMeshT or TriMeshT)
+ static constexpr bool is_polymesh() { return false; }
+ static constexpr bool is_trimesh() { return true; }
+ using ConnectivityTag = TriConnectivityTag;
enum { IsPolyMesh = 0 };
enum { IsTriMesh = 1 };
- static bool is_polymesh() { return false; }
- static bool is_trimesh() { return true; }
//@}
//--- items ---
diff --git a/src/Unittests/unittests_mesh_type.cc b/src/Unittests/unittests_mesh_type.cc
new file mode 100644
index 00000000..309567d0
--- /dev/null
+++ b/src/Unittests/unittests_mesh_type.cc
@@ -0,0 +1,67 @@
+#include
+
+#include
+
+
+namespace {
+
+
+class OpenMeshTypeTest_Poly : public OpenMeshBasePoly {
+
+ protected:
+
+ // This function is called before each test is run
+ virtual void SetUp() {
+
+ // Do some initial stuff with the member data here...
+ }
+
+ // This function is called after all tests are through
+ virtual void TearDown() {
+
+ // Do some final stuff with the member data here...
+ }
+};
+
+class OpenMeshTypeTest_Triangle : public OpenMeshBase {
+
+ protected:
+
+ // This function is called before each test is run
+ virtual void SetUp() {
+
+ // Do some initial stuff with the member data here...
+ }
+
+ // This function is called after all tests are through
+ virtual void TearDown() {
+
+ // Do some final stuff with the member data here...
+ }
+
+};
+
+
+/*
+ * ====================================================================
+ * Define tests below
+ * ====================================================================
+ */
+
+TEST_F(OpenMeshTypeTest_Triangle, testTypeFunctions) {
+
+
+ EXPECT_TRUE(mesh_.is_trimesh()) << "Type Error!";
+ EXPECT_FALSE(mesh_.is_polymesh()) << "Type Error!";
+}
+
+
+TEST_F(OpenMeshTypeTest_Poly, testTypeFunctions) {
+
+
+ EXPECT_FALSE(mesh_.is_trimesh()) << "Type Error!";
+ EXPECT_TRUE(mesh_.is_polymesh()) << "Type Error!";
+}
+
+
+}