C#ATIA

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

カスタムグラフィックのホバーイベント

先日、こちらにレスしました。
Custom Graphics mouse events? - Autodesk Community

こんなのばかりで申し訳ないです・・・。

予めお伝えすると、カスタムグラフィックの一番の使い道は自作コマンドの
プレビュー表示だろうと思っています。
カスタムグラフィックは説明書きされているほど軽い処理じゃない気もして
ますし、そもそもドキュメントには保存されません。

但し、質問者さんはかなりの腕の持ち主なので、自分の想定していない
使い方かもしれません。

では本題。あちらにも記載したサンプルは、カスタムグラフィック
上にマウスカーソルを乗せた際に発火するイベントです。

何時もはフィルターとしてpreSelectイベントを利用しているのですが、
カスタムグラフィックからカーソルが外れたイベントも利用したかったので
preSelectStart/preSelectEndイベントを利用しました。
選択することが目的ではなかった為、SelectionCommandInputを
利用していますが、ダイアログ上では非表示にしています。

# Fusion360API Python script

import traceback
import adsk
import adsk.core as core
import adsk.fusion as fusion

_app: core.Application = None
_ui: core.UserInterface = None
_handlers = []

CMD_INFO = {
    "id": "kantoku_test",
    "name": "test",
    "tooltip": "test"
}

_selIpt: core.SelectionCommandInput = None
_txtIpt: core.TextBoxCommandInput = None


class MyCommandCreatedHandler(core.CommandCreatedEventHandler):
    def __init__(self):
        super().__init__()

    def notify(self, args: core.CommandCreatedEventArgs):
        core.Application.get().log(args.firingEvent.name)
        try:
            global _handlers
            cmd: core.Command = core.Command.cast(args.command)
            cmd.isOKButtonVisible = False

            onDestroy = MyCommandDestroyHandler()
            cmd.destroy.add(onDestroy)
            _handlers.append(onDestroy)

            onPreSelectStart = MyPreSelectStartHandler()
            cmd.preSelectStart.add(onPreSelectStart)
            _handlers.append(onPreSelectStart)

            onPreSelectEnd = MyPreSelectEndHandler()
            cmd.preSelectEnd.add(onPreSelectEnd)
            _handlers.append(onPreSelectEnd)

            inputs: core.CommandInputs = cmd.commandInputs

            global _selIpt
            _selIpt = inputs.addSelectionInput(
                "selIptId",
                "Hover to CustomGraphicsMesh",
                "Hover to CustomGraphicsMesh",
            )
            _selIpt.isVisible = False

            global _txtIpt
            _txtIpt = inputs.addTextBoxCommandInput(
                "txtIpt",
                "CustomGraphicsMesh\n BoundingBox",
                "-",
                4,
                True
            )

        except:
            _ui.messageBox("Failed:\n{}".format(traceback.format_exc()))


class MyPreSelectStartHandler(core.SelectionEventHandler):
    def __init__(self):
        super().__init__()
    def notify(self, args: core.SelectionEventArgs):
        args.isSelectable = False # not working
        if args.selection.entity.classType() == fusion.CustomGraphicsMesh.classType():
            
            cGMesh: fusion.CustomGraphicsMesh = args.selection.entity
            bBox: core.BoundingBox3D = cGMesh.boundingBox

            global _txtIpt
            _txtIpt.text = f"Max{bBox.maxPoint.asArray()}\nMin{bBox.minPoint.asArray()}"


class MyPreSelectEndHandler(core.SelectionEventHandler):
    def __init__(self):
        super().__init__()
    def notify(self, args: core.SelectionEventArgs):
        global _txtIpt
        _txtIpt.text = "-"


class MyCommandDestroyHandler(core.CommandEventHandler):
    def __init__(self):
        super().__init__()

    def notify(self, args: core.CommandEventArgs):
        core.Application.get().log(args.firingEvent.name)
        adsk.terminate()


def run(context):
    try:
        global _app, _ui
        _app = core.Application.get()
        _ui = _app.userInterface

        cmdDef: core.CommandDefinition = _ui.commandDefinitions.itemById(
            CMD_INFO["id"]
        )

        if not cmdDef:
            cmdDef = _ui.commandDefinitions.addButtonDefinition(
                CMD_INFO["id"],
                CMD_INFO["name"],
                CMD_INFO["tooltip"]
            )

        global _handlers
        onCommandCreated = MyCommandCreatedHandler()
        cmdDef.commandCreated.add(onCommandCreated)
        _handlers.append(onCommandCreated)

        cmdDef.execute()

        adsk.autoTerminate(False)

    except:
        if _ui:
            _ui.messageBox("Failed:\n{}".format(traceback.format_exc()))

選択したくなかったので、

args.isSelectable = False

としたのですが、機能しませんでした。バグじゃないかな?