vtk实战(五十)—计算线段与多边形的交点

来源:互联网 发布:北京新机场 知乎 编辑:程序博客网 时间:2024/05/17 22:23

主要用到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;}

result

0 0
原创粉丝点击