我对一个名为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);
}

10-06 04:24