当前位置: 首页 > news >正文

OGG几何内核开发-BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound比较

最近在与同事讨论BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound有什么区别。

一、从直觉上来说,BRepAlgoAPI_Fuse会对两个实体相交处理,相交的部分会重新的生成相关的曲面。而BRep_Builder.MakeCompound仅仅是把两个实体组合成一个新的实体,但相交的部分不会处理。

一个球体与一个长方体相交。三种方式:

1、直接放置在相近的位置,结果:两个独立的实体。

参考示例代码:

TopoDS_Shape topoBox = BRepPrimAPI_MakeBox(axis, 3.0, 4.0, 5.0).Shape();
TopoDS_Shape topoSphere = BRepPrimAPI_MakeSphere(axis, 2.5).Shape();

2、调用BRepAlgoAPI_Fuse,做融合,结果:融合成为一个实体。

参考示例代码:

TopoDS_Shape topoBox = BRepPrimAPI_MakeBox(axis, 3.0, 4.0, 5.0).Shape();
TopoDS_Shape topoSphere = BRepPrimAPI_MakeSphere(axis, 2.5).Shape();
TopoDS_Shape fusedShape = BRepAlgoAPI_Fuse(topoBox, topoSphere);

3、调用BRep_Builder.MakeCompound,做聚合,聚合成一个Compound实体。

参考示例代码:

TopoDS_Shape topoBox = BRepPrimAPI_MakeBox(axis, 3.0, 4.0, 5.0).Shape();
TopoDS_Shape topoSphere = BRepPrimAPI_MakeSphere(axis, 2.5).Shape();// Make a compound shape.TopoDS_Compound aComp;BRep_Builder aBuilder;aBuilder.MakeCompound(aComp);aBuilder.Add(aComp, topoBox);aBuilder.Add(aComp, topoSphere);

如下图所示:

二、如何发现BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound区别。

 方式一:点选实体,并切换Shading显示模式。

注意看,中间的Fuse的相交部分,有新的曲线与曲面生成。

方式二:对这些实体进行brep数据结构分析

1、长方体的6个Face ID: 28~33

2、Fuse融合的实体:是个Compound实体,只有一个Solid子实体,7个面中29,31,33是融合前的长方体的面,另4个面是重新生成的。

3、MakeCompound生成的聚合实体:有两个Solid子体。其中6个Face的ID,仍然是聚合前的长方体的6个Face。

所以,BRep_Builder.MakeCompound不会做曲面求交以及重新生成相交部分的曲线曲面的等动作。速度会大大快过BRepAlgoAPI_Fuse。但生成的聚合实体,可能不是你想要的。

三、几何内核信息

基于OCCT 7.7.0内核修改。

四、OGG 1.0内核

OGG 1.0内核,在OCCT 7.7.0的基础上有486项多改进。

编译并试用过后,目前情况是,OGG 1.0与OCCT 7.7.0的兼容性非常好。

只是我对内核的修改,ID生成,不知什么原因,全变成0了。

还需要进一步分析原因。

五、原因很简单,只添加了字段,未生成ID。

参考示例代码:

TopoDS_TShape()
: myFlags (TopoDS_TShape_Flags_Free| TopoDS_TShape_Flags_Modified | TopoDS_TShape_Flags_Orientable)
{id = getIdIndex();
}

编译OGG1.0的内核代码后,重新编译OGG测试插件,id生成正常。

http://www.lryc.cn/news/346571.html

相关文章:

  • C语言 | Leetcode C语言题解之第67题二进制求和
  • 油泼辣子在食品类别可以申请成商标不!
  • 深入探索MySQL视图
  • C语言逻辑语句
  • C++青少年简明教程:基础知识
  • [AutoSar]lauterbach_001_ORTI_CPUload_Trace
  • 课程设计 大学生竞赛系统
  • 优先队列全面讲解
  • 即插即用篇 | YOLOv8 引入多光谱通道注意力 | 频率领域中的通道注意力网络
  • Topaz Video AI 5.0.3激活版 AI视频无损缩放增强
  • ppt通过修改幻灯片母版修改页脚
  • 【数组算法】598. 区间加法
  • Java | Leetcode Java题解之第68题文本左右对齐
  • Windows安装MySQL 8.4.0免安装版
  • 初识java--javaSE(3)--方法,递归,数组,
  • AWS ECS Fargate: 如何获取正在运行的服务
  • Rust 常用 Web 开源代码库
  • 零代码平台助力中国石化江苏油田实现高效评价体系
  • [优选算法]------滑动窗⼝——209. 长度最小的子数组
  • 简述a标签target属性的取值和作用
  • uniapp管理后台编写,基于uniadmin和vue3实现uniapp小程序的管理后台
  • FFmpeg常用API与示例(四)——过滤器实战
  • 解决springboot项目的网站静态页面显示不全问题
  • 表面的相似,本质的不同
  • 问题:幂等性 分布式session
  • Golang | Leetcode Golang题解之第66题加一
  • c++ STL 之栈—— stack 详解
  • 鸿蒙开发接口Ability框架:【(窗口扩展能力)】
  • AutoCAD中密集的填充打散后消失的问题
  • 基于Matplotlib的模型性能可视化工作