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_DIR>samples/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样本调查
在本节中,我们将调整代码并查看变化。
更改命令行
在 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 本身的使用有更深入的了解。
