グラフィックオブジェ​クトのコールバック関​数内における、qui​verオブジェクト取​り扱い

2 views (last 30 days)
高木 範明
高木 範明 on 2 Oct 2023
Moved: Atsushi Ueno on 16 Oct 2023
次のようなコールバック関数を作成しましたが、left clickのVoに対して、center clickのVoが別のオブジェクトになってしまいます。ifを用いずCaseを用いた場合も同様でした。どこが間違っているのかご教示をいただければ幸いです。(なお、function getaxPos(src,~,x,y)を削除すると、同じオブジェクトとして認識されます。)
function getaxPos(src,~,x,y)
last_seltype = src.SelectionType; % key click
id = x;
iq = y;
if strcmp(last_seltype,'normal') % left click
Vo(1) = quiver(0,0,id,iq,AutoScale="off",Color="#FFCC00",LineWidth=2)
Vo(2) = quiver(0,0,2*id,iq,AutoScale="off",Color="#FFCC00",LineWidth=2)
Vo(3) = quiver(0,0,id,2*iq,AutoScale="off",Color="#FFCC00",LineWidth=2)
Vo(4) = quiver(0,0,2*id,2*iq,AutoScale="off",Color="#FFCC00",LineWidth=2)
elseif strcmp(last_seletype,'extend') % center click
delete(Vo)
end
end
  1 Comment
高木 範明
高木 範明 on 2 Oct 2023
すみません。一部転記ミスがありました。修正いたします。
転記ミスのみで、症状に変化はありません。
 elseif strcmp(last_seletype,'extend') % center click
         ↓
 elseif strcmp(last_seltype,'extend') % center click

Sign in to comment.

Answers (1)

Kojiro Saito
Kojiro Saito on 2 Oct 2023
Edited: Kojiro Saito on 2 Oct 2023
上記のコードだとVoが関数の中のワークスペース(ローカル変数)で定義され、getaxPos実行後にクリアされてしまいます。
「関数ワークスペースに固有の変数は "ローカル" 変数と呼ばれます。一般に、ローカル変数はその関数呼び出しが終了するとメモリから削除されます。」
App Designerのコードビューから[プライベート プロパティ] または [パブリック プロパティ] を追加します。
properties (Access = private)
Vo
end
そしてgetaxPos関数の中で下記のように、Vo(1)~Vo(4)をapp.Vo(1)~app.Vo(4)にしてみてください。
app.Vo(1) = quiver(0,0,id,iq,AutoScale="off",Color="#FFCC00",LineWidth=2)
そして削除するところもapp.Voにしてみたらいかがでしょうか。
delete(app.Vo)
  1 Comment
高木 範明
高木 範明 on 2 Oct 2023
Moved: Atsushi Ueno on 16 Oct 2023
早々のご教示をありがとうございました。MATLABでのローカル変数とグローバル変数の取扱いが理解できておらず、申し訳ありませんでした。.mlsファイルでMATLABソフトを作成していたため、Functionルーチンに
  persistent Vo
を追加したら、うまくいきました。
一方、同じソフトをApp Designerでも作成しているため、そちらは今回ご教示頂いた方法で対応いたします。
本当に、助かりました。

Sign in to comment.

Categories

Find more on GUIDE アプリの移行 in Help Center and File Exchange

Products


Release

R2023a

Community Treasure Hunt

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

Start Hunting!