先日、こちらにレスしました。
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
としたのですが、機能しませんでした。バグじゃないかな?