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 的主从集群是一个“一主多从”的读写分…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...
基于 HTTP 的单向流式通信协议SSE详解
SSE(Server-Sent Events)详解 🧠 什么是 SSE? SSE(Server-Sent Events) 是 HTML5 标准中定义的一种通信机制,它允许服务器主动将事件推送给客户端(浏览器)。与传统的 H…...
项目进度管理软件是什么?项目进度管理软件有哪些核心功能?
无论是建筑施工、软件开发,还是市场营销活动,项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素,项目很容易陷入混乱,导致进度延误、成本超支,甚至失败。 项目进度管理软…...
软件测试—学习Day11
今天学习下兼容性 1.App兼容性常见问题 以下是关于 App 兼容性问题的常见举例,涵盖界面展示、操作逻辑、性能差异三大维度,涉及不同系统、设备及网络环境的兼容性场景: 一、界面展示问题 界面展示兼容性问题主要由操作系统版本差异、屏幕…...
GPU虚拟化
引言 现有如下环境(注意相关配置:只有一个k8s节点,且该节点上只有一张GPU卡): // k8s版本 $ kubectl version Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.7&…...
STM32入门学习之系统时钟配置
1. 时钟就是单片机的心脏。单片机根据时钟频率来控制每个部件的工作,时钟是单片机的脉搏,决定了每条命令运行的速率,没有时钟单片机将停止工作。 如何理解“时钟决定了单片机每条命令运行的速率”? 首先需要去理解单片机中的时…...
