第一次做 CAD 插件,常会卡在一个问题上:用 LISP、C#,还是 C++?
这个问题看起来像语言选择,其实更像项目风险判断。工具选轻了,后面会被性能和界面卡住;工具选重了,两天能交付的小功能,可能变成两周环境配置。
建议先问五个问题:功能有多大、用户有多少、界面复杂吗、数据量有多重、以后谁维护。
AutoLISP:最快把小工具做出来
AutoLISP 的优势很直接:上手快,离 CAD 命令行很近。画图、选对象、读写简单属性、批量改图层、统一标注样式,这类操作用 LISP 往往很舒服。很多设计院内部小工具,几十行到几百行就能跑起来。
它适合解决“现场马上要用”的问题。比如一键统计图块数量、批量改文字高度、按规则生成构件编号、清理图层和线型。工程师自己懂业务,学一点语法,就能把重复劳动压下去。
局限也要早知道。LISP 做复杂界面比较吃力,代码规模一大,可维护性会下降。它能调用 COM,也能写 DCL 界面,但体验和现代插件界面有差距。涉及复杂算法、数据库、权限、后台服务时,LISP 会越来越别扭。
我的经验是:如果功能可以用“选中对象,然后改一批属性”概括,LISP 很值得先试。
C#/.NET:多数正式插件的平衡点
C# 是很多 CAD 二次开发团队的主力路线。它能调用 AutoCAD .NET API,语言现代。做窗体、做面板、接数据库、读写 Excel、对接 Web API,这些事 C# 都比较顺手。
它的优势在“工程化”。项目可以分层,可以写单元测试,可以接日志和配置,也能做更好的错误处理。团队协作时,C# 代码比大段脚本更容易管。
典型场景包括:带参数面板的绘图工具、批量出图、图纸审查、图块库管理、BOM 统计、与 ERP 或 PLM 做数据交换。只要用户希望有按钮、有表格、有进度条、有配置页,C# 通常是稳妥选择。
它也有成本。部署时要考虑 CAD 版本、.NET 运行环境、插件加载路径、数字签名和权限策略。性能方面,C# 已经能覆盖大多数业务场景,但遇到百万级对象遍历、几何内核级计算时,仍然要谨慎设计。
简单说,C# 适合把“工具”做成“产品”。
C++/ObjectARX:性能和底层能力的重武器
C++/ObjectARX 是最靠近 AutoCAD 内核的一条路线。它能做的事最深,也最难。自定义实体、复杂几何算法、底层数据库扩展、高性能图形交互,这些场景经常会落到 ObjectARX。
它的性能优势明显,接口能力也更完整。比如开发行业专用对象,希望它像 CAD 原生对象一样显示、编辑、捕捉、保存,还带自己的行为逻辑,ObjectARX 基本绕不开。
代价同样硬。C++ 的学习曲线、编译环境、版本匹配、内存管理、崩溃排查,都比 C# 和 LISP 更重。插件写得不稳,轻则 CAD 崩溃,重则用户图纸数据受损。
所以我不建议一开始就把所有项目都推到 C++。只有当需求确实碰到底层能力、性能边界或自定义实体时,再启用这条路线。它很强,但需要足够的工程纪律。
五个维度看差异
| 维度 | AutoLISP | C#/.NET | C++/ObjectARX |
|---|---|---|---|
| 开发成本 | 最低,适合快速试错 | 中等,适合团队工程化 | 最高,环境和调试成本大 |
| 部署难度 | 低,加载脚本即可 | 中等,要处理版本和依赖 | 高,版本匹配要求严格 |
| 性能 | 适合轻量批处理 | 覆盖多数业务场景 | 最强,适合底层和高负载 |
| 界面能力 | 较弱,适合简单交互 | 强,窗体和配置页都方便 | 强,但开发成本高 |
| 维护性 | 小项目好维护,大项目变难 | 较好,适合长期迭代 | 依赖团队能力,维护门槛高 |
这张表可以当成第一轮筛选。先看项目承受得起哪种成本。
选择矩阵:按场景定路线
| 场景 | 推荐路线 | 判断理由 |
|---|---|---|
| 小功能 | AutoLISP | 命令式操作多,交付速度优先 |
| 批量处理 | AutoLISP 或 C# | 轻量规则用 LISP;涉及数据、日志、报表时用 C# |
| 界面插件 | C#/.NET | 窗体、面板、配置和用户体验更容易做好 |
| 性能算法 | C++/ObjectARX,或 C# 调 C++ 模块 | 高频几何计算、海量对象处理需要更强性能控制 |
| 自定义实体 | C++/ObjectARX | 需要对象级行为、显示、保存和编辑能力 |
还有一个很实用的办法:先做最小验证。小脚本能验证业务规则,就先用 LISP 把规则跑通;如果要给几十个同事长期用,再迁到 C#;如果 C# 已经碰到底层能力边界,再把关键部分交给 ObjectARX。
这不是绕路。对工程项目来说,早期验证便宜,后期返工昂贵。技术路线的好坏,很多时候取决于你有没有在需求最模糊的时候控制住试错成本。
一个朴素的判断
如果你是普通工程师,刚开始做 CAD 插件,我建议按这个顺序思考:
能用 LISP 快速解决的小问题,就先别扩大成大工程。
需要界面、配置、数据对接、多人维护的插件,优先看 C#。
只有当需求明确碰到性能、底层对象、自定义实体,再认真评估 C++/ObjectARX。
路线选对了,开发会顺很多。路线选错了,后面每次修改都会提醒你:当初那个决定一点也不随便。

夜雨聆风