执行 Autodesk® Navisworks® 文件的简单编辑和保存

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)

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用