几何:1.介绍
MVC.Model-View-Controller
MVC.Example
示例——二维圆的概念。
模型:包含圆心和半径的数据对象。(标准的直接构造函数:默认构造函数、带有点和半径的构造函数等。)
控制器:构建一个经过 3 个点的圆。构建一个以圆心且与直线相切的圆。(注意:每个控制器类都有一个返回抽象数据对象的方法。)
视图:可以在查看器中显示的对象。
MVC.Discussion
优点:
- 模型是持久的,可以在不更改模型类的情况下添加新的控制类。
- 模型是最小的,如果需要可以在程序执行期间创建控制器类的实例。
缺点:
有时,很难找到解决特定问题的类。
MVC.Implementation of controller classes
OCC中针对几何和拓扑对象实现的各种控制器类包括:
- 直接构造(gce_MakeCircle、gce_MakeLin2d);
- 通过二维约束构建 (GccAna_Circ2d2TanRad);
- 复杂的构造算法:插值近似、投影(GeomAPI package)。
几何:2.概述
非参数和参数几何
非参数几何
模型类(二维类通过添加“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]]](https://51itzy.com/uploads/202412/23/d8d6e00325d3a7fb.jpg)
讯享网
裁剪概念
一些参数对象,例如线 (Geom_Line) 或平面 (Geom_Plane),与其非参数对象一样是无限的。怎么绑定他们呢?
- 曲线——使用开始和结束参数进行边界 - Geom_TrimmedCurve
- 曲面——使用矩形域进行表面绑定 -Geom_RectangularTrimmedSurface
OCCT 没有保护边界外的曲面计值。此功能用于高级算法(例如偏移算法),但建议避免在参数域之外进行计值。
![![[Pasted image 20231114170321.png]]](https://51itzy.com/uploads/202412/23/d8d6e00325d3a7fb.jpg)
几何:3.约束几何
二维约束几何
在OCC中,二维曲线(或轮廓)具有隐式方向,并且定义了“内部区
域”的概念。
![![[Pasted image 20231114170625.png]]](https://img-blog.csdnimg.cn/dbad3964272e4c1395490dedc5beb6d3.png)
按照惯例,根据曲线描述的正方向,曲线的内部位于左侧。约束几何创建涉及参数的限定,即参数相对于解的位置:
- 外部(Outside)——解和参数彼此在外部;
- 包围(Enclosing)——解包围了参数;
- 被包围(Enclosed)——解被参数所包围。
参数限定
如果 C1 和 C2 是参数,确定切线同时接触 C1 和 C2 的问题有 4 个解。这些解可以通过外部定位和包围定位实现。被包围的定位导致一个例外情况,因为直线不能在一个圆内部。
![![[Pasted image 20231115095914.png]]](https://img-blog.csdnimg.cn/3f28830cd0c245c2b640ef98e50d3540.png)
![![[Pasted image 20231115100306.png]]](https://img-blog.csdnimg.cn/d3e264f7ed484981be53a3671deb2a7d.png)
![![[Pasted image 20231115100337.png]]](https://img-blog.csdnimg.cn/b2fb539f74104d068388fdd1ad47b04a.png)
实现
用于创建约束几何体的包列表:

- GocAna - 基础几何算法类
- Geom2dGcc - 高级几何的算法类
- GccEnt - 参数限定的方法和类型
示例:![![[Pasted image 20231115101307.png]]](https://51itzy.com/uploads/202412/23/d8d6e00325d3a7fb.jpg)
几何: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.*10-4
下表展示了常见类型的位分布:
![![[Pasted image 20231115101949.png]]](https://img-blog.csdnimg.cn/89bad93d550c46f99b64f215a65cbf38.png)
几何公差和精度
OCCT 提供了一组几何公差,旨在克服浮点问题。它们位于 Precision包中:
![![[Pasted image 20231115102151.png]]](https://img-blog.csdnimg.cn/e97004414a2b46d4aa890bfdc260aaa6.png)
例子:
![![[Pasted image 20231115102346.png]]](https://img-blog.csdnimg.cn/580fd8250d014d4291b1fb5c651ff45e.png)
插值与近似
插值法
- 结果中的高阶多项式(取决于插值算法);
- 复杂的结果;
- 振荡是可能的。
![![[Pasted image 20231115102841.png]]](https://51itzy.com/uploads/202412/23/d8d6e00325d3a7fb.jpg)
近似
近似是多项式构造的过程,它接近给定的一组点,但不完全通过它们。近似算法有以下缺点:
- 与插值相比,它的计算强度要大得多;
- 与插值相比,需要付出更多努力来调整参数。
![![[Pasted image 20231115102855.png]]](https://51itzy.com/uploads/202412/23/d8d6e00325d3a7fb.jpg)
曲线插值
OCCT提供曲线插值算法。可以使用或不使用与点关联的参数来运行它。用法示例如下:
![![[Pasted image 20231115103030.png]]](https://img-blog.csdnimg.cn/b7b91937c82947519cb82ea1a0dcfd5c.png)
带切线的曲线插值
插值问题有无穷个解:
![![[Pasted image 20231115103412.png]]](https://img-blog.csdnimg.cn/c0c92ee6de744d73accb0794b373c6ce.png)
可以使用起点和终点处的切向来选择特定的解:
![![[Pasted image 20231115103458.png]]](https://img-blog.csdnimg.cn/fcb9762627084a44bc4927a832281562.png)
曲线近似
OCCT 具有内置曲线近似算法。它可以按如下方式使用:
![![[Pasted image 20231115103613.png]]](https://img-blog.csdnimg.cn/0ab6155fe8fc40978497f49994df0691.png)
曲面插值
OCCT 支持使用输入点表进行表面插值:
![![[Pasted image 20231115103803.png]]](https://img-blog.csdnimg.cn/9afba88caaad45e28f0a6cd7c4491375.png)
曲线上的点投影
OCCT包含曲线上的点投影、曲面上的投影曲线等多种投影算
法。与插值算法不同,有时投影不存在:
![![[Pasted image 20231115103908.png]]](https://img-blog.csdnimg.cn/6d9d8fa691ba49e0901c5ad55e3faffe.png)
曲面上的点投影
点不仅可以投影到曲线上,还可以投影到曲面上。下面的代码演示了这一功能:
![![[Pasted image 20231115104458.png]]](https://img-blog.csdnimg.cn/7dce0ed3011c416aa4d69f4721222814.png)
有时,存在多种投影结果。在这种情况下,有必要迭代投影结果以获取所有的解。

![![[1699951924663.jpg]]](https://img-blog.csdnimg.cn/a50b2e81307847a2bbd4c5682a37c122.jpeg)
![![[Pasted image 20231114170321.png]]](https://img-blog.csdnimg.cn/3ad6866930a14926ab3b54f417a6239f.png)
![![[Pasted image 20231115101307.png]]](https://img-blog.csdnimg.cn/643a974effdc4378979c8971faf36164.png)
![![[Pasted image 20231115102841.png]]](https://img-blog.csdnimg.cn/97ded5aa7e744aa0b3ee4d87b9ab33a9.png)
![![[Pasted image 20231115102855.png]]](https://img-blog.csdnimg.cn/f496aca4af8749e88fd41c662aa6ead3.png)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/11775.html