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

findobj bei uipanels

 

josekamara
Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 28.04.2009, 16:26     Titel: findobj bei uipanels
  Antworten mit Zitat      
Hallo,

ich hab in einem GUI mehrere uipanels wo auch mehre Axes stehen.
Ich möchte z. B in einem bestimmten uipanel unter einem bestimmten axes was plotten. was ich weiss, man muss das handle für das axe finden und dann auf CurrentAxes in dem figure einstellen, anschließend wird geplottet.
Code:
handles.Axis=findobj(gcf,'Tag','SignalAxis');
set(gcbf,'CurrentAxes',handles.Axis);
plot(t,sin(t));


Hier in diesem Falle (mit uipanels) wird auf das letzte AXe zugegriffen und da geplottet bzw. das handle wird nicht gefunden!
Wie gehts es bei verschiedenen Axes in verschiedenen uipanels?

Ich freue mich auf jeden Vorschlag.
Danke.

Jose
_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen


steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 29.04.2009, 08:49     Titel:
  Antworten mit Zitat      
Moin,

im Prinzip ist das vorgehen schon richtig, aber es müsste so funktionieren:
Code:
handles.SignalAxis=findobj(gcf,'Tag','SignalAxis');
plot(handles.SignalAxis,t,sin(t));

% oder als Einzeiler:
plot(findobj(gcf,'Tag','SignalAxis'),t,sin(t));


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
josekamara
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 29.04.2009, 09:30     Titel:
  Antworten mit Zitat      
Danke Alex.
_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
josekamara
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 29.04.2009, 10:21     Titel:
  Antworten mit Zitat      
Hallo Alex,

ich schicke dir ein Programm(dualcursor), vom dem ich dir schon mal erzählt habe. start z.B das kleine Code in smallProgramm.

Meine Frage ist: .Wenn ich set(gcf,'CurrentAxes',handles.Axis1); rauslösche, wird es geplottet(aber im letzten Axes), und die Balken sind schön verschiebbar.

Aber wenn ich set(gcf,'CurrentAxes',handles.Axis1); lasse, wird es im ersten Axes geplottet aber die Balken kann man dann nicht verschieben.

Ich hoffe du kannst mir dabei helfen.

Danke,

Jose

small.zip
 Beschreibung:

Download
 Dateiname:  small.zip
 Dateigröße:  11.47 KB
 Heruntergeladen:  560 mal

_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 29.04.2009, 11:45     Titel:
  Antworten mit Zitat      
Moin,

bei mir funktioniert das Balkenverschieben in beiden Fällen.

Probier mal ob bei dir das funktioniert:
Code:
% open GUI
htab=GuI;

% get handles of panels
hpanel = getappdata(htab(1),'panels');

% found for example handles for first axes (panels)
handles.Axis1=findobj(hpanel(1),'Tag','SignalAxis1');

% set CurrentAxes
% set(gcf,'CurrentAxes',handles.Axis1);

% Plot + dualcursor
t=0:0.1:10;
plot(handles.Axis1,t,sin(t));
hold on;
plot(handles.Axis1,t,0.5*sin(t),'k','LineWidth',2);
dualcursor([],[],[],[],handles.Axis1);


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.05.2009, 18:59     Titel:
  Antworten mit Zitat      
Hallo Zusammen

Mein neuestes Problem betrifft genau dieses Thema.

Und zwar habe ich 3 Axes. Diese haben natürlich jeweils einen 'Tag'.
Wenn ich dann im jeweilgen Plotbefehl das Handle der betreffenden Axes übergebe klappt der plot auch.
Code:
function Graphiken(Zielpunktspeicher, welcher, was)

ind = strmatch( welcher, Zielpunktspeicher(:,4), 'exact');

switch was
    case 'Messwerte'
        plot( findobj( 'Tag', 'axes1'), [1:length(ind)]', cell2mat(Zielpunktspeicher(ind,5)))

        plot( findobj( 'Tag', 'axes2'), [1:length(ind)]', cell2mat(Zielpunktspeicher(ind,6)))

        plot( findobj( 'Tag', 'axes3'), [1:length(ind)]', cell2mat(Zielpunktspeicher(ind,8)))
       
    case 'Koordinaten'
end



Wenn ich jedoch das zweite mal die Funktion mit den plotbefehlen starte, existieren die 'Tag'´s nicht mehr.

Herausgefunden habe ich das Verschwinden der 'Tag'´s wie folgt:
Mit
Code:
h = get(1,'children')

habe ich mir alle Objekte im "Hauptfenster" geholt;

und mit
Code:
for i = 1:length(h)
    get(h(i),'Tag')
end

habe ich die 'Tag'´s abgefragt.

Vor dem ersten plotten gibts die 'Tag'´s axes1, axes2 und axes3.
Nach dem plotten sind die diesselben 'Tag'´s zu '', '' und '' verkommen.

Kann sich das jemand erklären?

lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
josekamara
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 04.05.2009, 08:00     Titel:
  Antworten mit Zitat      
Hallo,

versuch mal mit den current figure:
Code:
 plot( findobj(gcf,'Tag', 'axes1'), [1:length(ind)]', cell2mat(Zielpunktspeicher(ind,5)))


Gruß,

Jose
_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
Dagnabit
Forum-Century

Forum-Century


Beiträge: 244
Anmeldedatum: 23.04.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.05.2009, 08:21     Titel:
  Antworten mit Zitat      
Servus Jose

Das Problem anders zu lösen ist nicht schwer und war auch nicht der Grund meiner Anfrage.
(Ich habe die handles der axes1, 2 und 3 verspeichert und spreche damit die axes ohne findobj(..) an.)

Vielmehr würde mich interessieren, warum die 'Tag'´s verschwinden. Idea
Womöglich hat dies auch schon jemand beobachtet?


Zu Deinem Vorschlag:
1. Es existieren einige GUI- Fenster. Die Funktion zum Plotten rufe ich in Fenster B auf. Geplottet wird jedoch in Fenster A. Somit kann ich "gcf" nicht verwenden.

2. mit
Code:
findobj(gcf,'Tag', 'axes1')
benötige ich wieder die 'Tag'´s, die jedoch nach dem erstmaligen Aufruf der Plotfunktion (Graphiken.m) nicht mehr vorhanden sind.

Trotzdem besten Dank
lg
Martin
Private Nachricht senden Benutzer-Profile anzeigen
 
josekamara
Themenstarter

Forum-Meister

Forum-Meister


Beiträge: 529
Anmeldedatum: 26.04.08
Wohnort: München
Version: ---
     Beitrag Verfasst am: 04.05.2009, 08:58     Titel:
  Antworten mit Zitat      
Hallo Martin,

ich hab immer so gemacht, dass ich die handles z.B in einer Funktion definiert und dann mittels:
Code:
setappdata(gcf,'Handles',handles);


gespeichert.

Dabei gehen die 'Tags' nicht verloren, glaub ich zumindestens.

Gruß,

Jose
_________________

Simulation
Private Nachricht senden Benutzer-Profile anzeigen
 
wissbegierig_neuling

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2011, 20:05     Titel:
  Antworten mit Zitat      
Hi,

ich habe das Beispiel aus small.zip ausprobiert und möchte es bei meiner Gui verwenden. Dort habe ich eine GUI mit mehren Popupmenues, über welche ich Signale auswähle und diese in einem axes(Plot_Fenster_1) darstellen lasse. Nun möchte ich gerne, wenn ich ein radiobutton2 drücke und dieser den Wert eins erhält, dass das skrit dualcursor abläuft. Denn Aufruf habe ich schon verändert. Doch scheint dies noch nicht korrekt zu sein.

Code:

if get(handles.radiobutton2,'Value') ==1
htab=neue_grapfische_Oberflaeche;
% get handles of panels
hpanel = getappdata(htab(1),'panels');
% found for example handles for first axes (panels)
handles.Axis1=findobj(hpanel(1),'Tag','Plot_Fenster_1');
% set CurrentAxes
set(gcf,'CurrentAxes',handles.Axis1);
dualcursor;

end
 


Als Fehlermeldung erhalte ich
Code:

??? Index exceeds matrix dimensions.

Error in ==> neue_grapfische_Oberflaeche>radiobutton2_Callback at 2115
handles.Axis1=findobj(hpanel(1),'Tag','Plot_Fenster_1');

Error in ==> gui_mainfcn at 96
        feval(varargin{:});

Error in ==> neue_grapfische_Oberflaeche at 44
    gui_mainfcn(gui_State, varargin{:});

Error in ==> @(hObject,eventdata)neue_grapfische_Oberflaeche('radiobutton2_Callback',hObject,eventdata,guidata(hObject))


??? Error while evaluating uicontrol Callback
 
 
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 - 2025 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.