opencascade TopoDS_Builder 源码学习

news2024/11/24 5:03:38

opencascade TopoDS_Builder
在这里插入图片描述

前言

构建器(Builder)用于创建拓扑数据结构。它是构建器类层次结构的根。
构建器中包含三组方法:

  1. Make 方法用于创建形状(Shapes)。
  2. Add 方法用于将一个形状包含到另一个形状中。
  3. Remove 方法用于从一个形状中移除另一个形状。

构建器中的方法不是静态的,它们可以在继承的构建器中被重新定义。
此构建器不提供用于创建顶点(Vertices)、边(Edges)、面(Faces)、壳(Shells)或实体(Solids)的 Make 方法。这些方法在继承的构建器中提供,因为它们必须提供几何形状信息。
Add 方法遵循以下规则:
任何形状(SHAPE)都可以被添加到复合形状(COMPOUND)中。
只有实体(SOLID)可以被添加到复合实体(COMPSOLID)中。
只有壳(SHELL)、边(EDGE)和顶点(VERTEX)可以被添加到实体(SOLID)中。边和顶点可以是内部的或外部的。
只有面(FACE)可以被添加到壳(SHELL)中。
只有线框(WIRE)和顶点(VERTEX)可以被添加到面(FACE)中。顶点可以是内部的或外部的。
只有边(EDGE)可以被添加到线框(WIRE)中。
只有顶点(VERTEX)可以被添加到边(EDGE)中。
顶点(VERTEX)中不能添加任何内容。

方法

1

创建一个空的线框(Wire)。
void MakeWire (TopoDS_Wire& W) const;

2

创建一个空的壳(Shell)。
void MakeShell (TopoDS_Shell& S) const;

3

创建一个覆盖整个3D空间的实体(Solid)。
void MakeSolid (TopoDS_Solid& S) const;

4

创建一个空的复合实体(Composite Solid)。
void MakeCompSolid (TopoDS_CompSolid& C) const;

5

创建一个空的组合体(Compound)。
void MakeCompound (TopoDS_Compound& C) const;

6

将形状C添加到形状S中。
异常如果S不是自由状态且无法被修改,则抛出TopoDS_FrozenShape异常。
如果S和C不兼容,则抛出TopoDS__UnCompatibleShapes异常。
void Add (TopoDS_Shape& S, const TopoDS_Shape& C) ;

7

从形状S中移除形状C。
异常如果S被冻结且无法被修改,则抛出TopoDS_FrozenShape异常。
void Remove (TopoDS_Shape& S, const TopoDS_Shape& C)

用法用例

在OpenCASCADE(OCCT)中,TopoDS_Builder 是一个用于构建复杂拓扑结构的类,它允许用户按照自定义的方式构建 TopoDS_Shape 对象,例如顶点、边、面或实体等。下面是一个简单的示例,展示如何使用 TopoDS_Builder 类来构建一个简单的几何体,并添加顶点、边和面。

示例:使用 TopoDS_Builder 构建几何体

#include <iostream>
#include <TopoDS.hxx>
#include <TopoDS_Builder.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Face.hxx>

int main() {
    // 创建一个空的 TopoDS_Shape 对象
    TopoDS_Shape shape;
    TopoDS_Builder builder;
    builder.MakeCompound(shape); // 创建一个复合体

    // 添加一个顶点
    TopoDS_Vertex vertex;
    builder.MakeVertex(vertex, gp_Pnt(0.0, 0.0, 0.0)); // 在原点创建一个顶点
    builder.Add(shape, vertex); // 将顶点添加到复合体中

    // 添加一条边
    TopoDS_Edge edge;
    builder.MakeEdge(edge, gp_Pnt(0.0, 0.0, 0.0), gp_Pnt(1.0, 0.0, 0.0)); // 创建一条连接两个顶点的边
    builder.Add(shape, edge); // 将边添加到复合体中

    // 添加一个面
    TopoDS_Face face;
    builder.MakeFace(face); // 创建一个空面
    builder.Add(shape, face); // 将面添加到复合体中

    // 输出复合体中包含的元素数量
    std::cout << "Number of elements in the compound shape: " << shape.NbChildren() << std::endl;

    return 0;
}

示例说明:

  1. 包含头文件

    • <TopoDS.hxx>:包含了 TopoDS_Shape 及其相关类型的定义。
    • <TopoDS_Builder.hxx>:定义了 TopoDS_Builder 类,用于构建拓扑结构。
    • <TopoDS_Vertex.hxx><TopoDS_Edge.hxx><TopoDS_Face.hxx>:定义了分别用于顶点、边和面的 TopoDS 类型。
  2. 创建 TopoDS_Shape 对象

    • 使用 TopoDS_Builder builder; 创建一个 TopoDS_Builder 实例。
    • 使用 builder.MakeCompound(shape); 创建一个空的复合体 TopoDS_Shape 对象。
  3. 添加顶点、边和面

    • 使用 builder.MakeVertex(vertex, gp_Pnt(0.0, 0.0, 0.0)); 创建一个位于原点的顶点,并将其添加到复合体中。
    • 使用 builder.MakeEdge(edge, gp_Pnt(0.0, 0.0, 0.0), gp_Pnt(1.0, 0.0, 0.0)); 创建一条从原点到 (1, 0, 0) 的边,并将其添加到复合体中。
    • 使用 builder.MakeFace(face); 创建一个空的面,并将其添加到复合体中。
  4. 输出

    • 使用 shape.NbChildren() 获取复合体中包含的子元素数量,并输出结果。

示例的运行结果:

如果一切顺利,该示例将输出复合体中包含的元素数量,应该是 3(一个顶点、一条边和一个面)。

这个示例展示了如何使用 TopoDS_Builder 类来逐步构建复杂的拓扑结构。在实际应用中,可以根据需要添加更复杂的拓扑实体,并使用OpenCASCADE提供的各种工具和算法进行更高级的操作和分析。

参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1986607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

访问网站显示不安全怎么办?

访问网站时显示“不安全”&#xff0c;针对不同的原因有不同的解决方式&#xff0c;下面是常见的几种原因和对应的解决办法。 1.未启用HTTPS协议 如果网站仅使用HTTP协议&#xff0c;数据传输没加密&#xff0c;因此会被浏览器标记为“不安全”。解决办法是启用HTTPS协议,给…

可观察性与人工智能的结合:解锁数据收集、分析和预测的新领域

随着软件系统变得越来越复杂&#xff0c;可观察性&#xff08;根据系统外部输出了解系统内部状态的能力&#xff09;已成为开发人员和运营团队的一项关键实践。 传统的可观测性方法难以跟上现代应用的规模和复杂性。随着遥测数据量的增加&#xff0c;导航变得成本高昂且复杂。…

【计算机组成原理】各种周期与字长的概念辨析

前言 在计算机组成原理中&#xff0c;我们会在做题时遇到各种周期与字长的概念辨析题&#xff08;非常重要&#xff09;&#xff0c;因此我们再次统一做一个梳理&#xff0c;帮助大家在理解的基础上进行记忆&#xff0c;并附上几道好题辅助理解。 概念讲解 指令周期&#xff…

【轻松掌握】使用Spring-AI轻松访问大模型本地化部署并搭建UI界面访问指南

文章目录 读前必看什么是Spring-AI目前已支持的对接模型本文使用Spring-AI版本构建项目选择必要的依赖配置系统变量 聊天模型API配置文件方式1-使用默认配置方式2-自定义配置配置其他参数使用示例 图像模型API配置文件方式1-使用默认配置方式2-自定义配置配置其他参数使用示例 …

N5 - 使用Gensim库训练word2vec模型

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目录 环境步骤分词训练word2vec模型模型应用计算词汇间的相似度找出不匹配的词汇计算词汇的词频 总结与心得体会 环境 安装gensim和jieba库 pip install gen…

mysql实现MHA

一、什么是MHA 高可用模式下的故障切换&#xff0c;基于主从复制&#xff0c;单点故障和主从复制不能切换的问题&#xff0c;架构需要奇数台&#xff0c;至少需要3台&#xff0c;故障切换过程0-30秒&#xff0c;vip地址&#xff0c;根据vip地址所在的主机&#xff0c;确定主备…

全网最最实用--边缘智能的常见微调方式以及适用场景

文章目录 1. BitFit2. Adapter3. Prompt-Tuning4. Prefix-Tuning5. LoRA (Low-Rank Adaptation)6. QLoRA (Quantized Low-Rank Adaptation)7. LongLoRA总结 1. BitFit https://arxiv.org/abs/2106.10199 主要做法&#xff1a; BitFit&#xff08;Bias Term Fine-Tuning&#…

日撸Java三百行(day15:栈的应用之括号匹配)

目录 一、栈的括号匹配 二、代码实现 1.方法创建 2.数据测试 3.完整的程序代码 总结 一、栈的括号匹配 要完成今天的任务&#xff0c;需要先来了解一下什么是栈的括号匹配。首先&#xff0c;顾名思义&#xff0c;括号匹配就是指将一对括号匹配起来&#xff0c;我们给定一…

HashTable源码

引子 看到一个关于HashMap和HashTable对比的面试题&#xff0c;于是简单看了下HashTable的源码&#xff0c;简单记录下。 概述 与HashMap相似的哈希表结构&#xff0c;有很多不同点&#xff1a; 节点数组的初始化是在构造函数中完成的&#xff0c;初始容量11&#xff0c;负载因…

基于JSP、java、Tomcat三者的项目实战--校园交易网(3)主页--历史清单

技术支持&#xff1a;JAVA、JSP 服务器&#xff1a;TOMCAT 7.0.86 编程软件&#xff1a;IntelliJ IDEA 2021.1.3 x64 前文几个功能的实现的博客 基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网&#xff08;1&#xff09;-项目搭建&#xff08;前期准备工作&a…

工具学习_CVE Binary Tool

1. 工具概述 CVE Binary Tool 是一个免费的开源工具&#xff0c;可帮助您使用国家漏洞数据库&#xff08;NVD&#xff09;常见漏洞和暴露&#xff08;CVE&#xff09;列表中的数据以及Redhat、开源漏洞数据库&#xff08;OSV&#xff09;、Gitlab咨询数据库&#xff08;GAD&am…

鸿蒙AI功能开发【人脸活体验证控件】 机器学习-场景化视觉服务

人脸活体验证控件 介绍 本示例展示了使用视觉类AI能力中的人脸活体验证能力。 本示例模拟了在应用里&#xff0c;跳转人脸活体验证控件&#xff0c;获取到验证结果并展示出来。 需要使用hiai引擎框架人脸活体验证接口kit.VisionKit.d.ts。 效果预览 使用说明&#xff1a; …

RK3568平台开发系列讲解(文件系统篇)文件描述符 fd(File Descriptor)是什么?

📢USB控制传输是USB通信中的一种基本传输类型,用于控制USB设备的配置和操作。它由 Setup 阶段和 Data 阶段组成,可用于发送命令、读取状态、配置设备等操作。 一、文件描述符 fd(File Descriptor)是什么? 文件描述符 fd 是一个非负整数,用来标识一个打开的文件,由内核…

用户态tcp协议栈四次挥手-服务端发送fin时,客户端不返回ac

问题&#xff1a; 四次挥手时&#xff0c;服务端发送fin后&#xff0c;客户端不发送ack&#xff0c;反而过了2min后发了个rst报文 62505是客户端&#xff0c;8889是服务端 解决&#xff1a; 服务端返回fin报文时带上ack标记

微波武器反无人机技术详解

微波武器反无人机技术中展现出了独特的优势和广阔的应用前景。以下是对微波武器在反无人机技术方面的详细解析&#xff1a; 一、微波武器概述 微波武器是指配备高功率微波&#xff08;High-Power Microwave, HPM&#xff09;载荷的作战武器&#xff0c;能够发射高能量的电磁脉…

在AI浪潮中保持核心竞争力:XIAOJUSURVEY的智能化探索

讲点实在的 在AI技术快速发展的今天&#xff0c;各行各业的工作方式正经历深刻变革。尤其是身处浪潮中甚至最有机会推动发展的我们&#xff0c;更需要置身事内。 ChatGPT、Copilot等的普及&#xff0c;使得编程效率显著提升&#xff0c;但也带来了新的挑战。为了在这种变革中…

C++输出为非科学计数法不同数据类型表示范围

目录 一、C数据类型 1、基本的内置类型 2、修饰符 &#xff08;1&#xff09;signed 和 unsigned &#xff08;2&#xff09;short 和 long &#xff08;3&#xff09;区别总结 默认情况 二、类型转换 1、静态转换&#xff08;Static Cast&#xff09; 2、动态转换&a…

C语言——函数(1)

函数 定义&#xff1a; 函数就是用来完成一定功能的一段代码&#xff08;程序&#xff09;模块。 在设计较大的程序时&#xff0c;一般将其分为若干个程序模块&#xff0c;每个模块用来实现一定的功能。 函数优势&#xff1a; 我们可以通过函数提供功能给别人使用&#xff0c…

美国商超入驻Homedepot,传统家织厂家跨境赛道新选择?——WAYLI威利跨境助力商家

美国商超入驻Homedepot为传统家织厂家提供了新跨境选择。据《Interactive Home Shopping》一文&#xff0c;电子购物让消费者更易定位和比较产品。传统家织厂家可通过Homedepot等大型零售商&#xff0c;利用其平台优势&#xff0c;接触更广泛消费者。 根据《Homedepot之争——家…

【八股文】Redis

1.Redis有哪些数据类型 常用的数据类型&#xff0c;String&#xff0c;List&#xff0c;Set&#xff0c;Hash和ZSet&#xff08;有序&#xff09; String&#xff1a;Session&#xff0c;Token&#xff0c;序列化后的对象存储&#xff0c;BitMap也是用的String类型&#xff0c;…