znlgis 博客

GIS开发与技术分享 — GDAL · GeoServer · PostGIS · QGIS · OpenLayers · Cesium · FreeCAD · NPOI

第01章:FreeCAD 项目全景与学习路线

0. 当前版本信息

截至本教程编写时,FreeCAD 最新稳定版本为 1.1.3,于 2026 年 7 月 25 日发布。该版本属于维护版本(patch release),以安全漏洞修复和稳定性改进为主,未引入破坏性 API 变更。

上一个主要版本 1.1.0 发布于 2026 年 3 月,是 FreeCAD 自 1.0 正式版之后最重要的里程碑升级。1.1.0 的主要亮点包括:

  • 集成装配工作台(Assembly):Assembly 工作台从社区插件升格为核心工作台,提供原生 Joint 约束系统,支持在同一文档中直接组织零部件装配关系。
  • 拓扑命名缓解(TNP Mitigation):FreeCAD 团队多年攻关的拓扑命名问题修复首次默认启用。参数化建模过程中,若上游特征的面/边/顶点编号因编辑而漂移,系统能够自动追踪并保留引用完整性,大幅降低模型断裂风险。
  • 三点光照系统:3D 视图渲染引入新的默认光照模型,使模型表面的凹凸和结构特征更加清晰。
  • 统一测量工具 Caliper:以往分散在多个工作台中的测量命令被整合为单一的 Caliper 工具,支持距离、角度、面积等多种测量模式。
  • 交互式拖拽器改进:对象变换操作(移动、旋转)得到重新设计,拖拽手柄更直观,对齐吸附更灵敏。

本教程基于 FreeCAD 1.1.3 编写,所有截图和操作步骤与 1.1.0 及以上版本兼容。如果你正在使用更早的版本(如 0.21.x 或 1.0.x),部分界面布局和命令名称可能存在差异,建议优先升级到 1.1.3。

FreeCAD 的底层技术栈在 1.1.x 周期中保持稳定:

  • 几何内核:OpenCASCADE (OCCT) 7.8.1,负责所有 B-Rep 几何运算、布尔操作和曲面建模。
  • 3D 图形:Coin3D 场景图库,提供视口渲染与交互。
  • GUI 框架:Qt 6.x,负责界面布局、控件和事件系统。
  • Python 版本:核心版本内嵌 Python 3.11,外部脚本开发可使用 Python 3.9+。
  • 支持平台:Windows 10/11(64-bit)、macOS 12+(Intel 和 Apple Silicon)、Linux(AppImage / Flatpak / Snap / 发行版仓库)。

如果想了解版本之间的完整变更清单,可查阅 FreeCAD 官方 Release Notes 页面(https://wiki.freecad.org/Release_notes_1.1)以及 GitHub 里程碑日志。

1. FreeCAD 是什么

FreeCAD 是一个开源、跨平台、以参数化建模为核心的三维 CAD/CAE/CAM 平台。它的定位不是单一绘图软件,而是一个可扩展的工程建模系统:用户可以用草图、约束、特征、布尔运算和装配关系构建设计;开发者可以用 Python、C++、Qt 与 OpenCASCADE 扩展新的对象、命令、工作台和自动化流程。

结合 FreeCAD 官方仓库可以看到几个关键事实:

  • 项目主页将 FreeCAD 定义为 “Your own 3D Parametric Modeler”,强调开源、参数化、面向现实对象设计。
  • README 明确列出底层技术:OpenCASCADE 几何内核、Coin3D 三维场景、Python API、Qt 图形界面。
  • 源码目录采用核心层与模块层分离:src/App 承载应用数据模型,src/Gui 承载图形界面,src/Base 提供基础设施,src/Mod 收纳各工作台模块。
  • 当前主线通过 CMake 组织构建,顶层 CMakeLists.txt 要求 CMake 3.22.0 及以上,并根据选项启用 GUI、FEM、BIM、VR、测试等能力。

因此,学习 FreeCAD 应同时理解三个层面:

  1. 用户层:如何建模、约束、出图、装配、导入导出、加工、仿真。
  2. 参数化层:文档对象、属性、表达式、依赖图、重计算、命名稳定性。
  3. 开发层:Python 脚本、宏、工作台、命令、FeaturePython、自定义视图、C++ 模块。

从技术架构的角度,FreeCAD 可以划分为四个主要层次:

用户界面层——工作台系统(Workbench)。FreeCAD 不采用单一”模式”,而是通过工作台来组织相关命令与工具栏。PartDesign、Sketcher、TechDraw、Assembly 等工作台各自封装了一组领域操作,用户在任意时刻切换工作台即可获得对应的工具集。工作台之间共享同一个文档对象模型,切工作台不会丢失已创建的几何体或约束。

参数化引擎层——表达式引擎、电子表格(Spreadsheet)和属性系统。FreeCAD 中的几乎每一个数值(尺寸、角度、位置、材质)都可以绑定为表达式,表达式可以引用其他对象的属性或电子表格单元格。这种双向绑定是 FreeCAD 参数化能力的核心,也是实现配置驱动设计的关键。属性系统以键值对形式存储每个文档对象的特性,支持整数、浮点、长度、角度、颜色、枚举等多种类型,且可以通过 Python 运行时动态读写。

几何内核层——OpenCASCADE (OCCT) 7.8.1。所有实体建模、布尔运算、曲面操作、拓扑查询均由 OCCT 内核完成。FreeCAD 通过 Part 模块和 PartDesign 模块封装 OCCT 功能,用户不需要直接调用 OCCT API,但理解 B-Rep 拓扑结构(顶点-边-面-壳-体)有助于诊断布尔操作失败或面丢失问题。

扩展与集成层——Python API、宏录制、插件系统。FreeCAD 从设计之初就将可扩展性作为一等特性。所有菜单命令均可通过 Python 控制台执行,宏录制器能够将用户操作自动转换为 Python 脚本,第三方工作台通过 Addon Manager 一键安装即可扩展全新领域功能(齿轮生成、BIM 深化、管线设计等)。

FreeCAD 1.1.x 版本在以上各层都有显著增强。以下改进尤其值得关注,因为它们直接影响学习体验和日常建模习惯:

  • Assembly 工作台集成:此前装配功能依赖 A2plus、Assembly3、Assembly4 等社区插件。1.1.0 将 Assembly 作为核心工作台内置,使用 Joint 约束系统(Fixed、Revolute、Slider 等)定义零部件运动关系。这意味着装配学习路径不再需要额外安装第三方插件,并成为本教程第 08 章的主讲内容。

  • 拓扑命名问题缓解(TNP Mitigation):这是 FreeCAD 参数化建模历史上最关键的基础设施改进。在早期版本中,若在已有草图上再添加一个凸台,该草图所依附的面的内部编号可能改变,导致后续的圆角、倒角或其他面引用”漂移”到错误的位置。1.1.0 引入了基于几何哈希的算法,在重计算时尝试将旧拓扑引用映射到新几何元素。用户在树视图中可以看到每个特征旁边标注了稳定性标记(绿色表示引用稳定,黄色表示可能漂移)。这项改进不需要用户额外配置,自动生效。

  • 测量工具 Caliper:旧版本在 Part、PartDesign、Draft 等不同工作台中各有各自的测量命令,操作方式不统一。1.1.0 将全部测量能力整合为 Caliper 工具,放置在全局测量工具栏中。Caliper 支持点距、边距、面距、角度、面积等测量模式,且测量结果可以 3D 标注形式保留在场景中。

  • 三点光照系统:此前 FreeCAD 使用简单的方向光,模型曲面细节(尤其是圆角和曲面过渡区域)辨识度不高。1.1.0 引入三点光照(主光 + 辅助光 + 背光),使模型渲染更接近商业 CAD 软件的视觉效果,也降低了对屏幕亮度/对比度的调校依赖。

  • 交互式拖拽器:对象在 3D 视图中的平移、旋转、缩放操作经过重新设计。新的拖拽器支持轴锁定(在拖动时按 Tab 切换轴向)、增量捕捉和约束面吸附,相比旧版自由拖动更加精准可控。

2. FreeCAD 的适用场景

FreeCAD 适用于多种工程任务:

  • 机械设计:零件建模、孔/倒角/圆角/筋板/螺纹表达、工程图。
  • 产品原型:参数化外壳、结构件、夹具、3D 打印件。
  • 建筑与 BIM:墙、楼板、结构构件、IFC 数据、建筑模型组织。
  • 二维制图与施工辅助:Draft 工作台可绘制线、圆、尺寸、文字、捕捉和阵列。
  • 数控加工准备:CAM 工作台可创建作业、刀具、路径、后处理。
  • 仿真分析:FEM 工作台组织材料、网格、边界条件、求解器与结果。
  • 自动化建模:Python API 可以批量生成模型、读取参数、导出格式。
  • 二次开发:通过 Python 工作台快速扩展,也可通过 C++ 模块集成高性能算法。

不适合期望 FreeCAD 像商业 CAD 一样隐藏所有复杂度的场景。FreeCAD 的优势在于透明、可脚本化、可扩展;代价是用户需要理解对象树、重计算和工作台之间的边界。

3. 学习路线总览

建议按以下顺序学习:

  1. 安装与界面:先能稳定运行,理解工作台、组合视图、属性、导航、偏好设置。
  2. 草图约束:掌握几何约束和尺寸约束,这是 PartDesign 的基础。
  3. 实体建模:学习 Body、Pad、Pocket、Revolution、Fillet、Chamfer、Pattern。
  4. 参数化设计:使用 Spreadsheet、表达式、命名对象和配置变量。
  5. Part 与布尔建模:理解 B-Rep、形状、布尔、切片、壳体、融合与修复。
  6. 装配与工程图:用 Assembly 组织零部件,用 TechDraw 输出图纸。
  7. 专业工作台:根据方向学习 Draft/BIM/CAM/FEM/Surface/Mesh。
  8. 脚本与宏:用 Python 自动创建对象、修改属性、执行重计算和导出。
  9. 插件与工作台开发:封装命令、界面、图标、任务面板、偏好设置。
  10. 源码架构:理解 App/Gui/Mod/Base 的分层,进一步阅读核心对象模型。

以上 10 个阶段代表了从零基础到独立开发的完整路径。根据不同学习目标,可以选取其中的子集构成更聚焦的学习路线:

用户路线(建模工程师):目标是在 2-4 周内独立完成零件建模、装配和工程图输出。建议覆盖阶段 1 到 6:安装与界面(第 02-03 章)→ 草图约束(第 04 章)→ 实体建模(第 05 章)→ Part 与布尔建模(第 06 章)→ 参数化设计(第 07 章)→ 装配与工程图(第 08-09 章)。前 2 周集中练习 PartDesign 的 Pad / Pocket / Revolution 三个特征,后 2 周学习装配关系导出工程图。如果时间紧张,阶段 5(Part 布尔建模)可暂时跳过,先保证能产出模型和图纸。

开发者路线(扩展/自动化):目标是在 6-12 周内能用 Python 脚本控制 FreeCAD 建模流程,或开发自定义工作台。建议先走完用户路线的阶段 1-6(约 2-4 周),然后转向阶段 7-10:专业工作台了解(第 10-13 章选读)→ Python 脚本与宏(第 14 章)→ 插件与工作台开发(第 15 章)→ 源码架构(第 16 章)。Python 基础薄弱的读者建议先在 FreeCAD 控制台中执行一些简单脚本(创建盒子、修改尺寸、导出 STL),熟悉对象模型后再开始正式开发。

专业方向路线(按需选择):用户路线+开发者路线是公共基础,掌握之后可按专业需求深入特定领域:

  • FEM 仿真方向:第 13 章 FEM 仿真分析——材料定义、网格划分、边界条件、求解器配置与结果后处理。
  • CAM 加工方向:第 12 章 CAM 数控加工——刀具库管理、路径策略、后处理配置与 G 代码输出。
  • BIM 建筑方向:第 10 章 Draft 二维绘图与 BIM 建筑——墙体、楼板、IFC 导入导出、建筑模型层次管理。
  • 逆向工程方向:第 11 章 Surface 与 Mesh 逆向工程——STL 网格导入、曲面重建、点云处理。

学习时间参考(全日制学习者,每天 3-4 小时):

  • 第 02-03 章(安装与界面):1-2 天
  • 第 04 章(草图约束):2-3 天
  • 第 05 章(PartDesign 特征):3-4 天
  • 第 06 章(Part 布尔建模):1-2 天
  • 第 07 章(参数化表达式):1-2 天
  • 第 08 章(装配设计):2-3 天
  • 第 09 章(工程图 TechDraw):1-2 天
  • 第 10-13 章(专业工作台):每章 2-4 天,按需选读
  • 第 14 章(Python 脚本):3-5 天
  • 第 15 章(插件开发):3-5 天
  • 第 16 章(源码架构):5-10 天
  • 第 17-18 章(协同与实战):按项目体量而定

以上时间为独立完成每章练习的最短预算。实际进度因人而异,建议每个章节至少完成两个练习题(一个按教程步骤操作、一个自由变体设计)后再进入下一章。

4. 与其他 CAD 软件的差异

FreeCAD 的核心差异在参数化和开放架构:

  • 模型不是一次性几何结果,而是一组有依赖关系的对象;修改上游属性会触发下游重计算。
  • 工作台不是完全隔离的应用,而是围绕同一个文档模型提供不同命令。
  • Python 控制台不是附属工具,而是几乎所有操作都可以被脚本化的入口。
  • 文件格式 FCStd 本质上是包含 XML、BREP 和资源的压缩包,适合版本化理解但不适合直接手写修改。
  • 开源项目的功能演进与社区密切相关,版本之间命令名称、工作台组织和装配能力可能变化,需要关注官方 Release Notes。

5. 本教程的结构

本教程不生成 README,而是按照博客当前布局在 cad/FreeCAD/ 下提供独立章节 Markdown 文件,并在 index.md 中集中导航。章节覆盖用户入门、核心建模、专项工作台、工程输出、脚本自动化和源码开发。

建议读者在学习时采用“读一章、做一个模型、保存一个版本”的方式。FreeCAD 的知识只有在反复重建模型、修改参数、观察依赖图和处理失败特征时才会真正掌握。

6. 资料依据

本教程综合参考 FreeCAD 官方 GitHub 仓库的 README、src 源码结构、src/Mod 工作台列表、顶层 CMake 构建配置、贡献说明和当前发布信息,并结合 FreeCAD 常见使用流程整理为中文教程。官方仓库地址:https://github.com/FreeCAD/FreeCAD.

7. 1.1.x 关键变化速览

FreeCAD 的版本迭代遵循 主版本.次版本.修订版本 的语义化规范。1.1.x 系列是 1.0 正式版发布后的第一个功能迭代周期,对用户操作体验和教程编写影响较大。以下从 1.1.0 开始按版本梳理关键变化。

1.1.0(2026 年 3 月)

这是 1.1.x 系列的基础版本,引入了大量功能升级:

Assembly 工作台集成:装配功能从社区插件(A2plus / Assembly3 / Assembly4)升格为 FreeCAD 核心工作台。用户不需要安装任何额外插件即可在同一 .FCStd 文件中创建 Joint 约束。支持的约束类型包括 Fixed(固定)、Revolute(旋转)、Slider(滑动)、Cylindrical(圆柱)、Ball(球铰)、Distance(距离)等。Assembly 工作台与 PartDesign / Part 工作台互通,零部件可以就地建模也可以外部引用。此前用过 A2plus 或 Assembly4 的用户需要注意约束语法和自由度管理方式的差异。

拓扑命名缓解(TNP Mitigation):FreeCAD 内置的自动拓扑引用追踪算法在 1.1.0 中默认启用。当用户在模型中间插入或删除特征时,算法会尝试通过几何哈希将下游特征的引用面/边自动重定向到正确的几何元素。树视图中每个特征节点旁会出现彩色标记——绿色圆圈表示引用稳定,黄色三角形表示引用可能漂移需要手动检查,红色叉号表示引用已断裂。TNP 缓解并不保证 100% 的引用安全,但它将过去需要手动修复的大多数参数化断裂场景降到了可接受的范围。

Caliper 统一测量工具:取代了此前分散在 Part Workbench、PartDesign Workbench 和 Draft Workbench 中的独立测量命令。Caliper 提供统一的操作面板,支持累计测量、结果固定到 3D 场景和复制测量值到表达式。测量模式可通过面板按钮或快捷键切换。

三点光照系统:3D 视图默认启用三点光照(Key Light + Fill Light + Back Light),替代了原先的单一方向光。用户可在偏好设置中调整光照方向、强度和阴影参数。这一改进对曲面建模和装配检查尤其有帮助——过去在平坦面上很难看清微小凹凸,现在光照角度的变化可以揭示这些细节。

交互式拖拽器:对象平移、旋转的交互手柄经过全面重构。新拖拽器支持沿世界坐标系轴或局部坐标系轴拖动、按固定增量捕捉、以及在拖动时动态对准其他对象的顶点/边/面。这一改进在零件定位和装配预览中作用明显。

其他改进:偏置(Offset)工具支持可变偏置、Draft 工作台新增对齐命令、Material 系统扩展以支持 FEM 和 BIM 的物理材料属性、文件保存时的压缩率提高约 30%。

1.1.1 与 1.1.2

这两个版本是 1.1.0 之后的 bug 修复版本,未引入新功能。主要修复包括:

  • Assembly 工作台中部分 Joint 约束在嵌套装配体下的解算错误
  • TechDraw 图纸中极小数尺寸(< 0.01 mm)的标注精度问题
  • 特定显卡驱动下 Coin3D 渲染闪烁
  • macOS 上 AppImage 格式的启动崩溃

这些修复对教程内容无影响,但如果你在 1.1.0 上遇到上述问题,升级到 1.1.2 即可解决。

1.1.3(2026 年 7 月 25 日,当前版本)

1.1.3 是一个纯粹的安全维护版本,重点修复了三个已知安全漏洞(CVE 相关),涉及文件解析中的缓冲区溢出和路径遍历问题。该版本:

  • 不包含任何新功能或 API 变更
  • 不修改任何工作台界面或命令行为
  • 与 1.1.0-1.1.2 完全兼容,所有教程内容在 1.1.3 上均可正常执行

如果你从 1.0.x 升级到 1.1.x,需要注意以下变化:

  • 菜单栏中新增了 Assembly 菜单项(在 PartDesign 旁边)
  • 测量工具的图标和入口位置变更(从各工作台工具栏移至全局工具栏)
  • 偏好设置中新增了光照相关的设置项
  • 文件格式(FCStd)的压缩算法升级,旧版文件在 1.1.x 中可正常打开,1.1.x 保存的文件在 1.0.x 中也能打开但 Assembly 相关信息会丢失

本教程的截图和操作说明均基于 1.1.3 制作。当你升级到未来更高的 1.1.x 修订版本时,核心流程和界面不会发生剧烈变化,可以放心参考。


📖 推荐阅读

学完本章后,建议继续阅读以下相关教程:

  • OCCT 教程 — FreeCAD 底层几何内核 OpenCASCADE 的完整教程,理解几何建模底层原理
  • OpenSCAD 教程 — 脚本化 CSG 建模方式,与 FreeCAD 的 GUI 建模互补
  • CadQuery 教程 — Python 参数化建模框架,与 FreeCAD 共享 OCCT 内核
  • Xbim 教程 — 如果关注 BIM 方向,可学习 IFC 标准与 Xbim 开发