很多人第一次打开 FreeCAD,是被迫的——手头拿到的模型是个只剩三角面的网格文件,客户说“这里加宽 5 毫米”,你打开一看,连一个能改的数字都没有。也有人是主动来的,想找一个装在自己机器上、不依赖任何在线服务的建模工具,把脑子里那张草图变成能直接交给车间的参数化模型。FreeCAD 正好卡在这个位置上:它把“草图—约束—特征—重算”这一整套参数化流程完整地摆在台面上,不像某些工具那样把逻辑藏起来,代价是你得先弄懂它的脾气。
这篇东西写给两类人:一类是完全没碰过三维 CAD、但愿意花一个下午跑通第一个零件的;另一类是以前用过别的建模软件,切到 FreeCAD 之后发现“怎么改一个尺寸就崩了”的。我会从最基础的概念讲起,把草图里的自由度、特征的顺序、表达式和参数表、以及那几类几乎人人都会撞上的报错,一条一条拆开。不追求把这些功能讲全,只保证你照着走一遍,能拿出一个真正“改一个数字,整个模型跟着变”的东西。
1. 先把“参数化”这件事想明白,否则后面全是返工
在 FreeCAD 里动手之前,有一件事值得先花十分钟搞清楚:参数化模型和普通三维模型到底差在哪。普通模型是“一堆固定的面”,参数化模型是“一份能重新执行的配方”。配方这两个字是关键——你画的每一条线、每一个拉伸、每一个倒角,都是一条按顺序记录下来的指令,模型只是这些指令跑完之后的结果。改尺寸不是去“推动”某个面,而是改掉配方里的某个数字,然后让整份配方从头再跑一遍。
理解了这个,你就能明白为什么 FreeCAD 对建模顺序这么敏感,也就能理解为什么它会在你改完尺寸之后弹出一堆红字——那不是软件坏了,是配方里某一步突然算不下去了。
1.1 Part Design 与 Part 的路线选择
FreeCAD 内部其实有两套建模思路并存,新手最容易在这里走岔路。Part Design 工作台是“单一实体、特征累加”的路线:你建一个 Body,Body 里面是一条自上而下的特征链,草图挂在基准面上,Pad 拉出实体,Pocket 挖掉材料,Fillet 收边。Part 工作台是“独立几何体、布尔组合”的路线:每个形状都是独立对象,你用 Cut、Fuse、Common 去拼。
我的建议很直接:做机械零件、壳体、支架这类东西,全程走 Part Design,不要中途跑去 Part 工作台拉一个圆柱再塞进来。原因不复杂——Part Design 的 Body 内部有严格的依赖关系,所有特征共享同一个坐标系和同一份实体历史,改一个尺寸,整条链一起更新;一旦你把外来的、不在 Body 里的形状混进来,依赖关系就断了,后面改尺寸时经常只更新一半。
那 Part 工作台什么时候用?两个场景:一是做纯辅助几何,比如一条参考轴线;二是你需要对两个已经成型的独立实体做大规模布尔运算,或者处理导入的 STEP 模型。这两种情况和“从零开始建一个参数化零件”是两码事,不要混着用。
1.2 特征树是一份配方,不是一段历史
新手看左侧的模型树,容易把它当成“操作历史记录”——像撤销栈一样,觉得删掉中间一步无非是回到过去。不是的。特征树是依赖图,下面的特征依赖上面的特征。你把中间的 Pocket 删掉,它下面那个基于 Pocket 生成面做出来的 Fillet 立刻失去依附对象,直接报错,甚至把整个 Body 标红。
这就带来一条实操原则:建模时始终让特征树保持“短依赖”。所谓短依赖,就是尽量不要让后面某个特征去引用前面特征“生成出来的面”,而只引用基准面、草图、或者明确的参考几何。举个具体例子:你要在一个已经挖了孔的面上加一圈倒角,如果这个倒角是靠“选中孔的内壁面”来定义的,那下次你把孔的直径从 8 改成 10,特征重算时 FreeCAD 会重新给所有面编号,倒角很可能跑到另一条边上,或者干脆报错。这不是偶发 bug,而是这个软件一直存在的已知限制,后面第 5 节会专门讲怎么绕。
还有一个小细节值得养成习惯:建完每一步就按一次重算(菜单里的刷新,快捷键通常是 Ctrl+R)。别一口气画二十个特征再重算,那样一旦报错,你根本不知道是哪一步开始出问题的。每次重算通过,就等于给配方打了一个“到这里为止是对的”的存档点。
2. 草图阶段真正要盯住的是那几个数字
草图是整个参数化模型的地基,地基歪了,上面盖多少层都白搭。但新手在草图里最常见的误区,是把注意力放在“形状画得像不像”上,而 FreeCAD 真正关心的是另一件事:这个草图被约束死了没有。你画得再像,只要还留着一个没被约束的自由度,改尺寸的时候它就可能整体漂移。
进入草图后,注意下面状态栏和右侧的求解信息面板,那里会显示当前的自由度数(DoF)。数字归零、草图线条由白变绿,才算真正“站稳”。这个过程没有捷径,但有方法。
2.1 自由度:草图有没有“站稳”
一个点有两个自由度(横向、纵向),一条线段除了两个端点还有长度和角度,一个圆有圆心位置和半径。你每加一个约束,就消掉一个或多个自由度。FreeCAD 的求解器会实时告诉你还剩几个,这就是为什么“看 DoF 数字”比“凭眼睛判断”可靠得多。
实操里我建议按这个顺序推进:先画大致形状,不加任何尺寸,只加几何约束(水平、垂直、相切、同心、对称、相等),把形状的“性质”定下来;然后补尺寸约束,把大小和位置定死;最后检查 DoF 是否归零。
这里有个容易忽略的点:对称形状要用对称约束,不要用两半尺寸。比如画一个左右对称的支架轮廓,很多人习惯左边标一个 20、右边标一个 20,看似对称,实际上等你把总宽从 80 改成 100,两个 20 还是 20,中间那段自己变宽了,形状就散了。正确做法是把两侧的对应点用“对称”约束绑到中心竖线上,只标一个总宽。这样改总宽,两边自动均分。
2.2 约束的加法顺序:几何约束先于尺寸约束
为什么强调几何约束优先?因为几何约束描述的是“关系”,尺寸约束描述的是“数值”。关系是稳定的,数值是常变的。你把垂直关系先固定住,后面无论怎么改长度,两条边永远垂直;反过来,如果你先用两个角度尺寸把垂直“凑”出来,改一个尺寸,另一个不会自动跟着改,直角就塌了。
具体到操作:
- 画矩形时,直接用矩形工具,它自带水平和垂直约束,别用四条独立线段拼。
- 画完马上检查有没有多余的约束。同一个“水平”,加两次,求解器会报冗余约束(Redundant constraints),这时候草图的 DoF 数字可能显示正常,但求解会不稳定,改尺寸时容易整体乱跳。
- 需要固定草图位置时,优先用“距离原点”的尺寸约束,而不是“锁定”约束(Lock)。锁定会把点钉死在一个绝对坐标上,后期想整体移动草图就麻烦了。
2.3 那些让草图悄悄失效的小毛病
有三类问题不会立刻报错,但会在你改尺寸的那一刻集中爆发,值得提前防。
第一类是微小间隙。两条本该相连的线,端点差了几微米,肉眼完全看不出来,但求解器认为它们是两个独立的点。你用 Pad 拉伸时可能还能成功(因为容差够大),但后面做倒角或者布尔运算时就会出“无法形成封闭轮廓”。排查办法是用草图校验工具里的“查找缺失重合”功能,它会一次性把所有没连上的端点标出来。
第二类是退化几何。比如一条长度为零的线段、一个半径为零的圆弧,通常是你复制粘贴或者镜像时留下的。这类对象在草图上几乎看不见,但会拖慢求解甚至导致整个草图算不出来。同样的校验工具里可以扫出来。
第三类是外部几何引用。草图工具允许你把模型上已有的边投影进来当参考,用起来很方便,但这条投影边是“活的”——上游特征一变,它就跟着变,甚至消失。我的做法是:只在确实需要对齐时才引用,并且优先引用基准轴和原点,而不是实体上的边。引用实体边相当于给自己埋了个雷,改尺寸的时候它会响。
3. 从草图到实体:Pad 与 Pocket 的参数怎么定
草图站稳了,接下来就是把它变成实体。这一步在 FreeCAD 里就是两个命令:Pad(拉伸成实体)和 Pocket(挖掉材料)。看起来简单,但参数面板里那几个选项,选错了后面全是麻烦。
3.1 Pad 的长度模式与方向选择
Pad 的类型下拉框里有好几个选项,新手最常用的是给定长度,但真正好用的是另外几个:
| 类型 | 适用场景 | 注意点 |
|---|---|---|
| 给定长度 | 尺寸明确、后续不常改的零件 | 改草图后长度不会自动跟随,需要同步改 |
| 到某个面 | 拉伸到模型上已有的面 | 依赖面,改上游尺寸时容易失效 |
| 到最后一个面 | 穿透所有后续材料 | 适合做通孔、贯通槽 |
| 双向对称 | 需要以草图平面为中心对称的零件 | 建模时更符合直觉,改尺寸时中心不漂 |
| 带锥角 | 需要拔模的铸件、注塑件 | 锥角是相对拉伸方向的,方向搞反会内缩 |
我个人的默认选择是双向对称。原因很实际:当你把草图放在原点基准面上、用对称方式拉伸时,零件的中心永远在原点,后面加镜像、加阵列、算出重心、导出给别人的时候,坐标系都是干净的。用单向拉伸,零件整体偏在一边,虽然不影响成型,但后期对齐会很烦。
还有一个细节:Pad 面板里有个“反向”勾选框。方向搞反的时候不用回去改草图,勾一下就行。但注意,如果你后面有特征依赖这个 Pad 的端面,反向之后端面位置全变,依赖会跟着重算,所以在特征树还短的时候就把方向定好。
3.2 顺序问题:倒角、抽壳、挖孔谁先谁后
这是新手和老手差距最明显的地方。同样一个零件,特征顺序不同,最终模型可能一样,但“可改性”差很远。
一条实用的排序原则:先做所有改变大形状的特征(拉伸、切除、旋转),再做所有只影响边缘的特征(倒角、圆角),最后做薄壁类的抽壳。
为什么倒角要放最后?因为它引用的是具体的边。你把倒角放在中间,后面再挖一个孔,这个孔很可能把倒角所在的那条边切掉一半,倒角就变成了残破的碎片,甚至直接报错。放在最后,前面的形状全部定型,倒角引用的边才稳定。
为什么抽壳要更靠后?因为抽壳对几何的要求很高——它需要偏移所有面,如果模型上有尖锐的内角、极小的圆角、或者面之间有微小间隙,抽壳几乎必然失败。先抽壳再倒角,倒角还能修补一些边缘问题;反过来,先倒了一堆小圆角再抽壳,偏移时这些小圆角会被放大成自交面,直接崩。
3.3 参考几何与附着偏移
当你的第二个草图没法直接放在原点基准面上时(比如要在一个台阶面上画东西),有两个选择:附着在已有的实体面上,或者新建一个基准面再附着。
前者的代价就是第 1 节说的拓扑依赖;后者多花一步,但稳。我的做法是:只要这个草图后面可能被改尺寸波及,就新建基准面。新建的基准面附着在原点坐标系上,给它一个偏移值(这个值本身也可以是表达式,后面会讲),草图挂在这个基准面上。这样上游怎么改,基准面的位置只由那个偏移值决定,不会被面的编号变化牵连。
基准面还有一个好处是可以复用。一个零件上如果有五个高度不同的凸台,与其画五个草图分别附着在五个面上,不如建五个基准面,全部挂在原点坐标系的竖直方向上,只改偏移量。这样整个模型的“高度体系”是集中的、可查的,改起来一目了然。
4. 让模型“能改”的关键:表达式、参数表与命名
到这里,你的模型已经可以改尺寸了——打开草图,改一个数字,重算,模型跟着变。但这只是最初级的参数化。真正的参数化是:你不需要打开任何草图,只在一个地方改数字,整个模型自动更新。
这就要用到 FreeCAD 的表达式引擎和电子表格。
4.1 表达式引擎的最小可用写法
FreeCAD 里几乎每一个数值属性都能接受表达式。操作方式:在属性值输入框里先敲一个等号,输入框会变成表达式编辑模式(或者右键属性选“表达式”),然后你就可以写算式了。
能写什么?四则运算、括号、函数(三角函数、开方、取整等)、条件判断,还有带单位的数值。带单位这一点特别值得用:直接写25 mm,软件会按毫米理解;写1 in会自动换算。如果你在做一个需要混用单位的零件(比如某个孔位是按英制标准定的),这样写比手动换算可靠得多。
表达式里引用其他对象的写法是“对象名.属性名”。比如引用某个草图的约束值,写成Sketch.Constraints.Width;引用某个 Pad 的长度,写成Pad.Length;引用电子表格里的单元格,写成Spreadsheet.width。这个语法一开始会觉得啰嗦,但用熟了之后,你会发现它实际上是在给模型建一张“引用网”,任何一处改动都会沿着这张网传下去。
一个坑要提前说:表达式里的对象名是大小写敏感且不能有空格和特殊字符的。你新建一个 Pad,默认叫Pad;再建一个,叫Pad001。如果你后来手动把它重命名成底座拉伸,所有引用它的表达式都会断掉。所以要么一开始就用英文命名,要么就别改名字。
4.2 用 Spreadsheet 做一张参数表
电子表格工作台是 FreeCAD 里被低估最多的功能。它的用法很朴素:新建一个表格,A 列写参数名,B 列写数值和单位,然后给 B 列的单元格设置一个别名(alias),模型里所有地方都用这个别名去引用。
为什么值得多花这一步?三个理由。
第一,改尺寸的时候不用满模型找。一个中等复杂度的零件,尺寸可能有三四十个,散落在十几个草图里。有了参数表,你打开一张表,从上往下捋一遍就改完了,不用一个个双击进草图。
第二,参数之间可以建关系。比如板厚是 5,所有的孔深都应该是板厚加 2,那你就在孔深那一格写=板厚+2。下次板厚改成 8,孔深自动变 10。这种联动在草图里是做不到的,草图里的尺寸只能各自独立。
第三,方便做系列化。同一类零件有多个规格,你只需要复制一份文件,改表里的三五个数字,整个模型就是新型号了。这比每次重画一遍省太多时间。
有一点要注意:表格里的数值一定要带单位。不带单位的纯数字在 FreeCAD 里会被当成无单位量,参与带单位的运算时可能报错或者得到奇怪的结果。养成习惯,所有长度都写mm,角度写deg。
4.3 命名引用与别名,避免“改一个乱一片”
除了表格,还有一层命名要做:给草图里的关键约束起名字。新版 FreeCAD 支持给约束重命名,重命名之后它就能被表达式引用,写法和前面一样。
这件事的价值在于“语义化”。你有一个标着35的尺寸,三个月后回来看,根本不知道这个 35 是宽度还是高度还是孔距。但如果它叫wall_thickness,一眼就明白。更重要的是,当你想让另一个尺寸等于“壁厚乘二”时,写Sketch.Constraints.wall_thickness * 2比写Sketch.Constraints[7] * 2可靠一万倍——后者在你插入一个新约束之后,索引全乱。
命名规范我建议这样定:长度类用_len结尾,厚度用_thk,孔径用_dia,间距用_gap,角度用_ang。不需要多优雅,只要全项目一致就行。统一命名带来的收益,在你做第三个零件的时候就会体现出来。
5. 模型崩了怎么办:几条真实的排错路径
FreeCAD 的报错信息出了名的不友好——经常就是一个红叉加一句“重算失败”,不告诉你哪一步、为什么。这一节把我踩过的几类问题按现象分类,给出可复现的排查顺序。
5.1 拓扑命名问题:改尺寸后倒角跑到别的边上
现象:模型本来好好的,你把某个尺寸从 30 改成 32,重算之后倒角不见了,或者跑到一条完全不相干的边上,或者弹出“某特征的结果不是一个有效实体”。
原因:FreeCAD 内部给几何面编号的方式,依赖建模过程中面的生成顺序。你改了一个上游尺寸,某个面可能分裂成两个、或者和相邻面合并,编号就全变了。下游那些“引用第 N 个面”的特征,自然就指错了地方。
排查和缓解的顺序:
- 先看是哪个特征报错,通常是最靠下、依赖最多的那个。
- 临时把它禁用(右键里有切换断开的选项,或者直接把它的参数改成一个不会出错的极端值),看前面的特征能不能正常重算。
- 如果前面正常,说明是这个特征自身的引用失效,重新给它指定边或面即可,但下次改尺寸还会复发。
- 想要根治,只能改建模策略:把倒角、圆角这类引用边的特征全部挪到特征树末尾;中间的草图尽量挂在基准面上而不是实体面上;少用“投影外部几何”。
还有一条经验:改尺寸的时候,一次只改一个,改完立刻重算。同时改三个尺寸再重算,一旦报错你根本分不清是哪个引起的。这个习惯看起来很笨,但省下来的排查时间远超多按几次快捷键的功夫。
5.2 重算失败的排查顺序
“重算失败”是个筐,什么都往里装。但排查其实有固定顺序,从最里层往外查:
先从报错特征自己的草图查。双击进去,看求解信息面板,有没有过约束、有没有退化几何、有没有悬空的点。草图是源头,源头坏了上面全坏。
再查这个特征引用的对象存不存在。有时候你删了一个基准面,忘记下面的草图还挂在上面,特征树的依赖就断了。这种情况在模型树里会显示一个特殊的标记,注意看图标变化。
然后查几何有效性。用检查几何的工具跑一遍,它会告诉你实体上有没有自交面、零面积面、非流形边。这类问题肉眼看不出来,但会让后续所有布尔运算和抽壳失败。
最后才怀疑数值。有些参数在特定取值下必然失败,比如圆角半径大于了相邻面的宽度、抽壳厚度大于了最薄处的厚度、拔模角大到让面翻过去。这类问题不算 bug,是几何上就不成立,改参数就行。
5.3 草图求解失败与过约束的定位
过约束是新手最容易撞上的。表现是草图变红或者变黄,求解面板里明确写着“冗余约束”。
为什么会过约束?最常见的是同一个关系被表达了两次。比如你画了一条水平线,工具自动加了水平约束,你又手动点了一次水平;或者你标了总长,又标了两段分段长,三者数学上不自洽。
定位方法:求解面板里会列出冲突的约束编号,在草图里选中它,看它高亮的是哪几个元素。找到之后,删掉多余的那一个——通常是删掉“手动加的”那个,保留“工具自动加的”那个。
还有一种情况是约束本身没问题,但数值互相矛盾。比如你标了两条平行线之间的距离是 5,又标了它们之间的夹角是 10 度,这两个在几何上不可能同时成立。这种时候求解器会报“求解失败”而不是“冗余”。解决办法是删掉其中一个,想清楚你到底要控制哪个量。
6. 把一个零件从头跑到尾:完整路径复盘
概念和排错都讲完了,最后把整条路径串一遍。下面这个流程适合绝大多数“从零开始、要能改尺寸”的零件,照着走一遍,你会对前面那些原则有实感。
6.1 建模顺序的推荐清单
- 新建文档,切到 Part Design,创建 Body。Body 是所有特征的家,不要在 Body 外面乱建东西。
- 在参数表里先写下三到五个核心尺寸:总长、总宽、总高、壁厚、主要孔径。先有这几个数字,再动手画,比边画边想清楚得多。
- 在原点基准面上建第一个草图,画最外轮廓。几何约束优先,尺寸全部引用参数表。
- 检查 DoF 归零,草图变绿,退出。
- Pad,选双向对称,长度引用参数表。重算一次。
- 建基准面做第二个草图,偏移量引用参数表,不要附着在刚拉出来的实体面上。
- Pocket 挖孔或开槽,能用“贯通”就用贯通,少用“到某个面”。
- 需要重复的结构用阵列,不要手动复制草图。阵列的方向引用基准轴,不要引用实体边。
- 所有倒角、圆角放到最后统一做。做之前先想清楚哪些边是必须倒的、哪些是可选的,必需的和可选的不要混在一个特征里。
- 整体重算一次,用检查几何跑一遍,确认是有效实体。
- 导出。要给别人继续改的,导 STEP(保留实体和面);要拿去打印或做网格处理的,导 STL 或 3MF。这两者的区别要清楚:STEP 是精确的边界表示,能再导入回来改;STL 是三角面片,导出去就只剩形状,尺寸精度取决于网格密度。
这套流程里第 6 步和第 9 步是最容易被跳过的,也是后期出问题最多的两处。多花的那几分钟,会在你第三次改尺寸的时候还给你。
6.2 文件管理与版本备份的几个习惯
FreeCAD 的文件格式是单一文件,里面装着整个特征树和所有参数。这带来一个很实际的风险:一次误操作把特征树搞乱了,保存之后原文件就没了。
我自己的习惯是三条。第一,每完成一个阶段就另存一份带编号的副本,不用版本控制工具,就是文件名后面加个日期。第二,改大尺寸之前先存,改崩了直接退回去,不要在崩溃的模型上硬修。第三,把参数表单独抄一份文本,记下每个版本的参数组合,这样即使文件坏了,你也能照着重搭一个——有参数表,重搭一个模型也就是十几分钟的事。
还有一点:不同版本的 FreeCAD 打开同一个文件,重算结果可能不一样,尤其是涉及圆角、抽壳这些对几何容差敏感的特征。如果这个模型要交给别人,最好连同你用的版本号一起说明,别让人家用另一个版本打开之后发现模型全红了还以为是你的问题。
最后分享一个我觉得最值的小技巧:在模型树的第一个特征上写注释。FreeCAD 允许给对象加描述文字,把“这个零件的核心参数在参数表的哪几行”“哪个特征不能随便删”写进去。三个月后你自己回来看,会感谢当时那个多写了两句话的自己。