[ブログに戻る](/ja/blog) # ファセットモデラーでボディをSubDMeshに変換する

Taras Khalimanenko 3月 12, 2021 [\#facet modeler](/ja/blog/tag/facet-modeler) [\#getting started](/ja/blog/tag/getting-started)

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

FacetModeler::BodyをOdDbSubDMeshオブジェクトに変換して作業を続ける必要がある場合があります。まず、ボディを三角形メッシュに変換し、その後いくつかの手順を実行します。

まず、generateMesh()メソッドを使用して、ボディを表す三角形メッシュを生成します。

```
void generateMesh(GeMesh::OdGeTrMesh& mesh) const;
```

ここで、メッシュは出力パラメータです。

これはメンバ関数なので、オブジェクトに対して単純に呼び出すことができます。

```
FacetModeler::Body body;
/*...*/
GeMesh::OdGeTrMesh mesh;
body.generateMesh(mesh);
```

次に、そのOdGeTrMeshをOdDbSubDMesh作成に適した形式に変換する必要があります。その方法は次のとおりです。

```
OdInt32Array faceArray;
faceArray.reserve(mesh.m_aTr.logicalLength() * 4);
for (unsigned int j = 0; j < mesh.m_aTr.logicalLength(); ++j)
{
  const GeMesh::OdGeTr& tr = mesh.m_aTr[j];
  faceArray.push_back(3);
  faceArray.push_back(tr.tr[0]);
  faceArray.push_back(tr.tr[1]);
  faceArray.push_back(tr.tr[2]);
}
```

ここで、faceArrayには次のパターンでデータが含まれています。

```
"n P1 P2 ... Pn",
```

ここで、nは面を形成する点の数を表し、その後に3D点の配列から必要な頂点のインデックスが続きます。

たとえば、この特定の配列では、データは次のように格納されます。

```
... 3, 10, 11, 12, 3, 13, 14, 15 ...
```

最後に、変換を完了するには、新しいOdDbSubDMeshオブジェクトを作成するか、収集したデータ（mesh.m\_aVx、faceArray）を既存のオブジェクトに適用します。これを行うには、setSubDMesh()メソッドを使用します。

```
OdDbSubDMeshPtr pMesh = OdDbSubDMesh::createObject();
/*...*/
OdResult res = pMesh->setSubDMesh(mesh.m_aVx, faceArray, 0); // 0 - no smoothing
```

これで完了しましたが、GeMesh::OdGeTrMeshまたはFacetModeler::Bodyから受け取った追加情報をTagsメカニズムを通じて転送する必要がある場合があります。

ほとんどの場合、次のステップは結果をブロック（例：ModelSpace）に配置することです。

```
OdDbDatabase *pDb;
/*...*/
OdDbBlockTableRecordPtr pMS = pDb->getModelSpaceId().openObject(OdDb::kForWrite);
pMesh->setDatabaseDefaults(pDb);
pMS->appendOdDbEntity(pMesh);
```

動作するコードを確認し、ご自身で試すには、CommonApplications/Drawing/Examples/ExFMBody/ExFMBodyCommands.cppとFMBodyConvert2SubDMesh\_func関数を参照してください。これはExFMBodyの例の一部であり、モジュールとしてロードできます。この関数をテストするには、FMBodyConvert2SubDMeshコマンドを呼び出します。

## 今すぐ始める

**ODAソフトウェアを60日間無料でお試しください。  
リスクなし、クレジットカード不要。**

[無料で試す](https://www.opendesign.com/ja/free-trial)
