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.
53 lines
1.4 KiB
53 lines
1.4 KiB
#include "test_common.h"
|
|
#include <igl/fast_find_intersections.h>
|
|
#include <igl/fast_find_self_intersections.h>
|
|
#include <igl/combine.h>
|
|
#include <igl/unique.h>
|
|
#include <igl/matlab_format.h>
|
|
#include <iostream>
|
|
|
|
|
|
|
|
TEST_CASE("fast_find_intersections: cube-triangle", "[igl]")
|
|
{
|
|
Eigen::MatrixXd V;
|
|
Eigen::MatrixXi F;
|
|
|
|
igl::read_triangle_mesh(test_common::data_path("cube.obj"), V, F);
|
|
|
|
auto dims=(V.colwise().maxCoeff()-V.colwise().minCoeff())*2;
|
|
auto cz=(V.col(2).minCoeff()+V.col(2).maxCoeff())/2;
|
|
|
|
// add a triangle intersecting cube
|
|
Eigen::MatrixXd Vp(3,3);
|
|
Vp << V.col(0).minCoeff()-dims(0), V.col(1).minCoeff()-dims(1), cz,
|
|
V.col(0).minCoeff()-dims(0), V.col(1).maxCoeff()+dims(1)*3, cz,
|
|
V.col(0).maxCoeff()+dims(0)*3, V.col(1).maxCoeff()-dims(1), cz;
|
|
Eigen::MatrixXi Fp(1,3);
|
|
Fp << 0,1,2;
|
|
|
|
|
|
Eigen::MatrixXi IF,EE;
|
|
Eigen::MatrixXd EV;
|
|
Eigen::VectorXi EI;
|
|
igl::fast_find_intersections(V,F,Vp,Fp,false,false,IF,EV,EE,EI);
|
|
{
|
|
Eigen::VectorXi I;
|
|
igl::unique(IF,I);
|
|
// should have 8 triangles that are intersecting plane (so 9 unique)
|
|
REQUIRE( I.size()== 9 );
|
|
}
|
|
|
|
// all triangles from the cube intersect the same plane
|
|
REQUIRE( (IF.col(1).array()==0).all() );
|
|
|
|
// and 8 line edges
|
|
REQUIRE( EE.rows()==8 );
|
|
REQUIRE( EV.rows()==2*8 );
|
|
REQUIRE( EI.size()==8 );
|
|
// TODO: check if the edges are at the right place
|
|
}
|
|
|
|
TEST_CASE("fast_find_intersections: coplanar", "[igl]")
|
|
{
|
|
}
|
|
|