主要用到IntersectWithLine()方法,如果交叉点发生,该方法返回非0值,并且计算交叉点坐标。
#include <vtkSmartPointer.h>
#include <vtkPoints.h>
#include <vtkPolygon.h>
int main()
{
vtkSmartPointer<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();
points->InsertNextPoint(0.0, 0.0, 0.0);
points->InsertNextPoint(1.0, 0.0, 0.0);
points->InsertNextPoint(1.0, 1.0, 0.0);
points->InsertNextPoint(0.0, 1.0, 0.0);
vtkSmartPointer<vtkPolygon> polygon = vtkSmartPointer<vtkPolygon>::New();
polygon->GetPoints()->DeepCopy(points);
polygon->GetPointIds()->SetNumberOfIds(4); // 4 corners of the square
polygon->GetPointIds()->SetId(0, 0);
polygon->GetPointIds()->SetId(1, 1);
polygon->GetPointIds()->SetId(2, 2);
polygon->GetPointIds()->SetId(3, 3);
double p1[3] = { 0.1, 0, -1.0 };
double p2[3] = { 0.1, 0, 1.0 };
double tolerance = 0.001;
double t;
double x[3];
double pcoords[3];
int subId;
vtkIdType iD = polygon->IntersectWithLine(p1, p2, tolerance, t, x, pcoords, subId);
std::cout << "intersected? " << iD << std::endl;
std::cout << "intersection: " << x[0] << " " << x[1] << " " << x[2] << std::endl;
return 0;
}