使用VTK中的vtkFeatureEdges类,可以提取四种边界,分别为:
1.边界(boundary):只被一个多边形使用的边,或者直线单元;
2.非流行(non-manifold):被三个以上的多边形共用的边;
3.特征边(feature edges):被两个三角形使用,并且两个三角形之间的夹角大于特征角度(可自行设置此角度);
4.流行边(manifold edges):只被两个多边形使用的边。
通过On/Off来设置是否提取所需要的边:
vtkSmartPointer<vtkOBJReader> target_reader = vtkSmartPointer<vtkOBJReader>::New();
target_reader->SetFileName(target_filename.c_str());
target_reader->Update();
vtkSmartPointer<vtkFeatureEdges> boundaryEdges = vtkSmartPointer<vtkFeatureEdges>::New();
boundaryEdges->SetInputConnection(target_reader->GetOutputPort());
boundaryEdges->BoundaryEdgesOn();
boundaryEdges->FeatureEdgesOff();
boundaryEdges->ManifoldEdgesOff();
boundaryEdges->NonManifoldEdgesOff();
boundaryEdges->Update();
利用vtkExtractEdges类可提取所有边:
vtkNew<vtkExtractEdges> extractEdges;
extractEdges->SetInputConnection(target_reader->GetOutputPort());
extractEdges->Update();