
最近总有人拿着“text-to-cad”这个词来问我是不是以后不用学CAD了说句话就能出图我的回答是——方向没错但真正的text-to-cad不是AI替你做图而是把“我要画什么”变成CAD能听得懂的指令让软件自己把图跑出来。这个能力现在就能落地而且不需要什么高级框架SCR脚本、AutoLISP、Python都能做到。这篇文章我就把“从文字到图纸”这条路完整走一遍先搞清楚它到底在解决什么问题再从我推荐的三种实现方式里挑一套适合你的玩法最后把我踩过的坑全部列出来。文章里还会顺带解决一堆你在日常使用CAD时必然会撞上的问题——比如画出来的文字全变成问号、F命令按了没反应、安装Cad时总是报C运行库错误、卸载不干净导致二次安装失败。这些其实都和“用文字驱动CAD”的底层逻辑有关弄明白了你就不会觉得它们是玄学。适合谁看天天在CAD里重复画相似图纸的绘图员、想用脚本批量出图的设计师、做标准化出图流程的工程师以及想搞清楚“cad快速看图”“cad转pdf”这类需求背后原理的人。看完你会有一个清晰的认知text-to-cad不是炫技而是把CAD真正变成你的执行工具。1. 从“鼠标点图”到“文字出图”text-to-cad到底在解决什么问题1.1 先把概念说清楚text-to-cad不是新鲜事很多人一听到text-to-cad第一反应是科幻片输入一段话软件自动生成三维模型。这确实是大模型时代的新玩法但它只是这个方向的终极形态之一。在我的理解里text-to-cad至少有三个层次最底层命令行交互。你在CAD里输入LINE、CIRCLE、OFFSET图纸就出来了。这是最朴素的“文字生成图形”从AutoCAD诞生那天起就存在。中间层脚本批处理。把一系列绘图命令写成文本文件由CAD逐行执行。SCR脚本、AutoLISP、VBA、Python都属于这一类它解决的是“一次能画一堆图”的问题。最高层AI自然语言生成。你描述需求模型理解你的意图直接返回DXF文件或调用CAD绘图API。这个方向目前还在早期落地成本高但思路已经验证可行。我在这篇文章里重点讲中间层因为它是当前性价比最高的方案。你不需要训练模型不需要搞GPU只要会用记事本写几行命令就能让CAD自动出图。1.2 CAD本来就是“文字驱动”的软件有个细节你可能没注意AutoCAD从1982年诞生至今底层交互方式一直没变过——你点菜单、点工具栏本质上都是在往命令行里塞指令。打开AutoCAD按F2调出命令窗口随便点一个画圆的按钮你会发现命令行里出现了“CIRCLE”这个单词后面跟着坐标提示。也就是说图形界面只是一个“翻译器”它把你的鼠标点击翻译成语义明确的CAD命令CAD执行完命令再把结果绘制到屏幕上。想通这一层text-to-cad就显得没那么神秘了。我们做的所有自动化无非是绕开“翻译器”直接把文字指令交给CAD。两种方式的结果一致但自动化在重复性工作上快得多。我自己以前画一个标准A4图框从建图层、画外框、画内框到写标题栏文字鼠标操作至少两分钟。用SCR脚本一行命令一秒钟搞定。一次两次看不出差距一个月画几百张图差距就出来了。1.3 我为什么开始用文字命令代替手工画图我的日常工作里有大量“长得差不多但参数不同”的零件图轴套、支架、法兰盘结构固定只是尺寸在变。最开始我也是老老实实一个一个画后来发现一个问题——我画的不是图是重复劳动。举个例子法兰盘外圆直径从100改成120内孔从30改成40其他结构几乎不变。手工画法要重新画整个轮廓但用脚本画法只需要改动两个变量其余代码原封不动。这就是我转向“文字驱动CAD”的根本原因把图的逻辑从“形状”变成“参数”把重复操作从“人来做”变成“脚本来做”。说白了text-to-cad解决的是CAD绘图的数字化、参数化问题。它让人专注于“这个图需要什么尺寸、什么公差”的设计决策而不是“这个圆要从哪个坐标画起”的执行动作。明白这一点你就知道该往哪个方向用力了。2. 先用最轻量的武器SCR脚本和AutoLISP把文字变成图2.1 SCR脚本用记事本就能生成图纸SCR脚本是AutoCAD原生支持的脚本格式本质就是一个文本文件把你在命令行里敲的命令按顺序排列。不需要装任何插件AutoCAD启动时或者运行中都能加载它。它的核心规则很简单每一行的内容就是你在命令行输入的内容每按一次回车相当于一次确认。空格也可以作为命令的结束符但我强烈建议不要用空格分行否则脚本里一个多余的空格就会让你前功尽弃。我自己的习惯是一行只放一个参数宁可多敲几次回车也不要让它误读。下面是我常用的一个A4横向图框脚本你在记事本里保存成图框.scrCAD里执行SCRIPT命令选它就行LIMITS 0,0 420,297 ZOOM E LINE 0,0 420,0 420,297 0,297 C LINE 25,5 415,5 415,292 25,292 C这段脚本做了三件事设置图纸界限为420×297A4横向标准尺寸把视图缩放到全图然后画外围粗线和内框细线。最后那个C是LINE命令的“闭合”选项让线框自动封口。第一次跑通这个脚本的瞬间你会感觉到“原来CAD还能这么用”。2.2 AutoLISP把重复操作封装成一句命令SCR脚本的缺点很明显没有变量没有逻辑判断。同一个脚本里的坐标写死了想改尺寸必须改文件内容。这时候就该上AutoLISP了。AutoLISP是AutoCAD内置的LISP方言主要用来做绘图自动化。它最大的价值在于可以定义你自己的命令比如我定义一个CJT命令用来快速画一个矩形框(defun c:CJT (/ pt1 pt2) (setq pt1 (getpoint \n指定矩形左下角)) (setq pt2 (getpoint \n指定矩形右上角)) (command RECTANG pt1 pt2) (princ) )在CAD里用APPLOAD加载这个LSP文件然后输入CJT它就会像原生命令一样工作提示你点两个角点然后自动画出矩形。看起来好像没比手动操作快多少但你可以在这个基础上继续扩展比如画完矩形之后自动标注尺寸、自动切换图层、自动设置线型(defun c:JBG (/ w h p0) (setq p0 (getpoint \n指定基点)) (setq w (getreal \n输入宽度)) (setq h (getreal \n输入高度)) (command RECTANG p0 (list ( (car p0) w) ( (cadr p0) h))) (command DIMLINEAR p0 (list ( (car p0) w) ( (cadr p0) h)) (list (car p0) ( (cadr p0) 15))) (princ) )这个JBG命令实现了“输入两个尺寸自动画矩形加标注”。你算是真正体验到了“文字参数变图形”的核心快感不再关心坐标计算只关心要多大尺寸。2.3 一个自动绘制零件俯视图的LISP例子上面两个例子都比较简单我来写一个稍微完整一点的场景自动生成一个带中心线的圆零件俯视图的基础。这个例子能体现LISP在“封装整套绘图逻辑”上的威力(defun c:YZT (/ cpt d r) (setq cpt (getpoint \n指定圆心)) (setq d (getreal \n输入直径)) (setq r (/ d 2.0)) (command LAYER M 轮廓线 ) (command CIRCLE cpt r) (command LAYER M 中心线 ) (command LINE (list (- (car cpt) (* r 1.3)) (cadr cpt)) (list ( (car cpt) (* r 1.3)) (cadr cpt))) (command LINE (list (car cpt) (- (cadr cpt) (* r 1.3))) (list (car cpt) ( (cadr cpt) (* r 1.3)))) (command LAYER M 0 ) (princ) )执行流程是指定圆心、输入直径程序自动算出半径切换图层画轮廓圆再切换图层画十字中心线最后把当前图层切回0层。整个过程不需要你手动切换任何图层也不会画错地方。说实话AutoLISP的语法对新手不太友好括号嵌套很容易把人绕晕。但它的优势是零依赖AutoCAD自带解释器不需要安装Python不需要考虑版本兼容问题特别适合在公司环境里快速推广。我建议你把常用绘图逻辑都写成LISP命令哪怕是简单的“画矩形加标注”积累起来就是一笔很大的财富。3. Python批量出图这才是真正意义上的text-to-cad3.1 为什么选pyautocad而不是直接改DXFSCR脚本和LISP适合处理单个图纸的自动化但你要是想“读一个Excel参数表批量生成一百张图纸”那还得上Python。Python连接CAD有两条路一条是直接解析和生成DXF文件用ezdxf库另一条是通过COM接口驱动AutoCAD用pyautocad或win32com。我两条路都试过说说我的选择。ezdxf走的是纯文件路线不打开AutoCAD直接读写DXF文件。它的优势是不依赖AutoCAD环境运行速度快适合在服务器上跑批量任务。但缺点是你看不到绘图过程出错时不好排查而且遇到CAD定制对象、块属性这类复杂结构时处理起来比较麻烦。pyautocad走的是“遥控”路线AutoCAD在后台开着Python通过COM接口调用它画图。相当于你在Python里发号施令AutoCAD真人执行。它的优势是能实时看到绘图结果能调用AutoCAD全部原生功能包括批量修改老图、导出PDF、打印。缺点是必须装AutoCAD并且保持它在运行。我的建议是需要全新批量生成标准图时用ezdxf更干净但如果你既要画图、又要改图、还要处理图层和打印“武力值”更全面的pyautocad是更好的选择。下面重点讲pyautocad。3.2 环境准备pyautocad安装与AutoCAD COM连接安装没什么特别的pip install pyautocad就行。但要注意pyautocad底层调用的是AutoCAD的ActiveX接口所以计算机上必须先装好AutoCAD而且版本不能太老——我实测的是AutoCAD 2016到2024都没问题。连接代码非常简短from pyautocad import Autocad, APoint acad Autocad(create_if_not_existsTrue) print(acad.doc.Name)首次运行会弹出一个AutoCAD实例。如果脚本里没看到任何报错说明COM连接成功。有个容易卡住的地方是如果AutoCAD已经在运行但处于某种异常状态比如弹出了模态对话框COM连接可能失败报错信息也含糊。最简单的处理办法是关掉所有AutoCAD窗口重新用脚本启动。3.3 实战代码批量生成轴套零件图我用一个真实的生产场景来演示批量生成一根阶梯轴的轮廓图。输入参数是各段直径和长度输出是一段带圆角的阶梯轴俯视图用矩形拼接近似。from pyautocad import Autocad, APoint acad Autocad(create_if_not_existsTrue) # 参数格式[(段长, 直径), ...] segments [(20, 30), (40, 50), (30, 60), (15, 40)] # 从原点开始 current_x 0.0 for length, diameter in segments: radius diameter / 2.0 left APoint(current_x, -radius) right APoint(current_x length, radius) # 画矩形轮廓实际中建议用AddPolyline这里用AddLine便于理解 acad.model.AddLine(APoint(left.x, left.y), APoint(right.x, left.y)) acad.model.AddLine(APoint(right.x, left.y), APoint(right.x, right.y)) acad.model.AddLine(APoint(right.x, right.y), APoint(left.x, right.y)) acad.model.AddLine(APoint(left.x, right.y), APoint(left.x, left.y)) current_x length这段代码的核心思路是把“轴”拆成一堆矩形的横向拼接每个矩形对应一段直径循环画四条线。如果要用更正规的做法应该用AddPolyline一次性画出封闭轮廓这里用四条线段是为了让你看清坐标计算的逻辑。实际跑下来几十段台阶的轴也就一眨眼的功夫。画完之后如果你想给每段加一个直径标注循环里再补一行文字就行text_point APoint(current_x - length length / 2, 0) acad.model.AddText(f{diameter}, text_point, 3)注意AddText的字高参数是图纸单位如果你画的是毫米图字高3就是3毫米打印出来勉强能看清你要是做技术图一般会设到3.5或5。3.4 热搜词背后python批量修改CAD图纸的真实需求热搜词里有“python批量对cad修改”这其实是text-to-cad的“逆方向”文字不是用来生成新图而是用来批量改旧图。我在实际项目里接到过这样的需求几百张图纸要把某个图层的颜色从黄色改成绿色把所有直径标注精度统一为两位小数。手工一张一张改两小时起步而且容易漏。用pyautocad遍历图形对象十分钟搞定for obj in acad.iter_objects(): if obj.EntityName AcDbCircle: obj.Layer 中心线 obj.Color 1 # 红色 elif obj.EntityName AcDbText: obj.Height 5iter_objects会遍历当前图纸里的所有实体你按EntityName判断类型再按属性修改。这里有个容易忽略的点修改实体的Layer属性会把实体移动到指定图层但如果那个图层不存在程序会报错。所以批量修改前先确认目标图层已存在。我习惯的做法是先写一段“预处理”脚本把目标图层全部建好再跑真正的修改逻辑。这样能避免跑到一半报错停下来排查半天才发现是图层缺失。4. 我踩过的text-to-cad的坑字体、坐标系和CAD环境病4.1 坐标系与单位模型空间炒菜图纸空间装盘用脚本画图最容易被坑的就是坐标系和单位。你脚本里写APoint(100, 50)这个100是毫米还是英制单位取决于CAD的INSUNITS变量。AutoCAD里有模型空间和图纸空间之分。模型空间是“真实尺寸”的世界你按照1:1画零件图纸空间是“排版装盘”的世界你在这里放图框、视口做比例缩放。如果用脚本同时操作两个空间一定要分清当前工作空间否则画出来的图形可能跑到视口外面去。我自己踩过一个大坑写了一个自动套图框的脚本把图框画在了模型空间结果每个图纸文件里都多了一个“模型空间图框”打印时所有图框叠在一起惨不忍睹。后来我在脚本开头强制切换布局再画图框acad.doc.ActiveLayout acad.doc.Layouts.Item(布局1)记住了能用模型空间写的尺寸就不要用图纸空间画图框、写标题栏这类“排版”操作一定要切到布局页。4.2 SHX字体缺失文字全变成了问号“cad shx字体大全”这个热搜词暴露了很多人的痛点。脚本里用AddText写字字高、位置都对但打开图纸一看显示的不是文字而是一堆问号“?”。原因通常有两种要么字形样式指定的字体不存在要么中文字体用的是SHX大字体但没加载。我最常用的是宋体TTF字体或是CAD自带的gbcbig.shx国标大字体。如果是TTF找不到最简单的处理是在脚本里直接把文字样式指到系统自带字体for obj in acad.iter_objects(): if obj.EntityName AcDbText: obj.StyleName Standard或者更彻底一点在脚本里新建一种文字样式用大字体关联中文字体文件。具体代码稍微有点绕但核心一句话避免在脚本里使用“只存在于某台电脑”的特定字体。你的脚本要么带着字体文件一起分发要么统一用AutoCAD默认的Standard样式。4.3 运行环境病C 2005错误、F命令失灵、激活页面脚本错误搜索热词里有一批很典型的CAD运行环境问题我逐个说清楚因为这些问题不解决脚本自动化根本跑不起来。安装CAD老是报C 2005 cpi错误这是CPU版本和运行库位数不匹配导致的。AutoCAD的安装包会依赖Microsoft Visual C运行库而运行库分为x86和x64两种。64位AutoCAD需要64位运行库但某些安装程序会错误地要求32位运行库。解决方法是去微软官网下载Visual C Redistributable把2005、2008、2010等多个版本都装上——AutoCAD老版本真的可能依赖好几个不同年份的运行库。CAD里面f命令用不了F键在AutoCAD里默认是“对象捕捉快捷键正交模式的切换或F1帮助等具体看你版本设置”但很多情况下是Windows系统快捷键冲突或者CAD的临时覆盖键被其他程序接管。排查方法很简单按F键时看命令行有没有反应如果命令行为空说明快捷键被系统截获了如果命令行有反应但功能不对说明是CAD配置问题。我遇到的情况大多是“QQ/微信的截图热键抢占了F键”关掉那些软件再试问题立刻消失。CAD激活页面脚本发生错误一般出现在首次启动、激活弹窗阶段。常见原因是Internet Explorer的“增强安全配置”阻止了网页脚本Ghost版系统更是重灾区。解决办法是关闭IE增强安全配置或更新.NET Framework到更高版本。这个和脚本绘图没有直接关系但对于工程团队很重要——新同事电脑连CAD都打不开后续所有自动化都没法谈。4.4 卸载与重装的连环坑脚本依赖的COM环境被破坏热搜里“cad如何彻底卸载不影响二次安装”这条非常实在。很多人第一次装CAD失败想卸载重装结果卸载不干净第二次装完问题依旧。这背后逻辑和自动化有关系pyautocad依赖COM组件注册而COM组件信息写在Windows注册表里。如果卸载程序没有清理这些注册表项重装时系统会发现“COM组件已存在”但实际文件已丢失导致连接失败、功能错乱。我的建议是卸载完CAD之后用Windows自带的“添加/删除程序”清理主程序再手动删除两个目录C:\Program Files\Common Files\Autodesk Shared和%AppData%\Autodesk。做完这一步再重装成功率会高非常多。如果你不打算重装只是想修好COM连接可以试试在命令行里重新注册CAD的COM组件regsvr32 C:\Program Files\Autodesk\AutoCAD 2024\acad.exe实践中这个操作有时能解决“pyautocad连不上”的诡异问题。当然前提是你系统里确实装了AutoCAD 2024且路径正确。5. 把text-to-cad固化进日常流程模板、参数库和验证习惯5.1 识别适合自动化的三类任务不是所有绘图任务都值得写脚本。我把适合text-to-cad的任务总结成三类你可以对照一下自己的工作情况参数化标准件法兰、垫片、轴套、图框形状固定、尺寸变化典型的“变量驱动图形”任务。大批量重复图比如一个工程里有几十张相似的小图手工画既耗时间又容易错脚本只需改参数表。跨图纸统一修改改图层、改字高、改线型、批量导出PDF这些操作本质是“对所有对象执行同一套指令”。如果你手里的任务符合上面任意一条就值得做成脚本。如果只是偶尔画一次、下次都不知何时再画建议还是老老实实手工操作别过度设计。5.2 建一个自己的绘图参数库脚本写得多了你会发现大部分代码重复的是“怎么画”的逻辑变的只是“画什么”的参数。这时候就该把参数抽出来单独管理。我用的是Excel加Python的经典组合每行一条记录每列一个参数Python用pandas读取后逐一传给绘图函数。零件编号外径内径厚度材质FL-0011204012304不锈钢FL-0021505014碳钢FL-0032006016铝合金把Excel里的文字变成CAD里的真实法兰盘图其实就是一次read_excel加一次循环。我最后一次做法兰批量出图一天之内出了七十多张二维图换手工画至少一周。而且参数表本身就是图纸的“文字版说明书”以后要改尺寸只需改Excel不用碰代码。5.3 验证脚本的三个习惯脚本能跑不等于跑得对这是我反复吃亏后得出的结论。我现在的标准流程是空图验证新建一张空白CAD图先跑一遍脚本用ZOOM E缩放到全图范围看图形是否在合理区域内。单步回放在AutoCAD里用FILEDIA命令打开脚本或者用script命令配合命令行窗口观察执行过程哪里卡住了马上能看到。参数抽查批量出图之后随机抽三张图纸手工量几个关键坐标和尺寸和参数表对比。这个习惯能发现很多“脚本逻辑对但坐标算错”的隐性Bug。再有就是养成写日志的习惯。pyautocad里可以用print把每个对象的坐标打印出来我当时排查一个“画的圆全跑到了原点”的问题就是靠打印坐标发现循环变量被意外重置了。别嫌麻烦脚本这东西一旦开始出错日志就是你最靠谱的线索。5.4 实用小技巧把文字和图纸做“双向链接”最后分享一个我很喜欢的小用法在图纸里用AddText把生成参数写进标题栏。这样图纸和生成它的文字参数永远对得上后期翻旧图时不用再猜当初用的什么尺寸。params_text fFL-001 D120 x H12 304 acad.model.AddText(params_text, APoint(25, 10), 5)图纸内容可以追溯这是工程图里的硬需求。当你习惯用文字参数驱动CAD之后这套“参数—脚本—图纸”的三角关系会成为你的标准工作流出图速度和图纸一致性都会上一个台阶。我自己的体会是text-to-cad最大的价值不是省那几分钟画图时间而是把设计逻辑从“指尖”转移到了“可复用的文字脚本”上。以后拿到任何一个新零件第一反应不是开CAD而是先在脑子里或者Excel里把参数列出来让CAD像一个听话的打印机一样把文字原样变成图纸。如果这篇文章让你对text-to-cad有了新的想法建议不要一次做大而全的自动化——挑一个你每天都画的图形先用SCR或LISP把它固定下来跑通一次你就能感受到这套工作流的效率了。