こちらの続きです。
ブラウザツリーのフォルダを表示/非表示する3 - C#ATIA
キリが無いのでこんな感じで進める事にします。
出来る限りコンパクトにしたいので、アイコンで区別するようにし
ツールチップで文字を表示。・・・言語切り替えで対応したいのだが。
本当はJavaScriptで動的にボタンを生成したいけど、勉強不足。
仕方ないので、とりあえずベタに書いていますが、それでも
レイアウト変更のたびに大量の書き換えが面倒なので、こんな
もので出力し、コピペで取りあえず・・・。
# Fusion360API Python script import traceback import adsk.fusion import adsk.core def run(context): ui = adsk.core.UserInterface.cast(None) try: app: adsk.core.Application = adsk.core.Application.get() ui = app.userInterface Keys = ( ("OriginWorkGeometry", '<i class="bi bi-asterisk"></i>'), ("AssyConstraints", '<i class="bi bi-lock"></i>'), ("JointOrigins", '<i class="bi bi-record-circle"></i>'), ("Bodies", '<i class="bi bi-box"></i>'), ("Sketches", '<i class="bi bi-pencil"></i>'), ("Canvases", '<i class="bi bi-image"></i>'), ("DecalPatches", '<i class="bi bi-file-earmark-image"></i>'), ("WorkGeometries", '<i class="bi bi-square"></i>'), ("VisualAnalyses", '<i class="bi bi-rulers"></i>'), ) Show_Hide = [ ('primary', 'Show'), ('secondary', 'Hide'), ] for sh in Show_Hide: app.log('<div class="btn-group me-1" role="group" aria-label="First group">') for key in Keys: app.log( f'<button class="btn btn-{sh[0]} btn-sm customBtn" type="button" id="{key[0]}_{sh[1]}" data-bs-toggle="tooltip" data-bs-placement="top" title="{key[0]} {sh[1]}" > {key[1]} </button>' ) app.log('</div>') except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
幸い、ボタンをクリックした際のイベントはシンプルに書けた
と思う。(お見せできるレベルだと思うw)
window.addEventListener('DOMContentLoaded',function(){ const btn = document.getElementsByClassName('btn btn-primary btn-sm customBtn'); addEventListener_Button(btn, true) }); window.addEventListener('DOMContentLoaded',function(){ const btn = document.getElementsByClassName('btn btn-secondary btn-sm customBtn'); addEventListener_Button(btn, false) }); function addEventListener_Button(btn, value) { for(let i = 0; i < btn.length; i++){ btn[i].addEventListener('click',function(){ let values = btn[i].id.split('_'); let args = { value: value, }; adsk.fusionSendData(values[0], JSON.stringify(args)); }); }; }
後は、python側で処理させているので問題無いです。
javascriptの闇深さときたら・・・。