VTK - Boolean布尔操作
创始人
2024-01-30 09:09:40
0

简介:本博文记录vtk关于布尔操作的应用,以及其中的坑,供小伙伴参考。

VTK中包含可以执行布尔操作的接口有vtkImplicitBoolean,vtkBooleanOperationPolyDataFilter。

布尔操作包括:布尔加,布尔减和布尔交。

1.vtkImplictiBoolean

位置:Filters\DataModel

用途:隐函数,用于布尔运算

用法:

    // create a sphereauto sphere =vtkSmartPointer::New();sphere->SetCenter(1.0, 0.0, 0.0);sphere->SetRadius(1);//create a boxauto box =vtkSmartPointer::New();box->SetBounds(-1, 1, -1, 1, -1, 1);// combine the two implicit functionsauto boolean =vtkSmartPointer::New();boolean->SetOperationTypeToDifference();// boolean->SetOperationTypeToUnion()// boolean->SetOperationTypeToIntersection()boolean->AddFunction(box);boolean->AddFunction(sphere);//The sample function generates a distance function from the implicit//function.This is then contoured to get a polygonal surface.auto sample =vtkSmartPointer::New();sample->SetImplicitFunction(boolean);sample->SetModelBounds(-1, 2, -1, 1, -1, 1);sample->SetSampleDimensions(40, 40, 40);sample->ComputeNormalsOff();// contourauto surface =vtkSmartPointer::New();surface->SetInputConnection(sample->GetOutputPort());surface->SetValue(0, 0.0);//surface->vtkPolyDataMapper->vtkActor

2.vtkBooleanOperationPolyDataFilter

位置:Filters\General

用途:该接口用于计算边界的Union,intersection,difference。

限制:输入的数据可接受non-manifold,但生成的结果可能不是我们想要的。

vtkPolyData的边界包括:
1)边界(boundary),只被一个多边形使用的边,或者直线单元;
2)非流形(non-manifold),被三个以上的多边形共用的边;
3)特征边(feature edges),被两个三角形使用且二面角大于特征角的边;
4)流形边(manifold edges),只被两个多边形使用的边。

检测是不是manifold,可通过vtkFeatureEdges接口进行检测

    //	检测模型是否为ClosedvtkSmartPointer closedSurface =vtkSmartPointer::New();closedSurface->SetInputConnection(diskSource->GetOutputPort());closedSurface->FeatureEdgesOff();closedSurface->BoundaryEdgesOn();closedSurface->NonManifoldEdgesOn();closedSurface->Update();int numberOfOpenEdges = closedSurface->GetOutput()->GetNumberOfCells();if (numberOfOpenEdges > 0){std::cout << "Surface is not closed" << std::endl;}else{std::cout << "Surface is closed" << std::endl;}

用法:

vtkBooleanOperationPolyDataFilter* operation = vtkBooleanOperationPolyDataFilter::New();
operation->SetOperationToUnion();vtkPolyData* polyData1 = ...;vtkPolyData* polyData2 = ...;operation->SetInputData(0, polyData1);
operation->SetInputData(1, polyData2);
operation->Update();

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...