VTK-vtkIntersectionPolyDataFilter

前言:本博文主要介绍vtkIntersectionPolyDataFilter的功能及实现原理,希望能帮助小伙伴更好的理解该接口。

 vtkIntersectionPolyDataFilter

描述:

vtkIntersectionPolyDataFilter计算两个vtkPolyData对象之间的交集。第一各输出是一组Lines,标记输入vtkPolyData对象的交集,并包含五个不同的附加数据数组:SurfaceID, Input0CellID,Input1CellID,NewCell0ID,NewCell1ID。

SurfaceID:点数据数组,包含关于每个点的原点曲面的信息

Input0CellID:单元格数据数组,包含第一个输入网格上的原始单元格ID号

Input1CellID:单元格数据数组,包含第二个输入网格上的原始单元格ID号

NewCell0ID:单元格数据数组,包含关于它接触的重新网格的第一个输入表面的哪些单元格的信息(如果分割)

NewCell1ID:单元格数据数组,包含关于它在重新网格的第二个输入表面上接触哪些单元格的信息(如果分割)

第二个和第三个输出分别是第一个和第二个输入vtkPolyData。可选地,两个输出vtkPolyData可以通过重新网格沿着交点线分割。可选地,可以在重新网格结束时清洗和检查表面。

如果网格被分割,输出vtkpolydata包含三个可能的数据数组:

IntersectionPoint:这是一个布尔值,指示该点是否在两个输入对象的边界上

BadTriangle: 如果表面被清理和检查,这是一个单元格数据数组,指示单元格是否有多个相邻的边。对于这个数组,流形表面将处处为0 !

FreeEdge:如果表面被清洁和检查,这是一个单元格数据数组,指示单元格是否有自由边。一个不透水的表面,这个数组处处为0 !

注意:这个过滤器不是设计来执行二维布尔运算的,实际上依赖于没有共平面重叠单元格的输入。

存在问题:三角面片划分不正确

 追踪问题为vtkPolygon的BoundedTriangulate造成的。

 BoundedTriangulate结果示意图

Triangulate与 NonDegenerateTriangulate结果示意图

 理想的结果示意图

SplitCell

1. IntersectionMapType* map为多关联的Map,记录与当前Cell相关的相交线(interLines)的ID。

2. 获取与当前Cell相关的所有相交线。

   计算每个相交线的点,并采用vtkPointLocator进行插值。ptIdMap为当前点的ID,对应到当前Cell插值点的ID。

相关测试代码

zxIntersectionPolyDataFilter* PolyDataIntersection = zxIntersectionPolyDataFilter::New();
PolyDataIntersection->SetInputData(0, clean1->GetOutput());
PolyDataIntersection->SetInputData(1, clean2->GetOutput());
PolyDataIntersection->SplitFirstOutputOn();
PolyDataIntersection->SplitSecondOutputOn();
PolyDataIntersection->Update();

emit sendBooleanResult(PolyDataIntersection->GetOutput());

vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
mapper->SetInputConnection(PolyDataIntersection->GetOutputPort(1));

emit sendBooleanResult(mapper->GetInput());
vtkPolyDataMapper* mapper2 = vtkPolyDataMapper::New();
mapper2->SetInputConnection(PolyDataIntersection->GetOutputPort(2));
emit sendBooleanResult(mapper2->GetInput());
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪易

给我来点鼓励吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值