Verfasst am: 10.02.2015, 10:20
Titel: Animation: Aufblenden und Ausblenden vom Images
Hallo zusammen,
ich möchte die Resultate einer Simulation in dem GUI darstellen. Ich möchte den Schieberegler dazu nutzen um die Ergebnisse in Abhängigkeit der Zeit zu betrachten. Die Ausgänge können nur low oder high sein. Wenn Sie High werden, sollen passende Grafiken an festen Positionen angezeigt werden (eingeblendet). (Wenn low dann ausgeblendet werden)
Den Schieberegler nutze ich um die Zeit zu simulieren. Insgesamt sind es ca 300 Zeitschritte die wählbar wären.
Ich habe einen Eventlistener auf den Schieberegler gesetzt.
Bis jetzt habe ich das ganze mit image/sc etc versucht aber dann fällt mir die Positionierung schwer(Ich möchte gerne pixelgenaue Darstellung, da die Grafiken auch etwas besser aussehen, wenn sie nicht verzehrt sind). Wenn ich axes benutze dann füllt er mir den Arbeitsspeicher.
Hi, ich habe den Fehler selbst entdeckt ich habe mir immer neues axes generiert in der Callbackfunction. Was dazu führte das der Speicher immer voller wurde. Habe ihn jetzt in das GUI ausgelagert und aktualisiere
ggf. das axes in dem Callback
Die Idee:
Code:
% Hintergrund wird nicht verändert
background = imread('background.png');
axesImage = axes('Units','pixel','Position',[325220938400]);
imshow(background , 'Parent', axesImage);
% Soll ein/ausgeblendet werden können
localHandle.Bild = imread('Bild.png');
localHandle.axesImage = axes('Units','pixel','Position',[5005003030]);
guidata(figObj,localHandle);
function SliderAnimation_Callback(src,~)
h = guidata(src);
% Soll nur ganzzahlige Werte annehmen % Bis jetzt keine schöne Loesung, da der Callback trotzdem durch den Eventlistener viel häufiger aufgerufen wird, als es sein müsste % Muss dem Slider noch mitteilen, dass er wirklich nur 1. Schritte machen darf set(h.SliderAnimation,'Value',round(get(src,'Value')));
Hier habe ich probeweise das axes verschoben. Ich möchte allerdings nun den Wert des Sliders(get(src,'Value')) als Zeitvariable nutzen um aus dem Output, der nur low oder high sein kann Bilder auf dem GUI ein bzw. ausblenden. (Je nach Status)
Code:
% Weiter in dem Callback % temp_var hat die folgende Form: temp_var = [0 0 0 0 0 0 0 0 0 0 1 1 1 1 ...]
temp_var = get(h.ProjectStruct.Simulations.('TestFile').output.get('ABC_Result'),'Data');
if temp_var(round(get(src,'Value'))) % h.Bild einblenden else % h.Bild ausblenden end
D.h ich bewege den Schieberegler und wenn temp_var(Wert vom Schieberegler) == 1 ist, dann aktualisiere den Status des Bildes (ein oder aus).
Das wäre die Idee. Insgesamt sind das etwa 10 Grafiken in einer Auflösung von ca 50px50p. Wäre auch gut wenn das irgendwie fließend laufen würde. Mit dem Verschiebungsbeispiel läuft das recht flüssig. alle Grafiken haben auch eine feste Position.
ich stelle die Visibility von den Kindern der Axes auf off. Mit einem Bild funkioniert es fließend
Code:
temp_var = get(h.ProjectStruct.Simulations.('test').output.get('Thresholds'),'Data');
if temp_var(round(get(src,'Value'))*10+1) set(get(h.axesImage,'children'),'visible','on');
else set(get(h.axesImage,'children'),'visible','off');
end
Die Frage ist jetzt ob das ne vernünftige Lösung meines Problems ist oder ich hier nur Krücken baue.
Einstellungen und Berechtigungen
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
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.