本节摘要:SOURCE 3.1:现代 CAD 分层为 UI、应用逻辑、几何内核、数据持久化;云原生引入渲染与协同微服务。
想象一栋楼:地基、承重墙决定它能不能盖 100 层;装修决定住在里面舒不舒服。CAD 架构同理——几何内核是地基,应用层是装修。地基决定数学上限(能做什么样的几何运算),装修决定使用体验(命令好不好找、界面顺不顺手)。用户整天与装修打交道,但真正决定系统"体质"的是地基。
| 层 | 职责 | 代表组件 |
|---|---|---|
| 交互层 | 命令、视图、选择 | Qt/WebGL 视口 |
| 应用层 | 特征、装配、工程图 | 业务模块 |
| 内核层 | 布尔、求交、倒角 | Parasolid/ACIS/OCCT |
| 数据层 | 文件、PLM 接口 | PDM 适配器 |

交互层:用户感知最直接的一层。桌面 CAD 用 Qt/WPF 等框架,Web CAD 用 WebGL 渲染视口。它负责命令分发、图形拾取、视图导航。交互层关注的是"帧率、精确拾取、手势流畅",不负责几何正确性。
应用层:承载工程语义的中枢。特征建模、装配约束、工程图、钣金、布线……这些业务模块都在这一层。它调用内核完成几何运算,并把运算结果组织成"特征""零件""装配"等业务对象。
内核层:整个系统的"数学心脏"。提供 NURBS 求值、布尔运算、曲面求交、倒角、抽壳、圆角等底层算法。核心要求是稳健性——数学库面对退化输入(重合面、共线边、极小间距)必须给出确定结果,而不是崩溃或输出坏几何。
数据层:持久化与互操作。把内存中的模型序列化为文件(原生格式/中性格式),并通过适配器对接 PDM/PLM。它决定模型能否跨版本、跨系统存活。
SOURCE 强调内核授权是商业 CAD 的核心成本与出口管制焦点。全球格局大致如下:
| 内核 | 类型 | 代表产品 | 特点 |
|---|---|---|---|
| Parasolid | 商业闭源 | NX、SolidWorks、Solid Edge | 行业事实标准之一 |
| ACIS | 商业闭源 | AutoCAD、Fusion 360 体系 | 历史最悠久 |
| OpenCASCADE | 开源 | FreeCAD 等 | 免费但高端能力有差距 |
| C3D / 中望等 | 国产自主 | 中望 3D、CrownCAD | 自主可控、快速追赶 |
内核更换成本极高——CAD 厂商绑定内核后,所有业务代码都围绕其 API 构建。因此"换内核"几乎等于"重写产品",这就是国产内核必须从早期生态就切入的原因。
开源 OpenCASCADE 降低入门门槛但高端曲面仍差距明显——具体体现在高阶连续性控制、大装配稳健性、复杂布尔的成功率上。
传统 CAD 是"单体桌面应用":所有功能打包在一个进程里。云原生 CAD(如 Onshape、CrownCAD)把架构拆成微服务:
# 云 CAD 微服务示意:渲染与几何分离,各自独立扩容 services = { "viewer": {"role": "亿级三角面片渲染", "scale": "按并发扩"}, "modeling": {"role": "特征/布尔/约束求解", "scale": "按计算扩"}, "persist": {"role": "分布式存储与版本", "scale": "按容量扩"}, "collab": {"role": "实时协同与通知", "scale": "按在线数扩"}, } def handle_user_command(user, cmd): # 命令先鉴权 → 路由到建模服务 → 结果持久化 → 通知各端刷新 if auth(user) and modeling.execute(cmd): persist.snapshot(user) collab.notify_peers(user, cmd) return viewer.rerender(user)
微服务架构的好处是按需伸缩:渲染高峰扩容 viewer、计算密集型任务扩容 modeling,互不拖累。代价是数据一致性变复杂——多实例并发修改同一模型时,需要事务与锁机制。
理解架构的最好方式,是追踪一条命令在系统里的完整旅程。以"给圆角半径改为 3mm"为例:
任何一个环节失败,命令都要回滚到操作前的状态。这就是 CAD 的事务机制——命令要么完全成功,要么完全不生效。
# 命令模式 + 事务回滚的最小示意 class Feature: def rebuild(self, params): try: kernel.fillet_rebuild(self, params) # 内核计算 self.history.append(params) # 记录历史 viewer.refresh() except KernelError as e: self.rollback() # 失败则回滚 raise CommandError(f"重建失败: {e}")
现代 CAD 视口采用分档渲染策略:交互操作时用低精度网格保证帧率,操作停止后用高精度网格保证质量:
| 阶段 | 网格精度 | 渲染目标 |
|---|---|---|
| 拖动/旋转 | 粗网格 | 60fps 流畅交互 |
| 停顿 0.5s | 中网格 | 细节可辨 |
| 暂停/出图 | 高精度 | 与模型一致 |
GPU 加速(Vulkan/DirectX)让视口能实时处理百万级三角形。云 CAD 进一步把渲染拆成独立微服务,客户端只接收图像流,几何求解留在云端——这解释了为什么瘦客户端也能打开大模型。
现代 CAD 的竞争力很大程度取决于插件生态。插件通过 SDK/API 访问内核能力,实现行业定制:
| 插件类型 | 示例 | 访问的层 |
|---|---|---|
| 行业规范 | 建筑规范检查、PCB 布线 | 应用层 + 规则引擎 |
| 格式扩展 | 专用格式导入导出 | 数据层 |
| 仿真集成 | 结构/热流仿真内嵌 | 内核层只读 + 求解器 |
| 自动化 | 参数化模板、批处理 | 应用层 API |
插件机制的关键约束是权限边界:插件只能通过公开 API 操作模型,不能直接触碰内核内部数据结构——否则一个劣质插件就能破坏整个模型的几何一致性。
| 阶段 | 架构形态 | 典型软件 |
|---|---|---|
| 1980s-2000s | 单体桌面应用 | AutoCAD、Pro/E |
| 2000s-2010s | 客户端/服务器 | NX、CATIA V5 企业部署 |
| 2010s 至今 | 云原生微服务 | Onshape、CrownCAD |
单体架构开发简单、部署直接,但功能耦合导致"改一处全崩";微服务架构各自独立演进,但引入分布式一致性的复杂度。架构没有最优,只有适应当前规模的最合适。
⚠️ 常见坑:在应用层重复实现求交——应调用内核 API 保证稳健性。
💡 关键直觉:架构 = 谁拥有几何真理。