南京网站建设案例,快手自媒体平台注册入口,红河企业网络推广外包,网站建设服务天软科技前言#xff1a; vtkPolyDataConnectivityFilter 使用过#xff0c;但网上没有看到完事的教程#xff1b;这里整理一下#xff1b; 提取数据集中连通的多边形数据。
该类是一个滤波器#xff0c;提取cell#xff08;区域#xff09; - 拥有公共点或者满足某个阈值
该类…前言 vtkPolyDataConnectivityFilter 使用过但网上没有看到完事的教程这里整理一下 提取数据集中连通的多边形数据。
该类是一个滤波器提取cell区域 - 拥有公共点或者满足某个阈值
该类在提取连通区域时候有如下6种模式 1 提取数据集中的最大最多点连接区域SetExtractionModeTo LargestRegion(); 2提取指定区域号SetExtractionModeTo SpecifiedRegions(); 3提取共享指定点ids的所有区域SetExtractionModeTo PointSeededRegions(); 4提取共享指定单元ID的所有区域SetExtractionModeTo CellSeededRegions(); 5提取最靠近指定点的区域SetExtractionModeTo ClosestPointRegion(); 6提取所有区域用于着色区域SetExtractionModeTo AllRegions()
这个滤波器是针对多边形数据的。
通过修改 ScalarConnectivity 该布尔值可以修改该类的行为。如果该值为true算法中① 共享一个点的cell 会被认为是几何连通的②cell中点的标量在指定的标量范围内这两种情况下cell会被认为是连通的。
如果 ScalarConnectivity 和 FullScalarConnectivity 都为 true只有当cell中所有的点的标量值满足指定范围该cell才会被认为是连通的。如果 FullScalarConnectivity 为false,cell中任何一个点满足标量的指定范围都会被认为是连通的。
ColorRegionsOn() 用于对不同的连通区域着色。
1. LargestRegion 这种通常取最大的哪个
vtkNewvtkPolyDataConnectivityFilter ConnectivityFilter ;ConnectivityFilter-SetInputConnection(polyData);ConnectivityFilter-SetExtractionModeToLargestRegion();ConnectivityFilter-Updata()
// get largest region
mPolydata-DeepCopy(ConnectivityFilter-GetOutput());
2. SpecifiedRegions 可能会有多个连通区域每个有相应Id;
需要在第6个的基础上取其中一个 vtkNewvtkConnectivityFilter connectivityFilter;connectivityFilter-SetInputData(mVtkPolyDataAll);connectivityFilter-SetExtractionModeToAllRegions();connectivityFilter-ColorRegionsOn();connectivityFilter-Update();int regionNum connectivityFilter-GetNumberOfExtractedRegions() # 获取连通区域的数目
for (int i 0;iregionNum;i)
{connectivityFilter2 vtk.vtkPolyDataConnectivityFilter()connectivityFilter2.SetInputData(mVtkPolyDataAll)connectivityFilter2.InitializeSpecifiedRegionList() # 清空要提取的连通区域号的列表connectivityFilter2.SetExtractionModeToSpecifiedRegions() # 用于提取一个或多个连通区域connectivityFilter2.AddSpecifiedRegion(i) # 设置提取的连通区域号connectivityFilter2.Update()// get one regionvtkPolyData * polydata connectivityFilter2-GetOutput();
} 3. SetExtractionModeToPointSeededRegions 获取包含一个 点 id 的区域
需要先找到一个点Id,这个 id 通常需要使用交互鼠标选择得到 vtkSmartPointervtkPolyDataConnectivityFilter connectivityFilter vtkSmartPointervtkPolyDataConnectivityFilter::New();connectivityFilter-SetInputData(appendFilter-GetOutput());connectivityFilter-SetExtractionModeToPointSeededRegions();connectivityFilter-AddSeed(100);connectivityFilter-Update();// get plydataconnectivityFilter-GetOutput();
4. SetExtractionModeToCellSeededRegions 需要指定一个 cell id;
vtkSmartPointervtkPolyDataConnectivityFilter connectivityFilter vtkSmartPointervtkPolyDataConnectivityFilter::New();connectivityFilter-SetInputData(polyData);connectivityFilter-SetExtractionModeToCellSeededRegions(); connectivityFilter-InitializeSeedList();connectivityFilter-AddSeed(cellId); connectivityFilter-Update();
6. SetExtractionModeToClosestPointRegion 提取最靠近指定点的区域
vtkSmartPointervtkPolyDataConnectivityFilter connectivityFilter vtkSmartPointervtkPolyDataConnectivityFilter::New();connectivityFilter-SetInputData(polyData);connectivityFilter-SetExtractionModeToClosestPointRegion(); connectivityFilter-InitializeSeedList();connectivityFilter-AddSeed(PointId); connectivityFilter-Update();
6. SetExtractionModeToAllRegions 获取所有连通区域 vtkSmartPointervtkPolyDataConnectivityFilter connectFilter1vtkSmartPointervtkPolyDataConnectivityFilter::New();connectFilter1-SetInputConnection(contourFilter-GetOutputPort());connectFilter1-SetExtractionModeToAllRegions();connectFilter1-ColorRegionsOn();connectFilter1-MarkVisitedPointIdsOn();connectFilter1-Update();int regionNumconnectFilter1-GetNumberOfExtractedRegions();qDebug()regionNum:regionNum;