2 #include <gtest/gtest.h> 3 #include <Unittests/unittests_common.hh> 10 class OpenMeshMultipleChoiceDecimater :
public OpenMeshBase {
15 virtual void SetUp() {
21 virtual void TearDown() {
38 TEST_F(OpenMeshMultipleChoiceDecimater, DecimateMesh) {
47 Decimater decimaterDBG(mesh_);
48 HModQuadric hModQuadricDBG;
49 decimaterDBG.add( hModQuadricDBG );
50 decimaterDBG.initialize();
51 size_t removedVertices = 0;
52 removedVertices = decimaterDBG.decimate_to(5000);
53 decimaterDBG.mesh().garbage_collection();
55 EXPECT_EQ(2526u, removedVertices) <<
"The number of remove vertices is not correct!";
56 EXPECT_EQ(5000u, mesh_.n_vertices()) <<
"The number of vertices after decimation is not correct!";
57 EXPECT_EQ(14994u, mesh_.n_edges()) <<
"The number of edges after decimation is not correct!";
58 EXPECT_EQ(9996u, mesh_.n_faces()) <<
"The number of faces after decimation is not correct!";
61 TEST_F(OpenMeshMultipleChoiceDecimater, DecimateMeshToFaceVerticesLimit) {
70 Decimater decimaterDBG(mesh_);
71 HModQuadric hModQuadricDBG;
72 decimaterDBG.add( hModQuadricDBG );
73 decimaterDBG.initialize();
74 size_t removedVertices = 0;
75 removedVertices = decimaterDBG.decimate_to_faces(5000, 8000);
76 decimaterDBG.mesh().garbage_collection();
78 EXPECT_EQ(2526u, removedVertices) <<
"The number of remove vertices is not correct!";
79 EXPECT_EQ(5000u, mesh_.n_vertices()) <<
"The number of vertices after decimation is not correct!";
80 EXPECT_EQ(14994u, mesh_.n_edges()) <<
"The number of edges after decimation is not correct!";
81 EXPECT_EQ(9996u, mesh_.n_faces()) <<
"The number of faces after decimation is not correct!";
84 TEST_F(OpenMeshMultipleChoiceDecimater, DecimateMeshToFaceFaceLimit) {
93 Decimater decimaterDBG(mesh_);
94 HModQuadric hModQuadricDBG;
95 decimaterDBG.add( hModQuadricDBG );
96 decimaterDBG.initialize();
97 size_t removedVertices = 0;
98 removedVertices = decimaterDBG.decimate_to_faces(4500, 9996);
99 decimaterDBG.mesh().garbage_collection();
101 EXPECT_EQ(2526u, removedVertices) <<
"The number of remove vertices is not correct!";
102 EXPECT_EQ(5000u, mesh_.n_vertices()) <<
"The number of vertices after decimation is not correct!";
103 EXPECT_EQ(14994u, mesh_.n_edges()) <<
"The number of edges after decimation is not correct!";
104 EXPECT_EQ(9996u, mesh_.n_faces()) <<
"The number of faces after decimation is not correct!";
112 explicit UnittestObserver(
size_t _steps) :Observer(_steps), notifies_(0), all_steps_(0) {}
114 void notify(
size_t _step)
121 return all_steps_ >= 2526u;
124 size_t countedNotifies()
130 TEST_F(OpenMeshMultipleChoiceDecimater, DecimateMeshStoppedByObserver) {
139 Decimater decimaterDBG(mesh_);
140 HModQuadric hModQuadricDBG;
141 decimaterDBG.add(hModQuadricDBG);
143 decimaterDBG.module(hModQuadricDBG).unset_max_err();
145 decimaterDBG.initialize();
146 UnittestObserver obs(2);
147 decimaterDBG.set_observer(&obs);
148 size_t removedVertices = 0;
149 removedVertices = decimaterDBG.decimate_to_faces(0, 0);
150 decimaterDBG.mesh().garbage_collection();
152 EXPECT_TRUE(obs.abort()) <<
"Observer did not abort the decimater!";
153 EXPECT_EQ(obs.countedNotifies(), 2526u / 2u) <<
"Observer did not get the right amount of notifications!";
155 EXPECT_EQ(2526u, removedVertices) <<
"The number of remove vertices is not correct!";
156 EXPECT_EQ(5000u, mesh_.n_vertices()) <<
"The number of vertices after decimation is not correct!";
157 EXPECT_EQ(14994u, mesh_.n_edges()) <<
"The number of edges after decimation is not correct!";
158 EXPECT_EQ(9996u, mesh_.n_faces()) <<
"The number of faces after decimation is not correct!";
bool read_mesh(Mesh &_mesh, const std::string &_filename)
Read a mesh from file _filename.
Mesh decimation module computing collapse priority based on error quadrics.