opencascade15解析导出为step格式
#include "DisplayScene.h" // 包含显示场景的头文件
#include "Viewer.h" // 包含查看器的头文件// OpenCascade 包含
#include <BRepPrimAPI_MakeCylinder.hxx> // 创建圆柱体
#include <BinXCAFDrivers.hxx> // 二进制XCAF驱动程序
#include <gp_Quaternion.hxx> // 四元数
#include <Interface_Static.hxx> // 静态接口
#include <STEPCAFControl_Writer.hxx> // STEP CAF 控制写入器
#include <TDF_ChildIterator.hxx> // 子迭代器
#include <TDataStd_Name.hxx> // 标准数据名称
#include <TDocStd_Application.hxx> // 文档标准应用
#include <TDocStd_Document.hxx> // 文档标准文件
#include <TopExp.hxx> // 顶部表达式
#include <TopoDS.hxx> // 拓扑数据结构
#include <XCAFDoc_ColorTool.hxx> // 颜色工具
#include <XCAFDoc_DocumentTool.hxx> // 文档工具
#include <XCAFDoc_ShapeTool.hxx> // 形状工具namespace
{// 写入带有元数据的STEP文件bool WriteStepWithMeta(const Handle(TDocStd_Document)& doc,const char* filename){STEPCAFControl_Writer Writer;// 为了使子形状名称起作用,我们必须打开OpenCascade的以下静态变量。Interface_Static::SetIVal("write.stepcaf.subshapes.name", 1);// 将XDE文档写入文件。try{if ( !Writer.Transfer(doc, STEPControl_AsIs) ) // 转移XDE文档{return false;}const IFSelect_ReturnStatus ret = Writer.Write(filename); // 将XDE文档写入文件if ( ret != IFSelect_RetDone ){return false;}}catch ( ... ){return false;}return true;}namespace ShapeReflection{// 创建表示车轮的简化形状的圆柱体原语,包括其边缘和与之相融的轮胎。TopoDS_Shape CreateWheel(const double OD,const double W){return BRepPrimAPI_MakeCylinder(gp_Ax2( gp_Pnt(-W/2, 0., 0.), gp::DX() ), OD/2, W);}// 创建表示轮轴的几何原语。TopoDS_Shape CreateAxle(const double D,const double L){return BRepPrimAPI_MakeCylinder(gp_Ax2( gp_Pnt(-L/2, 0., 0.), gp::DX() ), D/2, L);}// 创建车轮轴子组件形状。TopoDS_Shape CreateWheelAxle(const TopoDS_Shape& wheel,const TopoDS_Shape& axle,const double L){TopoDS_Compound compShape;BRep_Builder bbuilder;bbuilder.MakeCompound(compShape);gp_Trsf wright_T;wright_T.SetTranslationPart( gp_Vec(L/2, 0, 0) );gp_Quaternion qn(gp::DY(), M_PI);gp_Trsf wleft_TR;wleft_TR.SetRotation(qn);//gp_Trsf wleft_T = wright_T.Inverted() * wleft_TR;bbuilder.Add( compShape, wheel.Moved(wleft_T) );bbuilder.Add( compShape, wheel.Moved(wright_T) );bbuilder.Add( compShape, axle ); // 不带变换的轮轴。return compShape;}// 创建车轮轴。TopoDS_Shape CreateChassis(const TopoDS_Shape& wheelAxle,const double CL){TopoDS_Compound compShape;BRep_Builder bbuilder;bbuilder.MakeCompound(compShape);gp_Trsf wfront_T; wfront_T .SetTranslationPart( gp_Vec(0, CL/2, 0) );gp_Trsf wrear_T; wrear_T .SetTranslationPart( gp_Vec(0, -CL/2, 0) );bbuilder.Add( compShape, wheelAxle.Moved(wfront_T) );bbuilder.Add( compShape, wheelAxle.Moved(wrear_T) );return compShape;}}
}// 程序入口
int main(int argc, char** argv)
{Viewer vout(50, 50, 500, 500); // 创建查看器// 创建XDE文档Handle(TDocStd_Application) app = new TDocStd_Application;BinXCAFDrivers::DefineFormat(app);Handle(TDocStd_Document) doc;app->NewDocument("BinXCAF", doc);// 工具Handle(XCAFDoc_ShapeTool)ST = XCAFDoc_DocumentTool::ShapeTool( doc->Main() ); // 形状工具Handle(XCAFDoc_ColorTool)CT = XCAFDoc_DocumentTool::ColorTool( doc->Main() ); // 颜色工具// 准备装配文档// 参数const double OD = 500;const double W = 100;const double L = 1000;const double CL = 1000;// 创建一个轮子原型t_wheelPrototype wheelPrototype;wheelPrototype.shape = ::ShapeReflection::CreateWheel(OD, W);wheelPrototype.label = ST->AddShape(wheelPrototype.shape, false); // 将其添加到XDE文档// 创建一个轴原型t_prototype axlePrototype;axlePrototype.shape = ::ShapeReflection::CreateAxle(OD/10, L);axlePrototype.label = ST->AddShape(axlePrototype.shape, false); // 将其添加到XDE文档// 创建一个轮轴子组件。 注意,不会复制形状。// 此时,输出的STEP文件仅包含两个MANIFOLD_SOLID_BREP实体。t_prototype wheelAxlePrototype;wheelAxlePrototype.shape = ::ShapeReflection::CreateWheelAxle(wheelPrototype.shape, axlePrototype.shape, L);wheelAxlePrototype.label = ST->AddShape(wheelAxlePrototype.shape, true); // 将其添加到XDE文档// 主装配。// STEP文件仍然只包含几个实体。t_prototype chassisPrototype;chassisPrototype.shape = ::ShapeReflection::CreateChassis(wheelAxlePrototype.shape, CL);chassisPrototype.label = ST->AddShape(chassisPrototype.shape, true); // 将其添加到XDE文档// 将颜色分配给部件。CT->SetColor( wheelPrototype.label, Quantity_Color(1, 0, 0, Quantity_TOC_RGB), XCAFDoc_ColorGen );CT->SetColor( axlePrototype.label, Quantity_Color(0, 1, 0, Quantity_TOC_RGB), XCAFDoc_ColorGen );// 设置原型的名称TDataStd_Name::Set(wheelPrototype.label, "wheel");TDataStd_Name::Set(axlePrototype.label, "axle");TDataStd_Name::Set(wheelAxlePrototype.label, "wheel-axle");TDataStd_Name::Set(chassisPrototype.label, "chassis");// 设置子组件实例的名称。for ( TDF_ChildIterator cit(chassisPrototype.label); cit.More(); cit.Next() ){TDataStd_Name::Set(cit.Value(), "wheel-axle-ref");}// 通过面展开轮子形状。TopTools_IndexedMapOfShape wheelFaces;TopExp::MapShapes(wheelPrototype.shape, TopAbs_FACE, wheelFaces);//wheelPrototype.frontFace = TopoDS::Face( wheelFaces(2) );wheelPrototype.frontFaceLabel = ST->AddSubShape(wheelPrototype.label, wheelPrototype.frontFace);CT->SetColor( wheelPrototype.frontFaceLabel, Quantity_Color(0, 0, 1, Quantity_TOC_RGB), XCAFDoc_ColorSurf );// 为子形状设置名称。TDataStd_Name::Set(wheelPrototype.frontFaceLabel, "front-face");// 完成。// 显示场景DisplayScene cmd( doc, vout.GetContext() );if ( !cmd.Execute() ){std::cout << "Failed to visualize CAD model with `DisplayScene` command." << std::endl;return 1;}// 保存到文件if ( argc > 1 ){if ( !::WriteStepWithMeta(doc, argv[1]) ){std::cout << "Failed to write XDE document to a STEP file " << argv[1] << std::endl;return 1;}}// 保存以便调试PCDM_StoreStatus sstatus = app->SaveAs(doc, "E:/CAD/xinjiazi8_asm.xbf");if ( sstatus != PCDM_SS_OK ){app->Close(doc);std::cout << "Cannot write OCAF document." << std::endl;return 1;}// 进入消息循环vout.StartMessageLoop();app->Close(doc); // 在退出消息循环时关闭文档。return 0;
}
这段代码是一个完整的程序,它创建了一个包含车轮、轮轴和底盘的简单 CAD 模型,并将其保存为 STEP 文件。逐行注释已经说明了代码的作用。
相关文章:
opencascade15解析导出为step格式
#include "DisplayScene.h" // 包含显示场景的头文件 #include "Viewer.h" // 包含查看器的头文件// OpenCascade 包含 #include <BRepPrimAPI_MakeCylinder.hxx> // 创建圆柱体 #include <BinXCAFDrivers.hxx> // 二进制XCAF驱动程序 #includ…...
【软件设计模式之模板方法模式】
文章目录 前言一、什么是模板方法模式?二、模板方法模式的结构1. 抽象类定义2. 具体实现 三、模板方法模式的应用场景1. 算法重用2. 操作中的固定步骤3. 扩展框架的功能4. 提供回调方法5. 遵循开闭原则 四、模板方法模式的优缺点1. 优点代码复用扩展性好符合开闭原则…...

Spring Boot项目怎么对System.setProperty(key, value)设置的属性进行读取加解密
一、前言 之前我写过一篇文章使用SM4国密加密算法对Spring Boot项目数据库连接信息以及yaml文件配置属性进行加密配置(读取时自动解密),对Spring Boot项目的属性读取时进行加解密,但是没有说明对System.setProperty(key, value)设…...

Linux理解
VMware安装Linux安装 目录 VMware安装Linux安装 1.1 什么是Linux 1.2 为什么要学Linux 1.3 学完Linux能干什么 2.1 主流操作系统 2.2 Linux系统版本 VMware安装Linux安装 1.1 什么是Linux Linux是一套免费使用和自由传播的操作系统。 1.2 为什么要学Linux 1). 企业用人…...

常用芯片学习——YC688语音芯片
YC688 广州语创公司语音芯片 使用说明 YC688是一款工业级的MP3语音芯片 ,完美的集成了MP3、WAV的硬解码。支持SPI-Flash、TF卡、U盘三种存储设备。可通过电脑直接更新SPI-Flash的内容,无需上位机软件。通过简单的串口指令即可完成三种存储设备的音频插…...

C语言:指针的进阶讲解
目录 1. 二级指针 1.1 二级指针是什么? 1.2 二级指针的作用 2. 一维数组和二维数组的本质 3. 指针数组 4. 数组指针 5. 函数指针 6. typedef的使用 7. 函数指针数组 7.1 转移表 1. 二级指针 如果了解了一级指针,那二级指针也是可以很好的理解…...

基于SSM的车位租赁系统(有报告)。Javaee项目。ssm项目。
演示视频: 基于SSM的车位租赁系统(有报告)。Javaee项目。ssm项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring Spri…...
Java pyhon C C++ R JS 主流语言的区别-03
以下是对这几种语言的数据类型进行简要归纳: Java的数据类型: 基本数据类型:包括整数类型(byte、short、int、long)、浮点数类型(float、double)、字符类型(char)和布尔…...

5 buuctf解题
命令执行 [BJDCTF2020]EasySearch1 打开题目 尝试弱口令,发现没有用 扫描一下后台,最后用御剑扫描到了index.php.swp 访问一下得到源码 源码如下 <?phpob_start();function get_hash(){$chars ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstu…...

微服务三十五关
1.微服务有什么好处? 微服务优点很多,但是我们通常说一个东西好肯定会跟另一个东西比较, 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处: 首先,让我们讨论单体项目的一些主要缺点&a…...

第一个 Angular 项目 - 添加服务
第一个 Angular 项目 - 添加服务 这里主要用到的内容就是 [Angular 基础] - service 服务 提到的 前置项目在 第一个 Angular 项目 - 动态页面 这里查看 想要实现的功能是简化 shopping-list 和 recipe 之间的跨组件交流 回顾一下项目的结构: ❯ tree src/app/…...

红日靶场3
靶场链接:漏洞详情 在虚拟机的网络编辑器中添加两个仅主机网卡 信息搜集 端口扫描 外网机处于网端192.168.1.0/24中,扫描外网IP端口,开放了80 22 3306端口 80端口http服务,可以尝试登录网页 3306端口mysql服务,可…...

B树的介绍
R-B Tree 简介特性B树特性m阶B树的性质(这些性质是B树规定的) B树的搜索B树的添加B树的删除——非叶子结点 简介 R-B Tree又称为Red-Black Tree,红黑树。是一种特殊的二叉查找树,红黑树的每个节点上都有存储为表示结点的颜色&…...
《The Art of InnoDB》第二部分|第4章:深入结构-磁盘结构-撕裂的页面(doublewrite buffer)
4.5 撕裂的页面 目录 4.5 撕裂的页面 4.5.1 双写缓冲区的作用 4.5.2 双写缓冲区的结构 4.5.3 双写缓冲区与Redolog的协同工作流程 4.5.2 双写缓冲区写入时机 4.5.3 禁用双写缓冲区 4.5.4 小结 未完待续... 上文我们学习了redo log的结构和其工作原理,它是一个…...

提示工程(Prompt Engineering)、微调(Fine-tuning) 和 嵌入(Embedding)
主要参考资料: 还没搞懂嵌入(Embedding)、微调(Fine-tuning)和提示工程(Prompt Engineering)?: https://blog.csdn.net/DynmicResource/article/details/133638079 B站Up主Nenly同学…...

【Flink精讲】Flink 内存管理
面临的问题 目前, 大数据计算引擎主要用 Java 或是基于 JVM 的编程语言实现的,例如 Apache Hadoop、 Apache Spark、 Apache Drill、 Apache Flink 等。 Java 语言的好处在于程序员不需要太关注底层内存资源的管理,但同样会面临一个问题&…...
正则化概念及使用
正则化概念及使用 正则化概念正则化原理常用的两种正则化方法1. L1 正则化(Lasso)2. L2 正则化(Ridge) 正则化参数 正则化概念 在机器学习中,我们致力于通过从训练数据中学习模式或规律来构建模型。为了找到最佳的模型…...

让程序员设计B端界面,好比武大郎招聘:向我看齐。不忍直视!
hello,我是大美B端工场,B端系统的要求越来越高了,很多公司还让程序员负责页面,页面搞的没法看,也怪不得程序员。程序员来搞页面,那还不是武大郎招聘——向我看齐,以我的标准为标准吗?…...

使用python构建Android,探索跨平台应用开发Kivy框架
使用python构建Android,探索跨平台应用开发Kivy框架 1. 介绍Kivy框架 Kivy是什么? Kivy是一个开源的Python跨平台应用程序开发框架,旨在帮助开发者快速构建创新的、可扩展的移动应用和多点触控应用。Kivy采用MIT许可证,允许开发…...

08 Redis之集群的搭建和复制原理+哨兵机制+CAP定理+Raft算法
5 Redis 集群 2.8版本之前, Redis采用主从集群模式. 实现了数据备份和读写分离 2.8版本之后, Redis采用Sentinel哨兵集群模式 , 实现了集群的高可用 5.1 主从集群搭建 首先, 基本所有系统 , “读” 的压力都大于 “写” 的压力 Redis 的主从集群是一个“一主多从”的读写分…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
unix/linux,sudo,其发展历程详细时间线、由来、历史背景
sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...

C++ Saucer 编写Windows桌面应用
文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架,开发Windows桌面应用,把一个html页面作为GUI设计放到Saucer里,隐藏掉运行时弹…...

电脑定时关机工具推荐
软件介绍 本文介绍一款轻量级的电脑自动关机工具,无需安装,使用简单,可满足定时关机需求。 工具简介 这款关机助手是一款无需安装的小型软件,文件体积仅60KB,下载后可直接运行,无需复杂配置。 使用…...