Fusion360でキー配列を決めて、KiCadでフットプリントを自動配置する方法
skeletonkbd edited this page Nov 26, 2022
·
6 revisions
Fusion360のスケッチ上でキー配列を決めて、その位置情報をKiCadにもっていきたい。
キーごとに座標を確認して入力していけばいいけど、面倒なので省力化する方法を考える。
XY平面でスケッチを作って、19.05mmの正方形などを作って並べる。
真ん中の座標が知りたいのでバッテン付けて点を打っておく。(もしくは「中心の長方形」で作る)
Fusion360とKiCadでY軸の方向が違うので、Y座標だけ正負を反転する必要あり。
import adsk.core, adsk.fusion
def run(context):
app = adsk.core.Application
ui = app.get().userInterface
selFilter = 'SketchPoints'
msg = 'スケッチ内の点を選択'
while True: # 無限ループ
selection = ui.selectEntity(msg, selFilter)
result = selection.entity.geometry.getData()
if (result[0]):
(returnValue, x, y, z) = result
message = "[%f, %f]," % (x*10, -y*10)
# ui.messageBox(message, "座標")
app.log(message)
Fusion360のスケッチでこのスクリプトを実行して、ひとつずつ点を選択していく。
こんな風に座標情報が表示されるので、コピペして次の工程で使う。
スクリプト内で無限ループしてるので、「スケッチを終了」して抜ける。
レファレンス指定子"SW1"~でキースイッチのフットプリントを用意しておく。
先程の座標情報を使ってフットプリント自動配置のスクリプトを書く。
import pcbnew
def arrange() :
keys = [
[40.807724, 35.602021],
[59.857724, 35.602021],
[78.907724, 34.287539],
[99.309000, 38.456401],
[117.942712, 42.417118],
[136.576424, 46.377836],
[155.210136, 50.338554],
[183.502535, 48.358195],
[202.136247, 44.397477],
[220.769959, 40.436759],
[239.403671, 36.476042],
[260.225885, 34.861430],
[279.275885, 35.602021],
[307.850885, 35.602021],
[344.525005, 33.375001],
[41.396712, 54.652021],
[65.209212, 54.652021],
[86.031427, 55.109754],
[104.665138, 59.070471],
[123.298850, 63.031189],
[141.932562, 66.991907],
[180.889140, 68.389277],
[199.522852, 64.428560],
[218.156564, 60.467842],
[236.790276, 56.507124],
[257.525939, 53.911430],
[276.575939, 54.652021],
[295.625939, 54.652021],
[319.438439, 54.652021],
[346.525005, 52.425001],
[39.713172, 73.702021],
[65.906922, 73.702021],
[86.729137, 74.733645],
[105.362849, 78.694362],
[123.996560, 82.655080],
[142.630272, 86.615798],
[186.765543, 86.615798],
[205.399254, 82.655080],
[224.032966, 78.694362],
[242.666678, 74.733645],
[263.488893, 73.702021],
[282.538893, 73.702021],
[313.495143, 73.702021],
[348.525005, 71.475001],
[40.393361, 92.752021],
[71.349611, 92.752021],
[92.085275, 95.347715],
[110.718987, 99.308433],
[129.352699, 103.269151],
[147.986410, 107.229869],
[181.409405, 107.229869],
[200.043116, 103.269151],
[218.676828, 99.308433],
[237.310540, 95.347715],
[258.046203, 92.752021],
[277.096203, 92.752021],
[303.289953, 92.752021],
[329.483703, 92.752021],
[33.249611, 111.802021],
[61.824611, 111.802021],
[113.745911, 119.427414],
[144.025693, 125.863580],
[201.674620, 122.397952],
[241.395176, 114.564415],
[286.621203, 111.802021],
[310.433703, 111.802021],
[329.483703, 111.802021],
[348.533703, 111.802021]
]
for index, key in enumerate(keys):
ref = 'SW' + str(index +1)
print(ref)
x = key[0]
y = key[1]
fp = pcbnew.GetBoard().FindFootprintByReference(ref)
fp.SetPosition(pcbnew.wxPointMM(x,y))
pcbnew.Refresh()
プラグインディレクトリーにkeys.py
で保存したら、スクリプトコンソールで以下を実行。
import keys
keys.arrange()
実行直後は表示が怪しいので、PCBエディターを再起動したほうが良さそう。 .Refresh()
が抜けていたので修正しました。
角度の情報は今回取得していないので、必要なら向きを変える。