Opencascad(C++)-判断直线段与TopoDS_Shape是否相交(干涉)
2023-12-29 16:09:45
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
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;
}
}
文章来源:https://blog.csdn.net/yang19861007/article/details/135290191
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!