NWF 格式文件在 BimNv 数据库中表示为 OdNwDatabase 对象,其中包含指向 OdNwModel 对象的指针容器。每个 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]
更改模型的变换矩阵
要更改矩阵,请调用 OdNwModel::setTransform 方法,并将 OdGeMatrix3d 对象作为参数(在 OdNwfResaver 中,传递的是单位矩阵,但您也可以使用 OdNwModel::getTransform 方法获取矩阵对象)。对其执行所需的变换并将其作为参数传递:
pCurrentModel->setTransform(OdGeMatrix3d::kIdentity);
更改模型的线性单位
要更改单位,请调用 OdNwModel::setUnits 方法,并将 NwModelUnits::Enum 对象作为参数传递:
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)