Open CASCADE学习|实现Extrude功能

首先定义了一些基本的几何元素,如线、圆和平面,然后使用makeExtrudebydir函数来对一个面进行挤出操作。下面是详细过程:

定义Extrude函数:makeExtrudebydir函数接受一个TopoDS_Shape对象和一个gp_Vec对象作为参数。TopoDS_Shape是OCCT中用于表示所有拓扑实体的基类,而gp_Vec是表示三维向量的类。函数首先检查输入的形状类型,如果是线(TopAbs_WIRE),则将其转换为面(BRepBuilderAPI_MakeFace),因为挤出操作需要一个面作为基础。

执行Extrude操作:如果输入的形状是面,那么使用BRepPrimAPI_MakePrism类来执行挤出操作。这个类需要两个参数:基础面和挤出方向的向量。函数创建了BRepPrimAPI_MakePrism的实例,并将基础面和挤出方向传递给它,从而生成挤出后的三维形状。

异常处理:函数中使用了try-catch块来捕获并处理可能出现的异常。如果发生Standard_Failure异常,将打印错误信息;如果发生其他未知异常,将打印一条通用错误消息。

创建几何元素:在main函数中,首先定义了一些点和平面,然后使用这些点创建了线和圆。接着,使用BRepBuilderAPI_MakeEdge和BRepBuilderAPI_MakeWire创建了边和线,最后使用BRepBuilderAPI_MakeFace创建了一个面。

创建视图并显示:使用Viewer类创建了一个视图,并将创建的线和挤出后的面添加到视图中。然后,启动消息循环以显示几何形状。

代码如下:

#include <TopoDS.hxx>#include <gp_Ax3.hxx>#include <BRepPrimAPI_MakePrism.hxx>#include <GC_MakeSegment.hxx>#include <BRepBuilderAPI_MakeEdge.hxx>#include <gp_Circ.hxx>#include <gp_Pln.hxx>#include <BRepBuilderAPI_MakeFace.hxx>#include <GC_MakeCircle.hxx>#include <BRepBuilderAPI_MakeWire.hxx>#include <BRepOffsetAPI_MakePipe.hxx>#include <GC_MakeArcOfCircle.hxx>#include <gp_GTrsf.hxx>#include <BRepBuilderAPI_Transform.hxx>#include"Viewer.h"TopoDS_Shape makeExtrudebydir(const TopoDS_Shape& oriShape, const gp_Vec& dir){    TopoDS_Shape rstShape;    try    {        TopoDS_Shape oriShape1 = oriShape;        if (oriShape1.ShapeType() == TopAbs_WIRE)            oriShape1 = BRepBuilderAPI_MakeFace(TopoDS::Wire(oriShape1));        rstShape = BRepPrimAPI_MakePrism(oriShape1, dir);    }    catch (const Standard_Failure& err)    {        std::cout << "\nStandard_Failure: " << err.GetMessageString();    }    catch (...)    {        std::cout << "\nBRepPrimAPI_MakePrism some unknown errors occur";    }    return rstShape;}int main(int argc, char* argv[]){    gp_Dir  Z(0.0, 0.0, 1.0);    gp_Pnt center(0, 0, 0.0);    gp_Pnt xr(0.5, 0, 0.0);    gp_Pnt yr(0.0, 1.0, 0.0);    gp_Pnt zr(0.0, 0.0, 7.0);    gp_Ax2  wb(center, Z);    gp_Circ  wbcircle(wb, 0.125 / 2);    TopoDS_Edge wbe = BRepBuilderAPI_MakeEdge(wbcircle);    TopoDS_Edge xline = BRepBuilderAPI_MakeEdge(center, xr);    TopoDS_Edge yline = BRepBuilderAPI_MakeEdge(center, yr);    TopoDS_Edge zline = BRepBuilderAPI_MakeEdge(center, zr);    gp_Pln aPlane;    gp_Circ aCircle1(gp::XOY(), 1.0);    gp_Circ aCircle2(gp::XOY(), 1.0);    gp_Circ aCircle3(gp::XOY(), 1.0);    aCircle1.SetLocation(gp_Pnt(3.0, 3.0, 0.0));    aCircle2.SetLocation(gp_Pnt(7.0, 3.0, 0.0));    aCircle3.SetLocation(gp_Pnt(3.0, 7.0, 0.0));    BRepBuilderAPI_MakeEdge anEdgeMaker1(aCircle1);    BRepBuilderAPI_MakeEdge anEdgeMaker2(aCircle2);    BRepBuilderAPI_MakeEdge anEdgeMaker3(aCircle3);    BRepBuilderAPI_MakeWire aWireMaker1(anEdgeMaker1.Edge());    BRepBuilderAPI_MakeWire aWireMaker2(anEdgeMaker2.Edge());    BRepBuilderAPI_MakeWire aWireMaker3(anEdgeMaker3.Edge());    BRepBuilderAPI_MakeFace aFaceMaker(aPlane, 0.0, 10.0, 0.0, 10.0);      Viewer vout(50, 50, 500, 500);    vout << wbe;    vout << xline;    vout << yline;    vout << zline;    vout << makeExtrudebydir(aFaceMaker, gp_Vec(1,3,5));    vout.StartMessageLoop();    return 0;}

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

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

相关文章

HashMap与HashSet的不安全问题

HashSet的不安全问题 HashSet与ArrayList一样也存在不安全的问题&#xff0c;当多线程时也会出现ConcurrentModificationException&#xff0c;并发修改异常需要提出解决方案 问题 public static void main(String[] args) {Set<Integer> set new HashSet<>();…

1.MMD模型动作场景镜头的导入及视频导出

界面介绍 MIKUMIKUDANCE926版本 MMD的工具栏模型骨骼帧的窗口&#xff0c;在不同时间做不同动作&#xff0c;可以在这里打帧操作时间曲线操作窗口&#xff0c;控制模型两个动作之间的过渡模型操作窗口&#xff0c;导入模型选择模型相机操作&#xff0c;控制相机远近&#xf…

Vol.44 一个分享网站的网站,每个月8.7万访问量

哈咯&#xff0c;各位朋友好啊&#xff0c;我是欧维&#xff0c;今天要给大家分享的网址是Fuun.fun&#xff0c;奇趣网站收藏家&#xff1b; 它的网址是&#xff1a;FUUN.FUN 这是一个我经常逛的网站&#xff0c;为什么我经常逛呢&#xff1f;因为可以从中发现一些有意思的网站…

上位机图像处理和嵌入式模块部署(智能硬件的开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 目前&#xff0c;用上位机软件虽然可以部署项目&#xff0c;但是它本身有自己的缺点&#xff0c;那就是稳定性差、价格贵。稳定性这部分&#xff0…

Linux 快问快答

如果对于找 Java 后端开发的话&#xff0c;我感觉会这几个差不多了&#xff0c;面试官应该不会问的这么详细吧。一般就问问 Linux 的几个常用的命令&#xff0c;然后做一些简单的性能排查就好了。如果面试被问到另外的问题&#xff0c;那我再补充进来&#xff0c;现在先掌握这么…

CMC学习系列 (8):动态力输出期间的伽马范围皮质相干性

CMC学习系列:动态力输出期间的伽马范围皮质相干性 0. 引言1. 主要贡献2. 方法3. 结果4. 讨论5. 总结欢迎来稿 论文地址&#xff1a;https://www.sciencedirect.com/science/article/abs/pii/S1053811906010238 论文题目&#xff1a;Gamma-range corticomuscular coherence duri…

OSPF动态路由实验(思科)

华为设备参考&#xff1a; 一&#xff0c;技术简介 OSPF&#xff08;Open Shortest Path First&#xff09;是一种内部网关协议&#xff0c;主要用于在单一自治系统内决策路由。它是一种基于链路状态的路由协议&#xff0c;通过链路状态路由算法来实现动态路由选择。 OSPF的…

D. Nene and the Mex Operator

解题思路 若选定一个区间&#xff0c;则可以构造成值全为构造方如下&#xff1a;先将区间全变为0&#xff08;若区间有0且不全为0两次&#xff08;全变为一个值后再全变为0&#xff09;&#xff0c;若没有0则一次&#xff0c;若已经全为0则0次&#xff09;保留r为0&#xff0c…

Vol.45 这个壁纸网址,功能简单,每月37.7万访问量

哈咯&#xff0c;大家好&#xff0c;我是欧维&#xff0c;今天要给大家分享的网站是&#xff1a;极简壁纸&#xff0c;一个专门做电脑壁纸的网站&#xff1b; 它的网址是&#xff1a;极简壁纸_海量电脑桌面壁纸美图_4K超高清_最潮壁纸网站 网站的壁纸质量很高&#xff0c;页面…

Open CASCADE学习|BRepOffsetAPI_DraftAngle

BRepOffsetAPI_DraftAngle 是 Open CASCADE Technology (OCCT) 中用于创建带有草图斜面的几何体的类。草图斜面是一种在零件设计中常见的特征&#xff0c;它可以在零件的表面上创建一个倾斜的面&#xff0c;通常用于便于零件的脱模或是增加零件的强度。 本例演示了如何创建一个…

【系统分析师】数据库部分

文章目录 1、数据库模式2、数据库设计过程2.1ER模型 3、关系代数 ☆5、规范化理论☆5.1 非规范存在的问题5.2 相关概念5.3范式5.3.1 第一范式-1NF5.3.2 第二范式-2NF5.2.3 第三范式5.2.4 BC范式 5.4 函数依赖分解5.4.1保持函数依赖分解5.4.2 无损分解 5.5 Armstong公理系统 6、…

策略为王股票软件源代码\StkUI\View\RealTime.cpp------分时行情界面------程序代码基本都在里面

搜索 成交... C:\Users\Administrator\Desktop\源代码\策略为王股票软件源代码\StkUI\StkUI.rc(395): MENUITEM "以成交均价为准(&A)", ID_VIEW_MAINDATAAVERAGE C:\Users\Administrator\Desktop\源代码\策略为王股票软件源代码\StkUI\StkUI…

shardingsphere从4.1.1升级到5.2.1

作为工程师都希望自己的产品能够大卖&#xff0c;而项目开发中使用的技术不可能所有都是自己写的&#xff0c;使用到的开源组件例如shardingsphere这样好的组件&#xff0c;也会随着用户量的增加而需要升级&#xff0c;没必要非得像hutool那样非得自己写一边&#xff0c;当然hu…

MySQL基础入门上篇

MySQL基础 介绍 mysql -uroot -p -h127.0.0.1 -P3306项目设计 具备数据库一定的设计能力和操作数据的能力。 数据库设计DDL 定义 操作 显示所有数据库 show databases;创建数据库 create database db02;数据库名唯一&#xff0c;不能重复。 查询是否创建成功 加入一些…

JVM修炼之路【12】- GC调优 、性能调优

上一篇中 我们详细讲了内存溢出 内存泄漏 还有相关的案例。 这篇博客中我们主要了解一下GC调优。 有些新手可能会有一点 疑问—— 这两者不是一回事吗&#xff1f;&#xff1f; 其实说一回事 也没错 因为GC调优本质上还是针对 堆上的内存 只不过前面我们关注的侧重点在于 不合…

软件设计师——软件工程基础知识

软件工程基础知识 软件过程软件过程模型软件测试方法进度管理软件复杂性度量环路复杂度耦合聚合和组合 软件过程 软件过程模型 软件测试方法 黑盒测试和白盒测试 白盒测试中&#xff0c;语句覆盖对程序执行逻辑的覆盖很低&#xff0c;因此一般认为它是很弱的逻辑覆盖。 进度管…

【Django开发】0到1美多商城项目md教程第7篇:登录,1. 互联开发者申请步骤【附代码文档】

美多商城完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;欢迎来到美多商城&#xff01;&#xff0c;项目准备。展示用户注册页面&#xff0c;创建用户模块子应用。用户注册业务实现&#xff0c;用户注册前端逻辑。图形验证码&#xff0c;图形验证码接口设…

HarmonyOS实战开发-自定义分享

介绍 自定义分享主要是发送方将文本&#xff0c;链接&#xff0c;图片三种类型分享给三方应用,同时能够在三方应用中展示。本示例使用数据请求 实现网络资源的获取&#xff0c;使用屏幕截屏 实现屏幕的截取&#xff0c;使用文件管理 实现对文件&#xff0c;文件目录的管理&…

地球上的七大洲介绍

地球上的七大洲示意图&#xff1a; 1. 亚洲&#xff08;Asia&#xff09;&#xff1a;世界上最大的洲&#xff0c;面积约为44579000平方公里。亚洲地域辽阔&#xff0c;包括从北极圈到赤道的各种气候和地形。它拥有世界上最多的人口&#xff0c;也是世界上一些最古老文明的发源…

transformer上手(4) —— 模型与分词器

1 模型 除了像之前使用 AutoModel 根据 checkpoint 自动加载模型以外&#xff0c;我们也可以直接使用模型对应的 Model 类&#xff0c;例如 BERT 对应的就是 BertModel&#xff1a; from transformers import BertModel model BertModel.from_pretrained("bert-base-ca…