
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 本身的使用有更深入的了解。