IFCから.dwgへの変換サポート
IFC SDKは、IFCファイルの内容を指定された図面データベース(.dwgファイル)にエクスポートする機能を提供します。この機能は、Ifc2Dwgエクスポートモジュール内に実装されています。
- バイナリライブラリ: Ifc2Dwg.tx.
- ソースコードの場所: Exchange/Exports/Ifc2Dwg.
Ifc2Dwgモジュールの機能は、動的および静的構成の両方でOdaMfcAppサンプルアプリケーション内で使用できます。
Ifc2Dwgモジュールの機能は、純粋な抽象クラスOdIfcExportに基づいています。IfcExporterクラスはそこから派生しており、エクスポートプロセスを実行できる2つのメソッドを提供します。
OdRxDictionaryPtr properties()— 辞書オブジェクトに格納されているエクスポート処理プロパティへのアクセスを提供します。ExportResult exportIfc()— 指定されたプロパティでエクスポートを実行します。このメソッドは、エクスポート結果コードを含むExportResult列挙型の値を返します。
エクスポートプロパティ
すべてのエクスポートパラメータは2つのグループに分けられます。
- 入力パラメータには、変換プロセスを開始するために必要な情報が含まれています。
- 出力パラメータには、変換プロセスの結果に関連する情報が含まれています。
以下の表に、変換パラメータとその説明のリストを示します。
| パラメータ名 | パラメータタイプ | パラメータの説明 |
|---|---|---|
| IfcFilePath | 入力 | .dwgに変換するIFCファイルへのフルパス(例: "d:\files\ifc_to_dwg.ifc")。 |
| OdDbServices | 入力 | 新しい図面データベースを作成できるホストアプリケーションサービスオブジェクトへのスマートポインタ。 |
| IfcServices | 入力 | IFCファイルコンテンツの処理を実装するホストアプリケーションサービスオブジェクトへのスマートポインタ。スマートポインタが設定されていない場合、デフォルトのIFC SDKアプリケーションサービス実装が使用されます。デフォルトのアプリケーションサービスオブジェクトが使用される場合、ユーザーは変換プロパティを制御できません。 |
| ExportBuildingElementProxy | 入力 | IfcBuildingElementProxyジオメトリを.dwg構造に変換するかどうか(trueの場合)を定義するフラグ(falseの場合、変換しない)。フラグがfalseの場合、変換手順中にIfcBuildingElementProxyジオメトリオブジェクトはスキップされます。 |
| ZoomExtents | 入力 | 結果のOdDbDatabaseオブジェクトのビューを変換されたジオメトリにズームするかどうか(trueの場合)を決定するフラグ(falseの場合、ズームしない)。 |
| ExportMode | 入力 | ジオメトリ変換のタイプを定義するExportMode列挙値。 |
| Database | 出力 | 変換されたジオメトリを持つ結果のOdDbDatabaseへのスマートポインタ。 |
| IfcFile | 出力 | ソースIFCファイルを表すOdIfcFileオブジェクト(エンティティのデータベース)へのスマートポインタ。OdDbEntityオブジェクトとIFCインスタンス間のマッピングのためにConnectionMapプロパティと一緒に使用できます。 |
| IfcConnectionMap | 出力 | OdDbObjectIdとOdDAIObjectIdインスタンスのペアを含むマップオブジェクト。このマップは、入力IFCインスタンスとエクスポートされた図面データベースエンティティ間の接続を格納します。 |
前提条件
次のヘッダーと名前空間の指示を含めます。
#include "Common/ModuleNames.h"
#include "../Exchange/Exports/Ifc2Dwg/Include/IfcExport.h"
For static configurations, use the set of DECLARE/DEFINE_STATIC macro instances:
//
// Define module map for statically linked modules:
//
#if !defined(_TOOLKIT_IN_DLL_)
ODRX_DECLARE_IFC2DWG_STATIC_MODULES_ENTRY_POINTS()
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(OdRecomputeDimBlockModule);
ODRX_DECLARE_STATIC_MODULE_ENTRY_POINT(OdRxThreadPoolService);
ODRX_BEGIN_STATIC_MODULE_MAP()
ODRX_DEFINE_IFC2DWG_STATIC_APPMODULES()
ODRX_DEFINE_STATIC_APPMODULE(OdRecomputeDimBlockModuleName, OdRecomputeDimBlockModule)
ODRX_DEFINE_STATIC_APPMODULE(OdThreadPoolModuleName, OdRxThreadPoolService)
ODRX_END_STATIC_MODULE_MAP()
#endif
The set of supported schema-dependent modules for Ifc2x3, Ifc4 etc. can vary. If support for other precompiled (or generated/compiled by a user) schemas is needed, they need to be added as a set of STATIC macros, as in CMakelists.txt.
IFCファイルをエクスポートする
IFC SDKベースのアプリケーションでエクスポート機能を使用するには、次の手順を実行します。
- Ifc2Dwgエクスポートモジュールをロードし、それが利用可能であるか(つまり、モジュールが正常にロードされたか)を確認します。
OdIfc2DwgModulePtr pIfc2DwgModule = ::odrxDynamicLinker()->loadApp(OdIfc2DwgModuleName, false); if (!pIfc2DwgModule.isNull()) { //Add code here to set export properties and run the export process (see the next steps for details) } - エクスポーターオブジェクトを作成し、ifc2Dwgモジュールのロードのチェックブロックでエクスポートプロパティを設定します(詳細については前のステップを参照してください)。
if (!pIfc2DwgModule.isNull()) { OdIfcExportPtr Exporter = pIfc2DwgModule->create(); Exporter->properties()->putAt(L"OdDbServices", static_cast(&dbSvcs)); Exporter->properties()->putAt(L"IfcServices", static_cast(&ifcSvcs)); // Optional Exporter->properties()->putAt(L"IfcFilePath", OdRxVariantValue(ifcInFileName)); Exporter->properties()->putAt(L"ExportBuildingElementProxy", OdRxVariantValue(true)); Exporter->properties()->putAt(L"ZoomExtents", OdRxVariantValue(true)); Exporter->properties()->putAt(L"ExportMode", OdRxVariantValue(OdInt16(TD_IFC_EXPORT::kAsPolyFaceMesh))); } - エクスポートプロセスを実行します。
OdPerfTimerWrapper timerWrapper; timerWrapper.getTimer()->start(); // Start conversion OdIfcExport::ExportResult res = Exporter->exportIfc(); timerWrapper.getTimer()->stop(); odPrintConsoleString(L"\nIfc2Dwg: ifc reading time is %d msec", timerWrapper.getTimer()->countedMSec()); - エクスポートプロセスの結果を分析し、出力データベースプロパティを設定します。
OdDbDatabasePtr pDb; if (res == OdIfcExport::success) { odPrintConsoleString(L"\nIfc2Dwg: successful conversion"); pDb = Exporter->properties()->getAt(L"Database"); // Created inside of Ifc2Dwg module if wasn't provided before. OdRxObjectPtr pFile = Exporter->properties()->getAt(L"IfcFile"); OdIfcConnectionMapPtr pMap = Exporter->properties()->getAt(L"IfcConnectionMap"); OdRxObjectPtr pMapAssignedFile = pMap->getIfcFile(); ODA_ASSERT(pFile.get() == pMapAssignedFile.get()); if (!dwgOutFileName.isEmpty()) { odPrintConsoleString(L"\nIfc2Dwg: writing .dwg file %s", dwgOutFileName.c_str()); pDb->writeFile(dwgOutFileName, OdDb::kDwg, OdDb::vAC32); } } else { switch (res) { case OdIfcExport::bad_database: odPrintConsoleString(L"\nIfc2Dwg: bad database\n"); break; case OdIfcExport::bad_file: odPrintConsoleString(L"\nIfc2Dwg: bad ifc file\n"); break; case OdIfcExport::fail: odPrintConsoleString(L"\nIfc2Dwg: unknown conversion error\n"); break; } }
結果として得られるOdDbDatabaseには、ソースIFCファイルから取得した適切な名前を持つOdDbBlockReferenceおよびOdDbBlockDefinitionアイテムのセットと、それらのブロック定義内のインポートされたジオメトリが含まれます。
結果
以下の図は、OdaMfcAppサンプルアプリケーションで開かれたIFC4x2スキーマのIFCファイルからエクスポートされた図面データベースを示しています。


例
- IFCファイルを図面データベースにエクスポートする例は、OdaMfcAppサンプルアプリケーションで見つけることができます。CommonApplications\Drawing\Examples\win\OdaMfcApp\OdaMfcApp.cppソースファイルのopenFile()メソッドを参照してください。このサンプルコードは、#ifdef IFC2DWG_SUPPORTプリコンパイラ命令の下にあります。
このサンプルコードは、#ifdef IFC2DWG_SUPPORTプリコンパイラ命令の下にあります。
- IFCデータを図面データベースにエクスポートする方法の詳細については、ExIfc2Dwgサンプルアプリケーションを参照してください。