コミュニティ
Fusion - 日本語
製品テクニックや情報を共有、質問、解答したり、情報を検索など使い方は様々です。お役立てください。
キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

ValidateInputsEventHandlerのイベントによる呼び出しについて

6件の返信6
解決済み
返信
メッセージ1/7
obatake5TC3R
476 件の閲覧回数, 6 件の返信

ValidateInputsEventHandlerのイベントによる呼び出しについて

コマンド作成において

// 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イベントハンドラーを呼び出してもらいたいのですが、方法はありますでしょうか?

 

タグ(1)
6件の返信6
メッセージ2/7
kandennti
次のアカウントへの返信: obatake5TC3R

@obatake5TC3R さん こんにちは

 

相変わらず、C++がわかりません。ので可能なものかどうかがわかりません。

(しかもイベント苦手です)

 

isVisibleでfalseにしているCommandInputのValidateInputsEventHandler内には

関数の呼び出しにし、行いたい処理は呼び出される関数内で処理させるのはどうでしょう?

他のValidateInputsEventHandlerも常にその関数に処理を投げる様にする事で、

きっかけとなりそうな・・・。

 

areInputsValid(OKボタンの制御)プロパティですかね?

 

メッセージ3/7
obatake5TC3R
次のアカウントへの返信: kandennti

ご連絡ありがとうございます。その通りです。areInputsValid(OKボタンの制御)です。

ValidateInputsEventHandlerで呼び出されたときに渡されるValidateInputsEventArgsでareInputsValidの値をtrueまたはfalseに制御したいのですが、ValidateInputsEventHandlerをこちらから呼び出すにはどうしたらいいでしょうか?

 

 

 

メッセージ4/7
kandennti
次のアカウントへの返信: obatake5TC3R

確かに@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を必要となるタイミングまで

作らない様にするぐらいでしょうか?(こちらの方が素直のような・・・)

メッセージ5/7
kandennti
次のアカウントへの返信: kandennti

意図的に ValidateInputsイベントを呼び出し・・・と言う方法をpythonで試してみましたが

うまく行かないようです。すいません。

 

他にも何か方法が無いか色々と試しているのですが、上手い手段が見つかりません。

 

 

 

 

メッセージ6/7
kandennti
次のアカウントへの返信: obatake5TC3R

耐え切れずにAPIのフォーラムに質問してみました。

https://forums.autodesk.com/t5/fusion-360-api-and-scripts/ok-button-control/m-p/9249102#M9162 

 

SelectionInputのsetSelectionLimitsを "0" とすることで(pythonで)頻繁に
ValidateInputイベントが発生することが確認出来ました。
(全てが選択されていなくても、非表示のものがあってもです)
 
setSelectionLimitsを0に固定してしまうため、選択数の制限が無い状態と
なってしまいますが、ValidateInput・InputChanged・Selection等の他のイベントを
利用して回避出来るような気がします。(遠回りですが…)
メッセージ7/7
obatake5TC3R
次のアカウントへの返信: kandennti

setSelectionLimits(0)で何とか対応することができました。ありがとうございます。

お探しの情報が見つからないときは、コミュニティで質問しましょう。困っている人がいたら、情報を教えてあげましょう。

フォーラムに投稿