[返回博客](/cn/blog) # 验证B-Rep构建器输出

Oleksandr Bryzghalin 四月 18, 2019 [\#b-rep](/cn/blog/tag/b-rep)

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

您可以在ODA的B-Rep构建器的帮助下创建Spatial ACIS®对象，但是如果某些事项未被考虑在内，则可能会创建不正确的ACIS对象。为防止这种情况发生，B-Rep构建器中包含了一个验证器（BB验证器）。

什么是验证器？BB验证器是一个对象，用于检查创建ACIS对象所用的输入数据是否存在错误以及ACIS核心的一些特征。默认情况下，BB验证器是启用的。不建议禁用它，因为创建的对象可能包含错误，但您可以通过调用此方法来禁用它：

void OdBrepBuilderBase::enableValidator(false)

让我们来看看BB验证器执行的检查。所有解释都基于B-Rep术语。如您所知，通常要创建一个面，您需要一个由某种循环边界的曲面。

首先，验证器检查循环是否正确设置。这通过多项检查完成，第一项检查循环中是否指定了共边（coedges）。也就是说，循环中是否至少有一个共边。如果没有，它会抛出eNoTrimmigLoop异常。

下一个检查确定循环是否在曲面上。执行此操作的方法是bool BrepBuilderValidator::isTrimmingLoopOnFaceCheck(double dTol)。如果距离大于给定距离，则认为曲线（以及循环）不在面上，并抛出eLoopIsNotOnFace异常。该算法遍历循环中的共边；从当前边取二十个点，并假设每个点都在曲面上。如果是这样，当我们定义曲面参数空间中对应的2D点，然后计算曲面上的3D点时，它应该与边上3D曲线上的点重合。如果它们之间的距离小于容差，则迭代到边的下一个3D点。

接下来的图片显示了一个减去极点的圆锥曲面。蓝色是边缘，红色表示放大的边缘（参见第二张图片）。

![1](/files/inline-images/11.jpg)第二张图片显示了放大区域。边缘的其中一个点不在曲面上，这将是一个错误。

![22](/files/inline-images/22_0.jpg)如果共边由参数曲线定义，验证器会取二十个二维点，并确定曲面上相关的三维点。假设这些点位于边缘的三维曲线上。这意味着，如果您定义了与它们对应的参数，然后再次使用这些参数计算三维点，它们必须在公差范围内重合。如果不是这种情况，则会引发异常 eLoopIsNotOnFace。

如您所见，BB验证器使用参数曲线。在这种情况下，重要的一点是参数曲线和3D曲线的区间必须匹配。在使用ACIS、B-Rep Builder和BB验证器时必须考虑到这一点：有一个检查确保参数曲线的区间必须等于或包含3D曲线的区间。此检查在bool AcisBBValidator::isDir2dCoincide3d(double dTol)方法中执行。因此，如果我们按顺序排列几个2D点，例如p1、p2、p3，我们将在曲面上获得相应的3D点pp1、pp2、pp3以及3D曲线上的点c1、c2、c3。从几何学上讲，曲面上的点顺序应与3D曲线上的点顺序相同。

下一个前提是循环必须是不可分离且闭合的。这在bool BrepBuilderValidator::isTrimmingContinuousAndClosedCheck(double dTol)中进行了验证。在这里，执行检查以确保最后一条边的末端与第一条边的开头重合（考虑到方向），并且此条件适用于两条相邻的边（当前边和下一条边）。

ACIS中的面有几个条件：它们不能具有零面积或多于一个外部循环。这些条件在BB验证器中使用以下方法进行检查：

- bool AcisBBValidator::checkZeroFaces(OdArray&lt;BRepBuilderGeometryId&gt; &amp;arrZeroAreaFaces, double dTol)
- bool BrepBuilderValidator::checkNOuterLoops(double dTol)

由于算法的复杂性，封闭曲面外部循环数量的确定仍在开发中。

最后一次检查在方法bool AcisBBValidator::checkEdgeStartEndParam(double dTol)中实现。它检查曲线与最接近边起始顶点的曲线之间的距离。如果距离大于“tol”，则会引发eInvalidInput异常。

## 今天就开始行动

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

[免费试用](https://www.opendesign.com/cn/free-trial)
