多边形网格可以是曲面拟合类型,它使用近似方法定义多边形网格以创建更平滑的对象。在 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
}
}
初始网格形状和平滑结果示例