HOOPS Exchange SDK 26.6 文件转换 📅 2026/8/17 3:33:49 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 本身的使用有更深入的了解。