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

PNG Über axes darstellen

 

cheepy
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 31.01.2011, 09:19     Titel: PNG Über axes darstellen
  Antworten mit Zitat      
Hallo,
ich hänge schon seit paar Tagen an mein Problem und hoffe dass ihr mir weiter helfen könnt. Ich beschäftige mich momentan mit GUI-Programmierung und kenne mich noch nicht so gut damit aus. Also ich habe folgendes Szenario: Es soll ein Bild in axes angezeigt werden, weiterhin soll das Bild immer wieder bei bestimmten Ereignissen ausgetauscht werden.
Über StartFcn rufe ich folgendes auf, damit ich meine GUI ständig aktualisieren kann und meine Outports in GUI darstellen kann:

Code:

blk_direction=’model’;
event = 'PostOutputs';
listener = @updategui;
 


In updategui.m wird der das Ereignis abgefragt und dementsprechend wird das Bild ausgetauscht.


Code:

if(str_count == '0')
    image1 = imread('image/image_1.png');
    statestxt_axes2 = findobj('Type','axes','Tag','axes2')
    axes(statestxt_axes2);
    imshow(image1)
end
 


Bei diese IF-Abfrage bekomme ich folgende Fehler:
??? Error using ==> axes
Invalid object handle

Error in ==> updategui at 24
axes(statestxt_axes2);

Weitere IF-Abfrage zum austausch des Bildes

Code:

if(str_count == '1')
        image = imread('image/image_2);
        statestxt_axes2 = findobj('Type','axes','Tag','axes2');
        axes(statestxt_axes2);
        imshow(image)
end
 


Bei zweite IF-Abfrage bekomme ich folgende Fehlermeldung
Warning: Error occurred while evaluating listener callback.
??? Error using ==> axes
Invalid object handle

Error in ==> updategui at 34
axes(statestxt_axes2);


Beide Bilder werden nicht angezeigt.

Ich bin für jede Rückmeldung sehr dankbar.

Lieben Gruß, Shanna
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 31.01.2011, 12:49     Titel: Re: PNG Über axes darstellen
  Antworten mit Zitat      
Hallo cheepy,

Da sind eine Menge Fehler in Deinem Code. Ich kann nicht nachvollziehen, ob es nur Tippfehler von Abschreiben ins Forum sind.

Code:

blk_direction=’model’;   % Falsche Quotes.

% Das klappt nur zuverlässig, wenn "str_count" immer ein
% scalares CHAR ist:
if(str_count == '0')

image = imread('image/image_2);  % Quote fehlt
 


Zitat:
Bei diese IF-Abfrage bekomme ich folgende Fehler:
??? Error using ==> axes
Invalid object handle

Error in ==> updategui at 24
axes(statestxt_axes2);

NUn, die Fehlermeldung ist ja eindeutig: Das Objekt mit dem Handle in statestxt_axes2 ist kein AXES Objekt. Wie hast Du den entrpechenden HAndle denn erzeugt? Nutze doch mal den Debugger:
Code:

Und lasse Dir dann z.B. per "get(statestxt_axes2)" anzeigen, auf welches Objekt der Handle überhaupt zeigt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 31.01.2011, 16:22     Titel:
  Antworten mit Zitat      
Ja das ist Tippfehler.

Vielen danke erstmal für schnelle Reaktion.

Ich habe den Debbuger ausprobiert und habe das Verhalten dabei beobachtet. Mir ist aufgefallen, dass beim ersten Durchlauf mit dem Befehl get(statestxt_axes2) bekomme ich eine Ausgabe mit allen Informationen, auch das Bild wird erstellt und kein Fehler. Ab den zweiten Durchlaufe(ein Durchschauf ist 1 Simulationszeit), kommt der Compiler bis zu stelle axes(statestxt_axes2) und gibt Fehlermeldung (siehe oben) aus. Könnte evtl sein, dass ich den Fehler bekomme, weil ich den axes schon was zugewiesen habe und weise dem beim zweiten Durchlaufe noch mal? Wenn ja wie kann ich es anderes lösen?

Das Programm habe ich einwenig modifiziert und habe folgendes raus:
Code:

if(str_count == '0')
    image1 = imread('image/image_1.png');
    statestxt_axes2 = findobj('Tag','axes2');
get(statestxt_axes2
    axes(statestxt_axes2);
    imshow(image1)
end
 


In der m-datei, in welche GUI implementiert ist, habe ich folgendes stehen:
Code:

function start_Callback(hObject, eventdata, handles)
set_param('modell','SimulationCommand','start')
axes(handles.axes2);
 

Eigentlich dachte ich, dass es vollkommen ausreicht mit dem befehl axes(statestxt_axes2); axes aufzurufen. Oder? Muss ich was anderes erzeugen?[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 31.01.2011, 21:57     Titel:
  Antworten mit Zitat      
Hallo cheepy,
Zitat:
Könnte evtl sein, dass ich den Fehler bekomme, weil ich den axes schon was zugewiesen habe und weise dem beim zweiten Durchlaufe noch mal?

Nein, das kann nicht sein. Die Fehlermeldung sagt eindeutig, dass statestxt_axes2 beim fehlerhaften Aufruf kein AXES Handle ist. Also hast Du irgendwo die Variable statestxt_axes2 überschrieben. Bitte lasse Dir den Wert dieser Variablen anzeigen und auf welches Objekt dieser Handle zeigt.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 01.02.2011, 01:01     Titel:
  Antworten mit Zitat      
Hallo, wie hast du denn deine AXES erstellt? Über GUIDE?
Jedenfalls findet FINDOBJ keine AXES mit diesem Tag und liefert Leeres Array zurück
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 04.02.2011, 15:37     Titel:
  Antworten mit Zitat      
Hallo,
ja ich habe über GUIDE mein axes erstellt. Aber wenn ich mir das ausgeben lasse, dann bekomme ich schon ein Wert.
Code:

statestxt_axes2=findobj('Tag','axes2')
 


statestxt_axes2 =
6.3380e+003

Ist das nicht richtig? Ich kenne mich leider noch nicht so gut aus und bin neu in der Thematik.


Also ich habe jetzt einwenig modifiziert und rufe nur einmal auf:
Code:

axes(statestxt_axes2);
 

Problem ist, dass ich beim nächsten durchlaufe aktualisiere mit den neuen Bild in selben axes:
Code:

image = imread('image/off.png');
        imshow(image); %axes image;
        refresh
 


Und das funktioniert nicht bzw. es wird in falschen figure angezeigt. Mein Problem ist, dass ich den noch sagen muss, in welchen axes soll das Bild aktualisiert werden.
Wie kann ich den bestimmten axes neues Bild zuweisen?

Lieben Gruß, Cheepy
[/code][/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 04.02.2011, 17:12     Titel:
  Antworten mit Zitat      
Tatsächlich, wenn ich zweites Mal die Funktion aufrufe, bekomme ich leere Matrix
Code:

statestxt_axes2=findobj('Tag','axes2')
 


Hat jemand eine Idee, wie ich mein Problem lösen kann? Sitze schon ne weile dran und habe immer noch kein Ergebnis.
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 04.02.2011, 17:25     Titel:
  Antworten mit Zitat      
Hallo,

ich denke ohne den gesamten Code zu kennen wird dir wohl keiner helfen koennen. Woher sollen wir denn Wissen was du alles so mit dem axes-Tag waehrend deines Prohrammablaufes anstellst?

Wenn das Program keine 1000de Zeilen hat, dann haeng doch einfach mal deine fig-file + mat-file an einen Post dran. Hoffentlich wird es dann klarer.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 04.02.2011, 18:18     Titel:
  Antworten mit Zitat      
Ja das ist viel zu groß und viel zuviel. Ich versuche den Sachverhalt noch mal zu beschreiben und füge meine Funktion, wo ich mit axes arbeite.

Ich habe ein Simulink-Modell, von den ich meine Ergebnisse lese und in meine GUI über die Funktion „updategui-Funktion „ aktualisiere. In Simulink habe ich eine Callbacks StartFcn, in der ich meine Funktion updategui aufrufe. In der updategui werden meine Ergebnisse in der GUI aktualisiert, sobald neuer Wert kommt. Dort rufe ich auch meine axes auf, in welche meine Bilder aingefügt werden sollen.

Im Anhang ist die updategui-Funktion. Ich möchte wenn count 0 ist, das bild on.png einfügen. Wenn count 1 ist dann off.png. Wenn aber später count wieder auf 0 wechselt, soll wieder on.png in axes eingefügt werden.

Ich hoffe, es ist einigermaßen verständlich.

gui_screen.png
 Beschreibung:

Download
 Dateiname:  gui_screen.png
 Dateigröße:  12.74 KB
 Heruntergeladen:  540 mal
updategui.m
 Beschreibung:
Datei aktualiert GUI, sobald ein Wert in Simulink sein Zustand verändert hat.

Download
 Dateiname:  updategui.m
 Dateigröße:  1.1 KB
 Heruntergeladen:  390 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 04.02.2011, 19:41     Titel:
  Antworten mit Zitat      
Hallo,

...aber ich dachte du hasst 2 Axes und willst dort irgendwie wechseln, weil in deinem Beispiel ist ja nur eine Axes (Tag:axes2) vorhanden? Ich kann dir leider nicht sagen woran es liegt, aber bei:
Code:

if(str_people_count == '1')
 

suchst du ja nicht das axes-handle und machst deine "axes2" zur aktuellen axis:
Code:

ob_axes2 = findobj('Tag','axes2')
axes(ob_axes2);
 

Ansonsten, was bekommst du denn raus wenn du:
Code:

ob_axes2 = findobj('Tag','axes2')
get(ob_axes2)
 

ausfuehrst (z.B. fuer die ersten 5 Durchgaenge)?

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 04.02.2011, 20:39     Titel:
  Antworten mit Zitat      
Als erste vielen Dank für die Rückmeldung und Unterstützung.
Ich habe eine axes (axes2), die im Bild (GUIDE-Editor) zu sehen ist, dort möchte ich in Abhängigkeit des Zustandes von Variable str_people_count Bilder abwechseln anzeigen. Wenn die Variable den Zustand 1 hat, bzw. den Wert 1, dann soll off.png geladen werden, wenn die Variable den Zustand 0 hat, soll on.png Bild anzeigen. Das Ganze soll in eine und der selbst axes (axes2) ausgegeben werden.

Parallel dazu, gebe ich ein Video aus dem Simulink im „Video Viewer“ aus. Hier ist das Problem, das die Bilder on.png und off.png durch folgendem Ausdruck vermutlich in falschen Fenster angezeigt werde.
Code:

if(str_people_count == '1')
    controll=evalin('base','controll');
    controll
    if (controll == 1)
        controll=2;
        image = imread('image/off.png');
        imshow(image); %axes image;
        refresh
    end
 
end
 


Ich denke, dass ich dem sagen soll, in welchen axes soll mein Bild angezeigt werden. Momentan ist das so, er holt sich einen axes, die grade aktive ist und weist somit nicht, da der(Compiler) nicht weist in welche axes soll das Bild ausgegeben werden. Das merke ich, wenn ich mit der Maus auf „Video Viewer“ klicke und da erscheint das Bild (onpng, off.png). Auch wenn ich während Simulation auf richtiges axes (also axes2) klicke, da wo tatsächlich erscheinen soll, wird durch die Maus sozusagen aktiviert und das richtige Bild wird angezeigt.

Jetzt ist die Frage, wie kann ich in einem und den selben axes, in diesem fall axes2, Bilder in Abhängigkeit des Zustandes der Variable str_people_count abwechseln anzeigen. Und wie kann ich dem richtige Axes zuweisen?

Durch Eingabe des get-Funktion in folgendem Ausdruck


Code:

if(str_people_count == '0')
    controll=evalin('base','controll');
    if (controll == 0)
        ob_axes2_ = findobj('Tag','axes2')
        get(ob_axes2_)
        axes(ob_axes2_);
        image1 = imread('image/on.png');
        imshow(image1);
        controll=1;
        assignin('base', 'controll', controll)    
    end
    if (controll ~= 0)
        get(ob_axes2_)
       % image1 = imread('image/on.png');
       % imshow(image1);
       % refresh
    end
end
 


bekomme ich in der erste IF-Abfrage(diese wird dierekt am Anfang ausgeführt, danach nicht mehr) folgendes:
ob_axes2_ =

200.0012

ActivePositionProperty = position
ALim = [0 1]
ALimMode = auto
AmbientLightColor = [1 1 1]
Box = off
CameraPosition = [0.5 0.5 9.16025]
CameraPositionMode = auto
CameraTarget = [0.5 0.5 0.5]
CameraTargetMode = auto
CameraUpVector = [0 1 0]
CameraUpVectorMode = auto
CameraViewAngle = [6.60861]
CameraViewAngleMode = auto
CLim = [0 1]
CLimMode = auto
Color = [1 1 1]
CurrentPoint = [ (2 by 3) double array]
ColorOrder = [ (7 by 3) double array]
DataAspectRatio = [1 1 1]
DataAspectRatioMode = auto
DrawMode = normal
FontAngle = normal
FontName = Helvetica
FontSize = [10]
FontUnits = points
FontWeight = normal
GridLineStyle = :
Layer = bottom
LineStyleOrder = -
LineWidth = [0.5]
MinorGridLineStyle = :
NextPlot = replace
OuterPosition = [56.878 2.21231 48.365 12.3877]
PlotBoxAspectRatio = [1 1 1]
PlotBoxAspectRatioMode = auto
Projection = orthographic
Position = [69.8 3.76923 26 9.76923]
TickLength = [0.01 0.025]
TickDir = in
TickDirMode = auto
TightInset = [4.4 1.30769 1 0.615385]
Title = [201.001]
Units = characters
View = [0 90]
XColor = [0 0 0]
XDir = normal
XGrid = off
XLabel = [202.001]
XAxisLocation = bottom
XLim = [0 1]
XLimMode = auto
XMinorGrid = off
XMinorTick = off
XScale = linear
XTick = [0 0.5 1]
XTickLabel =
0
0.5
1
XTickLabelMode = auto
XTickMode = auto
YColor = [0 0 0]
YDir = normal
YGrid = off
YLabel = [203.001]
YAxisLocation = left
YLim = [0 1]
YLimMode = auto
YMinorGrid = off
YMinorTick = off
YScale = linear
YTick = [0 0.5 1]
YTickLabel =
0
0.5
1
YTickLabelMode = auto
YTickMode = auto
ZColor = [0 0 0]
ZDir = normal
ZGrid = off
ZLabel = [204.001]
ZLim = [0 1]
ZLimMode = auto
ZMinorGrid = off
ZMinorTick = off
ZScale = linear
ZTick = [0 0.5 1]
ZTickLabel =
ZTickLabelMode = auto
ZTickMode = auto

BeingDeleted = off
ButtonDownFcn =
Children = [ (4 by 1) double array]
Clipping = on
CreateFcn = [ (1 by 1) function_handle array]
DeleteFcn =
BusyAction = queue
HandleVisibility = on
HitTest = on
Interruptible = on
Parent = [199.001]
Selected = off
SelectionHighlight = on
Tag = axes2
Type = axes
UIContextMenu = []
UserData = []
Visible = off

Im nächsten Durchlauf muss der Compiler in die Zeile if (controll ~= 0) reinspringen und durch dem Aufruf get-Funktion erscheint ein Fehler:

??? Undefined function or variable "ob_axes2_".

Error in ==> updategui at 18
get(ob_axes2_)

das heißt, der kennt diese Variable nicht mehr. Weil die wahrscheinlich nicht mehr existiert.

PS: ob_axes2 musste ich in ob_axes2_ unbenennen, weil sonst Fehler wegen dem Namen.
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 07.02.2011, 15:03     Titel:
  Antworten mit Zitat      
Hat jemand eine Idee, wie ich mein Problem lösen könnte?
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 07.02.2011, 15:28     Titel:
  Antworten mit Zitat      
Hallo,

leider kann ich dir bei deinem speziellen Code nicht helfen. Ausserdem speicherst du Variablen aus Funktionen im Workspace (assignin), verwendest eval um sie wieder zu laden... all dies macht es sehr schwer es nachzuvollziehen und fast immer kann (und sollte) auf Befehle wie eval, assignin oder glabale Variablen verzichtet werden!

Ich habe dir ein Minimalbeispiel erstellt und angehaengt, welches 2 Bilder abwechselnd in einer Achses darstellt. Das musst du dann nur noch auf deinen Code ummuenzen.

Beachte im Code, dass Speichern der benoetigten Daten (Bilder,Colormaps, sowie dein controll) in der handles-Struktur anstatt sie ueber assignin, eval in und aus dem Workspace zu laden (in der Creation-function). Auch das Suchen des Axeshandles ist ueberfluessig, da du es einfach mit handles.axes1 ansprechen kannst.

MFG

Sco

untitled1.m
 Beschreibung:
M-File

Download
 Dateiname:  untitled1.m
 Dateigröße:  3.62 KB
 Heruntergeladen:  396 mal
untitled1.fig
 Beschreibung:
Fig-Datei

Download
 Dateiname:  untitled1.fig
 Dateigröße:  4.34 KB
 Heruntergeladen:  388 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
cheepy
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 16.02.10
Wohnort: Emden
Version: ---
     Beitrag Verfasst am: 08.02.2011, 16:33     Titel:
  Antworten mit Zitat      
Erstmal Vielen Dank! Ich habe versucht nach deinem Beispiel meine GUI umzusetzen, leider habe ich nach wie vor gleiches Problem. Es wird nicht in der richtige axes angezeigt.
Im Anhang habe ich ein Beispiel geladen, den ich mal gefunden habe und verwendetet demselben Konzept für meine GUI.
Im Prinzip geht’s darum, dass die Bilder in Abhängigkeit der Werte aus Simulink angezeigt werden. Wenn im Fenster current State negativer Wert ist, wird clown geladen, wenn positive dann mandrill. Den Beispiel habe ich jetzt so ähnlich gemacht, wie mein System arbeitet.

Es gibt in diesem Beispiel zwei axes und mein Ziel ist, dass nur in axes1 Bilder angezeige. Wie kann ich in mein Programm zuweisen, dass nur in axes1 Bild angezeigt wird?

Control-Variable lade ich vor Simulation control=0. Ist noch nicht die schönste Lösung, muss noch anders ons Workspace geladen.

Habe schon alles ausprobiert, aber so langsam komme ich in Verzweifeln.

updategui.m
 Beschreibung:
update-Funktion wird jedes mal aufgerufen, wenn in Simulink das Ergebnis sich verändert wurde. Das heißt, mit diese Funktion wird GUI in Abhängigkeit der Simulink-Ergebnisse zur Laufzeit aktualisiert.

Download
 Dateiname:  updategui.m
 Dateigröße:  1003 Bytes
 Heruntergeladen:  387 mal
mytestmdl.mdl
 Beschreibung:
Simulink-Modell, welches ausgeführt wird. In Abhängigkeit der Ergebnissen, sollen Bilder ausgetauscht. Zusätzlich ist eine Callback StartFnc implementiert, um die Werte in Abhängigkeit der Ergebnisse in GUI zu aktualisieren.

Download
 Dateiname:  mytestmdl.mdl
 Dateigröße:  21.49 KB
 Heruntergeladen:  416 mal
mytestgui.m
 Beschreibung:

Download
 Dateiname:  mytestgui.m
 Dateigröße:  5.82 KB
 Heruntergeladen:  377 mal
mytestgui.fig
 Beschreibung:

Download
 Dateiname:  mytestgui.fig
 Dateigröße:  6.79 KB
 Heruntergeladen:  378 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 09.02.2011, 00:12     Titel:
  Antworten mit Zitat      
Hallo,

also prinzipiell ist das Problem, dass die handles in deiner updategui-Funktion gar nicht vorhanden sind bzw. nicht mit uebergeben werden. Da ich leider keine Erfahrung mit Simulink habe (ich war schon froh dein Programm erstmal zum laufen zu bringen, da das GUI nie das Simulinkmodel fand) kann ich dir auch nicht sagen wie du dieser Funktion die handles vom GUI übergeben kannst.
Weiterhin ist deine "control"-Variable nicht vorhanden gewesen, so dass das Program nie bis zu den axes Befehlen gelangte. Ich habe control einfach mal 1 oder 0 zugewisen, aber dann ist er fast nie in die if-clauses gesprungen, ich habe halt auch keinen blassen Schimmer was du da machen möchtest. Lange Rede kurzer Sinn ich habe zu Testzwecken einfach die if-clauses herausgenommen, so dass die "control"-Variable nicht mehr gebraucht wird (dies ist ja auch nicht für dein gepostetest Problem von Bedeutung).
Der entscheidente Teil der updategui- Funktion sieht so aus:
Code:

if(out_num<0)
   % if (control==0)
    %    control=1;
    %    assignin('base','control',control);
        axes(handles.axes1);
   % end
    image(handles.I1); colormap(handles.cmap1)  

else
    % if (control==1)
    %    control=0;
    %    assignin('base','control',control);
        axes(handles.axes1);
   % end
    image(handles.I2); colormap(handles.cmap2)
end
 

Nun bleibt noch das Problem der Handlesübergabe. Ich habe dies für Testzwecke zunächst einmal mit dem:
Code:

Befehlen gelöst. Hierfür habe ich die gesamte handles-Struktur beim Starten des GUIs (pushbuttonstart_Callback) im root object abgespeichert:
Code:

% --- Executes on button press in pushbuttonstart.
function pushbuttonstart_Callback(hObject, eventdata, handles)
% hObject    handle to pushbuttonstart (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

%start the model with the standard Simulink API command
set_param('mytestmdl','SimulationCommand','start');
setappdata(0,'all_handles',handles);
 

und in der updategui-Funktion wieder geladen:
Code:

function varargout = updategui(varargin)

handles = getappdata(0,'all_handles');
.
.
% handles.axes1=findobj('Tag','axes1') % brauchen wir nicht
 


Vielleicht kann dir ja noch jemand sagen wie man die handles "geschickter" übergeben kann. Es hat aber erstmal das getan was du wolltest, naemlich die Änderung des Bildes in axes1 je nach "current-state" (mandrill für cs>0 und clown für cs<0)

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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.