面建模器规范概述

ODA面建模器是一种快速建模器,它使用边界表示法进行实体建模,也称为B-Rep技术。以下是ODA面建模器使用的主要数据结构:

  • 顶点
  • 边环

顶点

顶点是一个三维点。

边是一个对象,由指向起始顶点的指针以及指向环中前一个和后一个边的指针表示。基本上,边是由两个顶点界定的直线段:一个起始顶点和一个结束顶点(即下一个边的起始顶点)。

Vertex* startVertex = pEdge->vertex();
Vertex* endVertex = pEdge->endVertex();

边环

边环是位于三维平面上的一组不相交的闭合边列表(至少包含三条边)。

面是位于三维平面上的一组不相交的边环列表,用于界定一个区域。面通过边环拥有边。

第一个环称为外环。当从与平面法线相反的方向(右手定则)观察对象时,外环是逆时针定向的。所有其他环(如果有)应位于外环所界定的区域内。它们被称为内环。内环是顺时针定向的。

以下是面的一个示例:

 

example of a face

 

以下是外环和内环的方向:

 

directions of outer and inner loops

 

EdgeLoop* pOuterLoop = pFace->loop(0);
EdgeLoop* pInternalLoop = pFace->loop(1);
if (pInternalLoop)
{
  // work with internal loop here
}

边知道它属于哪个循环和面。

Face* pLoop = pEdge->loop();
if (pLoop)
{
  // work with loop here
}

Face* pFace = pEdge->face();
if (pFace)
{
  // work with face here
}

相邻的面可以有一个共同的边。在拓扑学上,有两条边被称为对边。它们由相同的顶点形成,但顺序不同。

 

two edges called pair-edges

 

Edge* pPairEdge = pEdge->pair();
if (pPairEdge)
{
  // work with pair edge here
}

实体

实体是连接面的列表。如果一个面的每条边都有一个来自相邻面的对边,则该实体是封闭的。否则,它被认为是开放的。

开放实体的示例如下所示(缺失的面在红色高亮框中):

 

The example of an open body

 

调用 Body::isClosed() 方法检查实体是否封闭。

bool closed = body.isClosed();

如果实体满足以下条件,则称其为一致的:

  • 每个面至少有一个外环。
  • 每个面的外环都按逆时针方向定向。
  • 每个面的内环都按顺时针方向定向。
  • 对边对是原始边。
  • 每条边都属于一个面(没有悬空边)。
  • 一条边及其对边属于不同的面。

调用 Body::checkInternalConsistence() 方法检查实体是否一致。

OdString msgStr;
bool consistency = body.checkInternalConsistence(&msgStr);

要了解如何创建实体,请参阅 ODA 博客上的使用面建模器创建实体

今天就开始行动

免费试用 ODA 软件 60 天。
无风险,无需信用卡。

免费试用