KiCadプラグインの作りかた.- KiCad スクリプティング リファレンスマニュアルを訳してみた.-

KiCadってプラグイン機能あったのね…知らんかった.
公式にリファレンスがあったので訳してみた.
本家はこちら
http://www.kicad-pcb.org/display/KICAD/KiCad+Scripting+Reference+Manual

以下,意訳注意.突っ込み大歓迎.あと勝手に訳してるんでなんか問題あったら言ってください.

KiCad スクリプティング リファレンスマニュアル

このマニュアルはKiCadのスクリプト機能をまとめています.Pythonを使用してKiCadのタスクを自動化できます.

あなたはスクリプトを使用して以下のようなタスクを実行できます:

  • Plugins:このタイプのスクリプトはKiCadが起動すると一緒にロードされます.
    • Footpring Wizards : フットプリントの作成とパラメータの設定を簡単にするためのプラグイン.
    • File I/O(計画中) : 他のファイルからのimport/export出来るようにするプラグイン.
    • Actions(計画中) : ツールバーアイコンにスクリプトアクションを設定できるようにするプラグイン.
  • Command Line Script : コマンドラインツール.ボードやライブラリの読み込み,編集,コマンドライン出力や新しいボードの書き込みができます.

スクリプトをサポートしたKiCadをビルド

スクリプトを有効にするにはCMakeを以下のように設定してください.

-DKICAD_SCRIPTING=ON

さらにスクリプトをKiCadにインポートするモジュールをビルドすることが出来ます.

-DKICAD_SCRIPTING_MODULES=ON

もしあなたがPuthon3.xをインストールしている場合.Python2.xを検出できない可能性があります.その場合CMakeは以下のように表示します.

-- Found PythonLibs: /usr/lib/libpython3.2mu.so (found version "3.2.4")

そして以下のようなエラーを吐きます.

error: ‘PyString_Check’ was not declared in this scope

これらを解決するためには以下のような設定をします.次に示すのはLinux32bitでPython2.7を使用する場合の設定です.

-DPYTHON_LIBRARY=/usr/lib/python2.7/config-i386-linux-gnu/libpython2.7.so

KiCadオブジェクト

スクリプトAPIはKiCad/pcbnewの内部オブジェクトの構造を反映してます.BOARDはメインオブジェクトです.これは一連のプロパティを持っています.MODULEs,TRACKs/SEGVIAs,TEXTE_PCB,DIMENSION,DRAWSEGMENTなどです.

さらにMODULEはD_PADs,EDGE,その他を持っています.
 BOARD http://www.kicad-pcb.org/display/KICAD/BOARD

基本APIリファレンス

 全てのpcbnew APIPythonのpebnewモジュールによって提供されています.GetBoard()は現在のPCBをエディタで開きます.pcbnewに統合されたスクリプトシェルやアクションを書くのに便利です.

ボードのロードとセーブ

LoadBoard(filename): 
 BOARDオブジェクトでボードをロードします. ファイル名の拡張子と一致するフォーマットを使用します.
SaveBoard(filename,board): 
 BOARDオブジェクトをセーブします.ファイル名の拡張子と一致するフォーマットを使用します.
board.Save(filename): 
上記とおなじですがBOARDオブジェクトのままセーブします.
#!/usr/bin/env python
import sys
from pcbnew import *
 
filename=sys.argv[1]
 
pcb = LoadBoard(filename)
for module in pcb.GetModules():   
    print "* Module: %s"%module.GetReference()
    module.GetValueObj().SetVisible(False)      # set Value as Hidden
    module.GetReferenceObj().SetVisible(True)   # set Reference as Visible
     
pcb.Save("mod_"+filename)

ライブラリをロード,リストする.

#!/usr/bin/env python
 
from pcbnew import *
 
libpath = "/usr/share/kicad/modules/sockets.mod"
lst = FootprintEnumerate(libpath)
 
for name in lst:
    m = FootprintLoad(libpath,name)
    print name,"->",m.GetLibRef(), m.GetReference()
    for p in m.GetPads():
        print "\t",p.GetPadName(),p.GetPosition(),p.GetPos0(), p.GetOffset()

スクリプトのサポートについて

現時点ではスクリプトはpcbnewのみサポートされています.eecshemaとgrebviewは将来サポートされます.現在はPythonのみですが将来はJavaScriptをサポートする予定です.