2.前置基础与OCCT整体认知

第一部分:前置基础与OCCT整体认知(小白版)

目标:搞懂OCCT到底是干什么的,不用写代码,建立整体概念。 适合小白:避开晦涩术语,遇到专有名词我会直接解释。

1.1 OCCT是什么

OCCT全称 Open CASCADE Technology,是一套开源的三维CAD几何内核库。

通俗解释

什么叫“CAD几何内核”?

  • 我们平时用的SolidWorks、UG、Creo,它们内部都有一套“看不见的数学算法”: 输入“拉伸100mm、倒圆角5mm、布尔减”,内核去计算点、线、面,生成三维模型。
  • OCCT就是这样一套底层算法库,它没有界面,不给你提供按钮、菜单。
  • 你要用C++调用它提供的一堆类和函数,自己去写界面、自己做按钮,实现CAD建模功能。

📌一句话总结: OCCT ≠ CAD软件,OCCT是造CAD软件的“零件工具箱”。你拿这个工具箱,自己组装出CAD软件。

它能做什么(应用场景)

  1. 机械CAD:生成零件、装配、倒角、打孔、布尔运算
  2. 数据转换:读取STEP/IGS模型,格式转换,模型修复
  3. BIM建筑建模、逆向工程、仿真前置处理
  4. 自研工业软件、轻量化工具、模型检查工具

OCCT 和商业内核简单对比

内核 开源/商业 特点
OCCT 开源免费 代码全可见,但是文档一般,坑多,需要自己处理很多报错
ACIS / Parasolid 商业付费 稳定、容错强,闭源,要高额授权费

小白提示:很多国内工业软件公司,都是基于OCCT二次开发,规避商业内核高昂授权费。

OCCT版本怎么选(工程角度)

  • 7.4.0:老版本,很多老项目在用,bug多,但是网上资料多

  • 7.7~7.9.1:现在主流稳定版本,bug修复很多,新API,推荐学习就用 7.9.1

    不要追最新开发版,容易出现编译崩溃,学习优先选稳定release版本。


1.2 需要哪些前置基础(小白重点)

如果你这些基础薄弱,不用精通,知道概念就可以,后面写代码遇到再回头补。

1)C++基础(最重要)

OCCT是纯C++库,不支持C语言。必须要懂这些概念:

  • 类、对象、构造函数

  • 继承

  • 指针 / 引用

    ⚠️注意:OCCT不用std::shared_ptr,它有自己一套内存管理机制:Handle_XXX智能句柄,这个后面环境搭建之后专门讲。

  • 简单模板概念。

小白忠告:不用成为C++大神再学OCCT。可以边学OCCT边补C++。

2)计算机图形学基础(三维)

只需要懂最基础概念,不用手写矩阵:

  1. 三维坐标系:X Y Z轴,右手坐标系(OCCT默认右手坐标系)
  2. 点:gp_Pnt,三维空间一个位置
  3. 向量:方向,用来做平移旋转
  4. 变换:把模型移动、旋转、缩放。底层是矩阵,OCCT会封装好,大部分情况你不用手写矩阵。

3)CAD领域专有概念(小白最容易卡在这里)

这里先记住名词,后面会反复用到:

  1. 参数化建模:用数字参数驱动模型,比如长方体长=10宽=20高=30,改数字模型就变。

  2. 几何 Geometry:数学层面。比如一条直线方程、一个球面数学方程。只描述数学。

  3. 拓扑 Topology:描述物体的连接关系。哪个点属于哪条边,哪条边属于哪个面。

    ✨小白灵魂区分:

    • 几何:“这个球面数学是什么样”
    • 拓扑:“这个球由哪些面、边、顶点拼起来,它们怎么连在一起”
  4. 布尔运算:两个实体相加合并、相减挖洞、求交集。

  5. 容差 Tolerance:CAD世界最重要概念!

    现实计算机浮点数有误差,两个理论上应该重合的点,计算出来差0.000001毫米。OCCT靠容差判断“两个点算不算同一个点”。绝大多数OCCT报错、破模型,根源都是容差不对。

容差先有印象,后面数学模块会细讲。


1.3 OCCT整体架构与模块全景

OCCT把功能拆成很多模块,每个模块对应一堆库文件。 整体分为6大层,从上到下理解:

  1. Kernel核心内核层:数学基础、内存管理、基础数据结构。最底层。
  2. 几何层(Geom):曲线、曲面数学定义。只管数学,不管拓扑。
  3. 拓扑 & BRep层:边界表达,把几何加上连接关系,变成可以建模的实体。OCCT灵魂所在。
  4. 建模算法层:拉伸、旋转、布尔、倒角、修复,各种建模算法。
  5. 可视化层(V3d/AIS):把模型渲染到屏幕,显示颜色、拾取物体。
  6. IO文件层:读写STEP、IGS、BREP、STL文件。

常用核心模块名字,先混个脸熟,不用背

  • TKMath:数学库,点向量矩阵变换
  • TKG2d / TKG3d:2D、3D几何
  • TKGeomBase:曲线曲面基础
  • TKTopAlgo:拓扑相关算法
  • TKPrim:基础特征(拉伸旋转等)
  • TKBO:布尔运算!高频使用
  • TKBRep:BRep边界表达,拓扑实体
  • TKIVtk / TKV3d / TKAIS:可视化、显示交互
  • TKSTEP:STEP文件读写

小白提示:以后写CMake的时候,就是把这些模块名字作为依赖链接。

OCCT命名小规则(看懂类名,减少查文档压力)

  1. gp_XXX:基础数学类。gp_Pnt点,gp_Vec向量,gp_Trsf变换。轻量对象,栈上分配,不用Handle。
  2. Geom_XXX:几何类(曲线曲面),继承自Standard_Transient,必须用Handle管理内存。
  3. TopoDS_XXX:拓扑对象。TopoDS_Vertex顶点,TopoDS_Edge边,TopoDS_Face面。

两个对象类型区别非常关键:

  • gp_xxx:普通小对象,直接 gp_Pnt p(0,0,0); 栈创建。
  • Geom_xxx:继承Transient,必须用Handle句柄,OCCT自己的引用计数管理内存,不能new裸指针。

1.4 OCCT内存管理:Handle_XXX 句柄(重中之重)

很多新手写OCCT代码第一步就崩溃,根源就是不懂Handle。

两类对象,两种内存方式

OCCT里面对象分成两大类,完全不一样用法,千万不要搞混。

第一类:gp_* 系列(数学轻量对象)

例子:gp_Pnt点、gp_Vec向量、gp_Trsf变换、gp_Circ圆。

  • 体积很小,普通数据结构体
  • 直接在栈上创建,不用new,不用Handle
gp_Pnt p1(10,20,30); // 直接定义,栈对象,自动销毁

直接复制赋值即可:gp_Pnt p2 = p1;,拷贝一份完整数据。

第二类:继承 Standard_Transient 的对象

例子:Geom_Line、Geom_Surface,几乎所有曲线、曲面、高级几何类。

  • 这类对象不能裸new直接用,不能直接写Geom_Line line;,编译报错。
  • OCCT自己实现了一套引用计数智能指针,就是Handle_类名。

✅正确写法:

Handle(Geom_Line) aLine = new Geom_Line(gp_Pnt(0,0,0),gp_Dir(1,0,0));

Handle(Geom_Line)等价于Handle_Geom_Line,两种写法都可以。

Handle做了什么?
  1. 底层维护引用计数。有多少个Handle指向这个对象,计数+1。
  2. 当所有Handle全部销毁,计数变为0,对象自动释放内存。
  3. 不需要手动delete,禁止手动delete这个new出来的对象。

📌小白踩坑提醒:

  1. 不要拿gp对象和Handle对象互相赋值,编译直接报错。
  2. TopoDS_XXX(顶点、边、面)拓扑对象,不用Handle!它是值对象,可以直接赋值拷贝。
TopoDS_Vertex v; // 直接用,不是Handle

简单总结一张小表:

对象类型 示例 内存方式 是否Handle
gp_xxx数学 gp_Pnt,gp_Vec 栈,值拷贝 ❌不需要
Geom_xxx几何 Geom_Line,Geom_Surface 堆,引用计数 ✅必须Handle
TopoDS_xxx拓扑 TopoDS_Vertex,TopoDS_Face 值对象,句柄封装 ❌不需要Handle

Standard_Transient 是什么

它就是OCCT所有需要Handle管理的类的基类。 只要类继承了它,就必须配合Handle使用,这是OCCT早期C++开发,在std::shared_ptr还没有普及的时候做的自研智能指针。

不要把Handle等同于std::shared_ptr,底层实现不一样,不要混用。

1.5 OCCT学习资源(小白去哪里查资料)

1)官方文档(最重要,必看)

OCCT官方文档分两块:

  1. User Guide 用户指南:概念讲解,讲模块、原理,适合入门读。
  2. Reference Manual API参考手册:每个类、每个函数的参数说明,写代码的时候查。

缺点:中文文档几乎没有,全部英文。但是用词不难,结合类名看。

2)官方示例代码(重中之重)

源码包下面有 samples 文件夹。

  • samples/cxx:C++示例,是最好的学习材料。

    小白学习建议:后面环境搭好之后,不要上来就自己写,先跑官方sample,看懂sample再改。

3)Demo程序:Draw Harness

OCCT自带一个脚本交互工具 Draw Harness。 不用写C++,输入脚本命令就可以直接建模、看模型。

作用:验证算法效果。比如想测试布尔运算效果,先在Draw里面敲命令看效果,再翻译成C++代码。 后面环境搭建章节会讲怎么跑Draw。

4)网上资源现状

  • 国内博客大部分都是复制粘贴,版本老旧,很多是7.4以前的旧代码,直接复制会编译报错。
  • github上可以搜opencascade相关demo,优先看更新时间比较新的项目。

小白忠告:优先官方文档+官方sample,博客当做辅助参考,不要把博客当圣经。

1.6 OCCT编码习惯、命名再强化一遍

  1. gp_:底层数学,栈对象
  2. Geom_:几何曲线曲面,Handle管理
  3. TopoDS_:拓扑实体(顶点、边、面、实体),值类型
  4. BRep_:BRep边界表达相关
  5. TKXXX:CMake链接库模块名

看到类名,就能大概猜到它属于哪个模块,减少查文档的压力。

第一部分小结

第一部分全部是概念,我们搞懂了:

  1. OCCT是开源CAD几何内核,不是软件,是C++库。
  2. 区分几何、拓扑、容差这些CAD基础名词。
  3. 六大模块分层架构,各个TK模块大概用途。
  4. 三种对象内存模型:gp / Handle(Geom_xxx) / TopoDS_xxx,这个是写代码第一道坎。
  5. 去哪里找官方文档、示例、Draw工具。

第一部分到此全部结束。 接下来进入第二部分:开发环境搭建与工程配置。 我会讲Windows平台 VS2022 + CMake + OCCT7.9.1,包含:

  1. 选择源码编译还是下载预编译包,两种方案优缺点
  2. CMakeLists模板讲解
  3. 第一个最小demo:创建一个方块,输出到brep文件(暂时不涉及可视化窗口,先跑通无界面版本)
posted @ 2026-08-24 16:18  Drunker•L  阅读(75)  评论(0)    收藏  举报