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

2 visualizaciones (últimos 30 días)
高木 範明
高木 範明 el 2 de Oct. de 2023
Movida: Atsushi Ueno el 16 de Oct. de 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 comentario
高木 範明
高木 範明 el 2 de Oct. de 2023
すみません。一部転記ミスがありました。修正いたします。
転記ミスのみで、症状に変化はありません。
 elseif strcmp(last_seletype,'extend') % center click
         ↓
 elseif strcmp(last_seltype,'extend') % center click

Iniciar sesión para comentar.

Respuestas (1)

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

Iniciar sesión para comentar.

Categorías

Más información sobre GUIDE アプリの移行 en Help Center y File Exchange.

Productos


Versión

R2023a

Community Treasure Hunt

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

Start Hunting!