コマンド作成において
// Connect to the validate event.
Ptr<ValidateInputsEvent> onValidate = command->validateInputs();
if (!onValidate)
return;
isOk = onValidate->add(&onSciMoldHoleExtrudePartAddInValidateEventHander);
if (!isOk)
return;
とValidateInputsEventHandlerの派生関数onSciMoldHoleExtrudePartAddInValidateEventHanderを作成しValidateイベントハンドラーを登録しています。
ValidateInputsEventHandlerハンドラーが呼び出されるタイミングですが、すべてのCommandInputに入力しないと呼び出されないのですが、CommandInputがisVisibleでfalseにしているCommandInputがあり、インプットしていないCommandInputがあってもValidateInputsEventHandlerイベントハンドラーを呼び出してもらいたいのですが、方法はありますでしょうか?
解決済! 解決策の投稿を見る。
回答者: obatake5TC3R. 解決策の投稿を見る。
回答者: kandennti. 解決策の投稿を見る。
@obatake5TC3R さん こんにちは
相変わらず、C++がわかりません。ので可能なものかどうかがわかりません。
(しかもイベント苦手です)
isVisibleでfalseにしているCommandInputのValidateInputsEventHandler内には
関数の呼び出しにし、行いたい処理は呼び出される関数内で処理させるのはどうでしょう?
他のValidateInputsEventHandlerも常にその関数に処理を投げる様にする事で、
きっかけとなりそうな・・・。
areInputsValid(OKボタンの制御)プロパティですかね?
ご連絡ありがとうございます。その通りです。areInputsValid(OKボタンの制御)です。
ValidateInputsEventHandlerで呼び出されたときに渡されるValidateInputsEventArgsでareInputsValidの値をtrueまたはfalseに制御したいのですが、ValidateInputsEventHandlerをこちらから呼び出すにはどうしたらいいでしょうか?
確かに@obatake5TC3Rさんの記載通り、すべてのCommandInputに入力しないと
ValidateInputsイベントが呼び出されないですね・・・。経験が少なかったので意識していませんでした。
意図的に ValidateInputsイベントを呼び出せる(=OKボタンの制御)方法が無さそうなので、
無理矢理な方法のアイデアとしてですが、一時的にすべてのCommandInputを選択状態にし
イベントを発生させてはどうでしょうか?(言葉だけで伝わると良いのですが・・・)
selectionCommandInputであれば(と思っているのですが)、こちらを利用し選択させます。
https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-3b095369-42d6-481f-a6f3-9d45775aba3a
但し、CommandCreatedイベント中は出来ないとの記載の為、コマンドのactivateイベント中に
利用するようです。(恐らくダイアログが表示される直前のイベントではないかと思います)
https://help.autodesk.com/view/fusion360/ENU/?guid=GUID-eeb18ad8-6ea6-4a35-923f-c96113549704
ここで全てのCommandInputに選択させ、ValidateInputsイベントを発生させられます。
(ここまではPythonで試した所、可能でした)
ValidateInputsイベント中に、受け取ったargsをスコープの大きい変数に代入(これが可能かどうか
試していません)し、必要なタイミングでareInputsValidを切り替えられるような予感はしています。
(その後、全てのCommandInputを全てクリア)
他の方法としては、isVisibleでfalseにしているCommandInputを必要となるタイミングまで
作らない様にするぐらいでしょうか?(こちらの方が素直のような・・・)
耐え切れずにAPIのフォーラムに質問してみました。
https://forums.autodesk.com/t5/fusion-360-api-and-scripts/ok-button-control/m-p/9249102#M9162