ポリゴンメッシュは、より滑らかなオブジェクトを作成するために近似法を使用してポリゴンメッシュを定義するサーフェスフィットタイプにすることができます。Teighaでは、ポリゴンメッシュのサーフェスフィットは次の関数によって提供されます。
void OdDbPolygonMesh::surfaceFit(OdDb::PolyMeshType surfType, OdInt16 surfu, OdInt16 surfv);
サーフェスは、surfType、surfU、およびsurfV引数の値を使用してポリラインメッシュにフィットします。次に、「k3dFitVertex」タイプの新しい頂点がそのサーフェス上で計算されます。これは、他のCADシステムにおける一般的なPEDITコマンドとその「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
}
}
初期メッシュ形状とスムーズな結果の例