Merge branch 'previous_halfedge' into 'master'
Previous halfedge See merge request OpenMesh/OpenMesh!338
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
67
src/Unittests/unittests_traits.cc
Normal file
67
src/Unittests/unittests_traits.cc
Normal 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";
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user