[ブログに戻る](/ja/blog) # ファセットモデラーにおけるボディのB-Repデータへのアクセス

Vladimir Savelyev 6月 15, 2017 [\#b-rep](/ja/blog/tag/b-rep) [\#facet modeler](/ja/blog/tag/facet-modeler)

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

ODAのファセットモデラーは、ソリッドモデリングに境界表現（B-Rep手法とも呼ばれる）を使用します。

ボディの概要:

- ボディ — 平面で構成され、内部のボディ空間を外部から隔てる「防水」シェルを形成します。
- 面 — 各面は平面とエッジループのリストとして表現され、平面の一部を境界付けます。
- エッジループ — 交差しないエッジの閉じたリスト。
- エッジ — 頂点へのポインタと、ループ内の前後のエッジへのポインタを持ちます。
- 頂点 — 3D点。

ファセットモデラーは、Bodyクラス用のイテレータのセットを提供します。これらは「…\\FacetModeler\\include\\Modeler\\FMMdlIterators.h」ヘッダーファイルで定義されています。  
以下は、ボディのすべての面を反復処理する例です。

```
FaceIterator itF(pBody);
  while( !itF.done() )
  {
    Face* pFace = itF.get();
    … // working with pFace
    itF.next();
  }

```

B-Rep階層に従って、特定の面のすべてのエッジを反復処理できます。反復中にエッジが異なるループに属する可能性があることに注意してください。最初のループは外側のループであり、それに続くループは穴です。異なるループからエッジを分離する必要がある場合は、next()関数のbNextLoopパラメータを使用してください。

```
EdgeFaceIterator iter(pFace);
    while ( !iter.done() ) 
    {
      Edge* pEdge = iter.get();

      OdGePoint3d ptVtx = pEdge->vertex()->point();
      ... // work with edge here

      bool bNextLoop;
      iter.next( &bNextLoop );
      if( bNextLoop ) 
      {
        ... // next loop begins from next iteration
      }
    }

```

ボディを反復処理することなく、すべてのエッジまたはボディの頂点に直接アクセスするイテレータがさらに2つあります。

```
EdgeBodyIterator itE(pBody);
    while( !itE.done() )
    {
      Edge* pEdge = iter.get();

      ... // work with edge here

      itE.next();
    }

    VertexIterator itV(pBody);
    while( !itV.done() )
    {
      Vertex* pVertex = itV.get();

      … // work with vertex here

      itV.next();
    }

```

## 今すぐ始める

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

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