NWF 形式のファイルは、BimNv データベース内で OdNwModel オブジェクトへのポインタのコンテナを持つ OdNwDatabase オブジェクトとして表現されます。各 OdNwModel オブジェクトには、.nwf ファイルからのモデルに関する情報が含まれています。
- ファイルへのパス
- 変換行列
- 線形単位
- その他
より詳細な情報は、docs.opendesign.com で説明されている OdNwModel クラスの公開 API から取得できます (ログインが必要です)。
Examples/OdNwfResaver/OdNwfResaver.cpp にある OdNwfResaver プロジェクトの以下の例を使用して、次のことができます。
- OdNwDatabase オブジェクトを作成する。
- モデルの変換行列を変更する。
- モデルの線形単位を変更する。
- 現在の .nwf モデルのリストに新しいモデルを追加する。
OdNwDatabase オブジェクトを作成する
.nwf ファイルに対応する OdNwDatabase オブジェクトを作成します。
//need to read file by path from szSource
OdNwDatabasePtr pNwDb = svcs.readFile(szSource);
次に、OdNwDatabase オブジェクトに NWF が含まれていることを確認します。この形式の場合、OdNwDatabase::isComposite メソッドは true を返します。
if (pNwDb->isComposite())
モデルのプロパティを変更するには、データベースからオブジェクトを取得します。これには、OdNwDatabase::getModels メソッドを使用します。成功した場合、OdNwDatabase::getModels メソッドは eOk を返します。
OdArray<OdNwModelPtr> m_aModels;
if (pNwDb->getModels(m_aModels) == eOk)
たとえば、既知のインデックスに従って、目的のモデルを選択します。
pCurrentModel = m_aModels[modelIndex]
モデルの変換行列を変更する
行列を変更するには、OdGeMatrix3d オブジェクトをパラメータとして OdNwModel::setTransform メソッドを呼び出します (OdNwfResaver では単位行列が渡されますが、OdNwModel::getTransform メソッドを使用して行列オブジェクトを取得することもできます)。目的の変換を実行し、それをパラメータとして渡します。
pCurrentModel->setTransform(OdGeMatrix3d::kIdentity);
モデルの線形単位を変更する
単位を変更するには、NwModelUnits::Enum オブジェクトをパラメータとして OdNwModel::setUnits メソッドを呼び出します。
pCurrentModel->setUnits(NwModelUnits::UNITS_METERS);
現在の NWF モデルのリストに新しいモデルを追加する
モデルを追加するには、OdNwDatabase::addModel メソッドを呼び出します。このメソッドには、事前に作成された OdNwModel オブジェクトへのポインタをパラメータとして渡す必要があります。OdNwModel オブジェクトには、空でないファイルパス値が含まれている必要があります (現在、次の形式のファイルを追加できます: .dwg、.dgn、.rfa/.rvt、.nwc/.nwd):
pCurrentModel = OdRxObjectImpl<OdNwModel>::createObject();
if (pCurrentModel->setSourcePath(path) == eOk)
{
if (pNwDb->addModel(pCurrentModel) == eOk)