#include #include #include #include #include #include TEST_CASE("tetrahedralize: single_tet", "[igl/copyleft/tetgen]") { const Eigen::MatrixXd V = (Eigen::MatrixXd(4,3)<< 0,0,0, 1,0,0, 0,1,0, 0,0,1).finished(); Eigen::MatrixXi F(0,3); Eigen::MatrixXd TV; Eigen::MatrixXi TT,TF; igl::copyleft::tetgen::tetrahedralize(V,F,"cpQ",TV,TT,TF); REQUIRE (4 == TV.rows()); REQUIRE (1 == TT.rows()); REQUIRE (4 == TF.rows()); Eigen::MatrixXi TTcorrect = (Eigen::MatrixXi(1,4)<<0,1,2,3).finished(); { Eigen::VectorXi TT_XOR,IA,IB; igl::setxor(TT,TTcorrect,TT_XOR,IA,IB); REQUIRE (0 == TT_XOR.size()); } test_common::assert_eq(TV,V); } TEST_CASE("tetrahedralize: two_tets", "[igl/copyleft/tetgen]") { const Eigen::MatrixXd V = (Eigen::MatrixXd(5,3)<< 2,1,0, 1,-1,0, -1,-1,0, -1,1,0, 0,0,1 ).finished(); Eigen::MatrixXi F(0,3); Eigen::MatrixXd TV; Eigen::MatrixXi TT,TF; Eigen::MatrixXd H,R; Eigen::VectorXi FM,PT,TM,TR; Eigen::VectorXi VM = (Eigen::VectorXi(5)<< 0, 1, 2, 3, 4).finished(); Eigen::MatrixXi TN,FT; int num_regions; igl::copyleft::tetgen::tetrahedralize( V,F,H,VM,FM,R,"cpnnfmQ",TV,TT,TF,TM,TR,TN,PT,FT,num_regions); REQUIRE (5 == TV.rows()); REQUIRE (2 == TT.rows()); REQUIRE (7 == TF.rows()); REQUIRE (TV.rows() == TM.rows()); REQUIRE (TN.rows() == TT.rows()); REQUIRE (TN.cols() == 4); REQUIRE((TN.row(0).array() == 1).any()); REQUIRE((TN.row(1).array() == 0).any()); REQUIRE(FT.rows() == TF.rows()); REQUIRE(PT.size() == TV.rows()); REQUIRE(PT(0) == 0); REQUIRE(PT(2) == 1); Eigen::MatrixXi TTcorrect(2,4); TTcorrect<< 4,0,1,3, 4,3,1,2; { Eigen::MatrixXi TT_combined = Eigen::MatrixXi(TT.rows()+TTcorrect.rows(),TT.cols()); TT_combined<