【Kicad7系に対応するための補足メモ】 Adobe Illustratorで描いた基板部品の座標を簡単にKiCADへ移入する手順
背景と目的
Adobe Illustratorで描いた基板部品の座標を、サクッとKiCadに移したかったんですよ。
そのとき参考にしたのが、はなちさんのこの記事(2020年公開):
👉 Adobe Illustratorで描いた基板部品の座標を簡単にKiCADへ移入する手順
ただ、KiCadが6系から9系に変わる間にAPIがちょっと変わっちゃって、
そのままだと動かない部分が出てきたんです。
この記事では、KiCad v9で実際に動かしてうまくいった方法と、ハマりどころの対処法をまとめてます。
動かなかったところと解決策
ハマり0: ExtendScript Toolkit CCで座標が出ない!

症状
スクリプトを実行しても、なにも表示されない。
原因
Illustratorで、部品(パス)を選択してなかっただけ。
解決
選択してからスクリプトを実行しましょう。
ほんとにこれだけなんだけど、最初は「え、なにも出ない!?」ってなって焦ったやつ。
ハマり1: KiCadでスクリプトが実行できない/execfileが使えない!
症状
ブログ通りに execfile("set_position-right.py") って入力しても動かない。
原因
KiCad 7以降(v9も含む)はPython 3になってて、execfile() が廃止されてる。
解決
代わりにこれを使えばOK👇
exec(open("set_position-right.py", encoding="cp932").read())
Windowsなら encoding="cp932" のままでOK。
UTF-8保存なら encoding="utf-8" に変えるだけ。
あと、KiCadでは「今開いてる .kicad_pcb ファイルのある場所」が
カレントディレクトリ(=実行フォルダ)になるので、
スクリプトも同じ場所に置いてください。
ハマり2: FindModuleByReferenceが使えない!
症状
スクリプトを動かすと AttributeError が出て止まる。
原因
KiCadのAPIが変わってて、FindModuleByReference はもう使えない。
解決
FindFootprintByReference に置き換えれば動く。
あと、位置指定の仕方も微妙に変わってるので注意。
最後に pcbnew.Refresh() を入れておくと、GUIにもすぐ反映される。
(修正版のコマンドは下の方に書いています)
修正版に基づく全体の流れ(Illustrator → KiCad)
ここからは、上の修正を反映した実際の手順です。
この順番でやれば、KiCad v9でもちゃんと動くはず。
① Illustratorで座標を出す
- Adobe ExtendScript Toolkit CC を起動。
- はなちさんのブログにあるスクリプトをそのまま使う。
#target "illustrator"
(function(){
var convMilli = 1 / (25.4 / 72);
try {
if (app.documents.length > 0 ) {
app.coordinateSystem = CoordinateSystem.DOCUMENTCOORDINATESYSTEM;
for(i = 0; i < app.selection.length; i++){
obj = app.selection[i];
prop = obj.property;
x1 = pt2mm(obj.geometricBounds[0]);
y1 = pt2mm(obj.geometricBounds[1] * -1.0);
x2 = pt2mm(obj.geometricBounds[2]);
y2 = pt2mm(obj.geometricBounds[3] * -1.0);
cx = x1 + (x2-x1)/2.0 ;
cy = y1 + (y2-y1)/2.0 ;
var rad = 0.0;
if(obj.tags.length > 0 && obj.tags[0].name == "BBAccumRotation"){
rad = obj.tags[0].value; //in radians
}
var angle = rad * 180.0 / Math.PI;
$.writeln( obj.name + "\t" + cx + "\t" + cy + "\t" + angle);
}
}
else{
throw new Error('no document');
}
}
catch(e) {
alert( e.message, "script error", true);
}
function mm2pt(mm) {
return mm * convMilli;
}
function pt2mm(pt) {
return pt / convMilli;
}
})()
- 必ず部品を選択してから実行する(未選択だと出力されない)。
- Toolkitウィンドウに出た座標(
Ref名, X, Y, Angle)をコピー。

② KiCad用スクリプトを用意する
-
.kicad_pcbと同じフォルダにset_position-right.py等のファイル名をつけて保存。 - pyファイルに以下をコピペし、
parts = [...]の中に、さっきコピーした座標を貼り付け。
import pcbnew
OFFSET_X = 0.0
OFFSET_Y = 0.0
pcb = pcbnew.GetBoard()
def set_footprint_position(name, xp, yp, rot):
module = pcb.FindFootprintByReference(name)
module.SetPosition(pcbnew.VECTOR2I(pcbnew.wxPointMM(xp + OFFSET_X, yp + OFFSET_Y)))
module.SetOrientationDegrees(rot)
parts = [
"('SW1', 1, 0, 0),"
"('SW2', 5, 0, 0),"
"('SW3', 9, 0, 0),"
"('SW4', 13, 0, 0),"
"('SW5', 17, 0, 0),"
"('SW6', 21, 0, 0),"
"('SW7', 25, 0, 0),"
"('SW8', 29, 0, 0),"
]
for p in parts:
set_footprint_position(p[0], p[1], p[2], p[3])
③ KiCadで実行する
- KiCadのツール → スクリプトコンソールを開く。
- さっきの一行を入力して実行。
exec(open("set_position-right.py", encoding="cp932").read())
UTF-8保存なら encoding="utf-8" に変更。
実行するとコンソールに [OK] SW1: (1.000, 0.000) mm, 0° みたいな出力が出て、
部品が整列してたら成功です。
実行前

実行後
実行前後のKiCadボードの比較(ビフォー・アフター)
まとめ
- KiCad v9では
execfile()は使えないのでexec(open(...))に変える。 -
.pyは.kicad_pcbと同じフォルダに置くのが確実。 -
FindModuleByReferenceはFindFootprintByReferenceに変更。 -
pcbnew.Refresh()を忘れずに。
これで、Illustratorの座標出力をもとに、
KiCad v9でもサクッと部品を整列できるようになります。
Discussion