前書き: このブログ投稿は主に、他の小規模パートナーがピットインするために、vtkPolyDataNormals を使用して法線 (AutoOrientNormals) 関数を自動的に調整する場合の問題と解決策を記録します。
vtkPolyDataNormals インターフェイスの説明VTK-vtkPolyDataNormals_Xueyi のブログ - CSDN ブログ
目次
問題の説明
初期データに方向の問題がある場合は、AutoOrientationNormals を使用して調整します。調整された結果は次のようになります。
初期データ AutoOrientationNormals 調整データ クリーンデータ
初期データ
vtkPolyData's Points 8
vtkPolyData's Vertexs 0
vtkPolyData's Lines 0
vtkPolyData's Polys 12
vtkPolyData's Strips 0
vtkPolyData's Cells 12
cell_0:0 1 2
cell_1:3 2 1
cell_2:4 5 6
cell_3:5 7 6
cell_4:2 0 6
cell_5:6 0 4
cell_6:0 1 4
cell_7:4 1 5
cell_8:1 3 5
cell_9:5 3 7
cell_10:3 2 7
cell_11:7 2 6
AutoOrientationNormals 調整済みデータ
vtkPolyData's Points 24
vtkPolyData's Vertexs 0
vtkPolyData's Lines 0
vtkPolyData's Polys 12
vtkPolyData's Strips 0
vtkPolyData's Cells 12
cell_0:2 1 0
cell_1:1 2 3
cell_2:4 5 6
cell_3:5 7 6
cell_4:12 8 20
cell_5:20 8 16
cell_6:9 10 17
cell_7:17 10 18
cell_8:11 14 19
cell_9:19 14 22
cell_10:15 13 23
cell_11:23 13 21
クリーンアップ後のデータ
vtkPolyData's Points 8
vtkPolyData's Vertexs 0
vtkPolyData's Lines 0
vtkPolyData's Polys 12
vtkPolyData's Strips 0
vtkPolyData's Cells 12
cell_0:0 1 2
cell_1:1 0 3
cell_2:4 5 6
cell_3:5 7 6
cell_4:0 2 6
cell_5:6 2 4
cell_6:2 1 4
cell_7:4 1 5
cell_8:1 3 5
cell_9:5 3 7
cell_10:3 0 7
cell_11:7 0 6
STL によって保存されたデータのジオメトリとトポロジは変更されませんが、障害は発生しません (上に表示され、下に表示されません)。
解決:
vtkPolyData データを書き換えるだけです。
vtkPolyData* data = vtkPolyData::New();
data->SetPoints(clean->GetOutput()->GetPoints());
data->SetVerts(clean->GetOutput()->GetVerts());
data->SetLines(clean->GetOutput()->GetLines());
data->SetPolys(clean->GetOutput()->GetPolys());
data->SetStrips(clean->GetOutput()->GetStrips());
data->BuildLinks();
原因分析: vtkCleanPolyData の出力に PointData または CellData データが追加され、上記の現象が発生している可能性があります。