R2:底板 / 刀片布局布线脚本、快照、截图与规划文档更新(含外壳、打印件、布线归档)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
@@ -0,0 +1,40 @@
|
||||
#!/usr/bin/env python3
|
||||
"""导出 EasyEDA 编译后的整工程网表(三种格式)作为转 KiCad 的对账基准。
|
||||
|
||||
注意:getNetlistFile() 是**整工程**的,不是当前页 —— 但它仍要求有一个原理图文档
|
||||
处于打开状态,所以先 openDocument。API 标着 BETA。"""
|
||||
import json, os, sys
|
||||
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||
import eda
|
||||
|
||||
ROOT = os.path.dirname(os.path.abspath(__file__))
|
||||
OUT = os.path.join(ROOT, "eda_src")
|
||||
PAGE = json.load(open(os.path.join(ROOT, "eda-parts.json"), encoding="utf-8"))["pages"]["P1-INPUT"]
|
||||
|
||||
JS = '''
|
||||
await eda.dmt_EditorControl.openDocument("%s");
|
||||
await new Promise(r=>setTimeout(r,1200));
|
||||
const out = {};
|
||||
for (const t of ["EasyEDA","Protel2","PADS"]) {
|
||||
const f = await eda.sch_ManufactureData.getNetlistFile("nl", t);
|
||||
out[t] = f ? await f.text() : null;
|
||||
}
|
||||
return out;
|
||||
''' % PAGE
|
||||
|
||||
EXT = {"EasyEDA": "json", "Protel2": "net", "PADS": "asc"}
|
||||
|
||||
def main():
|
||||
os.makedirs(OUT, exist_ok=True)
|
||||
r = eda.run(JS, timeout=300)
|
||||
if not r.get("success"):
|
||||
sys.exit("网表导出失败: " + json.dumps(r, ensure_ascii=False)[:400])
|
||||
for t, txt in r["result"].items():
|
||||
if txt is None:
|
||||
print(f" !! {t} 返回 null"); continue
|
||||
p = os.path.join(OUT, f"netlist.{EXT[t]}")
|
||||
open(p, "w", encoding="utf-8", newline="").write(txt)
|
||||
print(f" {t:9s} -> {os.path.basename(p):15s} {len(txt):>9,d} B")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
在新工单中引用
屏蔽一个用户