我有两个想法:
使用“文件 > 生成代码...”功能。MATLAB 将创建一个函数,该函数通过您以交互方式进行的任何修改来重新创建图形。
手动检索所操作对象的感兴趣属性,并在重新运行脚本时再次应用它们。您可以为这些图形对象维护一个句柄列表,甚至可以
'Tag'
结合使用 FINDOBJ 函数来定位这些对象。
我将用一个例子来说明后一种想法:
当脚本第一次运行时,我们让用户有机会以交互方式对图形进行更改。完成后,我们检索'Position'
图形的属性以及其中包含的所有子组件。然后将这些值保存到 MAT 文件中。
现在用户调整一些参数并重新运行脚本。我们检查 MAT 文件是否存在。如果存在,我们加载保存的位置值并将它们应用于图形及其后代对象,从而将组件恢复到上次保存的状态。
此解决方案相当简单,因此如果对脚本进行更改会破坏图形句柄的层次结构,则必须删除 MAT 文件,然后再次运行脚本。
%# close all figures
close all
%# your script which creates figures
figure, plot(rand(100,1))
figure
subplot(121), plot( cos(linspace(0,6*pi,100)) )
subplot(122), image, axis image, axis ij
%# check for MAT-file
if exist('script_prefs.mat','file')
%# load saved values
load script_prefs.mat
%# get opened figures, and find objects with a position property
fig = get(0, 'Children'); %# allchild(0)
obj = findobj(fig, '-property','position');
try
%# apply values to position property
set(fig, {'Position'},figPos);
set(obj, {'Position'},objPos);
catch
%# delete MAT-file
delete script_prefs.mat
end
else
%# get opened figures, and find objects with a position property
fig = get(0, 'Children');
obj = findobj(fig, '-property','position');
%# wait for the user to finish customizing
waitFig = figure('Menubar','none', 'Position',[200 200 200 40]);
h = uicontrol('Units','normalized', 'Position',[0 0 1 1], ...
'String','Done?', 'Callback','uiresume(gcbf)');
uiwait(waitFig);
close(waitFig);
%# get position property of figures and tagged objects
figPos = get(fig, 'Position');
objPos = get(obj, 'Position');
%# save values to file
save script_prefs.mat figPos objPos
end