You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.8 KiB
64 lines
1.8 KiB
#include <test_common.h>
|
|
#include <igl/predicates/ear_clipping.h>
|
|
|
|
TEST_CASE("ear_clipping: simple poly 1", "[igl/predicates]")
|
|
{
|
|
// Example1: simple polygon
|
|
Eigen::MatrixXd polygon(10,2);
|
|
polygon<<2,-3,4,1,5.5,-2,6,2.5,5,1,4,5,3,0,1,1,1,5,0,0;
|
|
Eigen::VectorXi RT,nR,I;
|
|
Eigen::MatrixXi eF;
|
|
RT.setZero(polygon.rows());
|
|
|
|
igl::predicates::ear_clipping(polygon,RT,eF,I);
|
|
REQUIRE(I.size() == 0);
|
|
Eigen::MatrixXi eF1;
|
|
REQUIRE(igl::predicates::ear_clipping(polygon,eF1));
|
|
REQUIRE(eF1.rows() == polygon.rows()-2);
|
|
|
|
// Check that reverse also works
|
|
Eigen::MatrixXd polygon2 = polygon.colwise().reverse();
|
|
Eigen::MatrixXi eF2;
|
|
REQUIRE(igl::predicates::ear_clipping(polygon2,eF2));
|
|
REQUIRE(eF2.rows() == polygon2.rows()-2);
|
|
}
|
|
|
|
TEST_CASE("ear_clipping: simple poly 2", "[igl/predicates]")
|
|
{
|
|
using namespace std;
|
|
const Eigen::MatrixXd P = (Eigen::MatrixXd(6,2)<<
|
|
0,-0.212132034355964,
|
|
0.212132034355964, 0,
|
|
0.106066017177982, 0.106066017177982,
|
|
0, 0,
|
|
-0.106066017177982, 0.106066017177982,
|
|
-0.212132034355964, 0
|
|
).finished();
|
|
const Eigen::VectorXi RT = Eigen::VectorXi::Zero(P.rows(),1);
|
|
Eigen::VectorXi I;
|
|
Eigen::MatrixXi eF;
|
|
igl::predicates::ear_clipping(P,RT,eF,I);
|
|
Eigen::MatrixXi ans(4, 3);
|
|
ans << 0,1,2,0,2,3,5,0,3,5,3,4;
|
|
REQUIRE(ans == eF);
|
|
REQUIRE(I.size() ==0);
|
|
|
|
}
|
|
|
|
TEST_CASE("ear_clipping: simple poly 3", "[igl/predicates]")
|
|
{
|
|
using namespace std;
|
|
const Eigen::MatrixXd P = (Eigen::MatrixXd(3,2)<<
|
|
0, 0,
|
|
1, 0,
|
|
0, 1
|
|
).finished();
|
|
const Eigen::VectorXi RT = Eigen::VectorXi::Zero(P.rows(),1);
|
|
Eigen::VectorXi I;
|
|
Eigen::MatrixXi eF;
|
|
igl::predicates::ear_clipping(P,RT,eF,I);
|
|
Eigen::MatrixXi ans(1, 3);
|
|
ans << 2, 0, 1;
|
|
REQUIRE(ans == eF);
|
|
REQUIRE(I.size() == 0);
|
|
}
|
|
|