提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
最近在研究Opencascad的开发,有个需求是判断直线与TopoDS_Shpae是否存在相交,如果相交了,则认为是干涉的,如果不相交则是不干涉的。由于直线是无线的,采用直线判断是不合理的,所以要采用有界的直线段来判断。这里我开发的经验之谈,有什么不足的或者有更好方法的,可以在评论区留言。
采用两个点创建有界直线段所使用的的方法为:BRepBuilderAPI_MakeEdge,我们可以查到你说明如下(我就不翻译了):
其源代码为:
BRepBuilderAPI_MakeEdge edgeMaker(pnt1, pnt2);
TopoDS_Edge aEdge = edgeMaker.Edge();
其源代码为:
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;
}
}