[返回博客](/cn/blog) # 在面建模器中访问体的 B-Rep 数据

Vladimir Savelyev 六月 15, 2017 [\#b-rep](/cn/blog/tag/b-rep) [\#facet modeler](/cn/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
      }
    }

```

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

```
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://staging.opendesign.com/cn/free-trial)
