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

本文主要是介绍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生成正常。

这篇关于OGG几何内核开发-BRepAlgoAPI_Fuse与BRep_Builder.MakeCompound比较的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/980942

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问