几何:1.介绍
MVC.Model-View-Controller
OCC提供了一系列类,用户可以“按原样”应用或通过添加自定义类来扩展。
这些提供某些概念(例如几何实体)的类通常按实现进行分组:模型层、视图层和控制器层。每层都在相应的包中实现,而包又包含类和函数。
MVC.Example
示例——二维圆的概念。
模型:包含圆心和半径的数据对象。(标准的直接构造函数:默认构造函数、带有点和半径的构造函数等。)
控制器:构建一个经过 3 个点的圆。构建一个以圆心且与直线相切的圆。(注意:每个控制器类都有一个返回抽象数据对象的方法。)
视图:可以在查看器中显示的对象。
MVC.Discussion
优点:
- 模型是持久的,可以在不更改模型类的情况下添加新的控制类。
- 模型是最小的,如果需要可以在程序执行期间创建控制器类的实例。
缺点:
有时,很难找到解决特定问题的类。
MVC.Implementation of controller classes
OCC中针对几何和拓扑对象实现的各种控制器类包括:
- 直接构造(gce_MakeCircle、gce_MakeLin2d);
- 通过二维约束构建 (GccAna_Circ2d2TanRad);
- 复杂的构造算法:插值近似、投影(GeomAPI package)。
几何:2.概述
非参数和参数几何
非参数几何:这些类型由值操纵;这些类没有继承。
参数化几何:Geom (Geom2d) 中的实体由 Handle操作(对于数据共享很有用),而控制器类则由值操作。类的层次结构通常遵循 STEP (ISO 10303) 标准。提供从Geom到gp转换的方法。
非参数几何
模型类(二维类通过添加“2d”后缀,gp_Pnt2d):
- gp_Pnt——笛卡尔点;
- gp_Vec——向量;
- gp_Dir ——方向(非空向量,模长大小等于 1.0);
- gp_Trsf——欧几里得变换。可以独立设置平移、旋转和缩放;
- gp_Ax1——轴,轴是点加方向;
- gp_Lin、gp_Circ、gp_Elips、gp_Hypr、gp_Parab、gp_Cylinder、gp_Sphere、gp_Torus 表示曲线和曲面的图元。
控制器类: - 直接构建 - gce_MakeCircle、gce_MakeLin;
- 约束构造(仅限 2d)- GocAna_Circ2d2TanRad。
非参数几何的限制
非参数几何提供了有用的集合类,但它们存在一些原则限制:
- 无法回答典型的几何问题:
- 此时的曲率值是多少?
- 此时曲线的切向量是多少?
- 曲线和给定点之间的最小欧几里德距离是多少?
- 这些对象相交吗?
- 有些对象是无限的,并且没有办法让它们变得有限:
- 直线、双曲线、抛物线
- 平面、圆柱
- 不能表示自由形式和非平凡的对象:
- 如何表示飞机机身? (贝塞尔曲线和 B 样条曲线);
- 如何表示偏置曲面? (需要法向);
- 如何表示扫掠曲面? (线性挤压和旋转)。
参数几何
模型类(Geom2d 包中提供了二维类):
- 曲线 - Geom_Curve 的子类:
- Geom_Line
- 二次曲线:Geom_Circle、Geom_Ellipse、Geom_Hyperbola、Geom_Parabola
- 自由曲面:Geom_BSplineCurve、Geom_BezierCurve
- Geom_OffsetCurve
- 裁剪曲线:Geom_TrimmedCurve
- 曲面 - Geom_Surface 的子类:
- 基本曲面:Geom_Plane、Geom_CylindricalSurface、Geom_SphericalSurface、Geom_ToroidalSurface、Geom_ConicalSurface
- 自由曲面:Geom_BSplineSurface、Geom_BezierSurface
- 扫掠曲面:Geom_SurfaceOfLinearExtrusion、Geom_SurfaceOfRevolution
- Geom_OffsetSurface
- 裁剪曲面:Geom_Rectangular TrimmedSurface
控制器类(二维类可以通过在包名 gce2d 中添加“2d”后缀来获得):
- 直接构造-gce_MakeCircle、gce2d_MakeCircle
- 约束构造(仅限 2d)- Geom2dGcc_Circ12d3Tan
裁剪概念
一些参数对象,例如线 (Geom_Line) 或平面 (Geom_Plane),与其非参数对象一样是无限的。怎么绑定他们呢?
- 曲线——使用开始和结束参数进行边界 - Geom_TrimmedCurve
- 曲面——使用矩形域进行表面绑定 -Geom_RectangularTrimmedSurface
OCCT 没有保护边界外的曲面计值。此功能用于高级算法(例如偏移算法),但建议避免在参数域之外进行计值。
几何:3.约束几何
二维约束几何
在OCC中,二维曲线(或轮廓)具有隐式方向,并且定义了“内部区
域”的概念。
按照惯例,根据曲线描述的正方向,曲线的内部位于左侧。约束几何创建涉及参数的限定,即参数相对于解的位置:
- 外部(Outside)——解和参数彼此在外部;
- 包围(Enclosing)——解包围了参数;
- 被包围(Enclosed)——解被参数所包围。
参数限定
如果 C1 和 C2 是参数,确定切线同时接触 C1 和 C2 的问题有 4 个解。这些解可以通过外部定位和包围定位实现。被包围的定位导致一个例外情况,因为直线不能在一个圆内部。
实现
用于创建约束几何体的包列表:
- GocAna - 基础几何算法类
- Geom2dGcc - 高级几何的算法类
- GccEnt - 参数限定的方法和类型
示例:
几何:4.接口(API)
浮点:实现和限制
现代计算机使用 IEEE 754 作为表示实数的方式(替代方案是对数
系统、区间算术、unum / posit)。根据标准,实值表示为以
下形式:
v
a
l
u
e
=
s
i
g
n
i
f
i
c
a
n
d
⋅
b
a
s
e
e
x
p
o
n
e
n
t
value=significand\cdot base^{exponent}
value=significand⋅baseexponent
其中有效数和指数是整数。示例:5.432154321*10-4
下表展示了常见类型的位分布:
精度的固定位数会导致舍入和表示错误。因此,每个使用浮点的
算法都应该附有容差值以覆盖这些错误。
几何公差和精度
OCCT 提供了一组几何公差,旨在克服浮点问题。它们位于 Precision包中:
例子:
插值与近似
插值法
插值是找到一个通过所有点的多项式。
他们的典型问题是:
- 结果中的高阶多项式(取决于插值算法);
- 复杂的结果;
- 振荡是可能的。
近似
近似是多项式构造的过程,它接近给定的一组点,但不完全通过它们。近似算法有以下缺点:
- 与插值相比,它的计算强度要大得多;
- 与插值相比,需要付出更多努力来调整参数。
曲线插值
OCCT提供曲线插值算法。可以使用或不使用与点关联的参数来运行它。用法示例如下:
带切线的曲线插值
插值问题有无穷个解:
可以使用起点和终点处的切向来选择特定的解:
曲线近似
OCCT 具有内置曲线近似算法。它可以按如下方式使用:
曲面插值
OCCT 支持使用输入点表进行表面插值:
曲线上的点投影
OCCT包含曲线上的点投影、曲面上的投影曲线等多种投影算
法。与插值算法不同,有时投影不存在:
曲面上的点投影
点不仅可以投影到曲线上,还可以投影到曲面上。下面的代码演示了这一功能:
有时,存在多种投影结果。在这种情况下,有必要迭代投影结果以获取所有的解。