[返回博客](/cn/blog) # 使用曲面拟合多边形网格

Vladimir Savelyev 四月 19, 2018 [\#rendering](/cn/blog/tag/rendering) [\#Example](/cn/blog/tag/example) [\#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>

多边形网格可以是曲面拟合类型，它使用近似方法定义多边形网格以创建更平滑的对象。在 Teigha 中，多边形网格曲面拟合由以下函数提供：

```
void OdDbPolygonMesh::surfaceFit(OdDb::PolyMeshType surfType, OdInt16 surfu, OdInt16 surfv);

```

曲面使用 surfType、surfU 和 surfV 参数值拟合多段线网格。然后，在该曲面上计算“k3dFitVertex”类型的新顶点。这与常见 PEDIT 命令及其在其他 CAD 系统中的“SMOOTH SURFACE”选项相同，不同之处在于 Teigha 的方法使用传入的控制值，而 PEDIT 命令使用数据库中的控制值。

参数 surfType 可以是以下之一：

- kQuadSurfaceMesh
- kCubicSurfaceMesh
- kBezierSurfaceMesh

此参数选择用于计算“平滑”网格点的 NURBS 衬底曲面的阶数（按 U 和 V）。请注意，对于 kBezierSurfaceMesh 选项，NURBS 的阶数分别为 M 和 N 的网格大小。

参数 surfU 和 surfV 定义“平滑”网格的行数和列数。

#### 代码示例

```
OdDbPolygonMeshPtr pMesh = ...; // create some mesh
pMesh->surfaceFit(OdDb::kCubicSurfaceMesh, 12, 15);
for(OdDbObjectIteratorPtr pIter = pMesh->vertexIterator(); !pIter->done(); pIter->step())
{
  OdDbPolygonMeshVertexPtr pVert = pIter->entity(OdDb::kForRead);
  OdDb::Vertex3dType type = pVert->vertexType();
  if (type == OdDb::k3dFitVertex)
  {
    const OdGePoint3d pt = pVert->position();
    ... // use the fit vertex here
  }
}

```

初始网格形状和平滑结果示例

![image1](/files/inline-images/surfaces.gif)

## 今天就开始行动

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

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