服装CAD格式转换实战:AAMA DXF单位、图层映射与版片丢失排查 简介面向服装CAD制版、放码与设计人员的一款格式转换工具主要解决DXF与AAMA两类常见服装CAD数据在交换、导入导出时格式不兼容的问题适合需要在不同CAD系统间迁移纸样、复用版片数据的初、中级使用者。资源包约2.79MB压缩包内文件总数与文件类型明细上游暂未提供下载后可按说明用附带文件覆盖安装目录完成启用。现有页面显示已有1528人浏览学习说明该工具在服装数字化制版场景中有一定关注度。其价值在于帮助读者减少手工重绘和重复导出版片的工作提升DXF、AAMA文件在不同软件间的兼容性与流转效率对需要处理纸样交换、版片归档或跨平台协作的用户可作为轻量工具备用使用前建议核对软件版本与文件备份。1. 版片导不进去先别怀疑文件坏了一份 AAMA DXF 丢进服装 CAD 格式转换软件点完转换版片少了两块剩下那几块整体缩小 25.4 倍——这是我上个月在别人机器上见到的真实场面。文件拿到 AutoCAD 里打开是好的所以他一直认为问题出在软件上重装了三遍。真正的原因只有两个DXF 头里的单位信息没写、AAMA 的编号图层没做映射。服装行业里上游打版用一套 CAD下游排料、裁床、工艺单又是另一套中间靠 DXF 和 AAMA 这两种交换格式对接转换这一步装不好后面所有环节都在拿错数据干活最惨的是错误不报、悄悄导进去等裁出来才发现。这篇记录的环境适合手上有一堆 AAMA DXF 要转成标准 DXF、或者要把别的 CAD 文件转成 AAMA 交出去的人从系统运行库一路写到验证收尾。2. 装前把环境列清转换工具的运行库、路径和区域设置转换软件本身不算大但它是个典型的 Windows 桌面程序依赖 .NET 运行库、依赖 VC 运行库、依赖系统字体还会把临时文件写到自己的安装目录里。这四件事任何一件没对齐表现出来都是「转出来不对」而不是「打不开」很容易被误判成软件 bug。2.1 系统版本和三样运行库我这边的基准环境是 Windows 10 1903 及以上或 Windows 1164 位。之所以卡这条线是因为 .NET Framework 4.8 从 Win10 1903 开始随系统内置不用单独装省掉一轮重启。还在用 Win7 的机器我也见过能跑但要手动补 .NET 4.8 和对应的根证书后面调用某些系统接口时会莫名其妙失败不建议在 Win7 上做批量转换。三样东西按顺序装:: 1) 确认 .NET Framework 版本4.8 及以上即可 reg query HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full /v Release :: 2) VC 2015-2022 运行库 x64转换核心是用 C 写的缺了会在加载模块时直接退 :: 文件名形如 VC_redist.x64.exe装完不用重启 :: 3) 字体确认宋体、黑体、Arial 三个必须在 dir C:\Windows\Fonts\simsun.ttc C:\Windows\Fonts\simhei.ttf C:\Windows\Fonts\arial.ttf第一行查注册表里的 Release 值528040 及以上就是 4.8。这一步很多人跳过结果软件双击没反应事件查看器里才看到缺运行库。VC 运行库一定要装 x64 版哪怕你的系统是 64 位、软件也是 32 位进程转换核心模块依然是 64 位的。字体那条看着奇怪但 AAMA 文件里的款号、尺码标注是文字实体目标字体缺失时会回退成问号转出来一堆「???」的标注排查起来非常折磨。2.2 安装路径别放 Program Files别带中文和空格常见做法是把这类工具装在D:\CADConvert\理由是它会在安装目录下生成scratch\临时目录和log\目录装在C:\Program Files\下时普通用户权限写不进去程序不报错、直接跳过写日志和临时文件转换结果就变成上一次的残留。带空格的路径还有另一个坑命令行批处理里要加引号一旦哪个脚本忘了加参数被拆成两段软件会当成两个输入文件。目录骨架我一般这么铺装之前就建好路径用途备注D:\CADConvert\bin主程序和动态库整个目录做备份换机器直接拷D:\CADConvert\rulesAAMA 放码规则表一款一份只读D:\CADConvert\fonts补充字体目标 CAD 专用字体放这儿D:\CADConvert\in待转换文件按批次建子目录D:\CADConvert\out输出文件不要和 in 混在一起D:\CADConvert\scratch临时文件每次批量前清空D:\CADConvert\log转换日志排查全靠它建好后右键属性安全标签里给Users组「修改」权限覆盖 bin 以外的所有目录。这一步两分钟能省掉后面「为什么日志目录是空的」这种玄学问题。2.3 区域设置里的三个隐形开关控制面板 → 区域 → 管理 → 更改系统区域设置这里有三件事会影响 DXF 解析一是小数点符号必须是.。有的机器为了显示习惯改成了逗号转换器内部用atof解析坐标遇到123,456只会读到123坐标被截断成整数版片轮廓直接变成阶梯状。二是「非 Unicode 程序的语言」设成中文简体AAMA 规则表里的中文款号才不会乱码。三是 Beta 版 UTF-8 选项不要勾勾了以后部分老版本转换器读.rul文件会把 GBK 当 UTF-8中文全部变成方块。:: 快速确认当前区域设置DecimalSymbol 必须是点 reg query HKCU\Control Panel\International /v sDecimal reg query HKCU\Control Panel\International /v sListsDecimal返回.就对了。sList是列表分隔符正常情况下是逗号如果被改成别的字符规则表里用逗号分隔的放码步长会被当成一整列读取时静默失败。3. 安装转换软件主程序、规则表、字体三件套的落位环境清了之后安装过程本身十分钟能完事真正花时间的是三件套的落位主程序、规则表、字体。前两个决定能不能转第三个决定转出来能不能看。3.1 主程序的两种安装方式和静默参数发布包一般有两种形态带安装向导的 exe和不带向导的绿色压缩包。我这些年更倾向用绿色包解压到D:\CADConvert\bin再手动建一个桌面快捷方式。理由是这类工具更新频繁绿色包换版本时只要把 bin 目录改个名字备份出问题两分钟就能回滚安装向导卸载重装一轮下来十几分钟还不一定卸干净。如果拿到的是安装包静默安装参数一般是这几个:: /S 静默/D 指定目录必须是最后一个参数不带引号路径不能有空格 CADConvert_Setup.exe /S /DD:\CADConvert\bin :: 装完立刻确认主程序在位、版本信息能读出来 D:\CADConvert\bin\CADConvert.exe -version dir D:\CADConvert\bin\*.dll /b/S是这类基于常见安装框架的包通用的静默开关/D后面不要加引号、也不要留空格这是它的固定规则写了引号反而会被当成路径的一部分结果解压到D:\CADConvert。装完先跑-version能打印出版本号和编译日期说明依赖都加载成功了。如果双击没反应、命令行也不输出八成是 2.1 节那三样运行库缺了一个。3.2 规则表放在哪、怎么命名AAMA 的核心不只是 DXF 图形还有放码规则哪个是基码、每个码的步长是多少、尺码名怎么对应。这些东西存放在规则表里转换时按规则表把单码图撑成多码或者反过来把多码拆成单码。D:\CADConvert\rules下的命名我固定成基码_单位_用途.rul比如M_mm_上衣.rul、S_inch_裤装.rul。这么命名不是为了好看是因为批量脚本要按文件名拼参数规整的命名能让脚本少写一堆映射表。规则表本身是纯文本表格列顺序各家不一样我一般先拿一份已知正确的样表跑一遍单文件转换确认列能被正确识别再往目录里批量放。注意规则表建议设成只读。曾经有一次批量转换跑到一半有人同时打开了规则表在 Excel 里改步长保存时把文件锁住转换进程读到半截内容后面几十个款的码数全错而且日志里只写了一句「rule load partial」。设只读之后改规则必须先停批处理这个习惯救过我好几次。3.3 主配置文件逐项说明配置文件我放在D:\CADConvert\bin\convert.ini跟主程序同目录这样命令行调用时可以省略-c参数减少脚本出错的机会。一份能用的配置长这样[general] input_dir D:\CADConvert\in output_dir D:\CADConvert\out log_dir D:\CADConvert\log overwrite false ; 默认不覆盖同名文件自动加 _1 后缀避免冲掉好数据 encoding gb18030 ; 国内 CAD 交换文件基本是这个编码 [dxf] version R12 ; AAMA 交换的通用载体 unit_in mm ; 输入单位源文件头里没有 $INSUNITS 时以此为准 unit_out mm scale 1.0000 ; 单位一致时不动inch 转 mm 填 25.4 decimal 3 ; 坐标保留 3 位小数低于 2 位圆弧会走形 explode_blocks true ; 展开块参照AAMA 的版片常被包在 INSERT 里 keep_annotations true ; 保留剪口、布纹线、钻孔等标注实体 [aama] rule_file D:\CADConvert\rules\M_mm_上衣.rul size_field block_name ; 尺码从块名取可选 text_layer / xdata grade_base M layer_map 1:OUTLINE,2:INTERNAL,3:TEXT,7:NOTCH [validate] check_closed true ; 检查轮廓闭合不闭合的版片排料会出问题 min_area_mm2 50 ; 小于这个面积的闭合轮廓当成噪点 max_points 20000 ; 单版片点数上限超了大概率是样条没被正确离散几个参数值得单独说。overwrite false是我强制开的宁可输出一堆带后缀的文件也不让一次错误覆盖掉上一版正确的转换结果这是后悔药。scale只在单位不一致时改其他情况保持 1.0一旦把它当万能参数用出了错根本分不清是单位问题还是缩放问题。layer_map左边是 AAMA 里的编号图层右边是目标 CAD 的图层名不同上游厂家的编号含义有差异行业里常见的做法是 1 放轮廓、2 放内线、3 放文字、7 放剪口但具体以你手上的样件为准别照抄。max_points那条是兜底样条曲线没被正确离散时会生成几万个点的折线转出来文件几十兆靠这个值能提前拦住。3.4 命令行入口和退出码图形界面只适合单个文件试水批量一律走命令行:: 单文件-i 输入 -o 输出 -c 配置 -log 日志 D:\CADConvert\bin\CADConvert.exe ^ -i D:\CADConvert\in\A123\A123.dxf ^ -o D:\CADConvert\out\A123\A123_R12.dxf ^ -c D:\CADConvert\bin\convert.ini ^ -log D:\CADConvert\log\A123.log :: 从退出码判断结果批处理里靠这个决定要不要继续 if errorlevel 2 echo 严重错误停止批处理 if errorlevel 1 echo 有警告检查日志^是 cmd 的续行符写成一行也行只是不好读。退出码我约定成 0 成功、1 有警告但出文件了、2 失败没出文件批处理里用errorlevel分级处理遇到 2 就停遇到 1 就记下来继续跑跑完统一看。日志里最有价值的是每个实体的处理记录看到SKIP unknown entity就说明有实体类型没被识别这一类通常是自定义对象或者代理实体需要回上游要一份炸开过的文件。4. 转换参数怎么配DXF 版本、单位与图层映射参数配错是转换翻车最集中的地方而且错法很隐蔽文件能打开、图也在、就是不对。这一章按「先定版本、再定单位、最后定图层」的顺序来顺序反了会返工。4.1 DXF 版本为什么默认压到 R12DXF 的版本决定了哪些实体类型能用。R12 是纯 ASCII 的老版本实体类型少、结构简单是 AAMA 交换的事实载体绝大多数服装 CAD 都能读。R2000 及以上引入了句柄、二进制选项、更多实体类型功能强但兼容性差对接老设备时经常出现「打开是空白」或者「只进来一半版片」。我的默认值是输出 R12只有在确认下游能读 R2000 以上、并且确实需要保留样条或图案填充时才往上提。提版本之前一定要问清对方用什么软件、什么版本这一步问清楚能省掉后面三次来回重转。降版本也有代价R12 不支持某些实体转换器会做离散化处理比如把样条拆成折线、把填充拆成边界decimal参数就是控制这个离散精度的给到 3 位小数在服装这种尺度上完全够用给 2 位时圆弧会看出明显的棱角。4.2 单位与缩放25.4 倍是怎么来的AAMA 文件里单位信息经常缺失DXF 头里的$INSUNITS是 0无单位或者干脆没这一项。这时候转换器只能靠你在配置里的unit_in判断。上游是 inch、你按 mm 读得到的结果就是整体放大 25.4 倍反过来就是缩小 25.4 倍。判断方法很简单拿一个已知尺寸的样件比如一个标准口袋正常宽度 150 mm 左右。转换后量一下如果是 3810 mm 上下就是 inch 当成了 mm如果是 5.9 mm 上下就是 mm 当成了 inch。这个数字我背下来了因为见过太多次。; inch 输入、mm 输出 unit_in inch unit_out mm scale 25.4 ; 两边都是 mm保持 1.0不要手贱改 unit_in mm unit_out mm scale 1.0000scale和unit_in/unit_out同时改会叠加得到 645.16 倍这种离谱结果所以二者只用其一我一般交给单位参数自动换算scale保持默认。4.3 图层与实体映射编号图层怎么落到命名图层AAMA 用数字编号做图层目标 CAD 往往用有意义的名称。映射表写错最典型的后果是内线和轮廓混在一层排料时把所有线都当轮廓版片变成一堆碎片。配置里的layer_map是重点; 左边 AAMA 编号图层右边目标图层名冒号分隔逗号断项 layer_map 1:OUTLINE,2:INTERNAL,3:TEXT,7:NOTCH,8:GRAIN1一般对应版片外轮廓2是内部结构线省道、分割线3是文字标注7是剪口8是布纹线。这些编号在不同上游厂家之间确实存在差异我一般会做一件笨事拿一份样件把每个图层单独关掉看图形变化五分钟就能把对应关系摸清比查文档可靠。摸清之后写进配置以后同厂家的文件直接复用。注意映射表里没列出的图层默认行为要确认清楚——有的转换器会把它们合并到 0 层有的直接丢弃。丢内线还能靠人工补丢剪口就得重来所以keep_annotations一定开着。4.4 用 Python 做批量转换前的预检批量跑之前我会先用ezdxf做一遍体检把明显有问题的文件挑出来避免一个坏文件卡住整批。环境就是一个干净的 Python 3.10 或 3.11装一个库python -m pip install --upgrade ezdxf python -c import ezdxf; print(ezdxf.__version__)脚本如下输入输出各扫一遍重点看实体分布和包围盒# check_dxf.py 转换前后各跑一次比对同一套指标 import json import sys from pathlib import Path import ezdxf from ezdxf import bbox def profile(path): doc ezdxf.readfile(path) # 读不进来会直接抛异常正好当第一道筛子 msp doc.modelspace() counter {} for e in msp: t e.dxftype() counter[t] counter.get(t, 0) 1 ext bbox.extents(msp) # 包围盒用来粗判有没有被放大 25.4 倍 return { file: Path(path).name, dxfversion: doc.dxfversion, # AC1009 就是 R12 insunits: doc.header.get($INSUNITS, 0), # 0 表示没写单位要用配置兜底 entities: counter, layers: sorted(l.dxf.name for l in doc.layers), bbox: [round(v, 2) for v in (ext.extmin.x, ext.extmin.y, ext.extmax.x, ext.extmax.y)] if ext.has_data else None, } if __name__ __main__: for p in sys.argv[1:]: print(json.dumps(profile(p), ensure_asciiFalse, indent2))dxfversion返回AC1009就说明是 R12返回AC1015及以上是 R2000 之后的版本对不上就说明版本降级没生效。insunits为 0 是常态这时候必须靠配置里的unit_in兜底别指望文件自己说。bbox是最实用的一项转换前后两次的宽高比例偏差超过 0.5%基本就是缩放参数错了不用再往下查。ezdxf有个细节读加密或损坏的文件会抛ezdxf.DXFStructureError批处理里用 try/except 包一层把出错文件名单独列出来别让整批断在一个文件上。5. 避坑记录五条把版片搞丢的常见问题下面五条是这半年实际踩到的按「现象 → 原因 → 解决」记顺序按出现频率排。5.1 转换后版片数量少了现象源文件里明明有 12 块版片转出来只剩 9 块日志没有报错。原因AAMA 文件里的版片常被包在块参照INSERT里转换器默认不展开块只处理顶层实体包在块里的版片就被整块跳过了。这种情况用 AutoCAD 打开看不出来因为查看器会自动展开。解决配置里把explode_blocks设成true重新转一遍。如果展开后数量对上了但出现了重复轮廓说明源文件是嵌套块需要限制展开层级一般两层够用。5.2 整体尺寸差 25.4 倍现象图形形状完全正确就是大小不对量任何一条边都是精确的 25.4 倍关系。原因源文件是 inchunit_in写成了 mm或者源文件根本没写单位配置里默认值选错。上一章说的$INSUNITS为 0 就属于这一类。解决把unit_in改成inchunit_out保持 mm重新转换。改完拿一个已知尺寸的部件复核别只看整体比例。5.3 圆弧变成折线边缘有棱角现象圆形口袋、袖窿弧线在放大后能看出明显的多边形边。原因decimal给到 1 或 2坐标精度不够另一种情况是输出 R12 时样条被离散化离散密度参数没调。解决decimal提到 3必要时到 4。R12 输出时把样条离散密度调高一档。代价是文件变大但服装单件的点数规模完全扛得住。5.4 中文款号、尺码变成乱码或问号现象图形正常文字实体全是「???」或者方块。原因编码不匹配。国内 CAD 交换文件多数是 GB18030配置里写了 UTF-8或者用了系统里没有的字体。解决encoding改成gb18030同时确认C:\Windows\Fonts下有宋体。如果源文件确实是 UTF-8新版软件导出的就得单独为这批文件建一份配置别改全局配置否则老文件全乱。5.5 批量跑到一半停住日志停在某个文件现象批处理卡在中间某个文件不动CPU 占用很低磁盘灯也不闪。原因一次性投了几百个文件scratch目录的临时文件没清磁盘写满或者句柄耗尽也可能是某个文件的点数超限转换器在内存里死撑。解决批处理按 50 个一批分段跑每批开始前清空scratch配合max_points把异常文件提前拦掉。真遇到卡死的文件先单独跑一遍看日志最后一行写的是哪个实体多数是未识别的代理对象让上游炸开后重发。6. 装完怎么验证三份小样跑通全链路验证这件事我的做法比较死板不验证整个款只验证三份最小样本三份过了才算这套环境装好了。第一份是最小闭合版片一个矩形加四个圆角用来验单位、验闭合、验精度。第二份带全部标注内线、剪口、布纹线、钻孔各一处用来验图层映射和keep_annotations。第三份是带放码的整套至少三个码用来验规则表和尺码字段。三份样本都自己造尺寸标好别用真实款式方便比对。跑完之后按这几个指标逐项对指标期望对不上说明什么版片数量与样本一致块没展开、实体被跳过轮廓闭合全部闭合精度不足或离散出错包围盒宽高与样本一致±0.1 mm单位或 scale 参数错图层清单与layer_map右侧一致映射表没生效实体计数剪口、文字数量不减标注被丢弃DXF 版本号AC1009版本降级没生效前四项用 4.4 的脚本就能出结果把转换前后的 JSON 并排看差异一目了然。第五项我一般直接在目标 CAD 里目视一眼数量对不对很快能看出来。第六项看dxfversion字段。:: 三份样本一次跑完有问题立刻停 for %%f in (s1_box s2_marks s3_graded) do ( D:\CADConvert\bin\CADConvert.exe -i D:\CADConvert\in\samples\%%f.dxf ^ -o D:\CADConvert\out\samples\%%f_out.dxf -c D:\CADConvert\bin\convert.ini ^ -log D:\CADConvert\log\%%f.log || goto :fail ) echo 三份样本全部通过 goto :eof :fail echo 有样本未通过先看日志再动配置文件这段批处理的逻辑是串行跑、遇错即停||后面接goto :fail只要有一份没通过就跳出不会带着错误配置去跑正式批次。跑通之后把这三份样本连同convert.ini一起归档下次换机器、升级版本直接拿它们回归五分钟就知道新环境有没有退化。从那以后我每次装这套环境不管多急都强制先走一遍三份样本宁可多花十分钟也不愿意再经历一次「裁出来才发现小了 25.4 倍」。希望帮到你。本文还有配套的精品资源点击获取