OCC教学:几何

几何: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
    ![[1699951924663.jpg]]
裁剪概念

一些参数对象,例如线 (Geom_Line) 或平面 (Geom_Plane),与其非参数对象一样是无限的。怎么绑定他们呢?

  • 曲线——使用开始和结束参数进行边界 - Geom_TrimmedCurve
  • 曲面——使用矩形域进行表面绑定 -Geom_RectangularTrimmedSurface
    OCCT 没有保护边界外的曲面计值。此功能用于高级算法(例如偏移算法),但建议避免在参数域之外进行计值。
    ![[Pasted image 20231114170321.png]]

几何:3.约束几何

二维约束几何

在OCC中,二维曲线(或轮廓)具有隐式方向,并且定义了“内部区
域”的概念。
![[Pasted image 20231114170625.png]]

按照惯例,根据曲线描述的正方向,曲线的内部位于左侧。约束几何创建涉及参数的限定,即参数相对于解的位置:

  • 外部(Outside)——解和参数彼此在外部;
  • 包围(Enclosing)——解包围了参数;
  • 被包围(Enclosed)——解被参数所包围。
参数限定

如果 C1 和 C2 是参数,确定切线同时接触 C1 和 C2 的问题有 4 个解。这些解可以通过外部定位和包围定位实现。被包围的定位导致一个例外情况,因为直线不能在一个圆内部。
![[Pasted image 20231115095914.png]]

![[Pasted image 20231115100306.png]]

![[Pasted image 20231115100337.png]]

实现

用于创建约束几何体的包列表:

  • GocAna - 基础几何算法类
  • Geom2dGcc - 高级几何的算法类
  • GccEnt - 参数限定的方法和类型
    示例:![[Pasted image 20231115101307.png]]

几何: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=significandbaseexponent
其中有效数和指数是整数。示例:5.432154321*10-4
下表展示了常见类型的位分布:
![[Pasted image 20231115101949.png]]

精度的固定位数会导致舍入和表示错误。因此,每个使用浮点的
算法都应该附有容差值以覆盖这些错误。

几何公差和精度

OCCT 提供了一组几何公差,旨在克服浮点问题。它们位于 Precision包中:
![[Pasted image 20231115102151.png]]

例子:
![[Pasted image 20231115102346.png]]

插值与近似
插值法

插值是找到一个通过所有点的多项式。
他们的典型问题是:

  • 结果中的高阶多项式(取决于插值算法);
  • 复杂的结果;
  • 振荡是可能的。
    ![[Pasted image 20231115102841.png]]
近似

近似是多项式构造的过程,它接近给定的一组点,但不完全通过它们。近似算法有以下缺点:

  • 与插值相比,它的计算强度要​​大得多;
  • 与插值相比,需要付出更多努力来调整参数。
    ![[Pasted image 20231115102855.png]]
曲线插值

OCCT提供曲线插值算法。可以使用或不使用与点关联的参数来运行它。用法示例如下:
![[Pasted image 20231115103030.png]]

带切线的曲线插值

插值问题有无穷个解:
![[Pasted image 20231115103412.png]]

可以使用起点和终点处的切向来选择特定的解:
![[Pasted image 20231115103458.png]]

曲线近似

OCCT 具有内置曲线近似算法。它可以按如下方式使用:
![[Pasted image 20231115103613.png]]

曲面插值

OCCT 支持使用输入点表进行表面插值:
![[Pasted image 20231115103803.png]]

曲线上的点投影

OCCT包含曲线上的点投影、曲面上的投影曲线等多种投影算
法。与插值算法不同,有时投影不存在:
![[Pasted image 20231115103908.png]]

曲面上的点投影

点不仅可以投影到曲线上,还可以投影到曲面上。下面的代码演示了这一功能:
![[Pasted image 20231115104458.png]]

有时,存在多种投影结果。在这种情况下,有必要迭代投影结果以获取所有的解。

在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值