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
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ěší."