Verfasst am: 01.01.2011, 11:20
Titel: matlab plots im Hintergrund
Ich habe ein Skript das hunderte von Plots erzeugt und in Dateien als Bilder exportiert. Das ganze kann je nach Anzahl Stunden dauern.
Was mich wirklich stört ist, das matlab jedes mal wenn es in einen Plot zeichnet, bzw. eine figure(<Nummer>) aufgerufen wird das Fenster unter Windows in den Vordergrund aller Applikationen rückt und den Fensterfokus auf das Fenster legt.
Wenn ich also woanders was eintippe, dann landet es zwangsläufig im Matlabfenster statt da wo ich (außerhalb von Matlab) gerade arbeite.
du kannst auch den Visible Parameter der figure nach Erstellen auf false setzen und dann mit handles des erstellten figures arbeiten ohne neue erstellen zu müssen. Dann sollte die figure theoretisch nichtmehr erscheinen.
Verfasst am: 01.01.2011, 22:31
Titel: Re: matlab plots im Hintergrund
Hallo pospiech,
[quote 9Was mich wirklich stört ist, das matlab jedes mal wenn es in einen Plot zeichnet, bzw. eine figure(<Nummer>) aufgerufen wird das Fenster unter Windows in den Vordergrund aller Applikationen rückt und den Fensterfokus auf das Fenster legt.[/quote]
Ich nehme an "figure(<Nummer>) aufgrefufen wird" bedeutet etwas wie:
Dies bringt entsprechend der Dokumentation das entsprechende Fenster in den Vordergrund. Das ist ja explizit die Aufgabe des Befehls. Wenn Dich das stört, darfst Du diesen Befehl nicht benutzen. Stattdessen kann man den Handle des FIGURE-Objekts als Parent-Property für neu erstellte Grafik-Objekte angeben.
"Wenn Matlab in einen Plot zeichnet", wird das entsprechende Fenster nicht in den Vordergrund gebracht.
Wenn man dagegen das PLOT-Kommando aufruft, ohne vorher eine FIGURE zu öffnen, wird automatisch eine geöffnet, und zwar im Vordergrund. Wenn Dich das stört, könntest Du die Grafik-Files also besser so erstellen:
Wenn Du GETFRAME und IMWRITE verwendest, um die Grafiken-Files zu erstellen, funktioniert das dagegen nicht, da GETFRAME ein sichtbares Fenster benötigt. Und ein solches zu erzeugen, ohne es in den Vordergrund zu bringen, geht nicht mit Matlab-Mitteln.
Es gibt also Möglichkeiten das Sich-Vordrängeln der Matlab-Fenster zu verhindern. Wenn Du konkrete Änderungstips brauchst, kannst Du die jeweiligen Befehle posten.
??? Error using ==> plot
Bad property value found.
Offenbar ist "handleAxes" ein nicht geeigneter Wert für einen Parent. Die Fehlermeldung moniert ja einen "bad value".
Wie hast Du "handleAxes" denn erzeugt? Wenn ich z.B. "AxesH" wie im obigen Beispiel nehme, läuft es unter Matlab 6.5 und 2009a.
Ich erstelle einen Movie mit Getframe. (innerhalb eines Gui)
Wollte aber gerne bei der Erstellung dem Nutzer nicht gerne die langsame Animation sehen lassen (spiele die spaeter schneller ab).
Geht das irgendwie?
Oder welche andere Option habe ich als Getframe?
Code:
text_output{end+1}= 'Animation is creating ...';
set(handles.text_output_values,'String',text_output);
% create movie ifisempty(dir(movie_name))
mov_cell = cell(length(scaffold),1);
for l=1:length(scaffold)% different layers
mov_cell{l} = movie_frame_2color(scaffold(l));
end% different layers save(movie_name,'mov_cell');
else% if already saved load(movie_name);
end; % movie
% write that movie was created
text_output{end}= 'Animation was created';
text_output{end+1}= ' ';
set(handles.text_output_values,'String',text_output);
% draw geom_sub every line by itself for k=2:1:floor(length(scaffold.geom_sub)/2+2)% for all values of geom axis([-(scaffold.stage_dim/2+1), scaffold.stage_dim/2+1,-(scaffold.stage_dim/2+1), scaffold.stage_dim/2+1]);
axis equal;
short = line(scaffold.geom_lay(k-1:k,1),scaffold.geom_lay(k-1:k,2));
set(short,'Color','r');
M(k-1) = getframe;
set(short,'Color','k');
end % split because of size of movie in some cases for k=floor(length(scaffold.geom_sub)/2+2):1:length(scaffold.geom_sub)+2% for all values of geom axis([-(scaffold.stage_dim/2+1), scaffold.stage_dim/2+1,-(scaffold.stage_dim/2+1), scaffold.stage_dim/2+1]);
axis equal;
short = line(scaffold.geom_lay(k-2:k,1),scaffold.geom_lay(k-2:k,2));
set(short,'Color','r');
N(k-floor(length(scaffold.geom_sub)/2+1)) = getframe;
set(short,'Color','k');
end
acc = 12; % reduces/increases structure and therefore frame
interval_spacing = floor(length(scaffold.geom_rot)/acc);
end_value = k+ interval_spacing;
interval = k:end_value;
rotL = line(scaffold.geom_lay(interval,1),scaffold.geom_lay(interval,2));
set(rotL,'Color','r');
O(1) = getframe;
for h = 2:acc*scaffold.NoLayers-1
interval = (h-1)*interval_spacing:1:h*interval_spacing;
short = line(scaffold.geom_lay(interval,1),scaffold.geom_lay(interval,2));
set(short,'Color','r');
O(h) = getframe;
set(short,'Color','k');
end
short = line(scaffold.geom_lay(h*(floor(length(scaffold.geom_rot)/acc)+1):end,1),scaffold.geom_lay(h*(floor(length(scaffold.geom_rot)/acc)+1):end,2));
set(short,'Color','r');
O(h+1) = getframe;
set(short,'Color','k');
% save all short movies in one cell
mov_cell = {M,N,O};
Verfasst am: 09.12.2011, 10:09
Titel: Re: ging mit print nicht
Hallo chris4aus,
Wenn Du den verwendeten print Befehl postest und erklärst, was genau gescheitert ist, könnte man einen Verbesserungsvorschlag machen.
Das Verhalten von GETFRAME und PRINT hängt auch vom Betriebssystem ab.
Gruß, Jan
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.