[返回博客](/cn/blog) # 执行 Autodesk® Navisworks® 文件的简单编辑和保存

Vadim Asandiy 七月 10, 2020 [\#BimNv](/cn/blog/tag/bimnv) [\#getting started](/cn/blog/tag/getting-started)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

NWF 格式文件在 BimNv 数据库中表示为 OdNwDatabase 对象，其中包含指向 OdNwModel 对象的指针容器。每个 OdNwModel 对象都包含来自 .nwf 文件的模型信息：

- 文件路径
- 变换矩阵
- 线性单位
- 等。

更详细的信息可以从 [docs.opendesign.com](https://docs.opendesign.com/bimnv/OdNwModel.html) 上描述的 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 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
