提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 1、前言
- 2、根据两个点创建有界直线段
- 3、判断TopoDS_Shape与直线段相交
1、前言
最近在研究Opencascad的开发,有个需求是判断直线与TopoDS_Shpae是否存在相交,如果相交了,则认为是干涉的,如果不相交则是不干涉的。由于直线是无线的,采用直线判断是不合理的,所以要采用有界的直线段来判断。这里我开发的经验之谈,有什么不足的或者有更好方法的,可以在评论区留言。
2、根据两个点创建有界直线段
采用两个点创建有界直线段所使用的的方法为:BRepBuilderAPI_MakeEdge,我们可以查到你说明如下(我就不翻译了):
其源代码为:
BRepBuilderAPI_MakeEdge edgeMaker(pnt1, pnt2);TopoDS_Edge aEdge = edgeMaker.Edge();
3、判断TopoDS_Shape与直线段相交
其源代码为:
TopoDS_Shape shape = productHandle->GetShape(); //这里获取的是TopoDS_Shape,根据自己的需求来改TopExp_Explorer exp;for (exp.Init(shape, TopAbs_SOLID); exp.More(); exp.Next()){TopoDS_Solid face = TopoDS::Solid(exp.Current());BRepExtrema_DistShapeShape extrema(aEdge, face);if (extrema.IsDone() && extrema.NbSolution() > 0 && extrema.Value() < 1e-6){return true;}}for (exp.Init(shape, TopAbs_SHELL); exp.More(); exp.Next()){TopoDS_Shell face = TopoDS::Shell(exp.Current());BRepExtrema_DistShapeShape extrema(aEdge, face);if (extrema.IsDone() && extrema.NbSolution() > 0 && extrema.Value() < 1e-6){return true;}}