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

matlab plots im Hintergrund

 

pospiech
Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.01.2011, 11:20     Titel: matlab plots im Hintergrund
  Antworten mit Zitat      
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.

Kann man dieses Verhalten irgendwie modifizieren?
Private Nachricht senden Benutzer-Profile anzeigen


ppirokke
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 19.11.10
Wohnort: ---
Version: R2010a
     Beitrag Verfasst am: 01.01.2011, 21:32     Titel:
  Antworten mit Zitat      
Hi pospiech,

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.

Hilft dir das weiter?
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: 01.01.2011, 22:31     Titel: Re: matlab plots im Hintergrund
  Antworten mit Zitat      
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:
Code:

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:
Code:

FigH = figure('Visible', 'off');
AxesH('Parent', FigH);
plot(1:10, rand(1, 10), 'Parent', AxesH);
printf(FigH, '-epsc', 'Plot1.eps');
 

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.

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

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.01.2011, 23:04     Titel:
  Antworten mit Zitat      
Wofür brauche ich das
Code:

AxesH('Parent', FigH);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
pospiech
Themenstarter

Forum-Century

Forum-Century


Beiträge: 130
Anmeldedatum: 03.09.07
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.01.2011, 11:09     Titel:
  Antworten mit Zitat      
bei einem pcolor plot hat alles funktioniert, bei einem normalen plot erhalte ich jetzt diesen Fehler:

Zitat:

??? Error using ==> plot
Bad property value found.
Object Name : line
Property Name : 'Parent'.

Error in ==> PlotProfile1D at 7
h(1) = plot(XAXIS, DATA, 'Parent', handleAxes); hold on;
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: 02.01.2011, 21:25     Titel:
  Antworten mit Zitat      
Hallo pospiech,

Mein Fehler:
Code:
AxesH('Parent', FigH); % Unsinn! Das soll heißen:
AxesH = axes('Parent', FigH);


Dein Fehler:
Zitat:

h(1) = plot(XAXIS, DATA, 'Parent', handleAxes);

??? 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.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
chris4aus
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2011, 02:25     Titel: GETFRAME
  Antworten mit Zitat      
Hallo Jan!

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
if isempty(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);


Code:
function mov_cell = movie_frame_2color(scaffold)

% 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};


scaffold ist ein struct mit geom_sub und geom_lay jeweils Matrizen mit x und y Koordinaten.
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: 22.11.2011, 10:09     Titel: Re: GETFRAME
  Antworten mit Zitat      
Hallo chris4aus,

GETFRAME benötigt ein Fenster im Vordergrund. Andernfalls kopiert es die entsprechenden Ausschnitte aus dem aktuellen Vordergrundfenster.

Per PRINT Befehl kann man auch Fenster im Hintergrund kopieren.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
chris4aus
Forum-Anfänger

Forum-Anfänger


Beiträge: 28
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2011, 06:19     Titel: ging mit print nicht
  Antworten mit Zitat      
Hallo Jan!

Ich habe das jetzt mit print mehrmals versucht, bin aber immer wieder gescheitert und zeige dem Nutzer jetzt doch die Getframe-Sache.

Trotzdem danke fuer die Antwort.

Christiane
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: 09.12.2011, 10:09     Titel: Re: ging mit print nicht
  Antworten mit Zitat      
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
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.