Merge branch 'previous_halfedge' into 'master'

Previous halfedge

See merge request OpenMesh/OpenMesh!338
This commit is contained in:
Jan Möbius
2023-08-25 08:38:07 +00:00
5 changed files with 91 additions and 7 deletions

View File

@@ -18,6 +18,7 @@
<ul>
<li>legacy vector min max now take const args to avoid matching std implementations</li>
<li>Fixed several warnings</li>
<li>Make Previous Halfedge Attribute optional again </li>
</ul>
<b>Tools</b>

View File

@@ -97,6 +97,7 @@ struct ArrayItems
//TODO: should be selected with config.h define
typedef Halfedge_with_prev Halfedge;
typedef Halfedge_without_prev HalfedgeNoPrev;
typedef GenProg::Bool2Type<true> HasPrevHalfedge;
//-------------------------------------------------------- internal edge type

View File

@@ -75,10 +75,30 @@ public:
//---------------------------------------------------------------- item types
enum Attribs {
VAttribs = MeshItems::VAttribs,
HAttribs = MeshItems::HAttribs,
EAttribs = MeshItems::EAttribs,
FAttribs = MeshItems::FAttribs
};
typedef MeshItems MeshItemsT;
typedef Connectivity ConnectivityT;
typedef typename Connectivity::Vertex Vertex;
typedef typename Connectivity::Halfedge Halfedge;
//Define Halfedge based on PrevHalfedge.
typedef typename GenProg::IF<
(bool)(HAttribs & Attributes::PrevHalfedge),
typename Connectivity::Halfedge,
typename Connectivity::HalfedgeNoPrev
>::Result Halfedge;
typedef typename GenProg::IF<
(bool)(HAttribs & Attributes::PrevHalfedge),
GenProg::Bool2Type<true>,
GenProg::Bool2Type<false>
>::Result HasPrevHalfedge;
//typedef typename Connectivity::Halfedge Halfedge;
typedef typename Connectivity::Edge Edge;
typedef typename Connectivity::Face Face;
@@ -98,12 +118,6 @@ public:
typedef AttribKernelT<MeshItems,Connectivity> AttribKernel;
enum Attribs {
VAttribs = MeshItems::VAttribs,
HAttribs = MeshItems::HAttribs,
EAttribs = MeshItems::EAttribs,
FAttribs = MeshItems::FAttribs
};
typedef VPropHandleT<VertexData> DataVPropHandle;
typedef HPropHandleT<HalfedgeData> DataHPropHandle;

View File

@@ -39,6 +39,7 @@ unittests_stripifier.cc
unittests_subdivider_adaptive.cc
unittests_subdivider_uniform.cc
unittests_trimesh_circulator_current_halfedge_handle_replacement.cc
unittests_traits.cc
unittests_trimesh_circulator_face_edge.cc
unittests_trimesh_circulator_face_face.cc
unittests_trimesh_circulator_face_halfedge.cc

View File

@@ -0,0 +1,67 @@
#include <gtest/gtest.h>
#include <Unittests/unittests_common.hh>
#include <iostream>
namespace {
class OpenMeshPrevHalfedge : 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...
}
// Member already defined in OpenMeshBase
//Mesh mesh_;
};
/*
* ====================================================================
* Define tests below
* ====================================================================
*/
/* creates a Halfedge WITHOUT the PrevHalfedge Attribute
*/
TEST_F(OpenMeshPrevHalfedge, RemovePrevHalfedge) {
mesh_.clear();
struct MeshTraits : OpenMesh::DefaultTraits {
HalfedgeAttributes(0);
};
using MeshT = OpenMesh::TriMesh_ArrayKernelT<MeshTraits>;
// Check if Prev Halfedge is referenced
EXPECT_EQ(12u, sizeof(MeshT::Halfedge) ) << "Wrong size of Halfedge";
EXPECT_EQ(0u, MeshT::HasPrevHalfedge::my_bool ) << "Attribute HasPrevHalfedge is wrong";
}
/* creates a Halfedge WITH the PrevHalfedge Attribute
*/
TEST_F(OpenMeshPrevHalfedge, HavePrevHalfedge) {
mesh_.clear();
struct MeshTraits : OpenMesh::DefaultTraits {
//HalfedgeAttributes(0);
};
using MeshT = OpenMesh::TriMesh_ArrayKernelT<MeshTraits>;
// Check if Prev Halfedge is referenced
EXPECT_EQ(16u, sizeof(MeshT::Halfedge) ) << "Wrong size of Halfedge";
EXPECT_EQ(1u, MeshT::HasPrevHalfedge::my_bool ) << "Attribute HasPrevHalfedge is wrong";
}
}