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

3 次查看(过去 30 天)
高木 範明
高木 範明 2023-10-2
移动Atsushi Ueno 2023-10-16
次のようなコールバック関数を作成しましたが、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 个评论
高木 範明
高木 範明 2023-10-2
すみません。一部転記ミスがありました。修正いたします。
転記ミスのみで、症状に変化はありません。
 elseif strcmp(last_seletype,'extend') % center click
         ↓
 elseif strcmp(last_seltype,'extend') % center click

请先登录,再进行评论。

回答(1 个)

Kojiro Saito
Kojiro Saito 2023-10-2
编辑:Kojiro Saito 2023-10-2
上記のコードだと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 个评论
高木 範明
高木 範明 2023-10-2
移动:Atsushi Ueno 2023-10-16
早々のご教示をありがとうございました。MATLABでのローカル変数とグローバル変数の取扱いが理解できておらず、申し訳ありませんでした。.mlsファイルでMATLABソフトを作成していたため、Functionルーチンに
  persistent Vo
を追加したら、うまくいきました。
一方、同じソフトをApp Designerでも作成しているため、そちらは今回ご教示頂いた方法で対応いたします。
本当に、助かりました。

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 GUIDE アプリの移行 的更多信息

产品


版本

R2023a

Community Treasure Hunt

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

Start Hunting!