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

OpenCASCADE 布尔运算之元件重构

Posted on 2022-03-03 20:20 eryar 阅读(336) 评论(0)  编辑 收藏 引用 所属分类: 2.OpenCASCADE

OpenCASCADE 布尔运算之元件重构

eryar@163.com

布尔运算(Boolean Operations)的元件重构(Cells Builder)算法是通用合并算法(General Fuse Algorithm)的一个扩充。通用合并算法的结果包含输入Objects所有的分割部件。元件重构算法(Cells Builder Algorithm)通过指定输入Objects中分割部件的保留/去除来重构模型。实现元件重构算法的类是BOPAlgo_CellsBuilder。

为了便于快速测试元件重构算法,在DRAW Test Harness中提供了以下命令:

下面我们在Draw Test Harness中测试这个类的用法:

psphere s1 15
psphere s2 15
psphere s3 15
ttranslate s1 0 0 10
ttranslate s2 20 0 10
ttranslate s3 10 0 0

上述命令创建了三个球体:

bclearobjects
bcleartools
baddobjects s1 s2 s3
bfillds
# rx will contain all split parts
bcbuild rx

其中命令bcbuild会得到分割的所有元件,在DRAW中线框显示如下:

# add to result the part that is common for all three spheres
bcadd res s1 1 s2 1 s3 1 -m 1

命令bcadd 是用来将所有分割元件指定归属关系,从而进行模型重构,最终得到重构结果res。其中s1 1表示分割元件中属于s1,s2 1表示分割元件属于s2,s3 1表示分割元件属于s3。通过这个命令同时加入的这些归属关系表示分割元件中同时属于s1, s2和s3的部分。最终结果就是三个球体s1, s2和s3的公共部分:

# add to result the part that is common only for first and third spheres
bcadd res s1 1 s2 0 s3 1 -m 1

因为s2的后面是0,这个命令表示所有分割元件中同时属于s1和s3但不属于s2的部分:

在线框模式下,可以看到内部的一些边界:

# remove internal boundaries
bcremoveint res

bcremoveint命令可以用来去除内部边界,在线框显示模式下可以看到内部的一些边界线已经去掉:

布尔运算经过General Fuse Algorithm后,通过求交计算出所有的分割元件,经过定位分类算法Classification Algorithm得到分割元件的归属关系,最后通过元件重构算法Cells Builder Algorithm可以得到布尔运算后的结果。关于Cells Builder更多的例子可以参考文档:

 


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