3

vtkPointsというVTKクラスについて質問があります。クラスには個々のポイントを挿入する機能がありますが、個々のポイントを削除する機能はありません。これは、vtkPoints :: Modified()を呼び出してグラフィックスパイプラインを再度駆動し、ビューを更新/再レンダリングしてビューを更新する必要がある場合には不便です。vtkPointsを再初期化し、すべてのポイントを再度追加し、ビューを更新/再レンダリングするという明らかなケースは、遅すぎてリソースを大量に消費します。

この問題に対する可能な解決策はありますか?

ありがとう、タイムキャッチャー

4

5 に答える 5

2

http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/DeletePointには、かなり単純な解決策があります。削除する ID をフィルタリングして別の一時的な 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);
}
于 2017-05-23T08:25:34.143 に答える
1

vtkPointsから個々のポイントを削除する方法はありません。ここでの問題に応じて、いくつかの解決策が考えられます。

  1. すべてのポイントを単一のvtkPointインスタンスに保存し、削除するポイントを値で上書きして置き換えます。これは、ポイントクラウドが使用できるメモリの最大量を制限するのに役立ちます。
  2. すべてのポイントを単一のvtkPointインスタンスに保存し、削除するポイントをシーンから遠く離れた値で上書きします。
  3. ポイントごとにvtkPoint、vtkCellArray、およびvtkPolyDataを作成し、vtkAppendPolyDataを使用してそれらを結合します。これにはRemoveInput(vtkPolyData *)があるため、個々のポイントを削除できます。
于 2011-10-12T14:29:56.480 に答える
1

これは、Python で vtkPoints からポイントを削除する方法です。

def deletePoint(vtk_points, *args):
    if isinstance(args[0], list):
        args = args[0]

    points = vtk.vtkPoints()
    for i in range(vtk_points.GetNumberOfPoints()):
        if i in args: continue
        p = vtk_points.GetPoint(i)
        points.InsertNextPoint(p)
    return points
于 2021-07-11T15:39:03.210 に答える
0

ポイントをvtkPointsから削除できるようにすると、そのポイントを使用するデータセットが破損する可能性があります。また、そのポイントを使用するすべてのセルを削除し、ポイントデータ配列を縮小する必要があります。

vtkPointsオブジェクトとそれに依存するものを変更するためにvtkPointsを作成しているフィルターがある場合は、RequestData()メソッドでお勧めします。

于 2011-08-05T16:17:36.077 に答える
0

いいえ: float[] 配列と同じ変更可能性の制限があります。ポイントを削除する唯一の方法は、コピーして除外することです。事前に割り当てられたストレージを超えると、Insert() 操作を行うときに同じコピー ペナルティが発生することに注意してください。

その他の関連するデータ構造オプションには、vtkCollection と vtkPolyData があります。また、PolyData クリップ フィルターの一部のソースを調べて、これらのタイプの操作が内部で実装されている方法を理解することも有益な場合があります。データ構造の制限内で可能な限り高速である必要があります。 .

于 2011-07-30T21:28:44.487 に答える