2#include <gtest/gtest.h>
3#include <Unittests/unittests_common.hh>
8#include <OpenMesh/Tools/Subdivider/Uniform/MidpointT.hh>
15 virtual void SetUp() {
20 virtual void TearDown() {
28class OpenMeshSubdividerUniform_Triangle :
public OpenMeshBase {
31 virtual void SetUp() {
36 virtual void TearDown() {
50TEST_F(OpenMeshSubdividerUniform_Triangle, Subdivider_Sqrt3) {
67 std::vector<Mesh::VertexHandle> face_vhandles;
69 face_vhandles.push_back(vhandle[0]);
70 face_vhandles.push_back(vhandle[4]);
71 face_vhandles.push_back(vhandle[3]);
73 mesh_.add_face(face_vhandles);
74 face_vhandles.clear();
76 face_vhandles.push_back(vhandle[0]);
77 face_vhandles.push_back(vhandle[1]);
78 face_vhandles.push_back(vhandle[4]);
80 mesh_.add_face(face_vhandles);
81 face_vhandles.clear();
83 face_vhandles.push_back(vhandle[1]);
84 face_vhandles.push_back(vhandle[2]);
85 face_vhandles.push_back(vhandle[4]);
87 mesh_.add_face(face_vhandles);
88 face_vhandles.clear();
90 face_vhandles.push_back(vhandle[2]);
91 face_vhandles.push_back(vhandle[5]);
92 face_vhandles.push_back(vhandle[4]);
94 mesh_.add_face(face_vhandles);
95 face_vhandles.clear();
97 face_vhandles.push_back(vhandle[3]);
98 face_vhandles.push_back(vhandle[7]);
99 face_vhandles.push_back(vhandle[6]);
101 mesh_.add_face(face_vhandles);
102 face_vhandles.clear();
104 face_vhandles.push_back(vhandle[3]);
105 face_vhandles.push_back(vhandle[4]);
106 face_vhandles.push_back(vhandle[7]);
108 mesh_.add_face(face_vhandles);
109 face_vhandles.clear();
111 face_vhandles.push_back(vhandle[4]);
112 face_vhandles.push_back(vhandle[8]);
113 face_vhandles.push_back(vhandle[7]);
115 mesh_.add_face(face_vhandles);
116 face_vhandles.clear();
118 face_vhandles.push_back(vhandle[4]);
119 face_vhandles.push_back(vhandle[5]);
120 face_vhandles.push_back(vhandle[8]);
122 mesh_.add_face(face_vhandles);
139 EXPECT_EQ(9u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
140 EXPECT_EQ(8u, mesh_.n_faces() ) <<
"Wrong number of faces";
148 EXPECT_EQ(121u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with sqrt3";
149 EXPECT_EQ(216u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with sqrt3";
153TEST_F(OpenMeshSubdividerUniform_Triangle, Subdivider_Sqrt3_delete_vertex) {
155 for (
bool collect_garbage : {
false,
true })
160 mesh_.request_vertex_status();
161 mesh_.request_halfedge_status();
162 mesh_.request_edge_status();
163 mesh_.request_face_status();
179 std::vector<Mesh::VertexHandle> face_vhandles;
181 face_vhandles.push_back(vhandle[0]);
182 face_vhandles.push_back(vhandle[4]);
183 face_vhandles.push_back(vhandle[3]);
185 mesh_.add_face(face_vhandles);
186 face_vhandles.clear();
188 face_vhandles.push_back(vhandle[0]);
189 face_vhandles.push_back(vhandle[1]);
190 face_vhandles.push_back(vhandle[4]);
192 mesh_.add_face(face_vhandles);
193 face_vhandles.clear();
195 face_vhandles.push_back(vhandle[1]);
196 face_vhandles.push_back(vhandle[2]);
197 face_vhandles.push_back(vhandle[4]);
199 mesh_.add_face(face_vhandles);
200 face_vhandles.clear();
202 face_vhandles.push_back(vhandle[2]);
203 face_vhandles.push_back(vhandle[5]);
204 face_vhandles.push_back(vhandle[4]);
206 mesh_.add_face(face_vhandles);
207 face_vhandles.clear();
209 face_vhandles.push_back(vhandle[3]);
210 face_vhandles.push_back(vhandle[7]);
211 face_vhandles.push_back(vhandle[6]);
213 mesh_.add_face(face_vhandles);
214 face_vhandles.clear();
216 face_vhandles.push_back(vhandle[3]);
217 face_vhandles.push_back(vhandle[4]);
218 face_vhandles.push_back(vhandle[7]);
220 mesh_.add_face(face_vhandles);
221 face_vhandles.clear();
223 face_vhandles.push_back(vhandle[4]);
224 face_vhandles.push_back(vhandle[8]);
225 face_vhandles.push_back(vhandle[7]);
227 mesh_.add_face(face_vhandles);
228 face_vhandles.clear();
230 face_vhandles.push_back(vhandle[4]);
231 face_vhandles.push_back(vhandle[5]);
232 face_vhandles.push_back(vhandle[8]);
234 mesh_.add_face(face_vhandles);
248 mesh_.delete_vertex(vhandle[1]);
252 mesh_.garbage_collection();
253 EXPECT_EQ(8u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
254 EXPECT_EQ(6u, mesh_.n_faces() ) <<
"Wrong number of faces";
258 EXPECT_EQ(9u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
259 EXPECT_EQ(8u, mesh_.n_faces() ) <<
"Wrong number of faces";
272 if (!collect_garbage)
273 mesh_.garbage_collection();
276 EXPECT_EQ(94u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with sqrt3";
277 EXPECT_EQ(162u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with sqrt3";
282TEST_F(OpenMeshSubdividerUniform_Triangle, Subdivider_Loop) {
299 std::vector<Mesh::VertexHandle> face_vhandles;
301 face_vhandles.push_back(vhandle[0]);
302 face_vhandles.push_back(vhandle[4]);
303 face_vhandles.push_back(vhandle[3]);
305 mesh_.add_face(face_vhandles);
306 face_vhandles.clear();
308 face_vhandles.push_back(vhandle[0]);
309 face_vhandles.push_back(vhandle[1]);
310 face_vhandles.push_back(vhandle[4]);
312 mesh_.add_face(face_vhandles);
313 face_vhandles.clear();
315 face_vhandles.push_back(vhandle[1]);
316 face_vhandles.push_back(vhandle[2]);
317 face_vhandles.push_back(vhandle[4]);
319 mesh_.add_face(face_vhandles);
320 face_vhandles.clear();
322 face_vhandles.push_back(vhandle[2]);
323 face_vhandles.push_back(vhandle[5]);
324 face_vhandles.push_back(vhandle[4]);
326 mesh_.add_face(face_vhandles);
327 face_vhandles.clear();
329 face_vhandles.push_back(vhandle[3]);
330 face_vhandles.push_back(vhandle[7]);
331 face_vhandles.push_back(vhandle[6]);
333 mesh_.add_face(face_vhandles);
334 face_vhandles.clear();
336 face_vhandles.push_back(vhandle[3]);
337 face_vhandles.push_back(vhandle[4]);
338 face_vhandles.push_back(vhandle[7]);
340 mesh_.add_face(face_vhandles);
341 face_vhandles.clear();
343 face_vhandles.push_back(vhandle[4]);
344 face_vhandles.push_back(vhandle[8]);
345 face_vhandles.push_back(vhandle[7]);
347 mesh_.add_face(face_vhandles);
348 face_vhandles.clear();
350 face_vhandles.push_back(vhandle[4]);
351 face_vhandles.push_back(vhandle[5]);
352 face_vhandles.push_back(vhandle[8]);
354 mesh_.add_face(face_vhandles);
371 EXPECT_EQ(9u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
372 EXPECT_EQ(8u, mesh_.n_faces() ) <<
"Wrong number of faces";
380 EXPECT_EQ(289u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with loop";
381 EXPECT_EQ(512u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with loop";
386TEST_F(OpenMeshSubdividerUniform_Triangle, Subdivider_Loop_delete_vertex) {
388 for (
bool collect_garbage : {
false,
true })
393 mesh_.request_vertex_status();
394 mesh_.request_halfedge_status();
395 mesh_.request_edge_status();
396 mesh_.request_face_status();
412 std::vector<Mesh::VertexHandle> face_vhandles;
414 face_vhandles.push_back(vhandle[0]);
415 face_vhandles.push_back(vhandle[4]);
416 face_vhandles.push_back(vhandle[3]);
418 mesh_.add_face(face_vhandles);
419 face_vhandles.clear();
421 face_vhandles.push_back(vhandle[0]);
422 face_vhandles.push_back(vhandle[1]);
423 face_vhandles.push_back(vhandle[4]);
425 mesh_.add_face(face_vhandles);
426 face_vhandles.clear();
428 face_vhandles.push_back(vhandle[1]);
429 face_vhandles.push_back(vhandle[2]);
430 face_vhandles.push_back(vhandle[4]);
432 mesh_.add_face(face_vhandles);
433 face_vhandles.clear();
435 face_vhandles.push_back(vhandle[2]);
436 face_vhandles.push_back(vhandle[5]);
437 face_vhandles.push_back(vhandle[4]);
439 mesh_.add_face(face_vhandles);
440 face_vhandles.clear();
442 face_vhandles.push_back(vhandle[3]);
443 face_vhandles.push_back(vhandle[7]);
444 face_vhandles.push_back(vhandle[6]);
446 mesh_.add_face(face_vhandles);
447 face_vhandles.clear();
449 face_vhandles.push_back(vhandle[3]);
450 face_vhandles.push_back(vhandle[4]);
451 face_vhandles.push_back(vhandle[7]);
453 mesh_.add_face(face_vhandles);
454 face_vhandles.clear();
456 face_vhandles.push_back(vhandle[4]);
457 face_vhandles.push_back(vhandle[8]);
458 face_vhandles.push_back(vhandle[7]);
460 mesh_.add_face(face_vhandles);
461 face_vhandles.clear();
463 face_vhandles.push_back(vhandle[4]);
464 face_vhandles.push_back(vhandle[5]);
465 face_vhandles.push_back(vhandle[8]);
467 mesh_.add_face(face_vhandles);
481 mesh_.delete_vertex(vhandle[1]);
484 mesh_.garbage_collection();
486 EXPECT_EQ(8u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
487 EXPECT_EQ(6u, mesh_.n_faces() ) <<
"Wrong number of faces";
492 EXPECT_EQ(9u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
493 EXPECT_EQ(8u, mesh_.n_faces() ) <<
"Wrong number of faces";
505 if (!collect_garbage)
506 mesh_.garbage_collection();
509 EXPECT_EQ(225u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with loop";
510 EXPECT_EQ(384u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with loop";
525TEST_F(OpenMeshSubdividerUniform_Poly, Subdivider_CatmullClark) {
542 std::vector<Mesh::VertexHandle> face_vhandles;
544 face_vhandles.push_back(vhandle[0]);
545 face_vhandles.push_back(vhandle[1]);
546 face_vhandles.push_back(vhandle[4]);
547 face_vhandles.push_back(vhandle[3]);
549 mesh_.add_face(face_vhandles);
550 face_vhandles.clear();
552 face_vhandles.push_back(vhandle[1]);
553 face_vhandles.push_back(vhandle[2]);
554 face_vhandles.push_back(vhandle[5]);
555 face_vhandles.push_back(vhandle[4]);
557 mesh_.add_face(face_vhandles);
558 face_vhandles.clear();
560 face_vhandles.push_back(vhandle[4]);
561 face_vhandles.push_back(vhandle[5]);
562 face_vhandles.push_back(vhandle[8]);
563 face_vhandles.push_back(vhandle[7]);
565 mesh_.add_face(face_vhandles);
566 face_vhandles.clear();
568 face_vhandles.push_back(vhandle[3]);
569 face_vhandles.push_back(vhandle[4]);
570 face_vhandles.push_back(vhandle[7]);
571 face_vhandles.push_back(vhandle[6]);
573 mesh_.add_face(face_vhandles);
590 EXPECT_EQ(9u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
591 EXPECT_EQ(4u, mesh_.n_faces() ) <<
"Wrong number of faces";
598 EXPECT_EQ(289u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with catmull clark";
599 EXPECT_EQ(256u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with catmull clark";
603TEST_F(OpenMeshSubdividerUniform_Poly, Subdivider_CatmullClark_delete_vertex) {
605 for (
bool collect_garbage : {
false,
true })
610 mesh_.request_vertex_status();
611 mesh_.request_halfedge_status();
612 mesh_.request_edge_status();
613 mesh_.request_face_status();
629 std::vector<Mesh::VertexHandle> face_vhandles;
631 face_vhandles.push_back(vhandle[0]);
632 face_vhandles.push_back(vhandle[1]);
633 face_vhandles.push_back(vhandle[4]);
634 face_vhandles.push_back(vhandle[3]);
636 mesh_.add_face(face_vhandles);
637 face_vhandles.clear();
639 face_vhandles.push_back(vhandle[1]);
640 face_vhandles.push_back(vhandle[2]);
641 face_vhandles.push_back(vhandle[5]);
642 face_vhandles.push_back(vhandle[4]);
644 mesh_.add_face(face_vhandles);
645 face_vhandles.clear();
647 face_vhandles.push_back(vhandle[4]);
648 face_vhandles.push_back(vhandle[5]);
649 face_vhandles.push_back(vhandle[8]);
650 face_vhandles.push_back(vhandle[7]);
652 mesh_.add_face(face_vhandles);
653 face_vhandles.clear();
655 face_vhandles.push_back(vhandle[3]);
656 face_vhandles.push_back(vhandle[4]);
657 face_vhandles.push_back(vhandle[7]);
658 face_vhandles.push_back(vhandle[6]);
660 mesh_.add_face(face_vhandles);
674 mesh_.delete_vertex(vhandle[1]);
678 mesh_.garbage_collection();
679 EXPECT_EQ(6u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
680 EXPECT_EQ(2u, mesh_.n_faces() ) <<
"Wrong number of faces";
684 EXPECT_EQ(9u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
685 EXPECT_EQ(4u, mesh_.n_faces() ) <<
"Wrong number of faces";
696 if (!collect_garbage)
697 mesh_.garbage_collection();
699 EXPECT_EQ(153u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with catmull clark";
700 EXPECT_EQ(128u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with catmull clark";
706TEST_F(OpenMeshSubdividerUniform_Poly, Midpoint) {
721 std::vector<Mesh::VertexHandle> face_vhandles;
723 face_vhandles.clear();
724 face_vhandles.push_back(vhandle[0]);
725 face_vhandles.push_back(vhandle[1]);
726 face_vhandles.push_back(vhandle[2]);
727 face_vhandles.push_back(vhandle[3]);
728 mesh_.add_face(face_vhandles);
730 face_vhandles.clear();
731 face_vhandles.push_back(vhandle[7]);
732 face_vhandles.push_back(vhandle[6]);
733 face_vhandles.push_back(vhandle[5]);
734 face_vhandles.push_back(vhandle[4]);
735 mesh_.add_face(face_vhandles);
737 face_vhandles.clear();
738 face_vhandles.push_back(vhandle[1]);
739 face_vhandles.push_back(vhandle[0]);
740 face_vhandles.push_back(vhandle[4]);
741 face_vhandles.push_back(vhandle[5]);
742 mesh_.add_face(face_vhandles);
744 face_vhandles.clear();
745 face_vhandles.push_back(vhandle[2]);
746 face_vhandles.push_back(vhandle[1]);
747 face_vhandles.push_back(vhandle[5]);
748 face_vhandles.push_back(vhandle[6]);
749 mesh_.add_face(face_vhandles);
751 face_vhandles.clear();
752 face_vhandles.push_back(vhandle[3]);
753 face_vhandles.push_back(vhandle[2]);
754 face_vhandles.push_back(vhandle[6]);
755 face_vhandles.push_back(vhandle[7]);
756 mesh_.add_face(face_vhandles);
758 face_vhandles.clear();
759 face_vhandles.push_back(vhandle[0]);
760 face_vhandles.push_back(vhandle[3]);
761 face_vhandles.push_back(vhandle[7]);
762 face_vhandles.push_back(vhandle[4]);
763 mesh_.add_face(face_vhandles);
781 EXPECT_EQ(12u, mesh_.n_edges()) <<
"Wrong number of Edges";
782 EXPECT_EQ(24u, mesh_.n_halfedges()) <<
"Wrong number of HalfEdges";
783 EXPECT_EQ(8u, mesh_.n_vertices()) <<
"Wrong number of vertices";
784 EXPECT_EQ(6u, mesh_.n_faces()) <<
"Wrong number of faces";
795 EXPECT_EQ(48u, mesh_.n_edges()) <<
"Wrong number of Edges";
796 EXPECT_EQ(96u, mesh_.n_halfedges()) <<
"Wrong number of HalfEdges";
797 EXPECT_EQ(24u, mesh_.n_vertices()) <<
"Wrong number of vertices";
798 EXPECT_EQ(26u, mesh_.n_faces()) <<
"Wrong number of faces";
802TEST_F(OpenMeshSubdividerUniform_Poly, Midpoint_delete_vertex) {
804 for (
bool collect_garbage : {
false,
true })
809 mesh_.request_vertex_status();
810 mesh_.request_halfedge_status();
811 mesh_.request_edge_status();
812 mesh_.request_face_status();
826 std::vector<Mesh::VertexHandle> face_vhandles;
828 face_vhandles.clear();
829 face_vhandles.push_back(vhandle[0]);
830 face_vhandles.push_back(vhandle[1]);
831 face_vhandles.push_back(vhandle[2]);
832 face_vhandles.push_back(vhandle[3]);
833 mesh_.add_face(face_vhandles);
835 face_vhandles.clear();
836 face_vhandles.push_back(vhandle[7]);
837 face_vhandles.push_back(vhandle[6]);
838 face_vhandles.push_back(vhandle[5]);
839 face_vhandles.push_back(vhandle[4]);
840 mesh_.add_face(face_vhandles);
842 face_vhandles.clear();
843 face_vhandles.push_back(vhandle[1]);
844 face_vhandles.push_back(vhandle[0]);
845 face_vhandles.push_back(vhandle[4]);
846 face_vhandles.push_back(vhandle[5]);
847 mesh_.add_face(face_vhandles);
849 face_vhandles.clear();
850 face_vhandles.push_back(vhandle[2]);
851 face_vhandles.push_back(vhandle[1]);
852 face_vhandles.push_back(vhandle[5]);
853 face_vhandles.push_back(vhandle[6]);
854 mesh_.add_face(face_vhandles);
856 face_vhandles.clear();
857 face_vhandles.push_back(vhandle[3]);
858 face_vhandles.push_back(vhandle[2]);
859 face_vhandles.push_back(vhandle[6]);
860 face_vhandles.push_back(vhandle[7]);
861 mesh_.add_face(face_vhandles);
863 face_vhandles.clear();
864 face_vhandles.push_back(vhandle[0]);
865 face_vhandles.push_back(vhandle[3]);
866 face_vhandles.push_back(vhandle[7]);
867 face_vhandles.push_back(vhandle[4]);
868 mesh_.add_face(face_vhandles);
885 mesh_.delete_vertex(vhandle[1]);
889 mesh_.garbage_collection();
890 EXPECT_EQ(9u, mesh_.n_edges()) <<
"Wrong number of Edges";
891 EXPECT_EQ(18u, mesh_.n_halfedges()) <<
"Wrong number of HalfEdges";
892 EXPECT_EQ(7u, mesh_.n_vertices()) <<
"Wrong number of vertices";
893 EXPECT_EQ(3u, mesh_.n_faces()) <<
"Wrong number of faces";
897 EXPECT_EQ(12u, mesh_.n_edges()) <<
"Wrong number of Edges";
898 EXPECT_EQ(24u, mesh_.n_halfedges()) <<
"Wrong number of HalfEdges";
899 EXPECT_EQ(8u, mesh_.n_vertices()) <<
"Wrong number of vertices";
900 EXPECT_EQ(6u, mesh_.n_faces()) <<
"Wrong number of faces";
913 if (!collect_garbage)
914 mesh_.garbage_collection();
917 EXPECT_EQ(15u, mesh_.n_edges()) <<
"Wrong number of Edges";
918 EXPECT_EQ(30u, mesh_.n_halfedges()) <<
"Wrong number of HalfEdges";
919 EXPECT_EQ(12u, mesh_.n_vertices()) <<
"Wrong number of vertices";
920 EXPECT_EQ(4u, mesh_.n_faces()) <<
"Wrong number of faces";
926TEST_F(OpenMeshSubdividerUniform_Triangle, Modified_Butterfly) {
943 std::vector<Mesh::VertexHandle> face_vhandles;
945 face_vhandles.push_back(vhandle[0]);
946 face_vhandles.push_back(vhandle[4]);
947 face_vhandles.push_back(vhandle[3]);
949 mesh_.add_face(face_vhandles);
950 face_vhandles.clear();
952 face_vhandles.push_back(vhandle[0]);
953 face_vhandles.push_back(vhandle[1]);
954 face_vhandles.push_back(vhandle[4]);
956 mesh_.add_face(face_vhandles);
957 face_vhandles.clear();
959 face_vhandles.push_back(vhandle[1]);
960 face_vhandles.push_back(vhandle[2]);
961 face_vhandles.push_back(vhandle[4]);
963 mesh_.add_face(face_vhandles);
964 face_vhandles.clear();
966 face_vhandles.push_back(vhandle[2]);
967 face_vhandles.push_back(vhandle[5]);
968 face_vhandles.push_back(vhandle[4]);
970 mesh_.add_face(face_vhandles);
971 face_vhandles.clear();
973 face_vhandles.push_back(vhandle[3]);
974 face_vhandles.push_back(vhandle[7]);
975 face_vhandles.push_back(vhandle[6]);
977 mesh_.add_face(face_vhandles);
978 face_vhandles.clear();
980 face_vhandles.push_back(vhandle[3]);
981 face_vhandles.push_back(vhandle[4]);
982 face_vhandles.push_back(vhandle[7]);
984 mesh_.add_face(face_vhandles);
985 face_vhandles.clear();
987 face_vhandles.push_back(vhandle[4]);
988 face_vhandles.push_back(vhandle[8]);
989 face_vhandles.push_back(vhandle[7]);
991 mesh_.add_face(face_vhandles);
992 face_vhandles.clear();
994 face_vhandles.push_back(vhandle[4]);
995 face_vhandles.push_back(vhandle[5]);
996 face_vhandles.push_back(vhandle[8]);
998 mesh_.add_face(face_vhandles);
1015 EXPECT_EQ(9u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
1016 EXPECT_EQ(8u, mesh_.n_faces() ) <<
"Wrong number of faces";
1024 EXPECT_EQ(289u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with loop";
1025 EXPECT_EQ(512u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with loop";
1030TEST_F(OpenMeshSubdividerUniform_Triangle, Modified_Butterfly_cylinder) {
1039 EXPECT_EQ(66u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
1040 EXPECT_EQ(128u, mesh_.n_faces() ) <<
"Wrong number of faces";
1043 butter( mesh_,3,
true );
1046 EXPECT_EQ(4098u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with loop";
1047 EXPECT_EQ(8192u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with loop";
1052TEST_F(OpenMeshSubdividerUniform_Triangle, Modified_Butterfly_delete_vertex) {
1054 for (
bool collect_garbage : {
false,
true })
1059 mesh_.request_vertex_status();
1060 mesh_.request_halfedge_status();
1061 mesh_.request_edge_status();
1062 mesh_.request_face_status();
1078 std::vector<Mesh::VertexHandle> face_vhandles;
1080 face_vhandles.push_back(vhandle[0]);
1081 face_vhandles.push_back(vhandle[4]);
1082 face_vhandles.push_back(vhandle[3]);
1084 mesh_.add_face(face_vhandles);
1085 face_vhandles.clear();
1087 face_vhandles.push_back(vhandle[0]);
1088 face_vhandles.push_back(vhandle[1]);
1089 face_vhandles.push_back(vhandle[4]);
1091 mesh_.add_face(face_vhandles);
1092 face_vhandles.clear();
1094 face_vhandles.push_back(vhandle[1]);
1095 face_vhandles.push_back(vhandle[2]);
1096 face_vhandles.push_back(vhandle[4]);
1098 mesh_.add_face(face_vhandles);
1099 face_vhandles.clear();
1101 face_vhandles.push_back(vhandle[2]);
1102 face_vhandles.push_back(vhandle[5]);
1103 face_vhandles.push_back(vhandle[4]);
1105 mesh_.add_face(face_vhandles);
1106 face_vhandles.clear();
1108 face_vhandles.push_back(vhandle[3]);
1109 face_vhandles.push_back(vhandle[7]);
1110 face_vhandles.push_back(vhandle[6]);
1112 mesh_.add_face(face_vhandles);
1113 face_vhandles.clear();
1115 face_vhandles.push_back(vhandle[3]);
1116 face_vhandles.push_back(vhandle[4]);
1117 face_vhandles.push_back(vhandle[7]);
1119 mesh_.add_face(face_vhandles);
1120 face_vhandles.clear();
1122 face_vhandles.push_back(vhandle[4]);
1123 face_vhandles.push_back(vhandle[8]);
1124 face_vhandles.push_back(vhandle[7]);
1126 mesh_.add_face(face_vhandles);
1127 face_vhandles.clear();
1129 face_vhandles.push_back(vhandle[4]);
1130 face_vhandles.push_back(vhandle[5]);
1131 face_vhandles.push_back(vhandle[8]);
1133 mesh_.add_face(face_vhandles);
1148 mesh_.delete_vertex(vhandle[1]);
1150 if (collect_garbage)
1152 mesh_.garbage_collection();
1153 EXPECT_EQ(8u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
1154 EXPECT_EQ(6u, mesh_.n_faces() ) <<
"Wrong number of faces";
1158 EXPECT_EQ(9u, mesh_.n_vertices() ) <<
"Wrong number of vertices";
1159 EXPECT_EQ(8u, mesh_.n_faces() ) <<
"Wrong number of faces";
1171 if (!collect_garbage)
1172 mesh_.garbage_collection();
1175 EXPECT_EQ(225u, mesh_.n_vertices() ) <<
"Wrong number of vertices after subdivision with butter";
1176 EXPECT_EQ(384u, mesh_.n_faces() ) <<
"Wrong number of faces after subdivision with butter";
Kernel::VertexHandle VertexHandle
Handle for referencing the corresponding item.
SmartVertexHandle add_vertex(const Point _p)
Kernel::Point Point
Coordinate type.
bool read_mesh(Mesh &_mesh, const std::string &_filename)
Read a mesh from file _filename.