posts - 348, comments - 537, trackbacks - 0, articles - 0

Open Cascade中的布尔操作

Posted on 2013-01-17 22:23 eryar 阅读(2631) 评论(19)  编辑 收藏 引用 所属分类: 2.OpenCASCADE

Open Cascade中的布尔操作

Modeling Algorithms Boolean Operations

eryar@163.com

布尔操作(Boolean Operations)是通过两个形状(S1S2)的组合来生成新的形状。布尔操作有如下几种类型:

u 并集操作FusionGets all the points in S1 or S2;

u 交集操作CommonGets all the points in S1 and S2;

u 差集操作Cut S1 by S2Gets all the points in S1 and not in S2;

下图所示为三种布尔操作:

Boolean Operations

1. BRepAlgoAPI_BooleanOperation

BRepAlgoAPI_BooleanOperation是布尔操作的基类。

2. BRepAlgoAPI_Fuse

BRepAlgoAPI_Fuse执行布尔并集操作。如下所示:

TopoDS_Shape theBox1 = BRepPrimAPI_MakeBox(50,200,70); 
TopoDS_Shape theBox2 = BRepPrimAPI_MakeBox(-30,150,70); 
TopoDS_Shape FusedShape = BRepAlgoAPI_Fuse(theBox1,theBox2); 

Fuse two boxes

3. BRepAlgoAPI_Common

BRepAlgoAPI_Common执行布尔交集操作,如下所示:

gp_Ax2 axe(gp_Pnt(10,10,10),gp_Dir(1,2,1)); 
TopoDS_Shape theBox = BRepPrimAPI_MakeBox(axe,60,80,100); 
TopoDS_Shape theWedge = BRepPrimAPI_MakeWedge(60.,100.,80.,20.); 
TopoDS_Shape theCommonSurface = BRepAlgoAPI_Common(theBox,theWedge); 

Compute the common surface

4. BRepAlgoAPI_Cut

BRepAlgoAPI_Cut执行布尔差集操作,如下所示:

TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200,40,40); 
TopoDS_Shape theSphere = BRepPrimAPI_MakeSphere(gp_Pnt(100,20,20),80); 
TopoDS_Shape ShapeCut = BRepAlgoAPI_Cut(theSphere,theBox); 

5. BRepAlgoAPI_Section

 

Open Cascade中的布尔操作 Modeling Algorithms-Boolean Operations

Feedback

# re: Open Cascade中的布尔操作  回复  更多评论   

2013-11-01 13:09 by yyf
你好,我想请教一下,OCC中布尔运算的算法是什么?

# re: Open Cascade中的布尔操作  回复  更多评论   

2013-11-01 20:30 by eryar
你好,
你是指的求交算法?
@yyf

# re: Open Cascade中的布尔操作  回复  更多评论   

2013-11-02 10:45 by yyf
嗯,想知道求交的原理是什么。求交算法有很多种,实在是看不懂OCC的求交算法了……
还有看代码时有些东西不是很清楚,比如多次出现的"Pave"或者"PaveBlock"是什么,该怎么理解?
我是个菜鸟,这些东西导师也不懂,只好求助了,万分感谢!

# re: Open Cascade中的布尔操作  回复  更多评论   

2013-11-02 11:57 by eryar
目前对ModelingAlgorithms模块还没深究,不过可以参考下孙家广的《计算机图形学》,里面有对求交的介绍,还比较详细,希望对你有所帮助。
@yyf

# re: Open Cascade中的布尔操作  回复  更多评论   

2013-11-02 20:41 by yyf
万分感谢!

# re: Open Cascade中的布尔操作  回复  更多评论   

2013-11-03 13:49 by eryar
不客气。。。
@yyf

# re: Open Cascade中的布尔操作  回复  更多评论   

2016-01-20 13:28 by cxh
OCC可以对两个面进行布尔运算吗

# re: Open Cascade中的布尔操作  回复  更多评论   

2016-01-20 14:19 by eryar
@cxh
可以,就看结果是不是你想要的。在Draw Test Harness中输入如下命令:
pload ALL
plane p1 0 0 0 0 0 1
plane p2 0 0 0 1 0 0
mkface f1 p1 -1 1 -1 1
mkface f2 p2 -1 1 -1 1
bop f1 f2
bopcut bf
vdisplay bf

# re: Open Cascade中的布尔操作  回复  更多评论   

2016-03-28 11:24 by 啊啊啊
博主您好,,occ是否有用曲面修剪实体的函数?

# re: Open Cascade中的布尔操作  回复  更多评论   

2016-03-28 18:51 by eryar
@啊啊啊

可以试试这个:
BRepAlgoAPI_Section (const TopoDS_Shape &Sh, const Handle< Geom_Surface > &Sf, const Standard_Boolean PerformNow=Standard_True)

# re: Open Cascade中的布尔操作  回复  更多评论   

2016-03-29 20:54 by 啊啊啊
博主您好,晚上试了下您说的那个函数,效果却是求面与体的相交曲线~谢谢您,,我在摸索看看~

# re: Open Cascade中的布尔操作  回复  更多评论   

2016-04-28 15:24 by liyunzhou
博主您好,我初学OCC,你的博文给了我很大的帮助。请问OCC有两个和布尔运算有关的库,TKBO和TKBool,里面分别有BRepAlgoAPI包和BRepAlgo包,分别有一些布尔运算的类。他们的功能有什么区别呢?

# re: Open Cascade中的布尔操作  回复  更多评论   

2016-04-28 23:14 by eryar
@liyunzhou
Hi,
你好!

记得原来看过文档说明是BRepAlgoAPI中的算法较新,BRepAlgo中较老。
功能上没有区别,都是实现Boolean Operation.

Best Regards,
Shing Liu

# re: Open Cascade中的布尔操作  回复  更多评论   

2016-04-29 14:13 by liyunzhou
@eryar
谢谢楼主!我再仔细看一下说明文档。

# re: Open Cascade中的布尔操作  回复  更多评论   

2017-03-15 19:10 by Sirius
您好,我想问一下,occ中说不支持compsolid的bool运算,也就是只支持能使用参数化表达的实体bool运算么?
还有就是,当把一个实体离散化成为三角网后,occ会将一个三角形认作为TopoDS_Face,并且将TopoDS_Face缝合成为TopoDS_ CompSolid,也就是COMPSOLID是么?
如果您有空能回复一下将不胜感激。

# re: Open Cascade中的布尔操作  回复  更多评论   

2017-03-17 09:15 by eryar
@Sirius
你好!

occ支持compsolid的bool 运算,前提是brep体中包含几何曲线和曲面。

当你的brep是从stl之类的文件中导入的话,其中只包含三角网格数据,是不能用bool运算的。

Best Regards,
Shing Liu

# re: Open Cascade中的布尔操作  回复  更多评论   

2017-03-29 21:26 by Sirius
@eryar
好的谢谢楼主,请问您有了解过三角网进行bool运算方面的内容么?

# re: Open Cascade中的布尔操作  回复  更多评论   

2017-03-30 21:40 by eryar
@Sirius

因为三角网没有朝向orientation信息,所以bool后不知道哪些要保留,哪些要去除,最多可以得到面与面相交的多段线,得不到bool后的实体模型。

个人观点。

# re: Open Cascade中的布尔操作  回复  更多评论   

2017-05-10 22:16 by eryar
@eryar
我看到three.js有个插件ThreeBSP,可以提供boolean operation,不知道支不支持网格的?

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理