VTK计算A点在B点切平面上的投影点
求模型上某点的切平面,不需要用到该点的切向量,只需要该点的法向量。使用vtkPolyDataNormals计算模型的法向量,然后用vtkPlane求某点的切平面。vtkPlane中提供投影的函数ProjectPoint。
重点:ProjectPoint是vtkPlane的静态方法,可以直接调用,不需要为每个顶点创建切平面对象。
- 函数介绍:
static void ProjectPoint(
const double x[3], const double origin[3], const double normal[3], double xproj[3]);
//x: 被投影的A点
//origin: B点坐标
//normal: B点法向量
//xproj: A点投影结果
- 核心代码:
//计算法向量
vtkNew<vtkPolyDataNormals> normalFilter;
normalFilter->SetInputData(polyData);
normalFilter->SetComputePointNormals(true);
normalFilter->Update();
normals = normalFilter->GetOutput()->GetPointData()->GetNormals();
//顶点A和顶点B,计算顶点A在B切平面上的投影点
vtkIdType aid = 0, bid = 1;
double a[3],b[3];
polyData->GetPoint(aid, a);
polyData->GetPoint(bid, b);
double normal_b[3];
normals->GetTuple(bid, normal_b);
//此时已经获得顶点A和B的坐标值和法向量
double xproj[3]; //投影结果
vtkPlane::ProjectPoint(a, b, normal_b, xporj);