在 Facet Modeler 中访问体的 B-Rep 数据

ODA 的 Facet Modeler 使用边界表示法进行实体建模,也称为 B-Rep 技术。

体的简要概述:

  • 体 (Body) — 由平面面组成,形成一个“防水”外壳,将内部体空间与外部隔开。
  • 面 (Face) — 每个面都表示为一个平面和一系列边循环,边界限定了平面的某个部分。
  • 边循环 (Edge loop) — 一个不相交边的闭合列表。
  • 边 (Edge) — 具有指向其顶点的指针以及指向循环中前一个和下一个边的指针。
  • 顶点 (Vertex) — 一个 3D 点。

Facet Modeler 为 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
      }
    }

还有另外两个迭代器可以直接访问所有边或体顶点,而无需遍历体:

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 天。
无风险,无需信用卡。

免费试用