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 problem --> der zugewiesener wert verschwindet

 

xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 05.04.2011, 22:27     Titel: findobj problem --> der zugewiesener wert verschwindet
  Antworten mit Zitat      
hi leute,
hab da ein problem was ich nicht nachvollziehen kann.
ich versuche während der simulation von simulink daten ans gui zu geben.
Code:

function varargout = updategui(varargin)
rto1 = get_param('LeWiAktuell/Out1','RuntimeObject');
value1= rto1.InputPort(1).Data;

rto2 = get_param('LeWiAktuell/Out2','RuntimeObject');
value2= rto2.InputPort(1).Data;

guiplot=findobj('Tag','axes1')
guiplot1=findobj('Tag','axes2')
das funktioniert einwandfrei es wird für jedes findobj() wert zugewiesen
sobald ich die zeile
Code:

plot(guiplot,value1,value2)

hinzufüge,bekomme ich beim 2-ten durchlauf für findobj EMPTY also [].

warum reagiert es bei dem befehl plot so unsinnig????

vielen dank Wink
Private Nachricht senden Benutzer-Profile anzeigen


Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 06.04.2011, 09:36     Titel:
  Antworten mit Zitat      
Hey,
hast du mal versucht das figure-handle der figure in der die axes platziert sind bei findobj mit zu benutzen? Ich weiß ja nicht ob diese immer die gcf ist...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 06.04.2011, 09:53     Titel:
  Antworten mit Zitat      
hey danke für die antwort,
wie meinst du es denn?
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco H.
Forum-Guru

Forum-Guru


Beiträge: 404
Anmeldedatum: 12.11.10
Wohnort: Dortmund
Version: 2010a/2012b
     Beitrag Verfasst am: 06.04.2011, 10:02     Titel:
  Antworten mit Zitat      
Hey,

z.B. so
Code:

function varargout = updategui(varargin)
fig = varargin{1}; % handle der figure in den die axes sind

rto1 = get_param('LeWiAktuell/Out1','RuntimeObject');
value1= rto1.InputPort(1).Data;

rto2 = get_param('LeWiAktuell/Out2','RuntimeObject');
value2= rto2.InputPort(1).Data;

guiplot=findobj(fig,'Tag','axes1')
guiplot1=findobj(fig,'Tag','axes2')
plot(guiplot,value1,value2)
 

Du kannst deiner Funktion ja den handle der figure übergeben. Ich denke ja, dass du irgendwo die GUI erstellst, die die axes besitzt, die du ändern willst. Dann musst du zusehen, dass du dieses handle weiterhin benutzen kannst um auch im passenden figure zu suchen. Ich glaube wenn bei findobj kein handle angegeben wird, dann sucht er nach der gcf, welches ja nicht unbedingt der figure entspricht in der die axes stehen (z.B. wenn du mehrere offen hast)...

MfG Marco
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 06.04.2011, 10:05     Titel:
  Antworten mit Zitat      
ok ich werde es mal so versuchen wie du es dargestellt hast.
aber beim ersten aufruf wird dem findobj ja ein wert zugewiesen, das heisst doch er findet diesen axes1 (also der erster punkt wird geplottet) beim zweitem durchlauf kommt bei findobj nur noch empty.

aber ich versuch mal deine methode Smile

ach nochwas ich hab mein gui mit diesen gui builder erzeugt
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 06.04.2011, 10:27     Titel:
  Antworten mit Zitat      
hi marco,
das nützt auch nix bekomme das hier.
Code:

guiplot =

   Empty matrix: 0-by-1


guiplot1 =

   Empty matrix: 0-by-1
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.04.2011, 10:47     Titel:
  Antworten mit Zitat      
Hallo

das Problem liegt an PLOT,
Es löscht einfach den Tag und sogar die UserData.
Hier wäre HOLD ON die Lösung

Code:

function varargout = updategui(varargin)
fig = varargin{1}; % handle der figure in den die axes sind

rto1 = get_param('LeWiAktuell/Out1','RuntimeObject');
value1= rto1.InputPort(1).Data;

rto2 = get_param('LeWiAktuell/Out2','RuntimeObject');
value2= rto2.InputPort(1).Data;

guiplot=findobj(fig,'Tag','axes1')
% entspricht hold on
set(guiplot,'NextPlot','add')
guiplot1=findobj(fig,'Tag','axes2')
set(guiplot1,'NextPlot','add')
plot(guiplot,value1,value2)

% entspricht hold off
set(guiplot,'NextPlot','replace')
set(guiplot1,'NextPlot','replace')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 06.04.2011, 11:06     Titel:
  Antworten mit Zitat      
hi denny, danke für die antwort. du hattest recht.
Code:
function varargout = updategui(varargin)
rto1 = get_param('LeWiAktuell/Out1','RuntimeObject');
value1= rto1.InputPort(1).Data;

rto2 = get_param('LeWiAktuell/Out2','RuntimeObject');
value2= rto2.InputPort(1).Data;

guiplot=findobj('Tag','axes1')
% entspricht hold on
set(guiplot,'NextPlot','add')

guiplot1=findobj('Tag','axes2')
set(guiplot1,'NextPlot','add')
plot(guiplot,value1,value2)

% entspricht hold off
set(guiplot,'NextPlot','replace')
set(guiplot1,'NextPlot','replace')

und wie kann ich das alte immer löschen.eigentlich soll es den alten punkt löschen und den aktuellen zeichen.

danke für die antwort
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.04.2011, 11:25     Titel:
  Antworten mit Zitat      
Hallo du kannst CLA nutzen

Code:

function varargout = updategui(varargin)
rto1 = get_param('LeWiAktuell/Out1','RuntimeObject');
value1= rto1.InputPort(1).Data;

rto2 = get_param('LeWiAktuell/Out2','RuntimeObject');
value2= rto2.InputPort(1).Data;

guiplot=findobj('Tag','axes1')
%
% alte plots löschen
cla(guiplot);
% entspricht hold on
set(guiplot,'NextPlot','add')

guiplot1=findobj('Tag','axes2')
set(guiplot1,'NextPlot','add')
plot(guiplot,value1,value2)

% entspricht hold off
set(guiplot,'NextPlot','replace')
set(guiplot1,'NextPlot','replace')

 
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 06.04.2011, 11:28     Titel:
  Antworten mit Zitat      
danke ich versuchs mal denny
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 06.04.2011, 19:42     Titel:
  Antworten mit Zitat      
ein folgendes problem.
mit
Code:

lösche ich das vom updategui gezeichneten sachen.
aber bevor ich das updategui ja starte will ich noch vorher
mit
Code:

punkte zeichnen in mein handles.axes1 zeichnen.
nun wenn ich cla(guiplot) eingebe dann wird das doch das ganze gelöscht.
wie kann ich das verhindern so das die punkte bleiben und nur vom updategui gezeichnete sachen gelöscht und wieder geplottet wird.

danke
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 06.04.2011, 22:55     Titel:
  Antworten mit Zitat      
Dann muss du halt die handles merken, die später gelöscht werden sollen.
Stichwort GETAPPDATA/SETAPPDATA
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 11.04.2011, 12:13     Titel:
  Antworten mit Zitat      
hi denny ,
aber
Code:

cla(guiplot)
 

löscht doch alle vorhandene plots auf axes1.

könntest du vllt ein beispiel geben ?

hier ein teil meiner gui.
Code:

function ObjektzeichnenTag_Callback(hObject, eventdata, handles)
xy=pointselect(handles);
handles.punkte=xy; % das sind meine objekte, die sollen immer an derselben stelle geplottet werden,während mein updategui drauf was neues plotet und löscht

set (handles.ObjektzeichnenTag,'Value',0);  

guidata(handles.ObjektzeichnenTag,handles)

 


vielen dank
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.04.2011, 13:15     Titel:
  Antworten mit Zitat      
Hallo

einzelne Plots mit DELETE löschen, mit SETAPPDATA/GETAPPDATA muss du dir die Handles von Plots merken
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 11.04.2011, 13:17     Titel:
  Antworten mit Zitat      
hey denny danke für die schnelle antwort,
wie kann ich die plots vom guiupdate merken?
könntest du vllt eine zeile schreiben?
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 - 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.