
导入 DWG
导入 DWG
OSHWHub17DWG 导入器(Import DWG)
在嘉立创EDA专业版(EasyEDA Pro)里,直接把 DWG 图纸导入到 PCB / 原理图 / 封装 编辑器中。
机械工程师给的板框、外形图、结构参考图,不用再手抄坐标,选好文件、配好图层对应关系,一键就能落到画布上。
这个扩展能做什么
| 扩展界面 | DWG导入效果 |
|---|---|
![]() | ![]() |
- 一键导入 DWG:在 PCB、原理图、封装三种编辑器里都能用。
- 图层映射:DWG 里的每个图层,可以分别指定导入到哪个 PCB 层(比如板框、丝印、机械层)。选不定时,扩展会按图层颜色和图层名自动给出建议。
- 自动展开图块(BLOCK):DWG 里用图块拼出来的图形(比如标准件、反复出现的标记),导入时会展开成实际图形,不会漏。
- 可挑选导入内容:只想导入线条?可以在选项里关掉文字、样条曲线等类型。
- 常用设置记着:上次用的线宽、单位会记住,下次不用重设。
- 中英双语:界面跟随嘉立创EDA的语言设置。
怎么用
第一步:打开菜单
先打开一个 PCB、原理图 或 封装 文档,然后在顶部菜单里找到:
DWG 导入器 → 导入 DWG…
只有在上面这三种编辑器里才会出现这个菜单。在主页、工程列表、符号编辑器等界面是看不到的。
第二步:选择 DWG 文件
弹出的窗口里,把 .dwg 文件拖进去,或者点「选择文件…」挑一个。
选好后会自动开始解析,状态栏会显示解析进度。解析完成时能看到有多少个图形、多少个图层。
第三步:设置图层对应关系
窗口中间是图层映射表,左边是 DWG 里的图层,右边下拉选择要放到 PCB 的哪一层。
表头上有几个省事的按钮:
| 按钮 | 作用 |
|---|---|
| 全选 / 全不选 | 快速勾选或取消所有图层 |
| 按颜色匹配 | 按图层颜色,自动找颜色最接近的 PCB 层 |
| 按名字建议 | 按图层名字猜,例如 BOARD_OUTLINE → 板框层,DIM* → 机械层 |
| 重置 | 清空所有映射,重新来 |
不想导入某个图层,就把它右边的下拉设成 「不导入」,或者取消前面的勾。
自动建议只是帮你省事,不一定完全准确。导入前建议扫一眼,按自己的习惯调整。
第四步:调整选项(可选)
展开「选项」区域可以:
- 实体类型:勾选要导入哪些类型。默认全选。如果只想导入线条轮廓,可以取消掉 TEXT、MTEXT、SPLINE。
- 默认线宽:导入图形的线宽,默认 8 mil,有 1 / 2 / 4 / 6 / 8 / 10 / 20 mil 可选。
- 单位:默认「自动」,即按 DWG 文件本身记录的单位来;如果发现导入后尺寸不对,可以手动改成 mm 或 inch。
- 跳过空图层:默认开启。没内容的图层不处理,导入更快。
第五步:确认并导入
窗口底部会显示「导入(N 个图元)」。点它开始导入,完成后会自动缩放到刚导入的图形,方便查看。
导入不会自动保存文档,方便你先检查效果。确认没问题再自己保存。
支持哪些图形
| DWG 图形 | 能否导入 | 说明 |
|---|---|---|
| 直线(LINE) | ✅ | |
| 无限长构造线(XLINE / RAY) | ✅ | 按图纸实际范围裁剪后作为直线导入 |
| 多段线(LWPOLYLINE / POLYLINE) | ✅ | 闭合多段线作为轮廓区域导入;顶点凸度(圆弧段)会展开成折线 |
| 圆(CIRCLE)、圆弧(ARC)、椭圆(ELLIPSE) | ✅ | 会转换成细密的折线 |
| 单行文字(TEXT) | ✅ | |
| 多行文字(MTEXT) | ✅ | 按硬换行与参照矩形宽度拆成多行,逐行下排 |
| 样条曲线(SPLINE,含贝塞尔) | ✅ | 先按定义求值再采样成折线,保证外形平滑 |
| 图块引用(INSERT) | ✅ | 自动展开成实际图形(嵌套、缩放、旋转、镜像) |
| 标注(DIMENSION) | ✅ | 经其匿名块导入(CAD 里标注就是渲染该块) |
| 表格(ACAD_TABLE) | ✅ | 经表格匿名块导入,含表格线框与单元格文字 |
| 遮罩(WIPEOUT) | ✅ | EDA 没有遮罩图元,导入为闭合轮廓以保留可见边界 |
| 点(POINT)、填充(HATCH)、多线(MLINE)、引线(MULTILEADER)、公差(TOLERANCE)、属性(ATTDEF / ATTRIB) | ❌ | 不导入,但在解析警告中按类型列出数量 |
| 面域(REGION)、三维实体(3DSOLID / BODY) | ❌ | 解析库只提供 ACIS 数据,没有可用的二维几何 |
外部参照(XREF):如果 DWG 引用了其它外部文件,因为这些内容不在当前文件里,扩展会跳过它并以提示条告知(详情见日志),其余图形照常导入。
常见问题
菜单找不到? 请确认当前打开的是 PCB、原理图或封装文档。其它界面(主页、工程树、符号编辑器、面板等)不会显示这个菜单。
导入后尺寸差 10 倍或 25 倍? 多半是单位识别问题。打开「选项」把「单位」从「自动」改成 mm 或 inch 再导一次。DWG 文件中记录的单位有时不准确,尤其从英寸制国家传来的图纸。
为什么不用 DXF? 嘉立创EDA 专业版原生支持导入 DXF,直接用软件自带的导入功能即可,不需要经过本扩展。本扩展专门解决软件不支持的 DWG 格式。
提示「无法加载 DWG 解析引擎」? 说明扩展包里的解析模块没加载成功。可以在扩展管理里重新安装一次;若一直失败,请反馈给我们。
提示「DWG 版本不受支持」? 解析引擎对很新的 DWG 版本(如 AutoCAD 2018 及以上)支持有限。可以在 AutoCAD 或其它 CAD 软件里「另存为」较早的版本(如 2013 或 2010),再重新导入。
文件太大导不进来? 单次导入有上限:文件不超过 50 MB,图形数量不超过 10 万个。图形特别多时,可以按图层拆分,分几次导入。
导入的图形跑到很远的地方了? 确认「单位」设置正确;另外注意导入的坐标是 DWG 原始坐标,可能与当前画布原点有偏移。导入完成后会自动缩放到导入内容,如果没看到图形,可以按一下「适应全部」。
导入后文字字体变了? DWG 里的字体在转换中用嘉立创EDA的默认字体显示,字形可能与原图略有差异,属正常现象。
安装
在嘉立创EDA专业版的扩展广场中搜索「DWG 导入器」安装即可。
关于本扩展的授权
本扩展以 GPL-3.0-or-later 授权发布。
扩展内置了开源 DWG 解析引擎 libredwg(通过 @mlightcad/libredwg-web 打包,该库为 GPL-3.0 授权),因此整个扩展包需以 GPL-3.0 兼容的方式分发。
源码地址:https://github.com/easyeda/eext-dwg-importer
DWG 导入器
本文件上方记录 DWG 导入器扩展 的版本历史; 下方「pro-api-sdk 框架」部分记录所依赖的 SDK 脚手架历史,两者互不影响。
1.9.1
新增
- 新增dwg预览,可在预览窗查看dwg并按照颜色调整PCB的导入层
优化
- 优化了文本显示镜像的问题
1.1.3
优化
- 新增半像素偏移,优化转换公式,解决转换被镜像问题
- 优化每次导入仅换算一次画布原点,避免每个图元反复累加画布原点偏移
1.1.2
新功能
- 弹窗支持最小化折叠:标题栏新增最小化按钮(collapsed 折叠样式), 确认导入参数期间可把弹窗收起查看画布,再点标题栏还原。
- 原点偏移:导入时可以把 DWG 原点 (0,0) 放到画布的指定坐标上(默认 0,0 = 两原点重合)。
- 选项区新增「原点偏移 (mil)」X/Y 输入框,支持负值与小数;
- 坐标输入旁新增鼠标箭头按钮:点击后隐藏弹窗并显示跟随鼠标的提示 「点击画布选取坐标」,在画布上点击任意位置即把该坐标回填到输入框(60s 无操作自动恢复弹窗);
- 拾取实现说明:EDA 未提供点击取点 API(鼠标事件仅 selected/clearSelected/move), 通过「预选中一个图元 → 点击空白触发 clearSelected / 点击图元触发 selected → 读取 getCurrentMousePosition」的等价流程完成;复用已有图元,空文档时临时创建 1mil 图元并在结束后删除;
- PCB / 原理图 / 封装三种编辑器均支持;原理图的拾取坐标(0.01 inch)与手输坐标(mil)自动换算。
变更
- 移除预览区域(用户反馈:没有实际作用):弹窗右栏只保留选项卡片。 原预览区承载的解析警告(如外部参照被跳过)改为「提示条 + 日志」呈现,不再有信息丢失。
- 文件信息移至右栏顶部:选取 DWG 后的「文件名 · 大小」与解析状态 (图元数 / 图层数 / 单位)显示在右栏顶部的状态条;左栏释放出的空间用于 加大文件选择拖拽区(min-height 148px)。 并新增全部图元的整体尺寸行(图纸原始单位,未经换算)——数值量级就是 选导入单位的直接依据(如 297×210 → mm 的 A4 图框;11.7×8.3 → inch; 差 1000 倍量级 → 图纸单位声明缺失)。
- 导入按钮文案固定:不再随状态变化(此前解析完成会变成「导入(N 个图元)」), 状态机只控制按钮可用性。
- 默认线宽 4 mil → 8 mil(用户反馈线条过细、画布上看不清)。
默认值统一收敛到
DEFAULT_OPTIONS(storage 兜底与选项面板初值都引用它, 不再各自写魔数)。线宽偏好的存储 key 同时升版为defaultLineWidthMil2: 否则老 key 里存着的历史默认值 4 会让这次改动对老用户完全不可见。 - 实体类型开关移至选项卡片底部:日常导入很少逐类勾选,放底部不挡线宽 /
单位 / 原点偏移等常用项;用
margin-top:auto固定在卡片底边并加分隔线, 内容超出高度时自动跟随排列(不裁切)。 - 文件状态区固定高度 74px(用户反馈:选文件后高度会变,下面内容跟着跳):
此前「空闲 → 选文件 → 解析中 → 解析完成 → 解析失败」各状态高度都不同——
空闲态用
:empty{display:none}把空行藏掉,长文本又按word-break换行。 现在三行(文件名 / 状态 / 图元尺寸)始终占位:行上补min-height(空元素即使设了line-height,高度仍是 0,只去掉:empty规则撑不住), 行内一律单行省略(nowrap + ellipsis),被截断的完整内容用title悬停查看。 高度构成:padding 8+8 + border 1+1 + 行高 18 + (17+2) + (17+2) = 74px。 配套改动:解析失败的原因同时写sys_Log与 toast(状态行只剩半句时可完整查看); 并修正状态行前缀——setStatusError不再统一加「解析失败」前缀, 此前「导入失败:…」「所有图层都未映射…」会显示成「解析失败:导入失败:…」。 - 原点偏移输入框补上 X / Y 轴名(用户反馈:两个数字框分不清哪个是 X、哪个是 Y):
原来两框之间只有一个逗号分隔符。现在每个输入框前加轴名,并用
label把 轴名与输入框包成一组——组内间隙 6px、组间 8px,轴名归属一目了然, 且点轴名即可聚焦输入框;冗余的逗号分隔符与其样式一并移除。 轴名直接写在 HTML:与表头DWG同类,属中英文一致的通用符号,不进语言包。
修复
-
多段线轮廓「丢线段、不闭合」(本次反馈的问题):闭合标志位判错。 libredwg-web 转换出的 LWPOLYLINE
flag是 DWG 原始位域,闭合位是 512(0x200)而非 bit0。 此前按flag & 1判定,所有 512/528 的闭合轮廓都被当成开放导入——每个轮廓都少画 最后一段闭合线(实测 case/example_2000.dwg:27 条多段线里 26 条实际闭合,修复前只判出 16 条,含整张图的 4 点外框,表现为边框不闭合)。 判定依据:用 libredwg 自带的 DXF 写出器(dwg_write_dxf)取真值,按 handle 逐条对照—— flag=0 → DXF group 70=0(开放)、flag=512 → 70=1、flag=528(512+16)→ 70=1; 上游渲染路径同样用flag & 512判定。 旧式 POLYLINE2D/3D 的flag与 DXF group 70 同构,闭合位仍是 bit0 (实测 handle 41A:flag=1、DXF 70=9 = 1 闭合 + 8 三维多段线),故两种类型分别判定。 -
多段线的圆弧段(凸度 bulge)被整体丢弃:LWPOLYLINE 顶点可带凸度
bulge = tan(θ/4)(该图纸两条多段线的每个顶点都带 ±0.52056705 → 每段 110° 圆弧; 解析库字段与 DXF group 42 真值完全一致)。此前只取顶点坐标,圆角/齿形全部退化成直弦。 现按标准公式求出圆心与半径并展开成点列,采样密度用矢高 / 弦长相对容差 2%(尺度无关) 自适应;每段至少 1 点保证弧形走向,每实体 4096 点预算,超预算时只保留保底点 (总量不超过 2×顶点数),避免细密齿形把点数放大到几十万。 验证:与上游渲染器的 5° 细采样曲线交叉对比,展开点最大偏差 3.7e-2(弦长 50、图宽 14300 单位); 3635 顶点那条齿形的外接尺寸与上游完全一致(差 0.000)。 注:负凸度(顺时针弧)的半径在解析式中为负值,取点必须用其绝对值,否则弧会被镜像到 圆心另一侧——同圆上「到圆心等距」的自检发现不了,需用解析解或上游曲线交叉验证。 -
图形层的圆弧导入后无法被拾取:圆弧此前用
pcb_PrimitiveArc(ArcTrack)创建, 省略 net 后能在丝印等图形层正常显示,但选中不了(用户反馈;同层直线与圆因已改用折线, 选择正常)。现图形层的圆弧同样采样成开放折线(同一矢高容差,2~64 段), 信号层仍保留原生 ArcTrack(电气图元)。同时跳过零扫掠圆弧(起止角相同)—— 与零长度线段、零半径圆同类,会创建无法选中/删除的零尺寸幽灵图元。 -
导入后「标尺巨大、看不到图元」(易误判为单位选错): 根因不是单位换算——部分 DWG 里存在被极端缩放的辅助几何(实测 case/example_2000.dwg:块 bloko 的一个 INSERT 带 xScale=3256.5 / yScale=-1843.5,块内 3 条线展开后横跨 ±270 万 mm,主体只有 ±1.4 万 mm)。 导入后 EDA 的 zoomToAllPrimitives 把这些线也算进去,视野拉到 3.5 km 宽。 现在解析后自动做离群检测(中位数中心 + 实体几何真距离 + 自然断点 跳变检测 ≥20 倍且占比 ≤20%),剔除离群实体并写入解析警告; 右栏尺寸行显示的也是剔除后的主体尺寸,选单位不再被带偏。 断点算法说明:固定分位数阈值在「密集核心 + 渐变外围」分布上会误杀 (r13 样例曾误杀 42 个正常实体),跳变检测只认真正的断档,渐变分布 自然退化为不过滤。
-
导入扩展报「Corrupted zip: can't find end of central directory」:
.edaignore此前没有排除case/测试图纸目录,打包时流式读取目录里被进程 占用的example_r13.dwg.lck(wasm 解析引擎的锁文件)失败,zip 中途断流, 产出没有中央目录的损坏 .eext。已排除case/并全局兜底*.lck、*.bak; 重新打包后校验 EOCD/清单完整(16 条目,2.4 MB)。 另:npm run debug会把 .eext 产物写到 dist/,不排除的话下次打包会把旧包 套娃进新包(实测体积翻倍);tsc 增量信息(tsbuildinfo)同理——均加入排除。 -
映射到丝印等图形层的导入全部失败([INVALID_LAYER]): EDA 的导线(Track)/电气圆弧(ArcTrack)是电气图元,仅允许信号层 (Top/Bottom/内层);此前 Line/Arc/Polyline 的 net 参数固定传空串
'', 被运行时按「有网络」处理而整批拒绝(报错原文即提示「如需在图形层画弧请不传 net」)。 现在信号层传'',图形层(丝印/文档/板框/机械层等)一律省略 net; 画布拾取在空文档创建的临时图元(Document 层)同样受此影响,一并修复。 第二实测(v1.1.1):省略 net 后圆弧在图形层可用,但导线(Track)依然 拒绝图形层(约 1300 条直线报 [INVALID_LAYER])——Track 是严格的电气图元。 图形层的直线改用折线(Polyline)两点开放路径表达(官方示例即开放路径); 同时跳过零长度线段与零半径圆——这类退化几何会创建出无法选中、无法删除的 零尺寸幽灵图元。 -
R13 等旧版 DWG 导入结果与原图相差大(本次反馈的问题): 用 libredwg 官方测试图 example_r13.dwg(case/ 目录)逐类型对比原始数据库与导入 IR 后, 补齐了四类被整体跳过、但 CAD 中正常显示的实体:
- 标注(DIMENSION):标注的可见图形存放在其匿名块(*Dn)里,CAD 渲染标注就是渲染该块。 现在按匿名块展开导入(此前 9 个标注全部消失,是「相差太远」的主要来源);
- SOLID / 3DFACE:实心四边形/三维面导入为闭合轮廓。注意 SOLID 的 DXF 顶点序是 1-2-4-3 之字形,按 1-2-3-4 连线会自交,已按正确顺序处理(标注箭头即 SOLID);
- ELLIPSE:按参数方程采样成折线(全椭圆 64 段,椭圆弧按扫掠角比例)。 另:r13 案例中块 *X15(1297 条线)在 R13 版模型空间确实被引用、CAD 中也显示, 导入该块是正确行为,非误报多画。
-
点击拾取按钮无响应的排查与加固(第二轮):
- 拾取全流程写入
sys_Log(入口、能力检查、弹窗隐藏、监听注册、收到事件、坐标回填), 实机排查先看日志面板;能力缺失会点名缺哪个 API 并在 toast 中显示; - 进入拾取模式时弹「已进入拾取模式」toast:若点击图标后连这条提示都没出现, 说明点击事件没到达按钮(DOM 问题)而非拾取逻辑问题;
- 自触发竞态防护:预选中图元的程序化选中事件可能异步晚到并误判为用户点击, 导致弹窗刚隐藏就被自己弹回(表现为「弹窗从不隐藏」)。监听注册完成后设 600ms 宽限期,期内 selected/clearSelected 一律忽略;
showFollowMouseTip降级为可选:缺失时改用 toast 提示,不再中断整个拾取;- 弹窗隐藏兜底:hideIFrame 是结果导向 API,个别版本可能返回 true 但未真正隐藏——
调用后用
window.frameElement校验实际可见性,仍可见时直接隐藏本扩展自己的 弹窗容器 DOM(含遮罩),恢复时原样还原; - 60s 超时定时器提前到隐藏弹窗之前启动——hide/提示/注册任一步卡住弹窗都能自动恢复;
- 注册监听前先移除同 id 旧监听,防止「已存在」导致注册静默失败;
- 拾取按钮点击入口与处理器异常均记日志 + toast,不再有无声失败路径。
- 拾取全流程写入
-
右侧选项排版拥挤(第二轮):原点偏移行重排——X/Y 输入框改为均分剩余宽度 (不再固定 72px 挤在一起),移除行尾冗余的「mil」后缀(单位已在标签中); 「原点偏移 (mil)」分组标题与上方单位行的间距从 10px 加大到 16px, 与「实体类型」分组形成明确节奏。
-
单位换算错误(前次反馈的问题):
- 根因:INSUNITS(图纸单位声明)检测映射表写错——毫米(4)/厘米(5)/米(6) 被误判为英寸。 mm 图纸按 ×1000(英寸系数)而非 ×39.37 换算,导入图元整体放大 25.4 倍。
- 修正映射:1=英寸、2=英尺、4=毫米、5=厘米、6=米、9=mil(对照 libredwg-web 的
DwgHeader.INSUNITS文档,即 AutoCAD 标准枚举)。 - 图纸未声明单位(INSUNITS=0)或代码无法识别时,不再静默按 mm 处理, 而是写入解析警告提示用户。
- 解析完成的状态栏现在显示最终生效的单位(如「单位 mm」),一眼即可核对换算是否正确。
- 单位下拉框补充 cm / m / mil (1:1) 选项,无单位或特殊单位图纸可手动指定。
- 导入成功但画布上看不到图形(前次反馈的问题):
- 导入完成后现在会调用
dmt_EditorControl.zoomToAllPrimitives()自动缩放到全部图元。 DWG 原始坐标换算成 mil 后往往离当前视野很远,此前不缩放,回到画布只会「什么都没有」。 - 所有图元
create()的返回值此前从未检查。pro-api-types 中 create 返回Promise<IPCB_* | undefined>,undefined 表示创建失败;失败现在会计入失败数并记录原因, 不再被静默吞掉、误报为成功。 - 导入开始前增加环境预检:
eda未注入或缺少所需图元 API 时直接给出明确错误, 而不是逐实体静默跳过后汇报「导入完成 0 个」。
-
「导入完成:0 个图元」误导:当一个图元都没创建(也没有失败)时, 几乎总是所有 DWG 图层都停在「不导入」。此时弹窗不再自动关闭, 而是明确提示检查图层映射与导入选项。
-
「按颜色匹配」永远无效:目标 PCB 层清单没有颜色数据, 颜色匹配会跳过无颜色的层,导致按颜色建议恒为空。现已为各目标层补上近似默认色。
-
表格块没有导入(本次反馈):DWG 表格(ACAD_TABLE)的可见几何存放在匿名块
*T<n>里(与标注同套路),但解析库对表格实体给出的name与blockRecordHandle都是空值(实测 case/example_2018.dwg:rowCount 0、cells为空), 此前整类被静默丢弃。现按 AutoCAD 的*T<n>命名约定按出现顺序认领匿名块, 转成以startPoint定位的恒等 INSERT,复用已有的块展开路径。 实测效果:*T13的 32 条 LINE + 7 个 MTEXT 全部进入导入结果,该图纸实体数 87 → 132。 -
斜线(XLINE / RAY)没有导入(本次反馈):这两类是无界构造线, 数据里只有基点 + 单位方向。现先按 1e6 图纸单位的假长度生成端点, 待块展开拿到最终坐标后,用其他有限实体的包围盒(外扩 2%)做 Liang-Barsky 裁剪; 完全落在框外的丢弃并计数。裁剪排在块展开之后、离群过滤之前,故裁剪结果参与范围计算。 实测该图纸 2 条构造线(方向 (0.4475, -0.8943) 与 (0.8208, 0.5712))均已导入且落在图纸范围内; IR 中不残留
infinite中间标记。 -
遮罩(AcDbWipeout)没有导入(本次反馈):其边界点存在
clippingBoundaryPath, 但坐标是相对像框的归一化值(实测范围 -0.5..0.5),世界坐标 =position + uPixel·(nx·imageSize.x) + vPixel·(ny·imageSize.y)。现导入为闭合多段线轮廓: EDA 没有遮罩图元、也没有 z 序遮挡,导入轮廓能保留可见边界(比整类丢掉更接近原图), 同时避免像「填充」那样在 PCB 上变成真实铜箔。实测两条(12 点 / 4 点)坐标与推算完全一致。 -
贝塞尔 / 样条曲线导入后成了折线(本次反馈):此前直接把控制点(或拟合点)当折线顶点, 等于把控制多边形画出来(该图纸 4 条样条此前只剩 3~6 个点)。现真正求值再采样: 控制点型用 de Boor 求值(支持有理权重,实测四分之一圆半径误差 2.2e-16), 拟合点型用弦长参数的三次样条插值(曲线精确通过每个拟合点,实测偏差 < 1.6e-4 图纸单位), 端点切向按 clamped 端条件采纳。采样判据与圆弧一致(矢高 / 弦长 ≤ 0.2%,与图纸尺度无关), 自适应二分;点数超预算时放松容差重采而不是截断——截断会丢掉曲线尾段(连端点都没了), 实测 0.01% 容差的三次贝塞尔正好被截在点数上限上。单条曲线默认最多 512 点。
-
多行文本没有准确换行显示(本次反馈):EDA 的文本图元是单行的, 此前把整串(含
\P)塞进一个文本图元,画布上就是一行里带着 "\P"。 现在 MTEXT 按\P/\X/ 真实换行拆行、清理格式码(字体 / 字高 / 颜色 / 对齐 / 堆叠分数\S1/2;/%%d等),并按参照矩形rectWidth贪心折行(CAD 里也是按它折的), 每行生成一个文本实体,按行距 5/3 × 字高沿 MTEXT 旋转方向逐行下排, 首行位置按attachmentPoint(上 / 中 / 下)从插入点反推。 实测样例Teksto…\PAlia linio.\PAlia pli.已拆成 3 个文本实体、位置逐行下移。 折行宽度为估算(半角 0.6 字高 / 全角 1.0 字高):真实折行取决于图形字体度量, 本扩展不加载字体,只能近似;硬换行与格式码处理则是精确的。 -
未导入的实体类型不再静默丢弃:以前
default分支直接return null, 用户只看到「图元比 CAD 少」却不知少了什么。现按类型计数并汇总成解析警告 (实测该图纸:POINT × 46、ATTDEF × 3、ATTRIB × 2、VIEWPORT × 2、HATCH × 1、 3DSOLID × 1、TOLERANCE × 1、MULTILEADER × 1、MLINE × 1)。 硬限制说明:面域(REGION)与三维实体(3DSOLID / BODY)在解析库里只有 ACIS 数据 (satCache),拿不到二维几何,无法导入;此类差异现在会明确列出而不是悄悄消失。 -
属性文字(ATTDEF / ATTRIB)没有导入:图块的属性值此前整体跳过,
valoro de la teksto en bloko、ETIKEDO这类文字全部丢失。实测 libredwg-web 把可见文本放在嵌套的e.text对象里(值是e.text.text,位置/字高/旋转在e.text.startPoint/textHeight/rotation),而实体自身的insertionPoint恒为(0,0)——照它导入会把属性文字全堆到原点。现在按嵌套记录导入为文本;块内的 ATTDEF/ATTRIB 只是模板(真正显示的是 INSERT 的属性值)故跳过,避免同位置渲染两遍。注意:ATTDEF 的定义值 libredwg-web 不暴露,无值且位于原点的纯模板会被跳过,其余退回显示标记(tag)。 -
样条曲线被强行首尾相连:有图纸把样条的闭合标志位置位,但首末点实际相距数百单位(实测
case/example_2018.dwg两条拟合点样条相距 290 / 1700 单位),按标志闭合会凭空补一条横贯图纸的弦。现在要求标志与几何自洽——只有周期样条或首末点实际重合(容差取曲线自身尺度的 1e-6)才按闭合导入。 -
「自动」单位不看图纸尺寸:机械图纸常声明 mm 却把坐标画到上万(实测该图纸 14299×15600,INSUNITS=4mm),照声明导入得到 14.3m×15.6m 的板子。现在「自动」档在声明单位换算后超出常见 PCB 尺寸(5~1000mm)时,会自动改用最合适的单位(该图纸判为 mil,约 363×396mm),并在解析警告里写明判定依据与手动指定入口。
-
多线引线(MULTILEADER / AcDbMLeader)没有导入:引线与文字整体被跳过。实测 libredwg-web 把引线顶点放在
leaderSections[].leaderLines[].vertices、文字放在textContent(含换行与格式码)、锚点在planeOrigin,现已导入为「引线折线 + 文字」;因一条 MLeader 要产出两个图元,toRaw的返回类型放宽为「实体或实体数组」。 -
块名为空时的兜底匹配:重存过的图纸里 INSERT 的块名会被解析库读成空串(实测 9 个 INSERT 全为
"",无blockRecordHandle可回退)。现在只做可靠匹配——INSERT 带属性且某个块的 ATTDEF 标记能唯一命中时才认领(本次救回bloko);匹配不上的不猜,按类型计入解析警告。
1.1.0
修复「选择 DWG 文件后始终提示解析失败」的问题。
修复
- 嵌套图块导致解析中断(主要原因):
块定义内部引用其它块(DWG 中很常见,例如「图框」块引用「标题栏」块)时,
块展开逻辑会直接抛出
Unsupported raw entity kind: INSERT, 使整个文件解析失败。现已支持递归展开嵌套图块,并加入循环引用检测。 - 错误原因无法显示:状态栏只显示「解析失败:{0}」,看不到真正原因。
原插值逻辑使用
${1}占位符,而语言文件统一使用{0}, 导致占位符从未被替换。现统一为{0}风格,错误信息可正常展示。 - 布局容器被误认为图块:
*Model_Space/*Paper_Space会出现在预览的图块列表中, 与模型空间实体重复。现已过滤。 - 修正少量语言文件中写错的占位符编号。
1.0.0
首个版本。
新功能
- 在 PCB / 原理图 / 封装 编辑器中导入 DWG 文件(顶部菜单
DWG 导入器 → 导入 DWG…) - 图层映射:把 DWG 图层分别指定到目标 PCB 层,支持手动选择
- 智能建议:按图层颜色、按图层名自动推荐映射(
BOARD_OUTLINE→ 板框层、DIM*→ 机械层 等) - 图块(BLOCK)引用自动展开,并按插入点、缩放、旋转、镜像做坐标变换
- 支持 LINE / LWPOLYLINE / POLYLINE / CIRCLE / ARC / TEXT / MTEXT / SPLINE 八类图形
- 样条曲线自适应采样转折线(16–128 段,视觉偏差受控)
- 导入选项:实体类型开关、默认线宽、单位(自动 / mm / inch)、跳过空图层
- 预览区显示包围盒、各类图形数量、已展开图块与解析警告
- 记住上次使用的线宽与单位设置
- 简体中文 / 英文双语界面
变更
- 仓库协议由 Apache-2.0 变更为 GPL-3.0-or-later(内置 libredwg 解析引擎为 GPL-3.0,需保持兼容)
说明
- 不支持 DXF —— 嘉立创EDA 专业版已原生支持 DXF 导入
- 外部参照(XREF)因内容不在当前文件内,会跳过并给出提示
- 已知限制:单文件 ≤ 50 MB,图形数量 ≤ 10 万个;对 AutoCAD 2018 及以上版本 DWG 支持有限
- 导入后不会自动保存文档,需用户自行保存

类型
关键词
扩展信息
| 版本 | v1.9.1 |
| 发布者 | EasyEDA |
| 发布时间 | 2026-09-23 17:01:09 |
| 名称 | dwg-importer |
| UUID | dd5d79bf5dd44287817ae29f79a2e9e4 |
| 适用EDA版本: | ^3.2.0 |
| 报告 | 报告滥用 |


评论