figureを切り替えたときにフォーカスさせない方法 | MATLAB

MATLABでは例えば以下のようにfigureを切り替えると、
それぞれのfigureに一々フォーカスが移ってしまい、非常に鬱陶しいです。

この記事では一々フォーカスさせずにfigureを切り替える方法を記載します。

Sample.m
for shift = 0 : pi/180 : 2*pi
    fprintf('shift: %f\n', shift);
    
    x = 0 : pi/180 : 2*pi;
    y = sin(x-shift);
    y2 = sin(2*(x-shift));
    
    figure(1);
    plot(x, y);
    
    figure(2);
    plot(x, y2);
    
    pause(0.2); %何か時間のかかる他の処理
end

対処方法

チカチカさせずにfigureを切替えるにはsetメソッドでCurrentFigureにhandleをセットしていけば良いです。(※handleを取得する最初の1回はチカチカします)。
以下に例を記載します。

figure_NotFocus.m
function NewHandle = figure_NotFocus(handle, WindowTitle)
    if isempty(handle)
        NewHandle = figure('Name', WindowTitle, 'NumberTitle', 'off');
        return;
    else
        set(0, 'CurrentFigure', handle);
        NewHandle = handle;
    end
end
Sample2.m
handle1 = [];
handle2 = [];

for shift = 0 : pi/180 : 2*pi
    fprintf('LoopIndex: %f\n', shift);
    
    x = 0 : pi/180 : 2*pi;
    y = sin(x-shift);
    y2 = sin(2*(x-shift));
    
    handle1 = figure_NotFocus(handle1, 'sin(x)');
    plot(x, y);
    
    handle2 = figure_NotFocus(handle2, 'sin(2x)');
    plot(x, y2);
    
    pause(0.2); %何か時間のかかる他の処理
end
タイトルとURLをコピーしました