vtkPolyDataNormals可以用于计算poly data中points和cell的法向量,方便处理一些数据集。
下面的例子显示了vtkPolyDataNormals作用在正方体和球体的效果。
注:为了不影响阅读体验,此文仅展示关键代码,所有例子的完整代码和输出可以浏览:【VTK】vtkPolyDataNormals example
正方体
人为构造6个面的正方体,每一个cell是一个正方形。使用points和polys构造polydata,之后使用vtkPolyDataNormals 处理polydata。由此我们能够得到point的在mesh上的的normal和cell的normal。
int main(int argc, char *argv[])
{
// ...
vtkSmartPointer<vtkPolyData> pd =
vtkSmartPointer<vtkPolyData>::New();
pd->SetPolys( polys );
pd->SetPoints( points );
vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData( pd );
vtkSmartPointer<vtkActor> surfaceActor =
vtkSmartPointer<vtkActor>::New();
surfaceActor->SetMapper( mapper );
vtkSmartPointer<vtkPolyDataNormals> pdNormals =
vtkSmartPointer<vtkPolyDataNormals>::New();
pdNormals->SetInputData( surfaceActor->GetMapper()->GetInput() );
pdNormals->ComputeCellNormalsOn();
pdNormals->Update();
vtkPointData* ptData = pdNormals->GetOutput()->GetPointData();
vtkDataArray* ptNormals = pdNormals->GetOutput()->GetPointData()->GetNormals();
cout << "For points in every cell: \n";
cout << ptNormals->GetNumberOfTuples() << endl;
for(