| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- #include <test_common.h>
- #include <igl/split_nonmanifold.h>
- #include <igl/matlab_format.h>
- #include <iostream>
- TEST_CASE("split_nonmanifold: edge-fan", "[igl]")
- {
- using namespace igl;
- Eigen::MatrixXd V(7,3);
- V << 0,0,0,
- 1,0,0,
- -1,0,0,
- 0,1,0,
- 0,0,1,
- 0,0,-1,
- 1,0,1;
- Eigen::MatrixXi F(5,3);
- F<<0,1,3,
- 0,3,2,
- 0,4,3,
- 0,3,5,
- 0,3,6;
- Eigen::MatrixXd SV;
- Eigen::MatrixXi SF;
- Eigen::VectorXi SVI;
- igl::split_nonmanifold(V,F,SV,SF,SVI);
- Eigen::MatrixXd SVgt(13,3);
- SVgt<<
- 0,0,0,
- 0,0,0,
- 0,0,0,
- 0,0,0,
- 1,0,0,
- 0,1,0,
- 0,0,1,
- 0,1,0,
- 0,1,0,
- -1,0,0,
- 0,1,0,
- 0,0,-1,
- 1,0,1;
- Eigen::MatrixXi SFgt(5,3);
- SFgt<<
- 0,4,5,
- 0,5,9,
- 1,6,10,
- 2,7,11,
- 3,8,12;
- Eigen::VectorXi SVIgt(13);
- SVIgt<<0,0,0,0,1,3,4,3,3,2,3,5,6;
- test_common::assert_eq(SV,SVgt);
- test_common::assert_eq(SF,SFgt);
- test_common::assert_eq(SVI,SVIgt);
- }
- TEST_CASE("split_nonmanifold: vertex-boundary", "[igl]")
- {
- using namespace igl;
- Eigen::MatrixXd V(5,2);
- V << 0,0,
- 1,0,
- 0,1,
- 2,0,
- 1,1;
- Eigen::MatrixXi F(2,3);
- F<<0,1,2,
- 1,3,4;
- Eigen::MatrixXd SV;
- Eigen::MatrixXi SF;
- Eigen::VectorXi SVI;
- igl::split_nonmanifold(V,F,SV,SF,SVI);
- Eigen::MatrixXd SVgt(6,2);
- SVgt<<
- 0,0,
- 1,0,
- 1,0,
- 2,0,
- 0,1,
- 1,1;
- Eigen::MatrixXi SFgt(2,3);
- SFgt<<
- 0,2,4,
- 1,3,5;
- Eigen::VectorXi SVIgt(6);
- SVIgt << 0, 1, 1, 3, 2, 4;
- test_common::assert_eq(SV,SVgt);
- test_common::assert_eq(SF,SFgt);
- test_common::assert_eq(SVI,SVIgt);
- }
- TEST_CASE("split_nonmanifold: edge-disk-flap", "[igl]")
- {
- using namespace igl;
- Eigen::MatrixXd V(6,3);
- V<<
- 0,0,0,
- 1,0,0,
- 0,1,0,
- -1,0,0,
- 0,-1,0,
- 0,0,1;
- Eigen::MatrixXi F(5,3);
- F<<
- 0,1,2,
- 0,2,3,
- 0,3,4,
- 0,4,1,
- 0,5,1;
- Eigen::MatrixXd SV;
- Eigen::MatrixXi SF;
- Eigen::VectorXi SVI;
- igl::split_nonmanifold(V,F,SV,SF,SVI);
- Eigen::MatrixXd SVgt(8,3);
- SVgt<<
- 0,0,0,
- 0,0,0,
- 1,0,0,
- 0,1,0,
- -1,0,0,
- 0,-1,0,
- 0,0,1,
- 1,0,0;
- Eigen::MatrixXi SFgt(5,3);
- SFgt<<
- 0,2,3,
- 0,3,4,
- 0,4,5,
- 0,5,2,
- 1,6,7;
- Eigen::VectorXi SVIgt(8);
- SVIgt<< 0, 0, 1, 2, 3, 4, 5, 1;
- test_common::assert_eq(SV,SVgt);
- test_common::assert_eq(SF,SFgt);
- test_common::assert_eq(SVI,SVIgt);
- }
- TEST_CASE("split_nonmanifold: edge-disk-tent", "[igl]")
- {
- using namespace igl;
- Eigen::MatrixXd V(5,3);
- V<<
- 0,0,0,
- 1,0,0,
- -1,1,0,
- 0,-1,0,
- 0,0,1;
- Eigen::MatrixXi F(5,3);
- F<<
- 0,1,2,
- 0,2,3,
- 0,3,1,
- 0,4,1,
- 1,4,3;
- Eigen::MatrixXd SV;
- Eigen::MatrixXi SF;
- Eigen::VectorXi SVI;
- igl::split_nonmanifold(V,F,SV,SF,SVI);
- Eigen::MatrixXd SVgt(8,3);
- SVgt<<
- 0,0,0,
- 0,0,0,
- 1,0,0,
- 1,0,0,
- -1,1,0,
- 0,-1,0,
- 0,0,1,
- 0,-1,0;
- Eigen::MatrixXi SFgt(5,3);
- SFgt<<
- 0,3,4,
- 0,4,5,
- 0,5,3,
- 1,6,2,
- 2,6,7;
- Eigen::VectorXi SVIgt(8);
- SVIgt<< 0, 0, 1, 1, 2, 3, 4, 3;
- test_common::assert_eq(SV,SVgt);
- test_common::assert_eq(SF,SFgt);
- test_common::assert_eq(SVI,SVIgt);
- }
- TEST_CASE("split_nonmanifold: vertex-kiss", "[igl]")
- {
- using namespace igl;
- Eigen::MatrixXd V(7,3);
- V<<
- 0,0,0,
- 1,0,0,
- 0,1,0,
- 0,0,1,
- 0,0,2,
- 1,0,2,
- 0,1,2;
- Eigen::MatrixXi F(6,3);
- F<<
- 0,1,3,
- 1,2,3,
- 2,0,3,
- 4,5,3,
- 5,6,3,
- 6,4,3;
- Eigen::MatrixXd SV;
- Eigen::MatrixXi SF;
- Eigen::VectorXi SVI;
- igl::split_nonmanifold(V,F,SV,SF,SVI);
- Eigen::MatrixXd SVgt(8,3);
- SVgt<<
- 0,0,0,
- 1,0,0,
- 0,1,0,
- 0,0,2,
- 1,0,2,
- 0,1,2,
- 0,0,1,
- 0,0,1;
- Eigen::MatrixXi SFgt(6,3);
- SFgt<<
- 0,1,6,
- 1,2,6,
- 2,0,6,
- 3,4,7,
- 4,5,7,
- 5,3,7;
- Eigen::VectorXi SVIgt(8);
- SVIgt<< 0, 1, 2, 4, 5, 6, 3, 3;
- test_common::assert_eq(SV,SVgt);
- test_common::assert_eq(SF,SFgt);
- test_common::assert_eq(SVI,SVIgt);
- }
- TEST_CASE("split_nonmanifold: non-orientable", "[igl]")
- {
- using namespace igl;
- Eigen::MatrixXd V(6,3);
- V<<
- 6, 0, 0,
- 4, 0, 0,
- -3, 5, 0,
- -2, 4, 0,
- -2,-4, 1,
- -3,-5,-1;
- Eigen::MatrixXi F(6,3);
- F<<
- 0,2,1,
- 2,3,1,
- 2,4,3,
- 4,5,3,
- 4,1,5,
- 1,0,5;
- Eigen::MatrixXd SV;
- Eigen::MatrixXi SF;
- Eigen::VectorXi SVI;
- igl::split_nonmanifold(V,F,SV,SF,SVI);
- Eigen::MatrixXd SVgt(8,3);
- SVgt<<
- 6,0,0,
- -3,5,0,
- -2,-4,1,
- 4,0,0,
- -2,4,0,
- -3,-5,-1,
- 6,0,0,
- 4,0,0;
- Eigen::MatrixXi SFgt(6,3);
- SFgt<<
- 0,1,7,
- 1,4,7,
- 1,2,4,
- 2,5,4,
- 2,3,5,
- 3,6,5;
- Eigen::VectorXi SVIgt(8);
- SVIgt<< 0, 2, 4, 1, 3, 5, 0, 1;
- test_common::assert_eq(SV,SVgt);
- test_common::assert_eq(SF,SFgt);
- test_common::assert_eq(SVI,SVIgt);
- }
|