C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

ブラウザツリーのフォルダを表示/非表示する4

こちらの続きです。
ブラウザツリーのフォルダを表示/非表示する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の闇深さときたら・・・。