跳转至

提取连通域

[主要参考:vtk帮助文档](https://lorensen.github.io/VTKExamples/site/Cxx/#surface-reconstruction 案例源码

需要提取stl模型的最大连通域,之前也没接触过,搜了下vtk有现成的连通域处理类 vtkPolyDataConnectivityFilter 具体用法

https://vtk.org/doc/nightly/html/classvtkPolyDataConnectivityFilter.html

vtkpolydataconnectivityfilter是一个筛选器,它提取共享公共点和/或满足标量阈值条件的单元格。

此筛选器专门用于多边形数据。这意味着它运行得更快,更容易构建处理多边形数据的可视化网络。 可以通过启用布尔ivar scalarconnectivity来修改vtkpolydataconnectivityfilter的行为。

如果此标志处于启用状态,则修改连接算法,以便仅当1)单元格是几何连接的(共享一个点)和2)单元格的点的标量值落在指定的标量范围内时,才认为单元格是连接的。如果启用scalarconnectivity和fullscalarconnectivity,则单元格的所有点都必须位于为该单元格指定的标量范围内,才能符合连接条件。

如果fullscalarconnectivity处于禁用状态,则单元格的任何一个点都可能位于用户指定的标量范围内,以便单元格符合连接条件。

scalarconnectivity的这种用法对于选择单元格以供以后处理特别有用。

常用函数

  • 提取数据集中的最大(最多点)连接区域:SetExtractionModeToLargestRegion();

  • 提取指定区域号:SetExtractionModeToSpecifiedRegions();

  • 提取共享指定点ids的所有区域:SetExtractionModeToPointSeededRegions();

  • 提取共享指定单元ID的所有区域:SetExtractionModeToCellSeededRegions();

  • 提取最靠近指定点的区域:SetExtractionModeToClosestPointRegion();

  • 提取所有区域(用于着色区域):SetExtractionModeToAllRegions();

vtkNew<vtkPolyDataConnectivityFilter> connect;
connect->SetInputConnection(surface_reader_->GetOutputPort()->GetOutputPort());
connect->SetExtractionModeToLargestRegion();
connect->AddSeed(100);