前言:本博文主要记录在使用vtkPolyDataNormals进行自动调整Normals(AutoOrientNormals)功能时存在的问题,以及解决方法;供其他小伙伴必坑。
关于vtkPolyDataNormals接口的讲解VTK-vtkPolyDataNormals_雪易的博客-CSDN博客
目录
问题描述
当初始数据存在方向问题时,使用AutoOrientationNormals进行调整,调整后的结果如下:
初始数据 AutoOrientationNormals调整后数据 clean后的数据
初始数据
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
clean后的数据
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数据,导致的上述现象。