WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablen, Zugriff, Verschiedene Callback

 

creme
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.11.2020, 16:38     Titel: Variablen, Zugriff, Verschiedene Callback
  Antworten mit Zitat      
Hallo Leute,

ich habe eine Callbackfcn in meiner GUI mit welcher ich die Phase eines Bildes ändern kann. Die Änderung wird in einem neuen Handle angezeigt. Ich habe das handle auch in einer Variable abgespeichert.

Jetzt würde ich gern in einer weiteren Callback auf genau dieses handle zurückgreifen. Jedoch ist die Variable in der ich es abgespeichert habe unbekannt.

Wie kann ich auf dieses handle von einer Callback auf die andere zurückgreifen oder kann ich die Variable sogar 'global' machen sodass ich sie in jeder Function verwenden kann?

Jemand eine Idee?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.11.2020, 17:57     Titel:
  Antworten mit Zitat      
Hallo,

du musst nach dem Hinzufügen oder Ändern einer Variable folgende Zeile im Callback haben:
Code:
guidata(hObject, handles);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 23.11.2020, 21:19     Titel:
  Antworten mit Zitat      
Das steht in meinen callbacks drin. aber wie bekomme ich jetzt von der einen callback zugriff auf die handles/variablen der anderen?

mein code sieht zur zeit wie folgt aus. Dabei ist die zweite function die, welche aus der ersten das handle weiterverarbeiten würde.
Code:
function slider3_Callback(hObject, eventdata, handles)

if isfield(handles,'X')
    X=handles.X;
    Y=handles.Y;
    Z=handles.Z;

if isfield(handles,'val')  
    answer=handles.val;
else
answer=get(hObject,'Value');
end

assignin('base','answer',answer);
set(handles.Slider_Value,'String',num2str(answer))
rotation_angle=deg2rad(answer); %Umrechnung in Radian

X=handles.X;
Y=handles.Y;
Z=handles.Z;

Z_r=sqrt(X.^2+Y.^2);
% Z_r=Z;
angle_new=angle(Z)+rotation_angle;  
X_rot=abs(Z_r).*cos(angle_new);    
Y_rot=abs(Z_r).*sin(angle_new);

% angle_new=atan(Y_rot/X_rot);

Z_rot=Z;

axes(handles.axes5)
xr=imagesc(handles.vektor_x,handles.vektor_y,(X_rot)) ;  % real parts
ax = gca;
ax.YDir = 'normal' % Richtung vertikal korrigieren
title('Realteil')
xlabel('Horizontale Position in mm');
ylabel('Vertikale Position in mm');
colormap gray;

axes(handles.axes6)
yr=imagesc(handles.vektor_x,handles.vektor_y,(Y_rot)) ;  % imaginary parts
ax = gca;
ax.YDir = 'normal' % Richtung vertikal korrigieren
title('Imaginärteil')
xlabel('Horizontale Position in mm');
ylabel('Vertikale Position in mm');
colormap gray;

axes(handles.axes7)
zr=imagesc(handles.vektor_x,handles.vektor_y,abs(Z_rot)) ;
ax = gca;
ax.YDir = 'normal' % Richtung vertikal korrigieren
title('Betrag')
xlabel('Horizontale Position in mm');
ylabel('Vertikale Position in mm');
colormap gray;

axes(handles.axes8)
zr1=imagesc(handles.vektor_x,handles.vektor_y,atan(Y_rot./X_rot)) ;
ax = gca;
ax.YDir = 'normal' % Richtung vertikal korrigieren
title('Phase')
xlabel('Horizontale Position in mm');
ylabel('Vertikale Position in mm');
colormap gray;
else
   errordlg('Laden Sie zuerst die Daten ein!')
end
guidata(hObject, handles);


In dieser Callback würde ich gern je nach Auswahl entweder xr, yr, zr oder zr1 weiter verwenden.
Code:
function SNR_Button_Callback(hObject, eventdata, handles)

if isfield(handles,'X')==1
X=handles.X;
Y=handles.Y;
Z=handles.Z;
%Achsenbeschriftung entfernen
handles.axes8.XTick = [];
handles.axes8.YTick = [];
xlabel(handles.axes8, ' '), ylabel(handles.axes8, ' ')

axes(handles.axes17)
ax = gca;
%set(handles.axes8,'Visible','On');
cla(ax); axis off;



inputOptions={'Realteil', 'Imaginärteil', 'Betrag','Phase','End'};
defSelection=inputOptions{end};
iSel=bttnChoiseDialog(inputOptions,...
'Kontrastbearbeitung',...
defSelection,...
'Wählen Sie das Bild, in welchem das Signal-Rausch-Verhältnis bestimmt werden soll');
ActRqst = inputOptions{iSel};
switch ActRqst
case(inputOptions{1})

 h=questdlg('Markieren Sie N_area, ','Matlab EddyAnalzer','OK','end','end');
 switch h
       case 'OK'
axes(handles.axes5) %%hier würde ich gern xr,yr,zr oder zr1 übergeben um es in dieser callback zu bearbeiten!
RGB=imagesc(handles.vektor_x,handles.vektor_y,(X));
ax = gca;
ax.YDir = 'normal'
colormap gray;
title('Originalbild');
I=RGB;%I=rgb2gray(RGB);
[J,rect] = imcrop(I);
 N_area=J;
% figure
% imagesc(handles.vektor_x,handles.vektor_y,N_area);
% ax = gca;
% ax.YDir = 'normal'
% title('Erster Ausschnitt');
% colormap gray;

axes(handles.axes6)
imagesc(handles.vektor_x, handles.vektor_y,N_area);
ax = gca;
ax.YDir = 'normal'
colormap gray;
title('Ausschnitt');
     

 h=questdlg('Zeichnen Sie den Bereich für Signal S_area ein.','Matlab EddyAnalzer','OK','end','end');
 switch h
     case 'OK'
axes(handles.axes6)
h=imagesc(handles.vektor_x, handles.vektor_y,N_area);
ax = gca;
ax.YDir = 'normal'
colormap gray;
title('Ausschnitt');
[G,rect_] = imcrop(h);
S_area=G;
figure
plot(S_area)

axes(handles.axes7)
imagesc(handles.vektor_x, handles.vektor_y,S_area);
ax = gca;
ax.YDir = 'normal'
colormap gray;
title('Ausschnitt 2')
 case 'end'
     return
 end
     case 'end'
         return
 end
fprintf('Dummy action. You choose: %s\n', inputOptions{1});
%erste Option beendet
%%Es folgen noch weitere Optionen und eine Berechnung

else
   errordlg('Laden Sie zuerst die Daten ein!')
end
 guidata(hObject, handles);


Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.11.2020, 22:28     Titel:
  Antworten mit Zitat      
Hallo,

du musst die Variablen, die erhalten bleiben sollen, schon auch an die handles-Struktur anhängen, z.B.
Code:
handles.xr = ...

Siehe auch
https://de.mathworks.com/help/matla.....data-among-callbacks.html

... und sollte ich es noch nicht gesagt haben:
1. Ich empfehle eine systematische Einarbeitung. Wenn man einmal grundlegende Konzepte z.B. des Aufbaus von Benutzeroberflächen verstanden hat, bleibt man nicht mehr an solchen "Kleinigkeiten" hängen.
2. Die Zukunft der App-Erstellung ist App Designer. Statt viel Aufwand zu investieren, die Oberfläche im veralteten GUIDE zu pflegen, würde ich den Umstieg eher früher als später empfehlen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 24.11.2020, 07:56     Titel:
  Antworten mit Zitat      
Hallo Harald,
Zitat:
Die Zukunft der App-Erstellung ist App Designer. Statt viel Aufwand zu investieren, die Oberfläche im veralteten GUIDE zu pflegen, würde ich den Umstieg eher früher als später empfehlen.
Der Aufwand würde das Ergebnis nicht rechtfertigen da vieles nicht von mir ist.


danke für den Ansatz. Aber in der 2. function habe ich deswegen trotzdem kein Zugriff wenn ich im case(inputOptions{2}) statt Y die Struktur
Code:
handles.yr
verwende. Confused

ich weiß ungefähr worauf du hinaus möchtest aber mir ist der Zugriff auf handles.xr etc. nicht klar und wo ich die slider-callback aufrufen muss.

grüße

fehler.PNG
 Beschreibung:

Download
 Dateiname:  fehler.PNG
 Dateigröße:  38.37 KB
 Heruntergeladen:  130 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.11.2020, 09:48     Titel:
  Antworten mit Zitat      
Hallo,

Bei der Fehlermeldung scheint das Problem nicht zu sein, dass yr nicht definiert ist, sondern dass es den falschen Datentyp hat.
Wie hast du handles.yr denn im ersten Teil belegt?

Zitat:
Der Aufwand würde das Ergebnis nicht rechtfertigen da vieles nicht von mir ist.

Ich denke nicht, dass der Aufwand extrem hoch wäre.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 24.11.2020, 13:01     Titel:
  Antworten mit Zitat      
Zitat:
Bei der Fehlermeldung scheint das Problem nicht zu sein, dass yr nicht definiert ist, sondern dass es den falschen Datentyp hat.
Wie hast du handles.yr denn im ersten Teil belegt?


Y_rot ist eine Matrix mit mehreren Einträgen aus welchen ein Bild generiert wird das in einer axes drin ist. Dieses Bild in axes5 oder axes6 je nach Auswahl möchte ich eigentlich in meiner 2. Function weiterbearbeiten
Confused
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.11.2020, 13:03     Titel:
  Antworten mit Zitat      
Hallo,

wenn du Y_rot weiterverarbeiten willst, dann brauchst du halt auch Y_rot übergeben und nicht yr.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 24.11.2020, 13:44     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe die Variablen jetzt an eine handles Struktur übergeben und greife hierüber in der anderen Callback drauf zu. Funktioniert genau so wie es sein soll.

danke
Private Nachricht senden Benutzer-Profile anzeigen
 
creme
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 10.07.17
Wohnort: ---
Version: 2019b
     Beitrag Verfasst am: 24.11.2020, 15:13     Titel:
  Antworten mit Zitat      
Hallo,

ich würde das ganze gerne noch mit einer Abfrage optimieren.

Und zwar würde ich gern abfragen, ob der slider benutzt wurde oder nicht. Falls nicht sollen die Werte wie zuvor verwendet werden ansonsten die aus der sliderCallback

Ich dachte ich könnte das so machen

Code:
if isfield(handles,'X_rot') ==1  
    X=handles.X_rot;  
    else
X=handles.X;

end
    if isfield(handles,'Y_rot') ==1
    Y= handles.Y_rot;
    else
Y=handles.Y;

end
    if isfield(handles,'Z_rot') ==1
        Z=handles.Z_rot;
    else
Z=handles.Z;
 

Jetzt müsste ich für alle 3 Variablen diese isfield-Abfrage 3 mal machen. Geht das auch kürzer?
Danke im Voraus

Zuletzt bearbeitet von creme am 24.11.2020, 15:37, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.11.2020, 15:37     Titel:
  Antworten mit Zitat      
Hallo,

du musst jedes Mal handles. schreiben, also:
Code:
Z=atan(handles.Y_rot./handles.X_rot);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.11.2020, 15:46     Titel:
  Antworten mit Zitat      
Hallo,

zu der neuen Frage: ich würde handles.X_rot etc. in der OpeningFcn setzen. Dann kannst du dir spätere Abfragen ersparen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.