CAD建模·机械设计·工程图·免费版
下载地址
https://api.skillhub.cn/api/v1/download?slug=%40user_d4933a3c%2Fcad-free将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_d4933a3c/cad-free。原创免费技能(不依赖任何专有实现)。CAD modeling / parametric modeling / mechanical design / engineering drawing —— 用开源几何建模库(CadQuery、build123d、OpenCASCADE、FreeCAD、OpenSCAD)以代码方式描述零件 part 与装配体 assembly:parametric CAD、尺寸驱动 dimension-driven、系列化变型、版本管理、批量导出 export STEP / STL / DXF / IGES / SVG。
覆盖建模流程、标准件参数化库(螺栓 bolt / 轴承 bearing / 齿轮 gear / 法兰 flange / 密封圈 O-ring)、装配约束与干涉检查、工程图标注与公差 tolerance / GD&T、材料与重量估算、3D 打印与 CNC 下料的导出要点、模型校验 checklist。代码即图纸 — 模型可复现、可 diff、可参数化,而非手工拖拽。
面向机械设计、结构设计、产品开发、3D 打印与数控加工场景。免费版,只用开源工具链,不引用任何付费 CAD 软件或云端建模服务。
阅读全文 (展开查看完整说明)
概述
CAD 建模·机械设计·免费版
红线
- 不编造尺寸:所有关键尺寸必须由用户提供或来自明确标准(GB/ISO/DIN);缺失时标注「待定」,不许瞎填。
- 不编造标准号:引用标准必须写明「需按最新版标准核对」,不确定时给查证方向而非虚构编号。
- 承载/安全件必须标注校核要求:涉及受力、承压、高速旋转的零件,输出时必须提示「需做强度校核/有限元验证」。
- 单位必须显式声明:mm / inch 混用是工程事故的经典原因(差 25.4 倍)。
- 不引用任何付费 CAD 软件/云端建模服务:只用开源库(CadQuery、build123d、FreeCAD、OpenCASCADE)。
标准参数核实三步(引用 GB/ISO/DIN 数值前必做)
标准件与公差数值不能直接照搬本文给出的示例值——标准会改版,你的行业可能执行特定版本:
- 定版本:确认项目要求哪一版标准(如 GB/T 276-2013 深沟球轴承),图纸/合同没写就先问;
- 对原文:拿标准原文(或全国标准信息公共服务平台 std.samr.gov.cn 查现行版本)核对该尺寸;
- 留记录:在交付说明里写「尺寸依据 GB/T xxxx-xxxx」,下游复核的人才知道去哪对。
本技能 references 里的标准件参数是常用示例值,用于快速出原型;正式出图前按上面三步核实。
何时使用
- 需要用代码生成参数化零件 / 装配体。
- 要做尺寸驱动的系列化变型(如不同规格的法兰、支架、箱体)。
- 想把模型纳入版本管理(代码可 diff,二进制不行)。
- 需要批量生成模型并导出 STEP / STL / DXF。
- 想用开源工具链替代手工拖拽建模、提高复用率。
反触发(不要用):
- 复杂曲面造型 / 工业设计外观 → 交互式建模软件更合适。
- 出符合国标、可直接下厂盖章的正式工程图 → 本技能提供模型与标注数据,图纸需专业工具与工程师复核。
- 安全关键件 → 本技能产出仅为几何,必须经专业校核。
职责边界
- 做:写参数化建模脚本、组织特征、调用标准件库、装配、导出通用格式、估算重量、给出校验清单。
- 不做:替代工程校核、保证可制造性与可装配性、提供付费软件方案。
两条路线,先选一条
| 你的情况 | 走哪条 | 看哪节 |
|---|---|---|
| 拿到一个图纸文件,只想打开看/量尺寸/转格式 | 读图路线 | references/file-io.md(格式速查、无 GUI 预览、提取信息、转换对照表) |
| 会 Python,或要做系列化变型 / 批量出图 | 代码路线 | 下面的「5 分钟上手」→「主流程」 |
| 不会写代码,就想画个零件出张图 | 零代码路线 | references/freecad-gui.md(FreeCAD 图形界面 + 商业软件迁移对照) |
| 想看完整项目怎么从头做到尾 | 先看案例 | references/case-study.md(可调电机安装座,端到端) |
| 模型建好了,要确认能不能加工 | 交付前检查 | references/dfm.md(孔径/孔边距/薄壁自动检查,四种工艺能力边界) |
四条路线不冲突,最常见的组合是:读图拿到现成文件 → 代码改出变型 → GUI 里检查 → 出图交付。
5 分钟上手(第一次用先看这个)
复制下面整段,改 PARAMS 里的数字,运行即可得到一个带法兰孔的圆盘 STEP 文件。你不需要懂建模,只要会改数字。
# RUN: fixture=empty
# pip install cadquery
import cadquery as cq
from cadquery import exporters
PARAMS = {"outer_d": 100.0, "inner_d": 60.0, "thickness": 10.0,
"hole_count": 4, "hole_d": 8.0}
part = (cq.Workplane("XY").circle(PARAMS["outer_d"] / 2)
.extrude(PARAMS["thickness"]))
part = part.faces(">Z").workplane().circle(PARAMS["inner_d"] / 2).cutThruAll()
part = (part.faces(">Z").workplane()
.polarArray(radius=PARAMS["outer_d"] / 2 - 12, startAngle=0,
angle=360, count=PARAMS["hole_count"])
.hole(PARAMS["hole_d"]))
# ⚠️ 圆盘/回转体没有竖直直边,用 edges("|Z") 倒角会报
# "There are no suitable edges for chamfer or fillet";倒外圆棱要用 ">Z"
part = part.edges(">Z").chamfer(0.5)
print("有效:", part.val().isValid(),
"| 体积:", round(part.val().Volume(), 1), "mm^3")
exporters.export(part, "part.step")改数字就能得到不同规格 —— 这就是参数化建模的全部意义。想做别的形状,把 PARAMS 和建模步骤告诉本技能即可。
主流程
第 1 步:需求与参数化定义(质检闸 A)
明确四件事:
- 单位制(默认 mm,必须显式声明)
- 主参数:驱动尺寸(哪些变了,模型跟着变)
- 固定尺寸:不随变型改变的
- 工况(是否受力 / 是否需要装配 / 加工方式:机加、钣金、3D 打印、铸造)
# 参数区(唯一手输的地方)
PARAMS = {
"unit": "mm",
"outer_d": 100.0, # 主参数:外径
"inner_d": 60.0, # 主参数:内径
"thickness": 10.0, # 主参数:厚度
"hole_count": 4, # 主参数:孔数
"hole_d": 8.0, # 主参数:孔径
"material": "Q235", # 影响重量估算
}质检闸 A:关键尺寸缺失 → 先问,不许假设。
若用户说「差不多就行」→ 标注为示例值并提醒需确认。
第 2 步:环境准备
pip install cadquery # 或 build123d
# 均为开源许可(Apache-2.0),本地运行,无需联网第 3 步:建模(由粗到精)
顺序原则:先主体,再切除,再细节(倒角/圆角),最后阵列。
# RUN: fixture=empty
import cadquery as cq
# 接上文:PARAMS 由第 1 步给出;单独复制这段时先补下面这几行
PARAMS = {"outer_d": 100.0, "inner_d": 60.0, "thickness": 10.0,
"hole_d": 8.0, "hole_count": 6, "material": "AL6061"}
P = PARAMS
# 1) 主体
part = cq.Workplane("XY").circle(P["outer_d"] / 2).extrude(P["thickness"])
# 2) 切除(中心孔)
part = part.faces(">Z").workplane().circle(P["inner_d"] / 2).cutThruAll()
# 3) 阵列孔
part = (
part.faces(">Z").workplane()
.polarArray(radius=(P["outer_d"] / 2 - 12), startAngle=0, angle=360, count=P["hole_count"])
.hole(P["hole_d"])
)
# 4) 细节(倒角放最后)
# 圆盘类零件没有「平行于 Z 轴的直边」,写 .edges("|Z") 会直接报
# "no suitable edges for chamfer or fillet"——要用 ">Z"(顶面轮廓边)或 "%CIRCLE"
part = part.edges(">Z").chamfer(0.5)常用特征速查:
| 特征 | 写法要点 |
|---|---|
| 拉伸 | .extrude(h) |
| 旋转 | .revolve(angle)(先画截面) |
| 扫掠 | .sweep(path)(弹簧、管件) |
| 放样 | .loft()(过渡形状) |
| 切除 | .cutThruAll() / .cutBlind(depth) |
| 孔 | .hole(d) / .cboreHole(...)(沉头孔) |
| 螺纹 | 用 cq.Thread 或近似螺纹牙型简化表示 |
| 阵列 | .polarArray(...) / .rarray(...) |
| 倒角/圆角 | .chamfer(x) / .fillet(r) |
| 抽壳 | .shell(thickness) |
| 镜像 | .mirror("YZ") |
| 布尔 | .union() / .cut() / .intersect() |
第 4 步:标准件与装配(见 references/standard-parts.md)
- 标准件(螺栓、轴承、齿轮、法兰、密封圈)优先复用参数化库,不重画。
- 装配用约束描述:同轴、贴合、距离、角度。
- 装配后必须做干涉检查。
第 5 步:工程图与公差(见 references/drawing.md)
- 视图:主视 + 需要的剖视 / 局部放大。
- 标注:尺寸、公差、形位公差、表面粗糙度、技术要求。
- 标题栏:图号、材料、比例、单位、日期。
第 6 步:校验(质检闸 B)
# RUN: fixture=empty
# 接上文:part / P 来自第 3 步;单独复制这段时先补下面几行
import cadquery as cq
PARAMS = {"outer_d": 100.0, "inner_d": 60.0, "thickness": 10.0,
"hole_d": 8.0, "hole_count": 6, "material": "AL6061"}
P = PARAMS
part = cq.Workplane("XY").circle(P["outer_d"] / 2).extrude(P["thickness"])
# 几何有效性
assert part.val().isValid(), "几何无效"
# 包围盒 / 体积合理性
bb = part.val().BoundingBox()
print(f"尺寸: {bb.xlen:.1f} x {bb.ylen:.1f} x {bb.zlen:.1f} mm")
print(f"体积: {part.val().Volume():.1f} mm^3")
# 重量估算(密度 g/cm^3,体积 mm^3 → /1000 得 cm^3)
DENSITY = {"Q235": 7.85, "45": 7.85, "AL6061": 2.70, "SUS304": 7.93, "PA66": 1.15}
m = part.val().Volume() / 1000 * DENSITY.get(P["material"], 7.85)
print(f"估算质量: {m:.1f} g")对照检查表:
| 检查项 | 期望 |
|---|---|
| 几何有效 | isValid() == True |
| 包围盒尺寸 | 与预期主参数吻合(±公差) |
| 体积 > 0 | 非空实体 |
| 孔数 / 阵列 | 与参数一致 |
| 壁厚 | 满足最小加工壁厚(钢件 ≥2mm,铝件 ≥1.5mm,塑料 ≥1mm) |
| 无自交 / 退化面 | 导出无警告 |
| 装配干涉 | 无意外重叠 |
质检闸 B:几何无效或尺寸明显不对 → 不许导出交付,先修模型。
第 7 步:导出
# RUN: fixture=empty
# 接上文:part 来自第 3 步;单独复制这段时先补下面两行
import cadquery as cq
part = cq.Workplane("XY").circle(50).extrude(10)
from cadquery import exporters
exporters.export(part, "part.step") # CAD 交换,保留实体
exporters.export(part, "part.stl") # 3D 打印 / 预览(三角网格)
exporters.export(part, "part.svg") # 线框示意(可选)格式选择:
| 格式 | 用途 | 特点 |
|---|---|---|
| STEP (.step/.stp) | CAD 交换、下游编辑 | 保留精确几何与实体,首选 |
| STL | 3D 打印、渲染 | 三角网格,有精度损失 |
| DXF / SVG | 下料、激光切割、钣金展开 | 2D 轮廓 |
| IGES | 老系统交换 | 曲面为主,易丢实体信息 |
| OBJ / glTF | 展示、网页三维 | 带材质,不适合加工 |
第 8 步:交付说明(必写)
## 模型交付说明
- 单位:mm
- 主参数:<...>(改这些会驱动模型变化)
- 材料:<...>(仅用于重量估算,未做强度校核)
- 估算质量:<...> g
- 导出格式:STEP(实体)/ STL(打印)
- 未包含:<公差、表面粗糙度、热处理、工艺路线>
- 需人工确认:<...>
- ⚠️ 若用于承载/承压/安全件:必须做强度校核与有限元验证系列化变型(批量产出)
for od in [80, 100, 125, 160]:
P2 = dict(PARAMS, outer_d=od)
p = build(P2) # 把建模逻辑抽成 build(params) 函数
exporters.export(p, f"flange_D{od}.step")变型前先跑一遍
build()的单元检查,避免批量产出一批坏模型。
常见坑
| 坑 | 后果 | 避免 |
|---|---|---|
| 单位混用 | 尺寸差 25.4 倍 | 全局声明单位,参数区注明 |
| 圆角顺序错 | 倒角失败 / 几何破损 | 倒角放最后 |
| 阵列半径算错 | 孔跑到实体外 | 用参数计算,不写死数值 |
| 浮点误差 | 相切面失败 | 留 0.01mm 余量 |
| 抽壳太厚 | 自交失败 | 壳厚 < 最小壁厚的 1/2 |
| 不检查有效性 | 导出的 STEP 下游打不开 | 导出前 isValid() |
| 螺纹真建模 | 面数爆炸、性能崩 | 非必要用简化表示或注释 |
| 装配靠目视 | 干涉没发现 | 写干涉检查脚本 |
| 直接拿去加工 | 缺公差/工艺报废 | 交付说明写清未包含项 |
圆盘用 |Z 倒角 | 报 "no suitable edges",模型建不出来 | 圆盘/回转体改用 ">Z" 或 "%CIRCLE" |
干涉检查写 .val().val() | Compound object has no attribute 'val' | intersect() 已返回 Shape,直接用 .Volume() |
无 GUI 环境调 save_image() | ImportError(要 OpenGL 且需 pyglet<2) | 用 matplotlib 出三视图(见 file-io 2.4/2.5) |
| 拿破损 STL 直接切片 | 切片报"模型不闭合" | 先跑网格体检修复,仍不闭合就回源头要 STEP |
报错速查与自诊(出错了先看这里)
自诊三步法:
- 看报错最后一行,拿关键字在下面速查表里找——每条都给人话解释和下一步动作;
- 找不到 → 最小化复现:把建模代码逐步注释,只留出错那一步,确认是哪个特征引发的;
- 还不行 → 降级:去掉小倒角/复杂圆角等细节特征先出主体,主体验证通过后再逐个加回细节,定位到冲突特征。
报错原文速查表
| 报错原文(关键字) | 人话解释 | 下一步怎么做 |
|---|---|---|
There are no suitable edges for chamfer or fillet | 你选的边集里没有能倒角的边——圆盘/回转体没有竖直直边,|Z 选不到东西 | 改用 .edges(">Z")(顶面轮廓边)或 "%CIRCLE";倒角放建模最后一步 |
Compound object has no attribute 'val' | 干涉检查对结果多调了一次 .val() | intersect() 返回的直接是 Shape,用 .Volume() 即可,别再 .val() |
Standard_Failure + 看不懂的内核信息 | 建模内核(OpenCASCADE)算不出这个特征,多半是几何冲突(相切面、零厚度、自交) | 检查上一步特征:留 0.01mm 余量避开相切;简化或挪后该特征 |
ModuleNotFoundError: No module named 'cadquery' | 运行的 Python 里没装建模库 | pip install cadquery;装完还报 → 你 pip 和运行用的不是同一个 Python(python -m pip install 对齐) |
ImportError(提到 pyglet / OpenGL / display) | 无图形界面环境下调了 save_image() 截图 | 用 matplotlib 出三视图代替(见 references/file-io.md 2.4/2.5) |
| 切片软件报「模型不闭合 / not manifold」 | STL 网格有破洞或非流形边 | 先跑网格体检修复(references/file-io.md);修复后仍不闭合 → 回源头要 STEP,别硬修 |
| 尺寸恰好差 25.4 倍 | mm / inch 单位混用 | 参数区显式声明单位;导入外部图纸先确认它的单位制 |
isValid() 为 False 或 Volume() 为 0 | 某个特征失败产出了空/自交实体 | 逐个回退特征找肇事的那个;常见是切除边界与轮廓相切、阵列半径过大 |
polarArray 后孔不见了 | 孔被阵列到实体外或与外圆相切 | 阵列半径 ≤ 外径/2 − 孔径/2 − 壁厚;用参数计算,不写死数值 |
自诊示范脚本(可直接跑)
把这段模式套到你自己的建模代码里:捕获报错 → 输出人话原因 + 下一步动作 → 自动降级保住主体。
# RUN: fixture=empty
# pip install cadquery
import cadquery as cq
def safe_chamfer(part, edge_selector, size):
"""倒角失败时给人话提示并降级返回未倒角主体,不中断整个建模。"""
try:
return part.edges(edge_selector).chamfer(size)
except Exception as e:
msg = str(e)
print("[自诊] 倒角失败,原因:", end="")
if "no suitable edges" in msg:
print("这个零件上找不到可选中的倒角边(圆盘/回转体常见)。")
print("[下一步] 换 .edges(">Z") 选顶面轮廓边,或用 "%CIRCLE";倒角放最后一步。")
else:
print("建模内核算不出该特征(几何冲突)。")
print("[下一步] 检查相切面留 0.01mm 余量;或先跳过这个细节特征。")
print("[降级] 返回未倒角主体,先保证主体可用。")
return part
P = {"outer_d": 100.0, "thickness": 10.0}
part = cq.Workplane("XY").circle(P["outer_d"] / 2).extrude(P["thickness"])
# 故意用错误的 "|Z" 演示自诊(圆盘没有竖直边);实际建模时写对选择器即可
part = safe_chamfer(part, "|Z", 0.5)
assert part.val().isValid(), "主体应保持有效"
print("主体有效:", part.val().isValid(), "| 体积:", round(part.val().Volume(), 1), "mm^3")给模型的指令:任何建模步骤抛异常时,不要原样转发英文报错——按上表翻译成人话 +
给出下一步动作 + 能降级就降级保主体,最后再让用户决定是否重试。
失败降级
- 建模库不可用 → 输出「参数化伪代码 + 建模步骤说明」,用户可在任意 CAD 中手绘。
- 几何反复失败 → 简化特征(去掉小倒角/复杂圆角),先出主体,细节后加。
- 仅需示意图 → 用 SVG/HTML 出 2D 示意图,明确标注不用于加工。
- 需要真实受力结论 → 明确拒绝给结论,转交给 CAE 仿真与工程校核流程。
依赖
- 开源
cadquery/build123d/FreeCAD(本地安装,开源许可)。 - 无需联网、无需任何付费 CAD 软件或云端服务。
参考文件
references/file-io.md:打开/查看/转换已有图纸(最高频场景)— 格式速查、无 GUI 预览(SVG 投影 + matplotlib 三视图)、网格体检与修复、提取尺寸与标题栏、测量、DWG→DXF 转换、常见坑references/modeling.md:建模手法速查表(可整段运行)、边选择器避坑、导出前校验脚本references/case-study.md:完整实战案例「可调电机安装座」端到端 — 钣金展开计算、长圆孔、加强筋、装配干涉、工程图、BOM、导出(新)references/freecad-gui.md:零代码路线 — FreeCAD 工作台速查、草图约束铁律、Spreadsheet 参数化、TechDraw 出图、SolidWorks/AutoCAD 迁移对照表(新)references/part-templates.md:6 个拿来即用的零件模板(支架/法兰/阶梯轴/壳体/孔板/密封槽)references/standard-parts.md:标准件参数化库与装配约束写法references/dfm.md:面向制造的检查(新)— 四种工艺能力边界表、可运行的孔径/孔边距/薄壁检查脚本、六条硬规则references/drawing.md:工程图视图、标注、公差与标题栏规范
免责声明
本技能产出为几何模型与建模脚本,不包含工程校核、公差设计、材料与工艺选择。用于承载、承压、安全相关或批量生产的零件,必须经专业工程师校核与验证。
相关技能推荐
同系列(CAD / 工程制造,可组合使用):
dwg-free— 图纸处理与版本比对:零门槛打开看图(不用写代码)、10 个批处理脚本、改版图自动找出改了哪并标红圈、批量转 PDFcnc-free— 数控编程与 G 代码:切削参数选型、刀具补偿、后处理与仿真校验思路print3d-free— 3D 打印全流程:STL 修复、支撑与摆放、切片参数、翘曲与缩水补偿sheetmetal-free— 钣金展开计算:K 因子、折弯扣除、展开长度、工艺缺口与折弯顺序gdnt-free— 形位公差与尺寸链:公差分配、配合选型、尺寸链正反向计算bom-free— BOM 物料清单:齐套性检查、编码规则、多层级展开与成本汇总bim-free— 开源 BIM 工作流:IFC 读写校验、工程量提取、碰撞检查与交付清单cae-free— CAE 仿真:网格划分、边界条件、应力判读与常见失真排查kicad-free— 电路与 PCB 设计:原理图、布线规则、Gerber 输出与打样 checklistzhongwangcad-free— 国产 CAD(中望/CAXA/浩辰)迁移替代与国产化适配
其他常用:
grill-me-free— 用尖锐提问压力测试方案,找出未言明的假设与致命漏洞pdf-free— PDF 处理:拆分合并、OCR、表单、水印与批量导出(工程图交付常用)
致谢
- 原创免费技能,基于 CadQuery / build123d / FreeCAD 等开源工具的公开用法,
由本技能作者重新组织与本地化撰写。
- 采用 MIT 许可,不依赖任何专有实现或付费服务。