vtk中常用的几种Normal接口,如:vtkPolyDataNormals,vtkTriangleMeshPointNormals,vtkPCANormalEstimation,vtkNormalizeMatrixVectors,vtkImageNormalize等。
vtkPolyData* pd;
vtkSmartPointer<vtkPolyDataNormals> pdNormals =
vtkSmartPointer<vtkPolyDataNormals>::New();
pdNormals->SetInputData(pd);
pdNormals->ComputeCellNormalsOn();//ComputePointNormalsOn默认为on
pdNormals->Update();
vtkPointData* ptData = pdNormals->GetOutput()->GetPointData();
vtkDataArray* ptNormals = pdNormals->GetOutput()->GetPointData()->GetNormals();
//获取每个Cell中每个点的方向
for( int i = 0; i < ptNormals->GetNumberOfTuples(); ++i )
{
double value[3];
ptNormals->GetTuple( i, value );
printf( "Value: (%lf, %lf, %lf)\n", value[0], value[1], value[2] );
}
//获取每个Cell的方向
if( pdNormals->GetOutput()->GetCellData() && pdNormals->GetOutput()->GetCellData()->GetNormals() )
{
vtkDataArray* cellNormals = pdNormals->GetOutput()->GetCellData()->GetNormals();
cout << cellNormals->GetNumberOfTuples() << endl;
for( int i = 0; i < cellNormals->GetNumberOfTuples(); ++i )
{
double value[3];
cellNormals->GetTuple( i, value );
printf( "Value: (%lf, %lf, %lf)\n", value[0], value[1], value[2] );
}
}