ファセットモデラーにおけるボディのB-Repデータへのアクセス

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日間無料でお試しください。
リスクなし、クレジットカード不要。

無料で試す