⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gui_topo_animate.m

📁 Matlab下的EEG处理程序库
💻 M
📖 第 1 页 / 共 2 页
字号:
        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 + -