JanKoWeb: Odborný SW - MATLAB: vykreslování obrázku (figure) bez sebrání focusu aktuálnímu oknu

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 | 537x

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

"Bezpečí je většinou pověra. Ve skutečnosti neexistuje. Život je buď odvážné dobrodružství, nebo vůbec nic."

H. Kellerová