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

2 vues (au cours des 30 derniers jours)
高木 範明
高木 範明 le 2 Oct 2023
Déplacé(e) : Atsushi Ueno le 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 commentaire
高木 範明
高木 範明 le 2 Oct 2023
すみません。一部転記ミスがありました。修正いたします。
転記ミスのみで、症状に変化はありません。
 elseif strcmp(last_seletype,'extend') % center click
         ↓
 elseif strcmp(last_seltype,'extend') % center click

Connectez-vous pour commenter.

Réponses (1)

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

Connectez-vous pour commenter.

Catégories

En savoir plus sur グラフィックス オブジェクトのプログラミング dans Help Center et File Exchange

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!