我对一个名为vtkPoints的VTK类有疑问。该类具有插入单个点的功能,但不具有删除单个点的功能。对于需要通过调用vtkPoints :: Modified()来再次驱动图形管道以更新/重新渲染视图的视图进行更新的情况,这是不方便的。重新初始化vtkPoints,再次添加所有点以及更新/重新渲染视图的明显情况太慢且占用大量资源。
有没有可能解决此问题的方法?
谢谢,
追赶者
最佳答案
示例http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/DeletePoint有一个相当简单的解决方案。通过过滤要删除的ID将点复制到另一个临时vtkPoints,然后将其浅拷贝到原始的vtkPoints:
void ReallyDeletePoint(vtkSmartPointer<vtkPoints> points, vtkIdType id)
{
vtkSmartPointer<vtkPoints> newPoints =
vtkSmartPointer<vtkPoints>::New();
for(vtkIdType i = 0; i < points->GetNumberOfPoints(); i++)
{
if(i != id)
{
double p[3];
points->GetPoint(i,p);
newPoints->InsertNextPoint(p);
}
}
points->ShallowCopy(newPoints);
}