
电源地就近打孔
liuem2v0.6.3
对电压/GND 网络焊盘自动就近打孔或盘中孔(焊盘中心直放):贴阻焊边界就近、直线方向优先,真直插三重甄别自动跳过、封装脏孔自动按贴片处理,0402 密集区自动回退小过孔,连线宽度恒不超过焊盘尺寸,BGA 自动保护,DRC 后校验新增违规自动回滚。开源:https://github.com/liuem/LCEDA-pcb-autofanout
详情
更改日志
历史版本
评论
电源地就近打孔
liuem2详情
更改日志
历史版本
评论
LCEDA-pcb-autofanout 电源地就近打孔
嘉立创EDA专业版(EDA Pro / EasyEDA Pro)扩展:对电压/GND 网络的焊盘自动就近扇出过孔(打孔 + 焊盘到过孔连线,可选盘中孔:过孔直接打在焊盘中心),位置经过间距预检查与 DRC 后校验双保险。
功能演示
PCB 编辑器顶部菜单:

就近模式实战:135 个候选电源/地焊盘自动打出 130 个过孔,报告给出每个焊盘的打孔方向/距离/线宽、未打孔原因(直插甄别/引脚超限/合并去重):

盘中孔模式:111 个过孔直接打在焊盘中心(无连线,报告会标注盘中孔数量):

图形设置面板(网络/过孔/连线/过滤与避让四组参数,改动即自动保存):


功能特性
- 网络自动识别:内置 GND 词族(GND/AGND/PGND/GND1/GND_PLL…)与电压词族(VCC/VDD/VBUS/VBAT/3V3/+5V/1V8/3.3V/-5V…),可追加自定义网络名。
- 间距规则内就近打孔:过孔边缘贴合焊盘边界——默认按阻焊开窗边缘判定(读取焊盘阻焊扩展,读不到回退焊盘铜皮尺寸),可选额外余量 stub(默认 0 = 贴合就近)。
- 盘中孔模式(可选):过孔直接打在焊盘中心,无需连线(建议配合树脂塞孔/电镀填孔工艺);过孔整圆放不进焊盘或位置被占时自动回退就近打孔。
- 直线方向优先:搜索顺序 0/90/180/270° 优先(长轴方向最先),45° 斜向仅作后备;0°/90° 被阻挡时走 180°/270° 而非斜向。
- 真直插跳过 + 脏孔自动甄别:真直插焊盘(本身是通孔)自动跳过;判定须同时通过三重校验——多层焊盘(层=12/MULTI,SDK 定义焊盘层仅 1/2/12)、器件全孔共识(真直插件所有焊盘都带孔)、焊环完整(孔径+0.3mm ≤ 焊盘长边)。封装库残留的脏孔数据(如某批贴片电容单侧焊盘误带孔)自动按贴片处理照常打孔,并在报告列出「疑似直插误判已按贴片处理」清单。
- 位置自动判定(可通过 DRC):
- 本地预检查:板边间距、异网络焊盘/过孔/走线间隙、同网络过孔合并去重、连线通道无冲突;
- 阻塞时沿方向逐档外扩(每档一个过孔外径,可配置步数);
- 创建后调用
eda.pcb_Drc.check复查,新增违规自动整体回滚。
- 连线宽度自适应:焊盘→过孔线宽 = min(设定值, 焊盘尺寸),恒不超过焊盘大小;设为 0 时自动取 min(焊盘尺寸, 过孔外径)。
- BGA 保护:焊盘数超过阈值(默认 32)的器件整体忽略,不参与打孔。
- 一键清理:删除本插件历史创建的全部过孔/连线(不影响手工布线)。
使用
在 PCB 编辑器顶部菜单「电源地就近打孔」:
| 菜单 | 说明 |
|---|---|
| 一键打孔 | 提取 → 规划 → 写回 → DRC 后校验(可回滚) |
| 预览(不修改画布) | 只输出打孔计划明细(位置/方向/线宽) |
| 删除本插件创建的过孔/连线 | 按 ID 记录清理 |
| 设置面板... | 图形界面配置全部参数(改动即自动保存) |
| 关于 | 版本与当前配置摘要 |
默认参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| viaHoleMm / viaDiameterMm | 0.3 / 0.6 mm | 过孔孔径/外径 |
| fallbackViaHoleMm / fallbackViaDiameterMm | 0.2 / 0.4 mm | 回退小过孔:主过孔 8 方向全阻塞时自动换小一号重试(0402 密集区);外径 0=关闭 |
| useSolderMask | 开 | 就近边界用阻焊开窗边缘(关=焊盘铜皮边缘) |
| viaInPad | 关 | 盘中孔:过孔直接打在焊盘中心(无连线,建议配合塞孔/填孔工艺);放不下自动回退就近 |
| stubMm | 0 mm | 边界外额外余量(0 = 间距规则内贴合就近) |
| traceWidthMm | 0.4 mm | 连线宽度(0=自动;恒 ≤ 焊盘尺寸) |
| maxPins | 32 | 超过该引脚数的器件忽略(BGA 保护) |
| skipThiPads | 开 | 真直插焊盘跳过(多层+全孔+焊环三重甄别,脏孔自动按贴片);关闭后带孔焊盘全部参与打孔 |
| clearanceMm | 0.15 mm | 预检查安全间距(6mil 标准工艺;最终由真实 DRC 兜底) |
| maxSearchSteps | 3 | 阻塞时沿方向外扩的最大档数 |
| mergeFactor | 1 | 同网络既有过孔在(理想距离 + N 个过孔外径)内则跳过 |
| useDrcCheck | 开 | 创建后真实 DRC 校验,新增违规自动回滚 |
| relaxedMode | 关 | 宽松模式:忽略间距预检查(仅防重叠)、跳过连线通道与 DRC 后校验;板子已有 DRC 违规时用,可能引入新违规 |
开发
npm install # 或复制已有 SDK 工程的 node_modules
node test/run-offline.ts # 离线测试(合成板 + 10.8 万项断言)
npm run lint
npm run build # 产出 build/dist/lceda-pcb-autofanout_vX.Y.Z.eext
源码结构:
src/
├── index.ts # 入口:菜单命令、设置面板(iframe)、报告
├── types.ts # 数据模型 / 配置 / 默认值(单位 mil,配置 mm)
├── net-classify.ts # 电源/地网络识别(内置 + 自定义模式)
├── geometry.ts # 几何:点-线段/矩形/胶囊体间隙、板内判定
├── planner.ts # 核心算法(纯函数):候选搜索 + 避让校验 → FanoutPlan
└── eda-adapter.ts # EDA 读写:板状态提取 / applyPlan 写回 / DRC 回滚 / 配置存储
iframe/
└── settings.html # 图形设置面板(eda.sys_Storage 注入直读写,与主线程共享配置)
test/
├── fixture.ts # 合成板:0603/0402阵列/SOT-223/LQFP48/BGA256/真直插/脏孔各形态/混装/板角/底层/阻挡走线场景
├── run-offline.ts # 断言 + 模拟写回(DRC 通过/失败回滚/单项失败)
├── verify-pkg.cjs # .eext 包内容核验
└── debug-dump.ts # 调试:打印每个焊盘的打孔/跳过原因
算法要点(参考 KiCad via-stitching 与常见 fanout 实践)
- 候选距离 = 焊盘沿方向延伸半径(阻焊开窗或铜皮边缘)+ stub + 过孔半径,stub=0 时过孔边缘贴边界(间距规则内就近);
- 直线方向(0/90/180/270°)优先、长轴方向最先,45° 斜向仅作后备;先在全部方向尝试理想距离,再逐档外扩;
- 直插(金属化孔)焊盘本身就是通孔,直接跳过——须通过多层(12)/器件全孔/焊环完整三重甄别,脏孔数据按贴片照常打孔;盘中孔模式时过孔直接取焊盘中心(外径 ≤ 焊盘短边且中心通过避让校验,否则回退就近搜索);
- 过孔对所有铜层障碍校验(通孔贯穿),连线只对同层异网络铜校验,同网络铜允许接触;
- 新放入的过孔/连线立即成为后续焊盘的障碍(多焊盘器件不互相冲突);
- 真实 DRC 作为最终防线:前后违规数对比,新增即回滚。
已知限制
- 焊盘用轴对齐外接盒近似(旋转焊盘保守处理);
- 铺铜不参与避让(铺铜区通常允许过孔打入);
- 仅支持通孔(viaType=VIA),盲埋孔未支持;
- DRC 回滚为整体回滚(不做逐项定位)。
排查:为什么有些焊盘没打孔?
执行/预览报告会按器件列出未打孔原因,对照处理:
| 原因 | 处理 |
|---|---|
| 引脚超限(如 LQFP48 > 32) | 设置面板调大「忽略器件引脚阈值」(LQFP48 设 64;BGA 保持默认防误伤) |
| 直插孔 | 通过三重甄别(多层+全孔+焊环)的真直插,本身已贯通,属预期跳过;若怀疑误判看报告「疑似直插误判已按贴片处理」行与诊断明细(hole=孔径、layer=多层/顶/底),或临时关闭「直插孔跳过判定」 |
| 已有就近过孔 | 同网络过孔已在扇出邻域内,避免重复;可调小「合并外扩」 |
| 无有效位置 | 8 方向全部阻塞(0402 密集区最常见):确认回退小过孔已开启;或增大「阻塞外扩步数」、减小过孔/安全间距,或先整理该区域布线 |
若整板几乎无候选焊盘,通常是网表未导入(焊盘无网络)——预览报告的"候选电源/地焊盘"计数为 0 即此情况;控制台(扩展日志)有提取汇总可进一步定位。
License
Apache-2.0
开源 / Open Source
代码开源于 GitHub:https://github.com/liuem/LCEDA-pcb-autofanout
- CI:push / PR 自动执行 lint + 10.8 万项离线测试并构建
.eext;打v*标签自动发布 Release 并附安装包 - 面向使用者的完整文档见 docs/使用说明.md(嘉立创扩展商店页面同文)
- Bug / 建议请提 GitHub Issue,附「诊断」菜单控制台输出(
[autofanout]行)
Changelog
0.6.3 (2026-09-15)
- 更换 logo 与商店横幅(审核意见):logo 改用 AI 生成的扁平插画风 PCB 焊盘图 (1024×1024 PNG);横幅换浅色调电路走线插画并叠加深色标题(1280×540 = 64:27 JPEG, 文字对比度 9.1:1)
0.6.2 (2026-09-15)
- README 新增「功能演示」章节(上架审核要求):菜单入口、就近模式实战报告 (135 候选 / 130 打孔)、盘中孔模式实战报告(111 盘中孔)、设置面板共 5 张截图
- 演示图以 ASCII 文件名入库(demo-*.png),兼容商店详情页渲染
docs/使用说明.md同步嵌入演示图
0.6.1 (2026-09-14)
- 扩展更名:
ai-pcb-autofanout→lceda-pcb-autofanout(UUID 不变,已安装用户无感升级;安装包文件名同步更名) - 菜单移除「设置面板(兼容模式)」:图形设置面板已充分验证,向导式兼容
入口下线(
settingsWizard及其对话框封装代码一并移除);iframe 未注入存储 时的提示改为建议升级客户端 - 设置面板开关控件修复:
.row label的width:200px覆盖了.switch的 38px,滑轨被拉成长条、与滑动圆点不匹配——改用更高优先级的.row label.switch选择器,开关恢复 38×20 胶囊轨道
0.6.0 (2026-09-14)
- 直插脏孔三重甄别(修复"整板没有那么多直插,89 个贴片被误判为直插"):
真直插跳过须同时通过三条物理判据,任一不满足即按贴片照常打孔——
- 多层判定:真直插焊盘层必须是 MULTI(12)(SDK 定义焊盘层仅 1/2/12, 通孔贯穿全板,单层铜皮上的孔数据必是脏数据)
- 器件全孔共识:真直插件的全部焊盘都带孔;件内只有部分焊盘带孔(如 某批贴片电容单侧误带孔)按脏数据处理
- 焊环完整:孔径 + 0.3mm ≤ 焊盘长边,孔塞不进焊盘的不可能是真直插
- 盘中孔模式(设置面板开关,默认关):过孔直接打在焊盘中心,无需连线 (建议配合树脂塞孔/电镀填孔工艺);要求过孔整圆落在焊盘内(外径 ≤ 焊盘短边) 且中心通过避让校验,主过孔放不下自动试回退小过孔,仍不行自动回退就近打孔
- 报告新增「疑似直插误判已按贴片处理:N 个焊盘(C114-1、…)」与 「其中 N 个为盘中孔(焊盘中心直放)」行
- 诊断明细升级:输出原始层(多层/顶/底)、孔径 mm、疑似脏孔标记
- 测试增至 108,651 项断言:新增脏孔五形态(单侧大孔/单侧小孔/全孔单层/ 多层大孔塞不进/混装定位脚)与盘中孔(中心直放/回退小过孔/板边回退就近/ 真直插仍跳过/写回无连线)场景
0.5.1 (2026-09-14)
- 设置面板拨动即自动保存:修改任意输入/开关立即写入配置(此前需点「保存设置」, 只拨开关未保存导致配置未生效的坑已消除)
- 直插孔跳过判定可关闭(设置面板「直插孔跳过判定」开关):部分封装孔数据异常会把 贴片电容误判为直插;关闭后全部电源/地焊盘参与打孔
- 诊断菜单:「诊断:输出焊盘明细到控制台」——每个电源/地焊盘的尺寸/孔/阻焊/引脚数 与规划去向(打孔方向距离 / 跳过原因)逐行输出,可复制反馈定位问题
- 合并跳过明细增加"距最近同网络过孔 X.XXmm"
- DRC 提示区分「宽松模式已跳过」与「接口不可用」
- 测试增至 75,673 项断言
0.5.0 (2026-09-14)
- 宽松模式(设置面板开关):板子本身已有 DRC 违规时使用—— 忽略间距预检查(仅保留 ~2mil 防完全重叠)、跳过连线通道检查, 并自动跳过 DRC 后校验(预检查已放宽,DRC 必然新增违规,回滚无意义); 能打尽打,可能引入新的 DRC 违规
- 直插判定金属化交叉校验:孔数组有效但焊盘明确标记非金属化(
getState_Metallization() === false) 时按贴片处理——修复部分封装孔数据脏导致贴片电容被整体误判为直插 - 控制台输出直插器件清单(如
C126、H5、C114…),便于核对是否真为直插电解/端子 - 测试增至 75,670 项断言(宽松模式打孔/防重叠底线/DRC 自动跳过/金属化校验)
0.4.0 (2026-09-14)
修复"0402 等小封装整体打不上孔":
- 回退小过孔:主过孔 8 方向全阻塞时,自动换小一号(默认 0.2/0.4mm)重试—— 0402 去耦电容密集区(上下有 IC 逃线、左右有相邻电容)常塞不下 0.6mm 过孔, 小过孔 + 6mil 间距往往能进;外径设 0 关闭。报告区分主/回退过孔数量
- 安全间距默认 0.2 → 0.15mm(6mil,JLC 标准工艺):预检查本为近似值, 真实 DRC 后校验仍兜底
- 设置面板(图形界面 + 兼容向导)新增回退过孔孔径/外径项
- 测试增至 75,636 项断言:新增 0402 阵列 + 上下逃线场景(10 个中间焊盘回退 0.4mm、 2 个端头仍用主过孔、关闭回退后 blocked)
0.3.1 (2026-09-14)
修复"许多焊盘没打孔(通常同一封装整体没打)":
- 直插判定收紧:仅当钻孔为数组且孔径 > 0(
['ROUND', d]/['SLOT', d, l])才视为直插跳过; 部分封装数据的 SMT 焊盘会返回[]/['ROUND', 0]/字符串,此前会把整个封装误判为直插而全部跳过 - 压板边焊盘不再整体跳过:焊盘中心在板外/板边(边沿连接器常见)时,仍向板内方向搜索打孔 (过孔位置本身有板边 margin 校验)
- 阻焊扩展防脏数据:非数值/负值按 0 处理,异常大值钳位 50mil
- 报告按器件汇总未打孔原因:如
U1:引脚超限×13;J2:直插孔×2,引脚超限提示可调大阈值 - 提取阶段输出汇总日志(器件/焊盘/直插/阻焊/过孔/走线/板框)便于排查
- 测试增至 37,195 项断言(新增 parsePad 直插/阻焊解析、压板边焊盘场景)
0.3.0 (2026-09-14)
- 图形设置面板(iframe + 注入的
eda.sys_Storage,与 ai-pcb-autoplace 同款方案): 全部参数表单化(数字输入/开关/下拉),保存即写入共享存储、执行打孔时生效; 带范围钳位与回显、「恢复默认」按钮;iframe 未注入时提示改用兼容模式 - 菜单拆分:「设置面板...」(图形界面)与「设置面板(兼容模式)」(原向导对话框)
0.2.0 (2026-09-14)
行为改进:
- 间距规则内就近打孔:过孔边缘贴合焊盘边界——优先按阻焊开窗边缘(读取焊盘阻焊扩展,读不到回退焊盘铜皮尺寸)判定,可选额外余量 stub(默认 0 = 贴合就近)
- 直插件引脚不打孔:带金属化孔的焊盘(
getState_Hole非空)本身就是通孔,自动跳过并在报告计数 - 直线方向优先:方向搜索顺序改为 0/90/180/270° 优先(长轴方向最先),45° 斜向仅作后备
其他:
- 设置面板新增「就近边界用阻焊层」开关;「伸出距离」改为「额外伸出余量」(0=贴合)
- 测试增至 34,765 项断言,新增直插跳过 / 阻焊边界 / 直线优先 / 同层连线通道阻挡场景
0.1.0 (2026-09-14)
首个版本。
- 电源/GND 网络自动识别(内置 GND/电压词族 + 自定义网络模式)
- 焊盘 8 方向就近扇出过孔:板边/异网络焊盘/过孔/走线间距预检查,阻塞时逐档外扩
- 焊盘→过孔连线宽度自适应,恒不超过焊盘尺寸
- 过孔伸出距离(stub)可配置(默认 0.25mm)
- 高引脚数器件忽略阈值(默认 32,BGA 保护)
- 创建后 DRC 后校验,新增违规自动整体回滚
- 同网络既有过孔合并去重
- 预览模式 / 一键清理本插件创建的图元
- 离线测试:合成板 34,101 项断言全部通过

暂无数据
类型
PCB
关键词
ViaFanoutPowerGNDPCB
扩展信息
| 版本 | v0.6.3 |
| 发布者 | liuem |
| 发布时间 | 2026-09-16 09:15:52 |
| 名称 | lceda-pcb-autofanout |
| UUID | e4b41778209e47768b4f04e6aba93146 |
| 适用EDA版本: | ^3.2.0 |
| 报告 | 报告滥用 |
评论