コールバック関数に、​クリックするたびにそ​のクリック回数を渡す​方法を教えてください​。

例えば、次のようなクリックの都度、コールバック関数を呼ぶルーチンがあった場合、
クリックの回数(何回目)をコールバック関数に渡す方法をおしえていただけないでしょうか?
この例だと、click=10しか渡すことができませんが、これを1,2,3,・・・とクリックの度にカウントアップできないでしょうか?
【メイン】
Ia_start = 1;
Ia_incre = 1;
Ia_end = 5;
Counter = 0;
click = 10;
for Ia = Ia_start : Ia_incre : Ia_end
Counter = Counter + 1;
fp(Counter) = fimplicit(app.UIAxes,@(id,iq) id.^2+iq.^2 - Ia.^2);
set(fp(Counter), 'ButtonDownFcn',@(src, event) lineCallback(app,src,event,click);
end
【コールバック】
methods (Access = private)
function lineCallback(app,src,event,click)

4 Commenti

高木 範明
高木 範明 il 23 Ott 2023
転記ミスがありました。まことに申し訳ありません。
誤) set(fp(Counter), 'ButtonDownFcn',@(src, event) lineCallback(app,src,event,click)
正) set(fp(Counter), 'ButtonDownFcn',@(src, event) lineCallback(app,src,event,click))
Atsushi Ueno
Atsushi Ueno il 23 Ott 2023
>コールバックは、いずれもソースとイベントの 2 つの入力引数を受け入れます。これらの 2 つ以外の追加の入力引数を受け入れるコールバックを指定するには、cell 配列を使用します。......(以下省略)
とあります。
余談ですが、質問のプログラムは同じ UIAxes に対し fimplicit 関数を5回実行し、得られた ImplicitFunctionLine オブジェクトを5個の配列に格納しています。hold onを書かないと5重の楕円が描画されませんし、'ButtonDownFcn'の設定を5回繰り返しても1回実行するのと同じになると思います。
コールバック関数が呼び出されるのは、紐付けたUI コンポーネント(四角形内のどこか)がクリックされた時であり、UIAxes内でクリックした座標に近い曲線を判定するには、その為のロジックが必要になると思います。
高木 範明
高木 範明 il 23 Ott 2023
早々のご教示をありがとうございます。
holdについては、転記忘れで申し訳ありません。追記いたしました。
複数の円(今回は5つですが実際は20以上)のいろいろな点をクリックして
その座標(数十点)をUITableに書き出すことを考えています。
現在、座標はうまく書き出せていますが、
その時に、何回目のクリックであるかもUITableに記録したいのです。
これからご教示頂いたページをこれから熟読いたしますが、クリック(コールバックの呼び出し回数)
のカウントのやり方がよくわからず、質問した次第です。
【メイン】
Ia_start = 1;
Ia_incre = 1;
Ia_end = 5;
Counter = 0;
click = 10;
hold(app.UIAxes,'on');
for Ia = Ia_start : Ia_incre : Ia_end
Counter = Counter + 1;
fp(Counter) = fimplicit(app.UIAxes,@(id,iq) id.^2+iq.^2 - Ia.^2);
set(fp(Counter), 'ButtonDownFcn',@(src, event) lineCallback(app,src,event,click);
end
hold(app.UIAxes,'off');
高木 範明
高木 範明 il 24 Ott 2023
本件、自己解決しました。
グローバル変数(例えば変数click)を定義して、コールバック呼び出し側で、app.click=0とし、
コールバック側で、app.click=app.click+1にすれば、カウントアップできました。
MATLABのグローバル変数の扱い方がまだよくわかっておらず、的外れな質問になったことを
お詫びいたします。

Accedi per commentare.

Risposte (0)

Prodotti

Release

R2023a

Richiesto:

il 23 Ott 2023

Commentato:

il 24 Ott 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!