グラフィックオブジェクトのコールバック関数内における、quiverオブジェクト取り扱い
Afficher commentaires plus anciens
次のようなコールバック関数を作成しましたが、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
Réponses (1)
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
Catégories
En savoir plus sur アプリの作成 dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!