VTK 距离可视化 PolyDataDistance DistancePolyDataFilter
1.vtkDistancePolyDataFilter
该接口主要用于计算两个vtkPlyData数据集之间的距离。使用vtkImplicitPolyDataDistance在第一个输入的每个点上计算到第二个输入的有符号距离。可选地,可以计算第二个输入中每个点到第一个输入的有符号距离。这可以通过调用ComputeSecondDistanceOn()来启用。
SignedDistanceOff()设置后,可计算无符号的距离值。
2. vtkImplicitPolyDataDistance
它用于计算点到PolyData数据的距离。通过vtkCellLocator找到最近点,并利用vtkCell的EvaluatePosition方法确定距离。文章还列举了关键参数如EvaluateFunction、SetTolerance等 ;
用于计算输入vtkPolyData上从点x到最近点p的距离。函数的符号被设置为最近曲面点的角加权伪法线与向量x - p之间的点积的符号。几何图形内部的点具有负的距离,外部的点具有正的距离,而输入vtkPolyData上的点具有零的距离。函数的梯度是最近点的角加权伪正规。
3.vtkDistancePolyDataFilter 样例,计算两个 polydata 距离,并显示
4.vtkImplicitPolyDataDistance 样例,计算点到polydata 距离,并显示
vtkImplicitPolyDataDistance* imp = vtkImplicitPolyDataDistance::New();
imp->SetInput(src);
// Calculate distance from points.
int numPts = mesh->GetNumberOfPoints();
vtkDoubleArray* pointArray = vtkDoubleArray::New();
pointArray->SetName("Distance");
pointArray->SetNumberOfComponents(1);
pointArray->SetNumberOfTuples(numPts);
for (vtkIdType ptId = 0; ptId < numPts; ptId++)
{
double pt[3];
mesh->GetPoint(ptId, pt);
double val = imp->EvaluateFunction(pt);
double dist = SignedDistance ? (NegateDistance ? -val : val) : fabs(val);
pointArray->SetValue(ptId, dist);
}