HOOPS Exchange SDK 26.6 文件转换
2.文件到文件转换本教程将引导您完成sample_import_export示例代码的学习该示例是 HOOPS Exchange 中包含的示例之一。此示例演示了读取输入文件并将其导出为新格式的基本工作流程。前提条件是请确保您已完成之前的教程“设置环境”。请确保您可以构建并运行ImportExport示例。示例代码位于软件包的csharp/samples文件夹中。2.1代码在编辑器中打开ImportExport.cs 文件。由于该示例是一个完整的实现您无需向程序中添加任何新内容。为了便于学习我们将深入分析每个功能区域并详细解读代码的运行机制。首先你会注意到这个示例运行需要用到 C# 程序集。在本例中我们使用了using TS3D.Exchange;using TS3D.Exchange.Direct;此示例需要一些命令行参数HOOPS Exchange 库的路径、输入文件名和输出文件名。从这里开始Main第一个重要的步骤是解析命令行参数。这在 中处理ParseArgs。如果运行程序时未指定输入和/或输出文件则使用默认值默认输入文件为HOOPS_EXCHANGE_INSTALL_DIRsamples/data/catiaV5/CV5AquoBottle/Aquo Bottle.CATProduct。默认输出文件是输入文件名加上后缀.prc。默认值表示我们将 Catia V5 输入文件转换为其 PRC 等效文件。接下来该示例连接日志文件的回调函数和各种回调函数。// Initialize log file and HOOPS Exchange callbacksLogFile newStreamWriter(outputLogFile); API.A3DDllSetCallbacksReport(MessageCallback, WarningCallback, ErrorCallback);虽然使用 HOOPS Exchange 并非必须但这些回调函数可以在调试时提供有价值的信息。所有示例都会将回调函数接收到的消息打印出来stdout。接下来初始化 HOOPS 交易所。// Initialize HOOPS Exchange librarytry{ Library.Initialize(HOOPS_LICENSE.KEY, exchangeFolder); }catch(Library.InitializationException e) {// handle errorConsole.WriteLine(e.Message);return(int) A3DStatus.A3D_ERROR; }该类Library允许我们访问 HOOPS Exchange 库对象。在使用 HOOPS Exchange 功能之前需要先对其进行初始化。如果您尚未在环境中的其他位置设置许可证密钥则可以在此处设置。应用程序还需要知道 Exchange 库的位置。该exchangeFolder参数是这些库的路径。完成初始化步骤后文件将被加载。但在此之前我们需要设置其参数。您将看到以下代码行// initialize load parameters objectA3DRWParamsLoadData loadParams; API.Initialize(outloadParams);// set load parametersloadParams.m_sGeneral.m_bReadSolids true; loadParams.m_sGeneral.m_bReadSurfaces true; loadParams.m_sGeneral.m_bReadWireframes true; loadParams.m_sGeneral.m_bReadPmis true; loadParams.m_sGeneral.m_bReadAttributes true; loadParams.m_sGeneral.m_bReadHiddenObjects true; loadParams.m_sGeneral.m_bReadConstructionAndReferences false; loadParams.m_sGeneral.m_bReadActiveFilter true; loadParams.m_sGeneral.m_eReadingMode2D3D A3DEReadingMode2D3D.kA3DRead_3D; loadParams.m_sGeneral.m_eReadGeomTessMode A3DEReadGeomTessMode.kA3DReadGeomAndTess; loadParams.m_sGeneral.m_eDefaultUnit A3DEUnits.kA3DUnitUnknown; loadParams.m_sTessellation.m_eTessellationLevelOfDetail A3DETessellationLevelOfDetail.kA3DTessLODMedium; loadParams.m_sAssembly.m_bUseRootDirectory true; loadParams.m_sMultiEntries.m_bLoadDefault true; loadParams.m_sPmi.m_bAlwaysSubstituteFont false; loadParams.m_sPmi.m_pcSubstitutionFont Myriad CAD;该行代码初始化加载器的参数结构。这些参数供应用程序的文件加载器使用并指示应加载哪些结构。由于不同的文件格式支持不同的结构因此这些参数可能因您尝试加载的文件类型以及应用程序所需的结构而异。API.Initialize(out loadParams);笔记您可以找到支持的参数列表A3DRWParamsGeneralData。接下来使用上一步中初始化的参数加载文件// Load input CAD fileIntPtr modelFile; A3DStatus loadStatus API.A3DAsmModelFileLoadFromFile(inputFile,refloadParams,outmodelFile);其中inputFile是命令行参数loadParams是上一步的结果modelFile是翻译后要写入的 PRC 文件名。暗示使用函数的返回值检查负载状态始终是一个好习惯。它的类型为A3DStatus文件加载完毕后我们将导出它。翻译会在写入操作期间自动处理。我们只需指定文件类型这由outputFile扩展名隐含。成功执行的函数会返回A3DStatus.A3D_SUCCESS.// Export output CAD fileA3DStatus exportStatus Export(modelFile, outputFile);if(exportStatus A3DStatus.A3D_SUCCESS) { Console.WriteLine(Success.); }else{ Console.WriteLine(Failure.); }注意不同的对象modelFile以及outputFile。modelFile是一个内存中的对象它在逻辑上表示输出文件。outputFile仅仅是文件名string。如果申请成功文件将被转换。现在我们应该干净利落地终止程序。由于 C# API 只是一组绑定内存占用在 C 二进制文件中。因此当不再需要这些对象时必须显式地释放它们。以下代码片段释放模型文件对象然后卸载 C 二进制文件。API.A3DAsmModelFileDelete(modelFile); Library.Free();2.2样本调查在本节中我们将调整代码并查看变化。视窗LinuxmacOS更改命令行在 Visual Studio 的解决方案树资源管理器中找到样本ImportExport右键单击并选择“属性”。在“调试”选项卡下编辑“命令参数”设置以更改输入 CAD 文件和输出。假设 HOOPS Exchange API 包安装在磁盘根目录则C:命令参数如下所示C:\HOOPS_EXCHANGE_INSTALL_DIR\samples\data\catiaV5\CV5_Aquo_Bottle\Bullet_Lid_Cap.CATPart C:\HOOPS_EXCHANGE_INSTALL_DIR\samples\data\catiaV5\CV5_Aquo_Bottle\Bullet_Lid_Cap.CATPart.stl运行示例ImportExport将名为Bullet_Lid_Cap.CATPart的 CATIA V5 零件转换为 STL 格式。在输出文件夹中找到文件Bullet_Lid_Cap.CATPart.stl 。打开 HOOPS Demo Viewer 桌面应用程序然后将生成的Bullet_Lid_Cap.CATPart.stl文件拖放到该应用程序中即可快速查看零件更改转换设置在 Visual Studio 的解决方案树资源管理器中找到示例ImportExport在“调试”选项卡下编辑“命令参数”设置以指定输入 CAD 文件和输出。假设 HOOPS Exchange API 包安装在磁盘根目录则C:命令参数如下所示C:\HOOPS_EXCHANGE_INSTALL_DIR\samples\data\pmi\PMI_Sample\CV5_Sample.CATPart C:\HOOPS_EXCHANGE_INSTALL_DIR\samples\samples\data\pmi\PMI_Sample\CV5_Sample.CATPart.prc运行示例程序将文件CV5_Sample.CATPart转换为 PRC 格式。在 HOOPS Demo Viewer 中找到并拖放生成的CV5_Sample.CATPart.prc文件即可在输出文件夹中查看该零件找到并打开安装文件夹../include/中的A3DSDKInternalConvert.hxx文件。您现在正在查看文件A3DSDKInternalConvert.hxxA3DRWParamsGeneralData 其中公开了所有转换参数。A3DRWParamsGeneralData m_sGeneral;/*! The general reading parameters. */A3DRWParamsPmiData m_sPmi;/*! The parameters for PMI reading. Used when m_sGeneral.m_bReadPmis is true. */A3DRWParamsTessellationData m_sTessellation;/*! The tessellation reading parameters. */A3DRWParamsAssemblyData m_sAssembly;/*! The reading parameters used to load Assembly files. */A3DRWParamsMultiEntriesData m_sMultiEntries;/*! The parameters used when reading multiple models. */A3DRWParamsSpecificLoadData m_sSpecifics;/*! The parameters specific to each CAD format. */A3DRWParamsIncrementalLoadData m_sIncremental;/*! The reading parameters used to load specific parts of an assembly. */A3DRWParamsLoadData;可以根据需要添加和编辑导入和导出参数。我们来看一个例子找到设置m_sLoadData.m_sGeneral.m_bReadPmis true;将其值更改为设置m_sLoadData.m_sGeneral.m_bReadPmis false;重新构建并运行示例将文件CV5_Sample.CATPart再次转换为 PRC 格式。在HOOPS Demo Viewer中找到并拖放生成的CV5_Sample.CATPart.prc文件即可查看该零件。比较生成的两个CV5_Sample.CATPart.prc文件。如您所见关闭导入参数后产品和制造信息将不会被转换。m_sLoadData.m_sGeneral.m_bReadPmis true;2.3结论文件到文件的转换工作流程是评估 HOOPS Exchange 功能的常用起点。使用ImportExport产品附带的示例您可以轻松地将文件从一种格式转换为另一种格式。完成本教程后您已掌握如何在这个基本用例中使用 HOOPS Exchange。此外通过研究相关辅助类的实现您将对 API 本身的使用有更深入的了解。

相关新闻

第 2 篇 Codex 故障排查与插件安装

第 2 篇 Codex 故障排查与插件安装

报错排查 MCP/IDE 插件配置━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━排查决策表(按症状快速定位)症状第一反应401 Unauthorizedlogout → login → 删 auth.json502/超时/Re-connecting设…

2026/10/17 7:35:51 阅读更多 →
Windows系统文件SynCOM.dll丢失找不到问题解决

Windows系统文件SynCOM.dll丢失找不到问题解决

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

2026/10/17 7:35:58 阅读更多 →
LLM智能体长期记忆机制:从向量检索到LeanMem架构实践

LLM智能体长期记忆机制:从向量检索到LeanMem架构实践

1. 从“金鱼记忆”到“长期记忆”:LLM智能体的进化瓶颈如果你尝试过用大语言模型(LLM)构建一个能持续对话、处理复杂任务的智能体(Agent),大概率会遇到一个头疼的问题:它记不住事儿。你可以在第…

2026/10/19 21:33:40 阅读更多 →

最新新闻

小白程序员必看:如何成为高薪AI全栈工程师?

小白程序员必看:如何成为高薪AI全栈工程师?

本文介绍了AI全栈工程师这一新兴高薪岗位,解释了其概念、所需技能以及为何如此火爆。文章指出,AI全栈工程师能够使用AI编程工具独立完成从界面到上线的整个系统开发,降低了行业门槛,提升了个人不可替代性。文章还澄清了关于AI全栈…

2026/10/20 5:42:15 阅读更多 →
拆解六款开源RAG产品后,我逆向出一套自研蓝图

拆解六款开源RAG产品后,我逆向出一套自研蓝图

1. 从六款开源RAG产品里,我逆向出了一套自研蓝图做RAG(检索增强生成)自研这件事,我前前后后折腾了快一年。最开始的想法很简单:开源方案这么多,随便挑一个改改就能用。结果真上手才发现,每个开源…

2026/10/20 5:42:15 阅读更多 →
AI辅助科研与代码:从工具选型到工作流的系统方法论

AI辅助科研与代码:从工具选型到工作流的系统方法论

1. 为什么“AI辅助科研与代码”值得认真对待这两年,我身边做科研和写代码的朋友,几乎没有人不在工作流里塞进一两个AI工具。有人用它读文献、有人用它写脚本、有人用它调参、有人用它改论文。但真正让我觉得值得写一篇系统总结的,不是“AI能做…

2026/10/20 5:42:15 阅读更多 →
从0开始学架构-28:业务高可用的保障异地多活架构

从0开始学架构-28:业务高可用的保障异地多活架构

无论是高可用计算架构,还是高可用存储架构,其本质的设计目的都是为了解决部分服务器故障的场景下,如何保证系统能够继续提供服务。但在一些极端场景下,有可能所有服务器都出现故障。例如,典型的有机房断电、机房火灾、地震、 水灾......这些极端情况会导致某个系统所有服务…

2026/10/20 5:42:15 阅读更多 →
压缩感知与图像加密混合算法:密钥控制测量矩阵的原理与Matlab实现

压缩感知与图像加密混合算法:密钥控制测量矩阵的原理与Matlab实现

很多人第一次看到“基于压缩感知的压缩加密混合算法”这个标题时,心里大概都会冒出同一个问题:压缩感知本身不就是在压缩图像吗,加密再单独做一层不就行了,为什么非要扯到一起?我一开始也是这个想法,直到真…

2026/10/20 5:42:15 阅读更多 →
文件系统边界才是批量删除的隐形天花板:一次缓存清理引发的思考

文件系统边界才是批量删除的隐形天花板:一次缓存清理引发的思考

48,218 个文件,103 秒,平均每秒删掉 468 个。这个速度放在本地 SSD 上不算惊艳,放在机械盘安全软件钩子的业务机上,已经算靠谱了。真正有意思的是这次清理引发的一场争论:团队里有人坚持说提示词写得不够好&#xff0c…

2026/10/20 5:41:14 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →