JanKoWeb: Odborný SW - MATLAB: vykreslování obrázku (figure) bez sebrání focusu aktuálnímu oknu
jankoweb.wz.cz
Den filosofie, televize a světový den pozdravů.


MATLAB: vykreslování obrázku (figure) bez sebrání focusu aktuálnímu oknu

Konečně jsem objevil funkční řešení, jak se zbavit v MATLABu velmi otravného vyskakování oken při vykreslování obrázků, které vezmou focus aktuálnímu oknu. Tím pádem při složitejších výpočtech a vykreslování mnoha obrázku se nedá na tom samém počítači dělat prakticky nic jiného - pořád leze do popředí okno s figure.

Vytvořte si funkci:

function change_current_figure(h)
set(0,'CurrentFigure',h)
end

na začátku Vašeho skriptu zavolejte inicializaci nových figure (kolik potřebujete; ty si na začátku focus vemou, později při použití funkce change_current_figure již ne):

fg1 = figure(1);
fg2 = figure(2);

a posléze tam, kde se chystáte něco vykreslovat, volejte místo "figure" funkci:

change_current_figure(fg1)

Pokud potřebujete něco uložit pomocí "saveas", stačí místo ukazatele na figure použít "gcf":

saveas(gcf,"nazev_souboru.jpg");

Funguje i pro supplot (u něj je ale dobré na začátku vymazat figure - "clf") a další grafy.

Celková ukázka:

fg1 = figure(1);
fg2 = figure(2);

pause(10)

change_current_figure(fg1)
clf
plot(1,2,'xr')
hold on
plot(2,2,'xm')

change_current_figure(fg2)
clf
plot(2,2,'xr')
saveas(gcf,'moje-figura.jpg')

Reference: http://stackoverflow.com/questions/8488758/inhibit-matlab-window-focus-stealing.

UDATE 11.12.2016: ale pozor, když taková figura uloží jako fig, při následném parametru je jako invisible, takže musíte zavolat "set(gcf, 'Visible', 'on')". Případně dávkově:

function fix_invisible_figure(directory)
close all
disp(['Changing invisible to visible, folder ' directory '...'])
files = dir([directory '*.fig']);
for i=1:length(files)
   f = files(i).name;
   open(f); 
   set(gcf, 'Visible', 'on');
   saveas(gcf,f,'fig');
end
end

 

Rubrika Odborný SW | Tagy MATLAB, Figure, řešení | Út 29.11.2016 | 594x

Náhodné články

Tento web jsem zakládal na střední, v roce 2008. Je zde hlavně archiv mé tvorby.

Aktuální věci publikuji kvůli úspoře času na Twitter.

Honza

"Náš blahobyt nespočívá v tom, co máme, ale v tom, co nás těší."

J. Petit-Senn