www.gusucode.com > wavelet工具箱matlab源码程序 > wavelet/wavelet/dw1dsupm.m

    function [out1,out2] = dw1dsupm(option,win_dw1dtool,in3)
%DW1DSUPM Discrete wavelet 1-D superimpose mode manager.
%   [OUT1,OUT2] = DW1DSUPM(OPTION,WIN_DW1DTOOL,IN3)

%   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 12-Mar-96.
%   Last Revision: 10-Jun-2013.
%   Copyright 1995-2013 The MathWorks, Inc.
%   $Revision: 1.16.4.8 $

% MemBloc1 of stored values.
%---------------------------
n_param_anal   = 'DWAn1d_Par_Anal';
ind_lev_anal   = 4;
ind_axe_ref    = 5;
ind_act_option = 6;
ind_ssig_type  = 7;

% Tag property of objects.
%-------------------------
tag_axeappini = 'Axe_AppIni';
tag_axedetini = 'Axe_DetIni';
tag_axecfsini = 'Axe_CfsIni';
tag_axecolmap = 'Axe_ColMap';
tag_s_inapp   = 'Sig_in_App';
tag_ss_inapp  = 'SSig_in_App';
tag_s_indet   = 'Sig_in_Det';
tag_ss_indet  = 'SSig_in_Det';
tag_app       = 'App';
tag_det       = 'Det';
tag_img_cfs   = 'Img_Cfs';
tag_img_sca   = 'Img_Sca';

children    = get(win_dw1dtool,'Children');
axe_handles = findobj(children,'flat','Type','axes');

switch option
    case 'view'
        % in3 = old_mode or ...
        % in3 = -1 : same mode
        % in3 =  0 : clean
        %-------------------------
        [opt_act,Level_Anal] = wmemtool('rmb',win_dw1dtool,n_param_anal,...
                          ind_act_option,ind_lev_anal);
        old_mode = in3;
        [flg_axe,flg_sa,flg_app,flg_sd,flg_det] = ...
                        dw1dvmod('get_vm',win_dw1dtool,4);
        lev2    = Level_Anal+2;
        v_flg   = [flg_sa , flg_app , flg_sd , flg_det , flg_axe(3)];
        if flg_axe(1)== 0 , v_flg(1:lev2) = zeros(1,lev2); end
        if flg_axe(2)== 0 , v_flg(lev2+1:2*lev2) = zeros(1,lev2); end
        if flg_axe(3)== 0 , v_flg(2*lev2+1) = 0; end

        vis_str = getonoff(v_flg);
        v_s_app = vis_str{1};
        v_ss_app= vis_str{2};
        v_app   = vis_str(3:lev2);
        v_s_det = vis_str{lev2+1};
        v_ss_det= vis_str{lev2+2};
        v_det   = vis_str(lev2+3:2*lev2);
        v_cfs   = vis_str{2*lev2+1};

        axe_hdl     = dw1dscrm('axes',win_dw1dtool,flg_axe);
        lin_handles = findobj(axe_hdl,'Type','line');
        img_handles = findobj(axe_hdl,'Type','image');
        s_in_app    = findobj(lin_handles,'Tag',tag_s_inapp);
        s_in_det    = findobj(lin_handles,'Tag',tag_s_indet);
        app         = findobj(lin_handles,'Tag',tag_app);
        ss_in_app   = findobj(lin_handles,'Tag',tag_ss_inapp);
        ss_in_det   = findobj(lin_handles,'Tag',tag_ss_indet);
        det         = findobj(lin_handles,'Tag',tag_det);
        img_cfs     = findobj(img_handles,'Tag',tag_img_cfs);
        img_sca     = findobj(img_handles,'Tag',tag_img_sca);

        if isempty(s_in_app)
            x = dw1dfile('sig',win_dw1dtool);
            xmin = 1;               xmax = length(x);
            ymin = min(x)-eps;      ymax = max(x)+eps;
            set(axe_hdl(1:3),'XLim',[xmin xmax]);
            col_s = wtbutils('colors','sig');
            line(...
                 'Parent',axe_hdl(1),            ...
                 'XData',xmin:xmax,'YData',x,  ...
                 'Color',col_s,'Visible',v_s_app,'Tag',tag_s_inapp);
            line(...
                 'Parent',axe_hdl(2),            ...
                 'XData',xmin:xmax,'YData',x,  ...
                 'Color',col_s,'Visible',v_s_det,'Tag',tag_s_indet);
        else
            set(s_in_app,'Visible',v_s_app);
            set(s_in_det,'Visible',v_s_det);
        end
        if isempty(ss_in_app)
            x = dw1dfile('ssig',win_dw1dtool);
            col_ss = wtbutils('colors','ssig');
            line(...
                 'Parent',axe_hdl(1),              ...
                 'XData',1:length(x),'YData',x,  ...
                 'Color',col_ss,'Visible',v_ss_app,...
                 'Tag',tag_ss_inapp);
            line(...
                 'Parent',axe_hdl(2),              ...
                 'XData',1:length(x),'YData',x,  ...
                 'Color',col_ss,'Visible',v_ss_det,...
                 'Tag',tag_ss_indet);
        else
            set(ss_in_app,'Visible',v_ss_app);
            set(ss_in_det,'Visible',v_ss_det);
        end

        if isempty(app)
            x       = dw1dfile('app',win_dw1dtool,1:Level_Anal);
            app     = zeros(1,Level_Anal);
            col_app = wtbutils('colors','app',Level_Anal);
            axAct   = axe_hdl(1);
            for k = 1:Level_Anal
                app(k) = line('Parent',axAct, ...
                    'XData',1:size(x,2),...
                    'YData',x(k,:),       ...
                    'Color',col_app(k,:), ...
                    'Visible',v_app{k},   ...
                    'Tag',tag_app,        ...
                    'UserData',k          ...
                    );
            end
        else
            for k =1:Level_Anal
                lin = app(k);
                ind = get(lin,'UserData');
                set(lin,'Visible',v_app{ind}); 
            end
        end
        ss_type = wmemtool('rmb',win_dw1dtool,n_param_anal,ind_ssig_type);
        if      strcmp(ss_type,'ss'), str_ss = 'SS';
        elseif  strcmp(ss_type,'ds'), str_ss = 'DS';
        elseif  strcmp(ss_type,'cs'), str_ss = 'CS';
        end
        if strcmp(opt_act,'synt')
            ini_str = 'OSS';
        else
            ini_str = 'Sig';
        end
        if v_flg(1)==1
            if v_flg(2)==1
                msgKey = [ini_str '_' str_ss '_AppS']; 
            else    
                msgKey = [ini_str  '_AppS'];     
            end
        else
            if v_flg(2)==1
                msgKey = [str_ss  '_AppS'];      
            else    
                msgKey = 'AppS';   
            end
        end
        ind = find(flg_app==1);
        if ~isempty(ind)
            numLev = [];
            for k = ind
                numLev = [numLev ' ' sprintf('%.0f',k)]; %#ok<AGROW>
            end
        else
            numLev = '';
        end
        wtitle(getWavMSG(['Wavelet:dw1dRF:' msgKey],numLev),'Parent',axe_hdl(1));
        if isempty(det)
            ll = findobj([s_in_det,ss_in_det],'Visible','on');
            if isempty(ll)
                [x,set_ylim,ymin,ymax] = ...
                        dw1dfile('det',win_dw1dtool,1:Level_Anal,1);
                ymin = min(ymin);
                ymax = max(ymax);
                set_ylim = prod(set_ylim);
            else
                set_ylim = 0;
                x = dw1dfile('det',win_dw1dtool,1:Level_Anal);
            end
            det     = zeros(1,Level_Anal);
            col_det = wtbutils('colors','det',Level_Anal);
            axAct   = axe_hdl(2);
            for k = 1:Level_Anal
                det(k) = line(...
                    'Parent',axAct, ...
                    'XData',1:size(x,2),...
                    'YData',x(k,:),       ...
                    'Color',col_det(k,:), ...
                    'Visible',v_det{k},   ...
                    'Tag',tag_det,        ...
                    'UserData',k          ...
                    );
            end
            if set_ylim , set(axAct,'YLim',[ymin ymax]); end
        else
            for k =1:Level_Anal
                lin = det(k);
                ind = get(lin,'UserData');
                set(lin,'Visible',v_det{ind}); 
            end
        end
        
        if v_flg(lev2+1)==1
            if v_flg(5)==1
                msgKey = [ini_str '_' str_ss '_DetS']; 
            else    
                msgKey = [ini_str '_DetS'];     
            end
        else
            if v_flg(lev2+2)==1
                msgKey = [str_ss '_DetS'];      
            else    
                msgKey = 'DetS';   
            end
        end
        ind = find(flg_det==1);
        if ~isempty(ind)
            numLev = [];
            for k = ind
                numLev = [numLev ' ' sprintf('%.0f',k)]; %#ok<AGROW>
            end
        else
            numLev = '';
        end
        wtitle(getWavMSG(['Wavelet:dw1dRF:' msgKey],numLev),'Parent',axe_hdl(2));

        ax_hdl = axe_hdl(3);
        [rep,ccfs_vm,levs,xlim,nb_cla] = ...
        dw1dmisc('tst_vm',win_dw1dtool,4,ax_hdl,1:Level_Anal);
        if rep==1 ,  delete(img_cfs); img_cfs = []; end
        if isempty(img_cfs)
            [x,xlim1,xlim2,~,~,nb_cla,levs,ccfs_vm] = ...
                    dw1dmisc('col_cfs',win_dw1dtool,ccfs_vm,levs,xlim,nb_cla);
            levlab  = flipud(int2str(levs(:)));
            image(flipud(x),...
                'Visible',v_cfs,'Tag',tag_img_cfs,...
                'UserData',[ccfs_vm,levs,xlim1,xlim2,nb_cla],...
                'Parent',ax_hdl);
            xlim    = get(axe_hdl(1),'XLim');
            set(ax_hdl, ...
                'XLim',xlim,              ...
                'YTickLabelMode','manual',...
                'YTick',1:length(levs), ...
                'YTickLabel',levlab,      ...
                'YLim',[0.5 Level_Anal+0.5], ...
                'Tag',tag_axecfsini       ...
                );
            wylabel(getWavMSG('Wavelet:dw1dRF:LevNum'),'Parent',ax_hdl);
            clear x
            ax_hdl = axe_hdl(4);
            image([0 1],[0 1],1:nb_cla,...
                    'Visible',v_cfs,...
                    'Tag',tag_img_sca,...
                    'Parent',ax_hdl);
            set(ax_hdl,...
                    'XTicklabel',[],'YTickLabel',[],...
                    'XTick',[],'YTick',[],'Tag',tag_axecolmap);
        else
            set([img_cfs img_sca],'Visible',v_cfs);
        end
        set(axe_hdl(3:4),'Visible',v_cfs);

        axe_act = axe_hdl(3);
        wylabel(getWavMSG('Wavelet:dw1dRF:LevNum'),'Parent',axe_act);
        wtitle(getWavMSG('Wavelet:dw1dRF:DetCfs'),'Parent',axe_act);
        if strcmp(deblankl(v_cfs),'on')
            drawnow
            wsetxlab(axe_hdl(4),getWavMSG('Wavelet:dw1dRF:ScaColMinMax'));
        end

        % Axes attachment.
        %-----------------
        dw1dsupm('dynv',win_dw1dtool,old_mode);

        % Reference axes used by stat. & histo & ...
        %-------------------------------------------
        wmemtool('wmb',win_dw1dtool,n_param_anal,ind_axe_ref,axe_hdl(1));

    case 'dynv'
        % Axes attachment.
        %-----------------
        okNew = dw1dvdrv('test_mode',win_dw1dtool,'sup',in3);
        if okNew>0
            axe_app_ini = findobj(axe_handles,'flat','Tag',tag_axeappini);
            axe_det_ini = findobj(axe_handles,'flat','Tag',tag_axedetini);
            axe_cfs_ini = findobj(axe_handles,'flat','Tag',tag_axecfsini);
            Level_Anal = wmemtool('rmb',win_dw1dtool,n_param_anal,...
                                            ind_lev_anal);
            dynvtool('get',win_dw1dtool,0,'force');
            dynvtool('init',win_dw1dtool,...
                    [],[axe_app_ini axe_det_ini,axe_cfs_ini],[],[1 0], ...
                    '','','dw1dcoor',[win_dw1dtool,double(axe_cfs_ini),Level_Anal]);
        end

    case 'del_ss'
        lin_handles = findobj(axe_handles,'Type','line');
        ss_app = findobj(lin_handles,'Tag',tag_ss_inapp);
        ss_det = findobj(lin_handles,'Tag',tag_ss_indet);
        delete([ss_app ss_det]);

    case 'clear'
        % in3 new_mode or ...
        % in3 = 0 : clean 
        %--------------------
        new_mode = in3;
        axe_app_ini = findobj(axe_handles,'flat','Tag',tag_axeappini);
        axe_det_ini = findobj(axe_handles,'flat','Tag',tag_axedetini);
        axe_cfs_ini = findobj(axe_handles,'flat','Tag',tag_axecfsini);
        axe_col_map = findobj(axe_handles,'flat','Tag',tag_axecolmap);
        okNew = dw1dvdrv('test_mode',win_dw1dtool,'sup',new_mode);
        switch okNew
          case 1
              dynvtool('stop',win_dw1dtool);
              hdl_axes = [axe_app_ini,axe_det_ini,axe_cfs_ini,axe_col_map];
              set(wfindobj(hdl_axes),'Visible','off');
              cleanaxe(hdl_axes);
              drawnow;

          case 2  % Show and Scroll Mode
              lin_handles = findobj(axe_handles,'Type','line');
              img_handles = findobj(axe_handles,'Type','image');
              s_in_app    = findobj(lin_handles,'Tag',tag_s_inapp);
              s_in_det    = findobj(lin_handles,'Tag',tag_s_indet);
              ss_in_app   = findobj(lin_handles,'Tag',tag_ss_inapp);
              ss_in_det   = findobj(lin_handles,'Tag',tag_ss_indet);
              img_cfs     = findobj(img_handles,'Tag',tag_img_cfs);
              old_app = findobj(axe_app_ini,'Tag',tag_app);
              out1    = findobj(old_app,'UserData',1);
              if ~isempty(out1)
                  old_app = old_app(old_app~=out1);
              end
              old_det = findobj(axe_det_ini,'Tag',tag_det);
              out2    = findobj(old_det,'UserData',1);
              if ~isempty(out2)
                  old_det = old_det(old_det~=out2);
              end
              set([s_in_app s_in_det out1 ...
                   ss_in_app ss_in_det out2 img_cfs],'Visible','off');
              delete([old_app' old_det']);
        end

    otherwise
        errargt(mfilename,getWavMSG('Wavelet:moreMSGRF:Unknown_Opt'),'msg');
        error(message('Wavelet:FunctionArgVal:Invalid_Input'));
end