📄 gui_topo_animate.m
字号:
if isfield(ANIM,'Ymin'),
set(ANIM.Ymin,'string',sprintf('%7.2f',-absmax));
set(ANIM.Ymin,'value',-absmax);
end
if isfield(ANIM,'Ymax'),
set(ANIM.Ymax,'string',sprintf('%7.2f', absmax));
set(ANIM.Ymax,'value', absmax);
end
end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [ H ] = toggle_visible(H),
toggle = get(H.Ymin,'visible');
if isequal(toggle,'on'),
set(H.gui,'BackingStore','off','Pointer','watch');
set(H.Yset,'visible','off');
set(H.Ymin,'visible','off');
set(H.Ymax,'visible','off');
set(H.Start,'visible','off');
set(H.Finish,'visible','off');
set(H.Step,'visible','off');
set(H.Run,'visible','off');
set(H.Save,'visible','off');
set(H.Type,'visible','off');
set(H.Movie,'visible','off');
set(H.AClose,'visible','off');
% In case mouse rotate is on
if ishandle(H.RClose),
set(H.RClose,'visible','off');
set(H.View,'visible','off');
set(H.Info,'visible','off');
set(H.Az,'visible','off');
set(H.El,'visible','off');
end
else
set(H.gui,'BackingStore','on','Pointer','arrow');
set(H.Yset,'visible','on');
set(H.Ymin,'visible','on');
set(H.Ymax,'visible','on');
set(H.Start,'visible','on');
set(H.Finish,'visible','on');
set(H.Step,'visible','on');
set(H.Run,'visible','on');
set(H.Save,'visible','on');
set(H.Type,'visible','on');
set(H.Movie,'visible','on');
set(H.AClose,'visible','on');
% In case mouse rotate is on
if ishandle(H.RClose),
set(H.RClose,'visible','on');
set(H.View,'visible','on');
set(H.Info,'visible','on');
set(H.Az,'visible','on');
set(H.El,'visible','on');
end
end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [ index, point ] = NearestXYArrayPoint( data_array, point, type )
if ~exist('type','var') type = ''; end
% In this function, input data_array is an array, not a matrix.
% This function returns the data point in the array
% that has the closest value to the value given (point). In
% the context of 'gui_topo_animate' the point is a time.
if point >= max(data_array)
point = max(data_array);
index = find(data_array == point);
return;
elseif point <= min(data_array)
point = min(data_array);
index = find(data_array == point);
return;
end
data_sorted = sort(data_array);
greater = find(data_sorted > point);
greater_index = greater(1);
lesser = find(data_sorted < point);
lesser_index = lesser(length(lesser));
greater_dif = data_sorted(greater_index) - point;
lesser_dif = point - data_sorted(lesser_index);
if strcmp(type,'exact'), index = find(data_array == point);
elseif strcmp(type,'nextx'), index = greater_index;
elseif strcmp(type,'prevx'), index = lesser_index;
else
if (greater_dif < lesser_dif)
index = find(data_array == data_sorted(greater_index));
else
index = find(data_array == data_sorted(lesser_index));
end
end
point = data_array(index);
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [H] = INIT(p),
H = get(gcbf,'userdata');
% only one per figure
if isfield(H,'Start'),
if ~isempty(H.Start),
return;
end
end
H = get(gcf,'userdata');
% enable right click context menu for animation
if isempty(get(H.gui,'uicontextmenu')),
menu = uicontextmenu;
uimenu(menu,'Label','Animate','Callback','gui_topo_animate; ');
set(H.gui,'uicontextmenu',menu);
else
menu = get(H.gui,'uicontextmenu');
sibs = get(menu,'children');
nomenu = 1;
for i=1:length(sibs),
label = get(sibs(i),'Label');
if strmatch(label,'Animate'),
nomenu = 0;
end
end
if nomenu,
uimenu(menu,'Label','Animate','Callback','gui_topo_animate; ');
set(H.gui,'uicontextmenu',menu);
end
end
set(H.axis,'uicontextmenu',menu);
axsibs = get(H.axis,'Children');
for i=1:length(axsibs),
type = get(axsibs(i),'Type');
if isequal(type,'patch'),
if isempty(get(axsibs(i),'uicontextmenu')),
set(axsibs(i),'uicontextmenu',menu);
end
end
end
% Match background figure colour
bgcolor = get(H.gui,'Color');
% Try to adapt the foreground colour a little
black = find(bgcolor <= .6);
fgcolor = [0 0 0]; %black text
if length(black)>2, fgcolor = [1 1 1]; end
Font.FontName = 'Helvetica';
Font.FontUnits = 'Pixels';
Font.FontSize = 12;
Font.FontWeight = 'normal';
Font.FontAngle = 'normal';
if exist('p','var'), H.p = p; end
% -- Set Voltage Range
switch H.p.mesh.data.meshtype{H.p.mesh.current},
case {'scalp','elec'},
samplePoint = H.p.volt.samplePoint;
otherwise
samplePoint = H.p.mesh.samplePoint;
end
H = voltage_scale(H,samplePoint,samplePoint);
H.Yset = uicontrol('Parent',H.gui,'Style','checkbox','Units','Normalized',Font,...
'Position',[.0 .90 .1 .05],...
'HorizontalAlignment','left',...
'BackGroundColor',bgcolor,...
'ForeGroundColor',fgcolor,...
'String','Y set',...
'TooltipString','Set specific Y min/max, otherwise automatic.');
H.Ymin = uicontrol('Parent',H.gui,'Style','edit','Units','Normalized',Font,...
'Position',[.0 .85 .10 .05],...
'HorizontalAlign','right',...
'Tag','YMIN',...
'TooltipString','Set Y min', ...
'String',sprintf('%7.1f',H.p.minimumIntensity),...
'Callback',strcat('H = get(gcbf,''userdata'');',...
'ymin = str2num(get(H.Ymin,''string''));',...
'H.p.minimumIntensity = ymin;',...
'set(H.Ymin,''string'',sprintf(''%7.2f'',ymin));',...
'set(H.Ymin,''value'',ymin);',...
'set(gcbf,''userdata'',H); clear H ymin;'));
H.Ymax = uicontrol('Parent',H.gui,'Style','edit','Units','Normalized',Font,...
'Position',[.0 .80 .10 .05],...
'HorizontalAlign','right',...
'Tag','YMAX',...
'TooltipString','Set Y max', ...
'String',sprintf('%7.1f',H.p.maximumIntensity),...
'Callback',strcat('H = get(gcbf,''userdata'');',...
'ymax = str2num(get(H.Ymax,''string''));',...
'H.p.maximumIntensity = ymax;',...
'set(H.Ymax,''string'',sprintf(''%7.2f'',ymax));',...
'set(H.Ymax,''value'',ymax);',...
'set(gcbf,''userdata'',H); clear H ymax;'));
% -- Set Time Range
H.Start = uicontrol('Parent',H.gui,'Style','edit','Units','Normalized',Font,...
'Position',[.0 .70 .1 .05],...
'HorizontalAlignment','right',...
'BackGroundColor',bgcolor,...
'ForeGroundColor',fgcolor,...
'String','','TooltipString','Start Time (msec)',...
'Callback',strcat('H = get(gcbf,''userdata''); ',...
'val = str2num(get(H.Start,''string'')); ',...
'set(H.Start,''value'',val); ',...
'set(H.Start,''string'',sprintf(''%7.2f'',val)); ',...
'clear H val;'));
H.Finish = uicontrol('Parent',H.gui,'Style','edit','Units','Normalized',Font,...
'Position',[.0 .65 .1 .05],...
'HorizontalAlignment','right',...
'BackGroundColor',bgcolor,...
'ForeGroundColor',fgcolor,...
'String','','TooltipString','Finish Time (msec)',...
'Callback',strcat('H = get(gcbf,''userdata''); ',...
'val = str2num(get(H.Finish,''string'')); ',...
'set(H.Finish,''value'',val); ',...
'set(H.Finish,''string'',sprintf(''%7.2f'',val)); ',...
'clear H val;'));
H.Step = uicontrol('Parent',H.gui,'Style','edit','Units','Normalized',Font,...
'Position',[.0 .60 .1 .05],...
'HorizontalAlignment','right',...
'BackGroundColor',bgcolor,...
'ForeGroundColor',fgcolor,...
'String','','TooltipString','Time Step (msec)',...
'Callback',strcat('H = get(gcbf,''userdata''); ',...
'val = str2num(get(H.Step,''string'')); ',...
'set(H.Step,''value'',val); ',...
'set(H.Step,''string'',sprintf(''%7.2f'',val)); ',...
'clear H val;'));
SampleRate = extract_data(H); % local function
set(H.Start, 'String',sprintf('%7.2f',H.p.volt.sampleTime));
set(H.Finish,'String',sprintf('%7.2f',H.p.volt.sampleTime));
set(H.Step, 'String',sprintf('%7.2f',SampleRate));
% -- Set Image and Movie Save Options
H.Save = uicontrol('Parent',H.gui,'Style','checkbox','Units','Normalized',Font,...
'Position',[.0 .55 .1 .05],...
'HorizontalAlignment','left',...
'BackGroundColor',bgcolor,...
'ForeGroundColor',fgcolor,...
'String','Save',...
'TooltipString','Save each step to graphics file (via eeg_save_graphics).');
H.Type = uicontrol('Parent',H.gui,'Style','popup','Units','Normalized',Font,...
'Position',[.0 .50 .1 .05],...
'HorizontalAlignment','left',...
'BackGroundColor',bgcolor,...
'ForeGroundColor',fgcolor,...
'String',{'png','jpeg','tiff','eps'},...
'Value',1,...
'TooltipString','Save format (warning: TIFF & EPS are large files).');
H.Movie = uicontrol('Parent',H.gui,'Style','checkbox','Units','Normalized',Font,...
'Position',[.0 .45 .1 .05],...
'HorizontalAlignment','left',...
'BackGroundColor',bgcolor,...
'ForeGroundColor',fgcolor,...
'String','Movie',...
'TooltipString','Save animation to a movie file (*.avi)');
% -- Set Action Controls
H.Run = uicontrol('Parent',H.gui,'Style','pushbutton','Units','Normalized',Font,...
'Position',[.0 .40 .1 .05],...
'HorizontalAlignment','center',...
'BackGroundColor',[0 .6 0],...
'ForeGroundColor',[1 1 1],...
'String','Animate',...
'Callback','gui_topo_animate(''animate'');');
H.AClose = uicontrol('Parent',H.gui,'Style','pushbutton','Units','Normalized',Font,...
'Position',[.0 .35 .1 .05],...
'HorizontalAlignment','center',...
'BackGroundColor',[.6 0 0],...
'ForeGroundColor',[1 1 1],...
'String','Close','Value',0,...
'TooltipString','Use right click context menu after ''Close'' to get animation back.',...
'Callback',strcat('H = get(gcbf,''userdata'');',...
'delete(H.Start); delete(H.Finish); delete(H.Step); ',...
'delete(H.Run); delete(H.Save); delete(H.Type); delete(H.Movie); ',...
'delete(H.Yset); delete(H.Ymin); delete(H.Ymax); delete(H.AClose); ',...
'fields = fieldnames(H); ',...
'trashfields(1) = strmatch(''Start'', fields,''exact''); ',...
'trashfields(2) = strmatch(''Finish'',fields,''exact''); ',...
'trashfields(3) = strmatch(''Step'', fields,''exact''); ',...
'trashfields(4) = strmatch(''Run'', fields,''exact''); ',...
'trashfields(5) = strmatch(''Save'', fields,''exact''); ',...
'trashfields(6) = strmatch(''Type'', fields,''exact''); ',...
'trashfields(7) = strmatch(''AClose'',fields,''exact''); ',...
'trashfields(8) = strmatch(''Ymin'', fields,''exact''); ',...
'trashfields(9) = strmatch(''Ymax'', fields,''exact''); ',...
'trashfields(10) = strmatch(''Yset'', fields,''exact''); ',...
'trashfields(11) = strmatch(''Movie'',fields,''exact''); ',...
'H = setfield(H,char(fields(trashfields(1))),[]); ',...
'H = setfield(H,char(fields(trashfields(2))),[]); ',...
'H = setfield(H,char(fields(trashfields(3))),[]); ',...
'H = setfield(H,char(fields(trashfields(4))),[]); ',...
'H = setfield(H,char(fields(trashfields(5))),[]); ',...
'H = setfield(H,char(fields(trashfields(6))),[]); ',...
'H = setfield(H,char(fields(trashfields(7))),[]); ',...
'H = setfield(H,char(fields(trashfields(8))),[]); ',...
'H = setfield(H,char(fields(trashfields(9))),[]); ',...
'H = setfield(H,char(fields(trashfields(10))),[]); ',...
'H = setfield(H,char(fields(trashfields(11))),[]); ',...
'set(H.gui,''userdata'',H); clear H trashfields fields; '));
set(H.gui,'userdata',H);
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -