Another small unittest for collapsing an halfedge
git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@568 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
@@ -33,7 +33,7 @@ class OpenMeshCollapse : public OpenMeshBase {
|
||||
/*
|
||||
* Collapsing a tetrahedron
|
||||
*/
|
||||
TEST_F(OpenMeshCollapse, CollapseTetrahedron) {
|
||||
TEST_F(OpenMeshCollapse, CollapseTetrahedronComplex) {
|
||||
|
||||
mesh_.clear();
|
||||
|
||||
@@ -344,7 +344,7 @@ TEST_F(OpenMeshCollapse, CollapseTetrahedron) {
|
||||
/*
|
||||
* Collapsing a tetrahedron
|
||||
*/
|
||||
TEST_F(OpenMeshCollapse, CollapseComplex) {
|
||||
TEST_F(OpenMeshCollapse, CollapseTetrahedron) {
|
||||
|
||||
mesh_.clear();
|
||||
|
||||
@@ -429,5 +429,110 @@ TEST_F(OpenMeshCollapse, CollapseComplex) {
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* Test collapsing an halfedge in a triangle mesh
|
||||
*
|
||||
*/
|
||||
TEST_F(OpenMeshCollapse, LargeCollapseHalfEdge) {
|
||||
|
||||
mesh_.clear();
|
||||
|
||||
// Add some vertices
|
||||
Mesh::VertexHandle vhandle[7];
|
||||
|
||||
vhandle[0] = mesh_.add_vertex(Mesh::Point( 0, 1, 0));
|
||||
vhandle[1] = mesh_.add_vertex(Mesh::Point( 1, 0, 0));
|
||||
vhandle[2] = mesh_.add_vertex(Mesh::Point( 2, 1, 0));
|
||||
vhandle[3] = mesh_.add_vertex(Mesh::Point( 0,-1, 0));
|
||||
vhandle[4] = mesh_.add_vertex(Mesh::Point( 2,-1, 0));
|
||||
vhandle[5] = mesh_.add_vertex(Mesh::Point(-1, 0, 0));
|
||||
vhandle[6] = mesh_.add_vertex(Mesh::Point( 3, 0, 0));
|
||||
|
||||
// Add two faces
|
||||
std::vector<Mesh::VertexHandle> face_vhandles;
|
||||
|
||||
face_vhandles.push_back(vhandle[0]);
|
||||
face_vhandles.push_back(vhandle[5]);
|
||||
face_vhandles.push_back(vhandle[1]);
|
||||
mesh_.add_face(face_vhandles);
|
||||
|
||||
face_vhandles.clear();
|
||||
|
||||
face_vhandles.push_back(vhandle[1]);
|
||||
face_vhandles.push_back(vhandle[5]);
|
||||
face_vhandles.push_back(vhandle[3]);
|
||||
mesh_.add_face(face_vhandles);
|
||||
|
||||
face_vhandles.clear();
|
||||
|
||||
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[2]);
|
||||
face_vhandles.push_back(vhandle[1]);
|
||||
face_vhandles.push_back(vhandle[4]);
|
||||
mesh_.add_face(face_vhandles);
|
||||
|
||||
face_vhandles.clear();
|
||||
|
||||
face_vhandles.push_back(vhandle[2]);
|
||||
face_vhandles.push_back(vhandle[4]);
|
||||
face_vhandles.push_back(vhandle[6]);
|
||||
mesh_.add_face(face_vhandles);
|
||||
|
||||
/* Test setup:
|
||||
0 ==== 2
|
||||
/ \ /|\
|
||||
/ \ / | \
|
||||
5 --- 1 | 6
|
||||
\ / \ | /
|
||||
\ / \|/
|
||||
3 ==== 4 */
|
||||
|
||||
// Request the status bits
|
||||
mesh_.request_vertex_status();
|
||||
mesh_.request_edge_status();
|
||||
mesh_.request_face_status();
|
||||
|
||||
// =============================================
|
||||
// Collapse halfedge from 1 to 4
|
||||
// =============================================
|
||||
|
||||
Mesh::HalfedgeHandle heh_collapse;
|
||||
|
||||
// Iterate over all halfedges to find the correct one
|
||||
for ( Mesh::HalfedgeIter he_it = mesh_.halfedges_begin() ; he_it != mesh_.halfedges_end() ; ++he_it ) {
|
||||
if ( mesh_.from_vertex_handle(he_it).idx() == 1 && mesh_.to_vertex_handle(he_it).idx() == 4 )
|
||||
heh_collapse = he_it;
|
||||
}
|
||||
|
||||
// Check our halfedge
|
||||
EXPECT_EQ(4, mesh_.to_vertex_handle(heh_collapse).idx() ) << "To vertex of collapse halfedge is wrong";
|
||||
EXPECT_EQ(1, mesh_.from_vertex_handle(heh_collapse).idx() ) << "from vertex of collapse halfedge is wrong";
|
||||
EXPECT_TRUE( mesh_.is_collapse_ok(heh_collapse) ) << "Collapse not ok for collapse first halfedge (0)";
|
||||
|
||||
// Remember the end vertices
|
||||
Mesh::VertexHandle vh_from = mesh_.from_vertex_handle(heh_collapse);
|
||||
Mesh::VertexHandle vh_to = mesh_.to_vertex_handle(heh_collapse);
|
||||
|
||||
// Collapse it
|
||||
mesh_.collapse(heh_collapse);
|
||||
|
||||
EXPECT_TRUE( mesh_.status(vh_from).deleted() ) << "From vertex not deleted";
|
||||
EXPECT_FALSE( mesh_.status(vh_to).deleted() ) << "To Vertex deleted";
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif // INCLUDE GUARD
|
||||
|
||||
Reference in New Issue
Block a user