Some documentation and cleanup for the add_face functions.
Unittests for add_face on triangle and quad meshes. git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@600 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
@@ -51,6 +51,7 @@ const PolyConnectivity::EdgeHandle PolyConnectivity::InvalidEdgeHandle;
|
|||||||
const PolyConnectivity::FaceHandle PolyConnectivity::InvalidFaceHandle;
|
const PolyConnectivity::FaceHandle PolyConnectivity::InvalidFaceHandle;
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
PolyConnectivity::HalfedgeHandle
|
PolyConnectivity::HalfedgeHandle
|
||||||
PolyConnectivity::find_halfedge(VertexHandle _start_vh, VertexHandle _end_vh ) const
|
PolyConnectivity::find_halfedge(VertexHandle _start_vh, VertexHandle _end_vh ) const
|
||||||
{
|
{
|
||||||
@@ -279,6 +280,26 @@ PolyConnectivity::add_face(const VertexHandle* _vertex_handles, size_t _vhs_size
|
|||||||
return fh;
|
return fh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FaceHandle PolyConnectivity::add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3)
|
||||||
|
{
|
||||||
|
VertexHandle vhs[4] = { _vh0, _vh1, _vh2, _vh3 };
|
||||||
|
return add_face(vhs, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FaceHandle PolyConnectivity::add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2)
|
||||||
|
{
|
||||||
|
VertexHandle vhs[3] = { _vh0, _vh1, _vh2 };
|
||||||
|
return add_face(vhs, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FaceHandle PolyConnectivity::add_face(const std::vector<VertexHandle>& _vhandles)
|
||||||
|
{ return add_face(&_vhandles.front(), _vhandles.size()); }
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -187,8 +187,7 @@ public:
|
|||||||
*
|
*
|
||||||
* @param _vhandles sorted list of vertex handles (also defines order in which the vertices are added to the face)
|
* @param _vhandles sorted list of vertex handles (also defines order in which the vertices are added to the face)
|
||||||
*/
|
*/
|
||||||
FaceHandle add_face(const std::vector<VertexHandle>& _vhandles)
|
FaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
|
||||||
{ return add_face(&_vhandles.front(), _vhandles.size()); }
|
|
||||||
|
|
||||||
|
|
||||||
/** \brief Add and connect a new face
|
/** \brief Add and connect a new face
|
||||||
@@ -200,11 +199,7 @@ public:
|
|||||||
* @param _vh1 Second vertex handle
|
* @param _vh1 Second vertex handle
|
||||||
* @param _vh2 Third vertex handle
|
* @param _vh2 Third vertex handle
|
||||||
*/
|
*/
|
||||||
FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2)
|
FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
|
||||||
{
|
|
||||||
VertexHandle vhs[3] = { _vh0, _vh1, _vh2 };
|
|
||||||
return add_face(vhs, 3);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief Add and connect a new face
|
/** \brief Add and connect a new face
|
||||||
*
|
*
|
||||||
@@ -216,11 +211,7 @@ public:
|
|||||||
* @param _vh2 Third vertex handle
|
* @param _vh2 Third vertex handle
|
||||||
* @param _vh3 Fourth vertex handle
|
* @param _vh3 Fourth vertex handle
|
||||||
*/
|
*/
|
||||||
FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3)
|
FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2, VertexHandle _vh3);
|
||||||
{
|
|
||||||
VertexHandle vhs[4] = { _vh0, _vh1, _vh2, _vh3 };
|
|
||||||
return add_face(vhs, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** \brief Add and connect a new face
|
/** \brief Add and connect a new face
|
||||||
*
|
*
|
||||||
@@ -231,6 +222,7 @@ public:
|
|||||||
* @param _vhs_size number of vertex handles in the array
|
* @param _vhs_size number of vertex handles in the array
|
||||||
*/
|
*/
|
||||||
FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
|
FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
/// \name Deleting mesh items and other connectivity/topology modifications
|
/// \name Deleting mesh items and other connectivity/topology modifications
|
||||||
|
|||||||
@@ -82,6 +82,23 @@ TriConnectivity::add_face(const VertexHandle* _vertex_handles, size_t _vhs_size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
FaceHandle TriConnectivity::add_face(const std::vector<VertexHandle>& _vhandles)
|
||||||
|
{
|
||||||
|
return add_face(&_vhandles.front(), _vhandles.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
FaceHandle TriConnectivity::add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2)
|
||||||
|
{
|
||||||
|
VertexHandle vhs[3] = { _vh0, _vh1, _vh2 };
|
||||||
|
return PolyConnectivity::add_face(vhs, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
bool TriConnectivity::is_collapse_ok(HalfedgeHandle v0v1)
|
bool TriConnectivity::is_collapse_ok(HalfedgeHandle v0v1)
|
||||||
{
|
{
|
||||||
// is the edge already deleted?
|
// is the edge already deleted?
|
||||||
|
|||||||
@@ -72,20 +72,40 @@ public:
|
|||||||
|
|
||||||
/** \name Addding items to a mesh
|
/** \name Addding items to a mesh
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//@{
|
//@{
|
||||||
/** Override OpenMesh::Mesh::PolyMeshT::add_face(). Faces that aren't
|
|
||||||
triangles will be triangulated and added. In this case an
|
/** \brief Add a face with arbitrary valence to the triangle mesh
|
||||||
invalid face handle will be returned. */
|
*
|
||||||
FaceHandle add_face(const std::vector<VertexHandle>& _vhandles)
|
* Override OpenMesh::Mesh::PolyMeshT::add_face(). Faces that aren't
|
||||||
{ return add_face(&_vhandles.front(), _vhandles.size()); }
|
* triangles will be triangulated and added. In this case an
|
||||||
|
* invalid face handle will be returned.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* */
|
||||||
FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
|
FaceHandle add_face(const VertexHandle* _vhandles, size_t _vhs_size);
|
||||||
|
|
||||||
FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2)
|
/** \brief Add a face with arbitrary valence to the triangle mesh
|
||||||
{
|
*
|
||||||
VertexHandle vhs[3] = { _vh0, _vh1, _vh2 };
|
* Override OpenMesh::Mesh::PolyMeshT::add_face(). Faces that aren't
|
||||||
return PolyConnectivity::add_face(vhs, 3);
|
* triangles will be triangulated and added. In this case an
|
||||||
}
|
* invalid face handle will be returned.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* */
|
||||||
|
FaceHandle add_face(const std::vector<VertexHandle>& _vhandles);
|
||||||
|
|
||||||
|
/** \brief Add a face to the mesh (triangle)
|
||||||
|
*
|
||||||
|
* This function adds a triangle to the mesh. The triangle is passed directly
|
||||||
|
* to the underlying PolyConnectivity as we don't explicitly need to triangulate something.
|
||||||
|
*
|
||||||
|
* @param _vh0 VertexHandle 1
|
||||||
|
* @param _vh1 VertexHandle 2
|
||||||
|
* @param _vh2 VertexHandle 3
|
||||||
|
* @return FaceHandle of the added face (invalid, if the operation failed)
|
||||||
|
*/
|
||||||
|
FaceHandle add_face(VertexHandle _vh0, VertexHandle _vh1, VertexHandle _vh2);
|
||||||
|
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include "unittests_decimater.hh"
|
#include "unittests_decimater.hh"
|
||||||
#include "unittests_trimesh_normal_calculations.hh"
|
#include "unittests_trimesh_normal_calculations.hh"
|
||||||
#include "unittests_trimesh_others.hh"
|
#include "unittests_trimesh_others.hh"
|
||||||
|
#include "unittests_add_face.hh"
|
||||||
|
|
||||||
int main(int _argc, char** _argv) {
|
int main(int _argc, char** _argv) {
|
||||||
|
|
||||||
|
|||||||
@@ -5,12 +5,15 @@
|
|||||||
#include <OpenMesh/Core/IO/MeshIO.hh>
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
|
||||||
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
|
||||||
|
|
||||||
struct CustomTraits : public OpenMesh::DefaultTraits {
|
struct CustomTraits : public OpenMesh::DefaultTraits {
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef OpenMesh::TriMesh_ArrayKernelT<CustomTraits> Mesh;
|
typedef OpenMesh::TriMesh_ArrayKernelT<CustomTraits> Mesh;
|
||||||
|
|
||||||
|
typedef OpenMesh::PolyMesh_ArrayKernelT<CustomTraits> PolyMesh;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Simple test setting.
|
* Simple test setting.
|
||||||
*/
|
*/
|
||||||
@@ -35,4 +38,30 @@ class OpenMeshBase : public testing::Test {
|
|||||||
Mesh mesh_;
|
Mesh mesh_;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Simple test setting.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class OpenMeshBasePoly : public testing::Test {
|
||||||
|
|
||||||
|
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...
|
||||||
|
}
|
||||||
|
|
||||||
|
// This member will be accessible in all tests
|
||||||
|
PolyMesh mesh_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // INCLUDE GUARD
|
#endif // INCLUDE GUARD
|
||||||
|
|||||||
Reference in New Issue
Block a user