
1. 从Demo到工程AICAD落地的真实鸿沟1.1 为什么看起来什么都能做实际却什么都做不成过去两年我参与过三个AI辅助CAD方向的预研项目也帮朋友评估过不少号称“AI一键出图”的工具。一个非常普遍的体验是打开任何一个演示视频输入一句“画一个法兰盘”屏幕上立刻生成一个带孔、带倒角的3D模型旋转、缩放、渲染行云流水。评论区一片“CAD要完了”“设计师要失业了”。但真正把同样的技术往实际工程项目里一放问题就全冒出来了。这个现象不是偶然的。AICAD的Demo之所以满天飞是因为演示场景天然被裁剪过。演示者选的是最简单的零件、最标准的几何、最干净的输入。而真实工程场景里图纸是带公差的、装配是有配合关系的、图层是混乱的、标注是带特殊符号的、甚至同一个DWG文件里还嵌着外部参照和光栅图像。Demo只需要“看起来对”工程需要“每一处都对”。我见过一个很典型的案例某团队用大模型做“自然语言转CAD命令”演示时输入“画一个半径50的圆圆心在原点”模型准确输出CIRCLE 0,0 50。但实际测试时工程师输入“在A轴和B轴交点处画个R50的圆跟旁边那个孔保持同轴”模型直接懵了。因为“A轴”“B轴”“旁边那个孔”这些指代需要理解图纸的语义结构而不是简单的文本到命令的映射。所以第一个核心结论是AICAD的难点不在“生成”而在“理解”。生成一个圆很容易理解“这个圆在工程语境里代表什么”才是真正的门槛。1.2 工程场景的四个硬约束我把实际落地中遇到的约束归纳为四条每一条都能单独杀死一个Demo。第一条精度约束。CAD不是画画尺寸错了就是废品。Demo里生成一个“大概像”的模型可以打80分工程里差0.01mm就是0分。AI模型尤其是生成式模型本质是概率输出它没有“精确”这个概念。你让它画一条长度100的线它可能给你99.8也可能给你100.3。在建筑概念方案阶段这无所谓在机械加工图里这是致命的。第二条结构约束。一个零件不是孤立的。它要装配、要配合、要满足运动关系。Demo通常只展示单个零件而工程里你改一个孔的直径可能影响下游二十个零件的配合。AI目前很难理解这种跨文件的约束传播。第三条格式约束。工程界的数据格式极其顽固。DWG、DXF、STEP、IGES、Parasolid每种格式都有自己的“方言”。更麻烦的是很多老图纸是二维的只有线条和标注没有三维信息。AI要从这些“死线”里还原出设计意图难度远超从零生成。第四条可解释性约束。工程师需要知道“为什么这么画”。AI给一个结果但说不出推理过程工程师就不敢用。这不是技术问题是信任问题。一个不能解释自己输出的系统在工程环境里永远只能当玩具。1.3 当前技术栈的真实能力边界把AICAD拆开看涉及的技术模块大概有这些自然语言理解、图纸解析、几何推理、约束求解、命令生成、结果校验。每个模块单独看都有进展但串起来就掉链子。自然语言理解这块大模型确实强了但工程语言有大量缩写、行话、省略。比如“打中心孔”不是真的打孔是画中心线“倒角C2”不是C2这个尺寸是45度2mm倒角。这些领域知识通用大模型没有。图纸解析这块OpenCascade、FreeCAD的OCCT内核能读STEP、IGES但对DWG的支持一直是个痛点。DWG是闭源格式Autodesk不开放完整规范第三方库读出来的东西经常丢信息。我试过用几个开源库读同一个DWG图层、颜色、线型能对上一半就不错了。几何推理和约束求解这是CAD的老本行但AI介入后反而变弱了。传统参数化CAD用求解器保证约束满足AI生成的结果经常过约束或欠约束。你让AI画一个“与圆相切的直线”它可能画一条看起来相切但实际差0.5度的线。命令生成反而是最简单的一环。只要前面理解对了生成AutoLISP、Python脚本或者直接调API都不难。难的是前面。2. 拆解一个真实落地尝试从DWG到可编辑模型2.1 项目背景与目标设定去年我参与了一个小项目目标是给一批老旧的二维DWG图纸自动生成对应的三维参数化模型。图纸是某类机械零件的加工图大概两百多张都是十几年前画的图层混乱标注风格不统一有些还是扫描后矢量化出来的线条断断续续。目标听起来很明确但拆开看就复杂了。首先得读DWG然后识别出哪些线是轮廓、哪些是中心线、哪些是标注线。接着要理解视图关系主视图、俯视图、剖视图之间的投影对应。然后从二维轮廓推断三维形状。最后生成参数化模型还要保证尺寸跟标注一致。我们一开始想得很美用大模型读图纸输出建模脚本。实际做起来发现大模型根本“看”不懂DWG。它只能处理文本和图像而DWG是矢量数据。把DWG转成图片再让大模型看精度丢得一塌糊涂。一条0.5mm的线在图片里可能就一个像素宽大模型根本分不清是轮廓还是噪点。所以第一步就卡住了。后来换了个思路先用传统CAD解析库把DWG里的几何数据提取出来转成结构化数据再让AI处理结构化数据。这个思路后来被证明是对的但中间又踩了无数坑。2.2 DWG解析第一道鬼门关DWG解析这块我试过至少五种方案。直接说结论没有完美的开源方案只有根据场景取舍的方案。方案优点缺点适用场景LibreDWG开源支持读写对高版本DWG支持差复杂实体丢失简单二维图纸ODA Teigha商业库支持全面收费授权复杂商业项目ezdxfPython库DXF支持好只支持DXFDWG需先转换DXF为主的流程AutoCAD COM原生支持精度高依赖AutoCAD安装慢小批量高精度自己写解析器完全可控工作量巨大不现实特定格式子集我们最后选的是ezdxf ODA转换的组合。先用ODA的工具把DWG转成DXF再用ezdxf读。这样精度有保障成本也可控。但这里有个坑ODA转换会丢失一些自定义实体和代理对象。如果你的图纸里有第三方软件生成的特殊实体转出来可能就变成空的了。注意DWG转DXF时一定要检查“代理实体”和“自定义对象”的转换结果。很多图纸里的标注、符号都是代理实体转丢了后面全白干。解析出来的数据大概长这样一堆LINE、ARC、CIRCLE、LWPOLYLINE加上图层、颜色、线型。但这时候你面对的是一堆“死线”没有语义。你不知道哪条线是轮廓哪条是中心线哪条是尺寸界线。2.3 从线条到语义AI能做什么不能做什么把线条变成有意义的工程元素这一步我们尝试了两种路线。路线一规则引擎。靠图层名、线型、颜色来分类。比如“轮廓”图层上的实线是轮廓“中心线”图层上的点划线是中心线。这个方法在规范图纸上很有效但我们这批老图纸图层名五花八门有的叫“0”有的叫“图层1”有的干脆所有线都在一个图层。规则引擎直接崩了。路线二AI分类。把线条的几何特征长度、角度、曲率、相邻关系和上下文特征所在位置、与其他线的关系喂给一个分类模型让它判断这条线是什么。这个方法在测试集上准确率能到85%左右但剩下15%的错误在工程上不可接受。而且模型是个黑盒错了你也不知道为什么错。最后我们用的是混合方案规则引擎先做一轮把高置信度的分类定下来剩下的模糊案例交给AIAI的输出再经过一轮几何一致性校验。比如AI说某条线是中心线但这条线跟所有轮廓都不对称那就打回去重新判断。这里有个经验AI在CAD里最适合做“候选生成”不适合做“最终决策”。让AI给出三个可能的分类然后用几何规则去验证哪个最合理。这样既利用了AI的模糊识别能力又保证了最终结果的确定性。2.4 二维到三维投影关系的自动推断从二维视图推断三维形状这是经典的计算几何问题也是AI能发挥价值的地方。传统方法靠三视图的投影规则但实际图纸经常不符合标准投影关系。有的图纸只给两个视图有的视图旋转了角度有的剖视图位置随意放。我们试过用大模型直接“看图说话”让它描述三维形状。结果很糟糕大模型会编造不存在的特征而且对尺寸完全不敏感。你给它一个带孔的视图它可能描述成“一个圆柱体”完全忽略孔。后来换了个思路用AI做视图匹配用几何算法做形状重建。具体来说先用AI判断哪两个视图是相关的比如主视图和俯视图然后提取两个视图的轮廓特征点用几何算法做投影匹配重建出三维点云再拟合出参数化形状。这个流程里AI只负责“哪两个视图是一对”这个判断剩下的交给确定性算法。准确率一下子提上来了。而且因为最终形状是几何算法算出来的尺寸精度有保障。实操心得不要指望AI端到端完成复杂工程任务。把任务拆成“AI擅长的模糊判断”和“算法擅长的精确计算”两部分中间用结构化数据衔接成功率会高很多。3. 核心技术点深度拆解3.1 DXF/DWG格式的坑与应对策略DXF和DWG虽然都是CAD格式但差别很大。DXF是文本格式也有二进制版本结构相对清晰ezdxf这类库能处理得不错。DWG是二进制格式版本众多从R12到最新的2018每个版本都有变化。我踩过的几个典型坑坑一坐标系统。DXF里的坐标有WCS世界坐标系和OCS对象坐标系之分。很多实体比如圆、弧它们的坐标是定义在OCS里的需要经过“任意轴算法”转换到WCS。如果你直接拿OCS坐标当WCS用画出来的东西位置全错。这个坑我调了整整两天才找到原因。坑二块引用和属性。图纸里的标准件、符号通常是块引用INSERT块里面还有属性ATTRIB。解析的时候要把块展开把属性提取出来。但块可以嵌套可以带旋转和缩放展开逻辑很复杂。更麻烦的是有些块是“匿名块”名字是*U开头的这些通常是标注或填充生成的处理方式不一样。坑三样条曲线和椭圆。DXF里的SPLINE和ELLIPSE实体参数化程度很高直接转成多段线会丢失精度。但如果保留原始参数后续几何算法又不好处理。我们的做法是根据曲率自适应采样在曲率大的地方多采点曲率小的地方少采点保证拟合误差小于0.01mm。坑四文字和标注。标注DIMENSION在DXF里是一个复合实体包含尺寸线、尺寸界线、箭头、文字。解析的时候要把这些子实体拆出来还要理解它们之间的关联。更麻烦的是标注文字可能是被覆盖过的实际显示值和测量值不一致。这个在工程上很常见但AI很难判断哪个是“真值”。应对这些坑我的建议是不要试图写一个通用解析器。针对你的具体图纸类型写一个专用解析器把不需要的实体直接忽略只提取你关心的那几类。通用解析器看起来很美但维护成本极高而且永远有处理不完的边界情况。3.2 FreeCAD在AICAD流程中的角色定位FreeCAD在这个流程里扮演的是“几何引擎”和“验证工具”的角色。它本身有Python API可以脚本化建模也可以做几何运算和约束求解。我们主要用FreeCAD做三件事第一几何验证。AI生成的模型用FreeCAD的几何检查工具跑一遍看有没有自相交、有没有开放边、有没有零厚度面。这些检查在FreeCAD里都有现成的API比自己写快得多。第二约束求解。从二维推断出三维形状后需要加上尺寸约束和几何约束让模型变成参数化的。FreeCAD的Sketcher模块有约束求解器可以把“大概形状”变成“精确形状”。第三格式转换。FreeCAD支持STEP、IGES、STL等多种格式的导入导出可以作为格式转换的中间层。但FreeCAD也有坑。它的Python API文档不全很多功能要靠读源码才能搞明白。而且不同版本的API有变化升级版本经常导致脚本报错。我们的做法是锁定一个稳定版本不轻易升级。注意FreeCAD的约束求解器在复杂草图下可能失败或给出错误结果。建议把复杂草图拆成多个简单草图分别求解后再组合。3.3 大模型在工程语义理解中的正确用法大模型在AICAD里最有价值的场景不是生成几何而是理解工程语义。具体来说场景一图纸标题栏和明细表提取。标题栏里有零件名称、材料、数量、图号等信息格式五花八门。用传统OCR规则提取准确率很低。用大模型做信息抽取配合少量标注数据准确率能到95%以上。场景二技术要求理解。图纸上经常有“技术要求”文字比如“未注圆角R2”“热处理HRC40-45”“去毛刺”。这些文字影响加工和检验但传统CAD系统不处理。大模型可以提取这些要求结构化后关联到模型上。场景三设计意图推断。比如看到一组孔呈圆周分布大模型可以推断“这是法兰连接孔”然后建议用阵列特征建模。这种语义级别的理解传统算法很难做到。但大模型也有明显的短板。它对数值不敏感你问它“这个孔直径多少”它可能从文字里读到“Φ10”然后告诉你10但如果你问它“这个孔和那个孔的距离”它需要做几何计算就容易出错。所以数值计算一定要交给确定性算法大模型只做语义层面的判断。3.4 参数化建模的自动生成策略从识别出的几何和语义生成参数化模型这一步的核心是特征识别和特征树构建。传统CAD建模是“画草图→拉伸→打孔→倒角”每一步都是一个特征。AI要做的是从最终的几何形状反推出特征树。这其实是一个“逆向工程”问题。我们的做法是基础形状识别。用几何算法识别出基础体圆柱、长方体、球等。特征操作识别。识别出孔、槽、倒角、圆角等特征操作。特征顺序推断。根据几何依赖关系推断特征的先后顺序。比如先有基础体才能打孔先打孔才能倒角。参数提取。从标注和几何中提取每个特征的参数值。生成建模脚本。用FreeCAD或OpenCascade的API生成建模脚本。这个流程里第3步最难。特征顺序不是唯一的不同的顺序可能得到相同的最终形状但参数化行为不同。比如先倒角再打孔和先打孔再倒角结果可能一样但改参数时行为不同。AI很难判断哪个顺序是“设计意图”。我们的妥协方案是生成多个候选特征树让工程师选。系统给出2-3个合理的建模顺序工程师根据经验选一个。这样既利用了AI的自动化能力又保留了工程师的决策权。4. 实操全流程从一张DWG到可编辑模型4.1 环境准备与工具链搭建先列一下我们实际用的工具链Python 3.10主语言生态好库多。ezdxfDXF解析版本1.0。ODA File ConverterDWG转DXF免费版够用。FreeCAD 0.20几何引擎和验证锁定版本。OpenCascade 7.6底层几何运算FreeCAD自带。PyTorchAI模型推理用CPU版就行不需要GPU。大模型API用于语义理解选支持结构化输出的。安装这块ezdxf和FreeCAD都有pip包但FreeCAD的pip包功能不全建议直接装FreeCAD应用然后用它的Python环境。OpenCascade在FreeCAD里已经集成了不用单独装。注意FreeCAD的Python版本可能跟你系统的Python版本不一致。建议用FreeCAD自带的Python解释器跑脚本避免版本冲突。4.2 DWG批量转DXF与预处理批量转换用ODA File Converter的命令行模式ODAFileConverter 输入目录 输出目录 ACAD2018 DXF 0 1 *.dwg参数说明ACAD2018是输出DXF的版本0表示不递归子目录1表示输出为ASCII DXF。转换完成后用ezdxf做预处理import ezdxf doc ezdxf.readfile(output.dxf) msp doc.modelspace() # 提取所有实体 entities [] for e in msp: entities.append({ type: e.dxftype(), layer: e.dxf.layer, color: e.dxf.color, linetype: e.dxf.linetype, handle: e.dxf.handle }) # 按图层统计 from collections import Counter layer_count Counter([e[layer] for e in entities]) print(layer_count)这一步的目的是摸清图纸的“底细”有多少图层、多少实体、主要是什么类型。根据统计结果决定后续的解析策略。4.3 几何特征提取与AI语义标注几何特征提取包括端点坐标、长度、角度、曲率、闭合性、相邻关系。这些用ezdxf和Shapely可以算出来。from shapely.geometry import LineString import math def extract_features(entity): if entity.dxftype() LINE: start entity.dxf.start end entity.dxf.end length math.dist(start, end) angle math.degrees(math.atan2(end.y - start.y, end.x - start.x)) return {length: length, angle: angle} elif entity.dxftype() ARC: radius entity.dxf.radius start_angle entity.dxf.start_angle end_angle entity.dxf.end_angle return {radius: radius, arc_angle: end_angle - start_angle} # 其他类型类似处理AI语义标注这块我们把几何特征和上下文特征拼成一个文本描述让大模型分类实体类型LINE 长度45.2mm 角度0度 所在图层轮廓 相邻实体与两条垂直线相连形成一个闭合矩形 请判断这条线在工程图中的角色轮廓线/中心线/尺寸线/剖面线/其他大模型返回分类结果我们再跟几何规则做交叉验证。4.4 三维重建与参数化脚本生成三维重建的核心是视图匹配和投影反算。假设我们已经识别出主视图和俯视图提取出两个视图的轮廓点集然后对主视图的每个特征点在俯视图中找对应的投影点。根据两个视图的坐标反算出三维坐标。用三维点云拟合参数化形状。import numpy as np from scipy.optimize import least_squares def reconstruct_3d(front_points, top_points): # front_points: [(x, y), ...] 主视图点 # top_points: [(x, z), ...] 俯视图点 # 假设两个视图共享x坐标 points_3d [] for fp in front_points: x, y fp # 在俯视图中找x最接近的点 closest min(top_points, keylambda tp: abs(tp[0] - x)) z closest[1] points_3d.append((x, y, z)) return np.array(points_3d)参数化脚本生成用FreeCAD的Python APIimport FreeCAD import Part import Sketcher doc FreeCAD.newDocument(Reconstructed) sketch doc.addObject(Sketcher::SketchObject, Sketch) # 添加几何 sketch.addGeometry(Part.LineSegment( FreeCAD.Vector(0, 0, 0), FreeCAD.Vector(50, 0, 0) )) # 添加约束 sketch.addConstraint(Sketcher.Constraint(DistanceX, 0, 1, 50)) doc.recompute() doc.saveAs(reconstructed.FCStd)4.5 结果验证与人工复核自动生成的结果必须经过验证。我们做了三层验证第一层几何验证。检查模型是否闭合、是否有自相交、是否有零厚度面。FreeCAD的Part.check()可以跑这些检查。第二层尺寸验证。把模型的关键尺寸跟图纸标注对比误差超过0.01mm就报警。第三层人工复核。工程师在FreeCAD里打开模型跟原图纸对照确认无误后签字。这三层里人工复核最耗时但也最重要。我们统计过自动生成的模型大概有70%能直接通过20%需要小修10%需要重做。这个比例比纯人工建模已经好很多了但离“全自动”还很远。5. 常见问题与排查技巧实录5.1 DWG解析类问题速查问题现象可能原因排查方法解决方案实体丢失代理实体未转换对比原图和DXF的实体数量用ODA转换时勾选“转换代理实体”坐标偏移OCS/WCS混淆检查实体的extrusion方向用ezdxf的ocs()方法转换文字乱码编码问题检查DXF的$DWGCODEPAGE指定正确编码读取块引用未展开嵌套块递归展开所有INSERT用explode()方法样条曲线变形采样精度不足对比原始曲线和拟合曲线提高采样密度5.2 AI模型误判的典型模式AI在CAD语义理解中有几个反复出现的误判模式模式一把标注线当轮廓线。标注线和轮廓线都是直线几何特征相似。AI容易混淆。解决办法是加入上下文特征标注线通常有箭头和文字轮廓线通常形成闭合区域。模式二把中心线当轮廓线。中心线通常是点划线但有些图纸线型设置不规范中心线看起来像实线。解决办法是检查线型定义如果线型名包含“CENTER”或“中心”优先判断为中心线。模式三把剖面线当轮廓线。剖面线是密集的平行线AI可能把每条线都当轮廓。解决办法是做密度分析如果某个区域内线条密度超过阈值判定为填充区域。模式四把视图边框当零件轮廓。有些图纸有图框和标题栏AI可能把图框线当零件轮廓。解决办法是先做图框识别把图框区域排除。5.3 三维重建失败的排查思路三维重建失败通常表现为形状明显不对、尺寸偏差大、特征丢失。排查顺序检查视图匹配是否正确。如果主视图和俯视图配错了后面全错。检查特征点提取是否准确。轮廓点提取有噪声重建结果就会扭曲。检查投影关系假设是否成立。如果图纸不是标准投影需要先做视角校正。检查拟合算法是否收敛。最小二乘可能陷入局部最优换用RANSAC试试。实操心得三维重建失败时先把中间结果可视化出来。把提取的轮廓点、匹配关系、重建的点云都画出来看往往一眼就能找到问题。5.4 性能优化与批量处理技巧两百张图纸如果每张都跑完整流程时间很长。我们做了这些优化并行处理。DWG转DXF是IO密集型用多进程并行。AI推理是计算密集型用批处理。缓存中间结果。解析后的几何数据、AI分类结果都存成JSON下次直接读不用重跑。增量处理。如果只是修改了部分图纸只重跑修改过的。失败快速跳过。设置超时和重试次数失败的图纸记录下来不阻塞整体流程。实测下来两百张图纸从解析到生成模型单机大概需要4-6小时。其中DWG转DXF占30%AI推理占40%几何计算占20%验证占10%。6. 落地建议与个人体会6.1 什么场景适合现在做什么场景再等等根据我的经验AICAD落地要分场景看适合现在做的图纸格式相对规范图层清晰。零件类型单一特征重复度高。对精度要求不是极高允许人工复核。有大量历史图纸需要数字化人工建模成本太高。建议再等等的图纸极度混乱没有规律可循。零件复杂度高特征组合千变万化。精度要求极高不允许任何误差。需要实时交互对速度要求苛刻。6.2 团队配置和技能要求做AICAD落地团队需要三类人CAD领域专家。懂图纸、懂工艺、懂标注规范。这个人负责定义“什么是对的”以及做最终验证。几何算法工程师。懂计算几何、懂CAD内核、懂数值计算。这个人负责把几何问题转化成算法。AI工程师。懂大模型、懂分类模型、懂数据处理。这个人负责语义理解和特征识别。三类人缺一不可。我见过只有AI工程师的团队做出来的东西工程师不敢用也见过只有CAD专家的团队做出来的东西自动化程度太低。6.3 我踩过的最大的三个坑第一个坑试图用大模型端到端解决问题。一开始我们想让大模型直接读DWG文件输出建模脚本。折腾了一个月发现大模型根本处理不了矢量数据。后来改成“传统解析AI语义几何算法”的分层架构才走通。第二个坑忽视图纸的“脏数据”。我们拿规范图纸做测试效果很好。换到实际图纸准确率直接掉一半。后来花了大量时间做数据清洗和异常处理才把准确率拉回来。第三个坑没有尽早引入人工复核。我们一开始想追求全自动结果错误率下不来。后来改成“自动生成人工复核”整体效率反而更高。因为人工复核只需要几分钟而全自动调试可能花几小时。6.4 后续可以扩展的方向这个项目做完后我觉得有几个方向值得继续探索方向一从二维图纸扩展到三维模型。现在很多新设计直接是三维的从STEP/IGES模型提取特征比从二维图纸容易得多。方向二加入工艺知识。现在的系统只理解几何不理解工艺。如果能加入加工知识比如“这个孔太深了钻头够不到”就能给出更有价值的建议。方向三与PLM/PDM系统集成。生成的模型直接入库关联到物料、BOM、工艺路线形成完整的数据流。方向四主动学习。让系统从工程师的修改中学习不断优化分类和重建策略。最后分享一个小技巧如果你也在做类似的项目建议先从单一零件类型入手把这一类做到90%以上的准确率再扩展到其他类型。贪多嚼不烂在AICAD这个领域尤其如此。