2017-08-01 1 views
0

私の現在の問題では、ポイントが2D vtkUnstructuredGrid内にあるかどうかを検出できるようにしたいと考えています。ポイントがVTKの2D非構造格子によって定義された輪郭内にあるかどうかを調べるにはどうすればよいですか?

vtkGeometryFilterを作成し、それを私のunstructuredGridで使用して、vtkSelectEnclosedPointsを使用しようとしました。ただし、vtkSelectEnclosedPointsクラスは、ポイントが輪郭内ではなくサーフェス内にあるかどうかをチェックするように設計されています。したがって、私は2Dでそれを適用しようとすると、私は彼らが内部に位置していることを知っているにもかかわらず、私のポイントは私のメッシュの外にあることがわかります。これは、クラスが本質的に3Dで動作するためです。 ポイントが2D vtkUnstructuredGrid内にあるときを検出するために使用できる同様のクラスまたはアプローチはありますか?このコードは、メッシュを開く前にメッシュの寸法を知ることができます(ユーザー入力です)。

答えて

1

"contour" vtkUnstructuredGridのすべての点が1つのポリゴンを形成しますか?その場合、vtkPolygonクラスを使用できます(例:hereを参照)。あなたの構造化されていないグリッドが複数のポリゴンである場合、私は同じことを使い、すべてのポリゴンを反復します。

+0

私のvtkUnstructuredGridの輪郭内のすべての点は、私のソフトウェアの実行ごとに変わる奇妙な凹面形状を形成します。このジオメトリは時々変更できるポリゴンの数から構成されているため、毎回これらのポリゴンをどのように再構成できるかわかりません。 – BlaB

+0

PointInPolygon関数は凹型ポリゴンでも機能しますので問題ありません。ジオメトリが複数のポリゴンであると言うと、そのポイント内にポイントインポリゴン関数が見つかるまで(または、ポイント内にない場合はすべてをテストするまで)、PointInPolygon関数を使用してすべてのポリゴンをテストします。このソリューションがあなたが探しているものでない場合は、多少のスクリーンショットやコードスニペットが問題をよりよく説明しているかもしれません。テストする境界は、ポリゴンではない場合、どのように定義しますか? – tomj

0

2Dグリッドに基づいてvtkModifiedBSPTreeを作成し、テストするポイントのレイキャスティング(IntersectWithLine)を実行できます。私はこのクラスをpolydataとして三角形分割された地形モデルに使用しました。これは非常に高速で信頼性が高いです。

関連する問題