vtk實戰(五十)—計算線段與多邊形的交點

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章