dynvtool.m
上传用户:haiyisale
上传日期:2013-01-09
资源大小:3246k
文件大小:49k
源码类别:

波变换

开发平台:

Matlab

  1. function varargout = dynvtool(option,fig,varargin)
  2. %DYNVTOOL Dynamic visualization tool.
  3. %   VARARGOUT = DYNVTOOL(OPTION,FIG,VARARGIN)
  4. %
  5. %   option = 'create'
  6. %   option = 'attach' 
  7. %   option = 'init'
  8. %   option = 'go'
  9. %   option = 'stop'
  10. %   option = 'on'
  11. %   option = 'fcn_w'
  12. %   option = 'close'
  13. %   option = 'cleanXYPos'
  14. %
  15. %   option = 'ini_his'
  16. %   option = 'get'
  17. %   option = 'put'
  18. %   option = 'zoom+'
  19. %   option = 'zoom-'
  20. %   option = 'center'
  21. %
  22. %   option = 'visible'
  23. %   option = 'hide'
  24. %   option = 'show'
  25. %
  26. %   option = 'wmb'
  27. %   option = 'rmb'
  28. %   option = 'handles'
  29. %   M. Misiti, Y. Misiti, G. Oppenheim, J.M. Poggi 01-Nov-95.
  30. %   Last Revision: 22-May-2003.
  31. %   Copyright 1995-2004 The MathWorks, Inc.
  32. %   $Revision: 1.18.4.2 $ $Date: 2004/03/15 22:40:26 $
  33. %----------------------------------
  34. % DynVTool MemoryBloc Structure.
  35. %----------------------------------
  36. % Structure:
  37. %   handles = Structure of handles.
  38. %   DynV_Sel_Box
  39. %   DynV_Line_Hor
  40. %   DynV_Line_Ver 
  41. %   flgTrans
  42. %   linColor
  43. %   axeInd
  44. %   axeCmd
  45. %   axeAct
  46. %   axeSel
  47. %   xyConst
  48. %   histPtr
  49. %   histData
  50. %   axeSel
  51. %----------------------------------
  52. memBlocName = 'DynVToolMemBloc';
  53. if nargin<2 , fig = gcf; end
  54. if isempty(find(wfindobj('figure')==fig)) , return; end
  55. % format = '%.0f';    % OLD 
  56. format = '%20.15f'; % NEW
  57. strNumFig = sprintf(format,fig);
  58. switch option
  59.     case 'rmb'
  60.         varargout{1} = wtbxappdata('get',fig,memBlocName);
  61.     case 'wmb'
  62.         wtbxappdata('set',fig,memBlocName,varargin{1});
  63.     case 'handles'
  64.         memB = wtbxappdata('get',fig,memBlocName);
  65.         varargout{1} = memB.handles;
  66.         if length(varargin)>0
  67.           varargout{1} = struct2cell(varargout{1});
  68.           varargout{1} = cat(1,varargout{1}{:});
  69.         end
  70.     case 'get'
  71.         %*************************************************************%
  72.         %** OPTION = 'get' RECUPERATION D'UN ETAT DANS L'HISTORIQUE **%
  73.         %*************************************************************%
  74.         % in4 (optional) force the reset.
  75.         %--------------------------------
  76.         sens          = varargin{1};
  77.         dVTmemB       = dynvtool('rmb',fig);
  78.         DynV_Reg_HPtr = dVTmemB.histPtr;
  79.         data          = dVTmemB.histData;
  80. Txt_History   = dVTmemB.handles.Txt_History;
  81.         Pus_Hist_Init = dVTmemB.handles.Pus_Hist_Init;
  82.         Pus_Hist_Prev = dVTmemB.handles.Pus_Hist_Prev;
  83.         Pus_Hist_Next = dVTmemB.handles.Pus_Hist_Next;
  84.         change        = 'non';
  85.         if sens>0
  86.             m = size(data,1);
  87.             if DynV_Reg_HPtr<m
  88.                 DynV_Reg_HPtr = DynV_Reg_HPtr+1;
  89.                 if DynV_Reg_HPtr==m
  90.                     set(Pus_Hist_Next,'Enable','Off');
  91.                 end
  92.                 set([Pus_Hist_Prev,Pus_Hist_Init],'Enable','On');
  93.                 change = 'oui';
  94.             end
  95.         elseif (DynV_Reg_HPtr>1) || (nargin==4)
  96.             if sens==0
  97.                 DynV_Reg_HPtr = 1;
  98.             elseif sens<0
  99.                 DynV_Reg_HPtr = DynV_Reg_HPtr-1;
  100.             end
  101. if nargin==4
  102.          set([Txt_History,Pus_Hist_Init, ...
  103. Pus_Hist_Prev,Pus_Hist_Next],'Enable','Off');
  104. else
  105. set(Pus_Hist_Next,'Enable','On');
  106. end
  107.             if DynV_Reg_HPtr==1
  108.                 set([Pus_Hist_Prev,Pus_Hist_Init],'Enable','Off');
  109.             end
  110.             change = 'oui';
  111.         end
  112.         if change=='oui'
  113.             dVTmemB.histPtr = DynV_Reg_HPtr;
  114.             Edi_PosX = dVTmemB.handles.Edi_PosX;
  115.             Edi_PosY = dVTmemB.handles.Edi_PosY;
  116.             dVTmemB = mngmbtn('delLines',fig,'All',dVTmemB);
  117.             if isempty(data) , return; end
  118.             don = data(DynV_Reg_HPtr,:);
  119.             [m p] = size(don);
  120.             if p>1
  121.                 axe_hdls = [dVTmemB.axeInd dVTmemB.axeAct];
  122.                 if don(1)~=0
  123.                     lig = don(1);
  124.                     col = don(2);
  125.                     His_don    = zeros(lig,col);
  126.                     His_don(:) = don(3:lig*col+2);
  127.                     k = 3+lig*col;
  128.                     %------ depilage d'un etat ------%
  129.                     fcns = get(Pus_Hist_Init,'UserData');
  130.                     feval(fcns(2,:),His_don);
  131.                 else
  132.                     k = 3;
  133.                 end
  134.                 for i = 1:length(axe_hdls)
  135.                     x = [don(k) don(k+1)];
  136.                     y = [don(k+2) don(k+3)];
  137.                     k = k+4;
  138.                     h = axe_hdls(i);
  139.                     if any(x~=get(h,'XLim')) || any(y~=get(h,'YLim'))
  140.                         set(h,'XLim',x,'YLim',y);
  141.                     end
  142.                 end
  143.             end
  144.         end
  145.     case 'put'
  146.         %******************************************************%
  147.         %** OPTION = 'put' AJOUT D'UN ETAT DANS L'HISTORIQUE **%
  148.         %******************************************************%
  149.         dVTmemB       = dynvtool('rmb',fig);
  150. Txt_History   = dVTmemB.handles.Txt_History;
  151.         Pus_Hist_Init = dVTmemB.handles.Pus_Hist_Init;
  152.         Pus_Hist_Prev = dVTmemB.handles.Pus_Hist_Prev;
  153.         Pus_Hist_Next = dVTmemB.handles.Pus_Hist_Next;
  154.         DynV_Axe_Ind  = dVTmemB.axeInd;
  155.         DynV_Axe_Act  = dVTmemB.axeAct;
  156.         axe_hdls      = [DynV_Axe_Ind DynV_Axe_Act];
  157.         coor = [];
  158.         for i = 1:length(axe_hdls)
  159.             coor = [coor get(axe_hdls(i),'XLim') get(axe_hdls(i),'YLim')];
  160.         end
  161.         fcns = get(Pus_Hist_Init,'UserData');
  162.         %--- empilage de l'etat (fonction utilisateur) ---%
  163.         z1  = eval(fcns(1,:));
  164.         s   = size(z1);
  165.         val = z1(:)';
  166.         DynV_Reg_HPtr = dVTmemB.histPtr;
  167.         if DynV_Reg_HPtr~=0
  168.             data = dVTmemB.histData;
  169.             data = [data(1:DynV_Reg_HPtr,:);[s val coor]];
  170.         else
  171.             data = [s val coor];
  172.         end
  173.         DynV_Reg_HPtr = size(data,1);
  174.         if DynV_Reg_HPtr>1
  175.             set([Txt_History,Pus_Hist_Prev,Pus_Hist_Init],'Enable','On');
  176.         end
  177.         dVTmemB.histPtr  = DynV_Reg_HPtr;
  178.         dVTmemB.histData = data;
  179.         dynvtool('wmb',fig,dVTmemB);
  180.         set(Pus_Hist_Next,'Enable','Off');
  181.     case 'ini_his'
  182.         %*******************************************************%
  183.         %** OPTION = 'ini_his' INITIALISATION DE L'HISTORIQUE **%
  184.         %*******************************************************%
  185.         if nargin==3 , dynvtool('get',fig,0); end
  186.         dVTmemB       = dynvtool('rmb',fig);
  187. Txt_History   = dVTmemB.handles.Txt_History;
  188.         Pus_Hist_Init = dVTmemB.handles.Pus_Hist_Init;
  189.         Pus_Hist_Prev = dVTmemB.handles.Pus_Hist_Prev;
  190.         Pus_Hist_Next = dVTmemB.handles.Pus_Hist_Next;
  191.         Edi_PosX      = dVTmemB.handles.Edi_PosX;
  192.         Edi_PosY      = dVTmemB.handles.Edi_PosY;
  193.         dVTmemB.histPtr = 0;
  194.         dVTmemB.histData = [];
  195.         set([Txt_History,Pus_Hist_Init, ...
  196.      Pus_Hist_Prev,Pus_Hist_Next],'Enable','Off');
  197.         if nargin==4
  198.             fcn_put = varargin{1};
  199.             fcn_get = varargin{2};
  200.             if isempty(fcn_put) , fcn_put='[]'; end
  201.             if isempty(fcn_get) , fcn_get='[]'; end
  202.             space  = ' ' ;
  203.             c1 = size(fcn_put,2);
  204.             c2 = size(fcn_get,2);
  205.             if c2>c1
  206.                 fcn_sto = [fcn_put space*ones(1,c2-c1); fcn_get];
  207.             else
  208.                 fcn_sto = [fcn_put ; fcn_get space*ones(1,c1-c2)];
  209.             end
  210.             set(Pus_Hist_Init,'UserData',fcn_sto);
  211.             set(Pus_Hist_Prev,'UserData','');
  212.             set(Pus_Hist_Next,'UserData','');
  213.         end
  214.         set(Edi_PosX,'String','X = ');
  215.         set(Edi_PosY,'String','Y = ');
  216.         dynvtool('wmb',fig,dVTmemB);
  217.     case {'zoom+','zoom-'}
  218.         %*****************************************************%
  219.         %** OPTION = 'zoom+' or 'zoom-'   GESTION DES ZOOMS **%
  220.         %*****************************************************%
  221.         dir = varargin{1};
  222.         dVTmemB = dynvtool('rmb',fig);
  223.         DynV_Sel_Box = dVTmemB.DynV_Sel_Box;
  224.         if isempty(DynV_Sel_Box)
  225. WarnString = strvcat(...
  226. 'To zoom, select an area in one of plots by holding down', ...
  227. 'the left-mouse button and dragging. Then click on the',...
  228. 'appropriate zoom button.');
  229. wwarndlg(WarnString,'Wavelet Toolbox Zoom','bloc')
  230. return;
  231. end
  232.         
  233.         pzbx = get(DynV_Sel_Box,'XData');
  234.         pzby = get(DynV_Sel_Box,'YData');
  235.         xmin = min(pzbx);       xmax = max(pzbx);
  236.         ymin = min(pzby);       ymax = max(pzby);
  237.         dVTmemB = mngmbtn('delLines',fig,'All',dVTmemB);
  238.         if (xmin<xmax) && (ymin<ymax)
  239.             DynV_Axe_Ind = dVTmemB.axeInd;
  240.             DynV_Axe_Sel = dVTmemB.axeSel;
  241.             if ~isempty(DynV_Axe_Ind) && ...
  242.                ~isempty(find(DynV_Axe_Sel==DynV_Axe_Ind))
  243.                 DynV_Axe_Act = DynV_Axe_Sel;
  244.                 DynV_XY_Const = [0 0];
  245.             else
  246.                 DynV_Axe_Act  = dVTmemB.axeAct;
  247.                 DynV_XY_Const = dVTmemB.xyConst;
  248.             end
  249.             %--- En direction des x ---%
  250.             if dir(1)~=0
  251.                 %-- Agrandir --%
  252.                 if strcmp(option,'zoom+')
  253.                     ux = [xmin xmax];
  254.                 %-- Diminuer --%
  255.                 elseif strcmp(option,'zoom-')
  256.                     xL  = get(DynV_Axe_Sel,'XLim');
  257.                     ux1 = (xL(1)-xmax)*xL(1)+(xmin-xL(1))*xL(2);
  258.                     ux2 = (xmin-xL(2))*xL(2)+(xL(2)-xmax)*xL(1);
  259.                     ux  = [ux1 ux2]/(xmin-xmax);
  260.                 end
  261.                 if DynV_XY_Const(1)~=0
  262.                     set(DynV_Axe_Act,'XLim',ux);
  263.                 else
  264.                     set(DynV_Axe_Sel,'XLim',ux);
  265.                 end
  266.             end
  267.             %--- En direction des y ---%
  268.             if dir(2)~=0
  269.                 %-- Agrandir --%
  270.                 if strcmp(option,'zoom+')
  271.                     uy = [ymin ymax];
  272.                 %-- Diminuer --%
  273.                 elseif strcmp(option,'zoom-')
  274.                     yL  = get(DynV_Axe_Sel,'YLim');
  275.                     uy1 = (yL(1)-ymax)*yL(1)+(ymin-yL(1))*yL(2);
  276.                     uy2 = (ymin-yL(2))*yL(2)+(yL(2)-ymax)*yL(1);
  277.                     uy  = [uy1 uy2]/(ymin-ymax);
  278.                 end
  279.                 if DynV_XY_Const(2)~=0
  280.                     set(DynV_Axe_Act,'YLim',uy);
  281.                 else
  282.                     set(DynV_Axe_Sel,'YLim',uy);
  283.                 end
  284.             end
  285.             dynvtool('put',fig);
  286.         end
  287.     case 'center'
  288.         btn = varargin{1};
  289.         dir = varargin{2};
  290.         if isstruct(btn)   % Sometimes: Version V3
  291.             btn = btn.Edi_Center;
  292.         end
  293.         dVTmemB      = dynvtool('rmb',fig);
  294.         DynV_Axe_Sel = dVTmemB.axeSel;
  295.         if isempty(DynV_Axe_Sel)
  296.             DynV_Axe_Act  = dVTmemB.axeAct;
  297.             DynV_XY_Const = dVTmemB.xyConst;
  298.             if isempty(DynV_Axe_Act) , return; end
  299.             DynV_Axe_Sel  = DynV_Axe_Act(1);
  300.         else
  301.             DynV_Axe_Ind = dVTmemB.axeInd;
  302.             if ~isempty(DynV_Axe_Ind) && ...
  303.                ~isempty(find(DynV_Axe_Sel==DynV_Axe_Ind))
  304.                 DynV_Axe_Act  = DynV_Axe_Sel;
  305.                 DynV_XY_Const = [0 0];
  306.             else
  307.                 DynV_Axe_Act  = dVTmemB.axeAct;
  308.                 DynV_XY_Const = dVTmemB.xyConst;
  309.             end
  310.         end
  311.         strval = get(btn,'String');
  312.         dVTmemB = mngmbtn('delLines',fig,'All',dVTmemB);
  313.         if isempty(DynV_Axe_Act) , return; end
  314.         [val_centre,count,err] = sscanf(strval,'%f');
  315.         if count==1 && isempty(err)
  316.             if length(DynV_Axe_Act)==1 , seul = 1; else , seul = 0; end
  317.             %--- Centrer par rapport a x ---%
  318.             if dir==0
  319.                 if seul || DynV_XY_Const(1)~=0
  320.                     laxe = DynV_Axe_Act(1);
  321.                 else
  322.                     laxe = DynV_Axe_Sel;
  323.                 end
  324.                 if isempty(laxe) , return; end
  325.                 x = get(laxe,'XLim');
  326.                 la = (x(2)-x(1))/2;
  327.                 xmin = val_centre-la;
  328.                 xmax = val_centre+la;
  329.                 if seul || DynV_XY_Const(1)~=0
  330.                     set(DynV_Axe_Act,'XLim',[xmin xmax]);
  331.                 else
  332.                     set(DynV_Axe_Sel,'XLim',[xmin xmax]);
  333.                 end
  334.             %--- Centrer par rapport a y ---%
  335.             elseif dir==1
  336.                 if seul || DynV_XY_Const(2)~=0
  337.                     laxe = DynV_Axe_Act(1);
  338.                 else
  339.                     laxe = DynV_Axe_Sel;
  340.                 end
  341.                 if isempty(laxe) , return; end
  342.                 y = get(laxe,'YLim');
  343.                 la = (y(2)-y(1))/2;
  344.                 ymin = val_centre-la;
  345.                 ymax = val_centre+la;
  346.                 if seul || DynV_XY_Const(2)~=0
  347.                     set(DynV_Axe_Act,'YLim',[ymin ymax]);
  348.                 else
  349.                     set(DynV_Axe_Sel,'YLim',[ymin ymax]);
  350.                 end
  351.             else
  352.                 return;
  353.             end
  354.             dynvtool('put',fig);
  355.         end
  356.         set(btn,'String','');
  357.     case {'Install_V3','Install_V3_CB','create','create_V3'}
  358.         % Create structure.
  359.         %------------------
  360.         dVTmemB.handles   = [];
  361.         dVTmemB.Enable_Style = 0;
  362.         dVTmemB.DynV_Sel_Box  = [];
  363.         dVTmemB.DynV_Line_Hor = [];
  364.         dVTmemB.DynV_Line_Ver = [];
  365.         dVTmemB.flgTrans  = 0;
  366.         dVTmemB.linColor  = [1 0 0];
  367.         dVTmemB.axeInd    = [];
  368.         dVTmemB.axeCmd    = [];
  369.         dVTmemB.axeAct    = [];
  370.         dVTmemB.axeSel    = [];
  371.         dVTmemB.xyConst   = [0 0];
  372.         dVTmemB.histPtr   = 0;
  373.         dVTmemB.histData  = [];
  374.         %------------------------------------------
  375.         % Enable_Style Values: -1, 0 or 1 
  376.         % Style of Controls Used by  'set_BtnOnOff'
  377.         %------------------------------------------
  378.         switch option
  379.             case 'create' % OLD VERSION
  380.                 [handles,dynVPos] = CreateDynVTool(fig,varargin{:});
  381.             case {'create_V3','Install_V3','Install_V3_CB'}
  382.                 handles = varargin{1};
  383.                 values = {...
  384.                     handles.Fra_DynVTool,   ...
  385.                     handles.Pus_ZoomXPlus,  handles.Pus_ZoomXMinus,  ... 
  386.                     handles.Pus_ZoomYPlus,  handles.Pus_ZoomYMinus,  ... 
  387.                     handles.Pus_ZoomXYPlus, handles.Pus_ZoomXYMinus, ... 
  388.                     handles.Fra_Center,     handles.Txt_Center,      ...
  389.                     handles.Pus_CenterX,    handles.Pus_CenterY,     ...
  390.                     handles.Edi_Center,     ...
  391.                     handles.Fra_Info,       handles.Fra_Info_Bis,  handles.Txt_Info,  ...
  392.                     handles.Edi_PosX,       handles.Edi_PosY,        ...
  393.                     handles.Fra_Hist,       handles.Txt_History,     ...
  394.                     handles.Pus_Hist_Init,  handles.Pus_Hist_Prev, handles.Pus_Hist_Next,   ...
  395.                     handles.Tog_View_Axes   ...
  396.                     };
  397.                 fields = {...
  398.                     'Fra_DynVTool',                      ...
  399.                     'Pus_ZoomXPlus',  'Pus_ZoomXMinus',  ... 
  400.                     'Pus_ZoomYPlus',  'Pus_ZoomYMinus',  ...
  401.                     'Pus_ZoomXYPlus', 'Pus_ZoomXYMinus', ...
  402.                     'Fra_Center',     'Txt_Center',      ...
  403.                     'Pus_CenterX',    'Pus_CenterY',     ...
  404.                     'Edi_Center',  ...
  405.                     'Fra_Info', 'Fra_Info_Bis', 'Txt_Info',  ...
  406.                     'Edi_PosX', 'Edi_PosY'   ...
  407.                     'Fra_Hist', 'Txt_History',  'Pus_Hist_Init', ...
  408.                     'Pus_Hist_Prev', 'Pus_Hist_Next', ...
  409.                     'Tog_View_Axes'  ...
  410.                     };
  411.                 handles = cell2struct(values,fields,2);
  412.         end
  413.         dVTmemB.handles = handles;
  414.         switch option            
  415.             case {'create','create_V3','Install_V3'}
  416.             case 'Install_V3_CB'
  417.                 set(handles.Pus_ZoomXPlus  ,'Callback',[mfilename '(''zoom+'',gcbf,[1 0])'])
  418.                 set(handles.Pus_ZoomXMinus ,'Callback',[mfilename '(''zoom-'',gcbf,[1 0])'])
  419.                 set(handles.Pus_ZoomYPlus  ,'Callback',[mfilename '(''zoom+'',gcbf,[0 1])'])
  420.                 set(handles.Pus_ZoomYMinus ,'Callback',[mfilename '(''zoom-'',gcbf,[0 1])'])
  421.                 set(handles.Pus_ZoomXYPlus ,'Callback',[mfilename '(''zoom+'',gcbf,[1 1])'])
  422.                 set(handles.Pus_ZoomXYMinus,'Callback',[mfilename '(''zoom-'',gcbf,[1 1])'])
  423.                 format = '%20.15f'; ediStr = sprintf(format,handles.Edi_Center);
  424.                 set(handles.Pus_CenterX    ,'Callback',['dynvtool(''center'',gcbf,' ediStr ',0)'])
  425.                 set(handles.Pus_CenterY    ,'Callback',['dynvtool(''center'',gcbf,' ediStr ',1)'])
  426.                 set(handles.Pus_CenterY    ,'Callback',['dynvtool(''edi_center'',gcbf,' ediStr ')'])                
  427.                 set(handles.Pus_Hist_Init  ,'Callback',[mfilename '(''get'',gcbf,0)'])
  428.                 set(handles.Pus_Hist_Prev  ,'Callback',[mfilename '(''get'',gcbf,-1)'])
  429.                 set(handles.Pus_Hist_Next  ,'Callback',[mfilename '(''get'',gcbf,1)'])
  430.                 set(handles.Tog_View_Axes  ,'Callback',[mfilename '(''set_dynvzaxe'',gcbf,gcbo)']);
  431.         end
  432.         % Add Context Sensitive Help (CSHelp).
  433.         %-------------------------------------
  434.         hdl_DYNV_ZOOM = [ ...     
  435.                 handles.Pus_ZoomXPlus,  handles.Pus_ZoomXMinus,  ... 
  436.                 handles.Pus_ZoomYPlus,  handles.Pus_ZoomYMinus,  ... 
  437.                 handles.Pus_ZoomXYPlus, handles.Pus_ZoomXYMinus  ...
  438.             ];
  439.         hdl_DYNV_INFO = [ ...
  440.                 handles.Fra_Info, handles.Fra_Info_Bis,  handles.Txt_Info,  ...
  441.                 handles.Edi_PosX, handles.Edi_PosY        ...
  442.             ];
  443.         hdl_DYNV_HIST = [ ...        
  444.                 handles.Fra_Hist,       handles.Txt_History,     ...
  445.                 handles.Pus_Hist_Init,  handles.Pus_Hist_Prev, handles.Pus_Hist_Next,   ...
  446.                 handles.Tog_View_Axes   ...
  447.             ];
  448.         hdl_DYNV_ZAXE = handles.Tog_View_Axes;
  449.         wfighelp('add_ContextMenu',fig,hdl_DYNV_ZOOM,'DYNV_ZOOM');
  450.         wfighelp('add_ContextMenu',fig,hdl_DYNV_INFO,'DYNV_INFO');
  451.         wfighelp('add_ContextMenu',fig,hdl_DYNV_HIST,'DYNV_HIST');
  452.         wfighelp('add_ContextMenu',fig,hdl_DYNV_ZAXE,'DYNV_ZAXE');
  453.         %-------------------------------------
  454.         
  455.         % Store the Memory Bloc.
  456.         %-----------------------
  457.         dynvtool('wmb',fig,dVTmemB);
  458.         if nargout>0 
  459.             varargout{1} = get(handles.Fra_DynVTool,'Position');
  460.         end
  461.   
  462.     case {'init','attach','go'}
  463.         %********************************************************%
  464.         %** OPTION = 'attach' CREATION OU MODIFICATION         **%
  465.         %** OPTION = 'init'   CREATION OU MODIFICATION et PUT  **%
  466.         %** OPTION = 'go'     RELANCE DU MODULE APRES UN STOP  **%
  467.         %********************************************************%
  468.         %------------------------ Defaults ----------------------%
  469.         def_ZoomColor = 'r';
  470.         g_ind   = []; g_cmd   = []; g_act   = []; cont_xy = [0 0];
  471.         fcn_put = ''; fcn_get = ''; fcn_wri = ''; par_wri = [];
  472.         fcn_sel = ''; par_sel = []; cbox    = def_ZoomColor;
  473.         inputs = {...
  474.                 g_ind,g_cmd,g_act,cont_xy,fcn_put,fcn_get,...
  475.                 fcn_wri,par_wri,fcn_sel,par_sel,cbox...
  476.                 };
  477.         %----------------------- test inputs ---------------------%
  478.         nbin = nargin-2;
  479.         if nbin>0
  480.             inputs(1:nbin) = varargin;
  481.             g_ind   = inputs{1}; g_cmd = inputs{2}; g_act = inputs{3};
  482.             cont_xy = inputs{4};
  483.             fcn_put = inputs{5};
  484.             fcn_get = inputs{6};
  485.             fcn_wri = inputs{7};
  486.             par_wri = inputs{8};
  487.             fcn_sel = inputs{9};
  488.             par_sel = inputs{10};
  489.             cbox    = inputs{11};
  490.         end
  491.         if isempty(fcn_wri) , fcn_wri = 'mngcoor'; end
  492.         Act_Axes = [g_cmd g_act];
  493.         %--------------------------------------------------------%
  494.         dVTmemB       = dynvtool('rmb',fig);
  495.         Fra_DynVTool  = dVTmemB.handles.Fra_DynVTool;
  496.         Edi_PosX = dVTmemB.handles.Edi_PosX;
  497.         Edi_PosY = dVTmemB.handles.Edi_PosY;
  498.         if strcmp(get(Fra_DynVTool,'Visible'),'on');
  499.             DynV_Status = 1;
  500.         else
  501.             DynV_Status = 0;
  502.         end
  503.         if DynV_Status && (~isempty(g_ind) || ~isempty(Act_Axes))
  504.             set(fig,'Interruptible','On');
  505.             action = ['mngmbtn(''down'',' strNumFig ');'];
  506.             set(fig,'WindowButtonDownFcn',action);
  507.         end
  508.         dVTmemB.linColor = cbox;
  509.         dVTmemB.axeInd   = g_ind;
  510.         dVTmemB.axeCmd   = g_cmd;
  511.         dVTmemB.axeAct   = Act_Axes;
  512.         dVTmemB.xyConst  = cont_xy;
  513.         dynvtool('wmb',fig,dVTmemB);
  514.         if strcmp(option,'go')
  515.             dynvtool('get',fig,0);
  516.             set(Edi_PosX,'String','X = ');
  517.             set(Edi_PosY,'String','Y = ');
  518.         else
  519.             dynvtool('ini_his',fig,fcn_put,fcn_get);
  520.         end
  521.         mempos_coor = wmemutil('add',[],fcn_wri);
  522.         mempos_coor = wmemutil('add',mempos_coor,par_wri);
  523.         mempos_coor = wmemutil('add',mempos_coor,fcn_sel);
  524.         mempos_coor = wmemutil('add',mempos_coor,par_sel);
  525.         set(Edi_PosX,'UserData',mempos_coor);
  526.         set(Edi_PosY,'UserData',mempos_coor);
  527.         if strcmp(option,'init') , dynvtool('put',fig); end
  528.         %-------------- stockage des parametres de creation --------------%
  529.         if isempty(g_ind) && isempty(g_cmd) , return; end
  530.         params = [];
  531.         params = wmemutil('add',params,g_ind);
  532.         params = wmemutil('add',params,g_cmd);
  533.         params = wmemutil('add',params,g_act);
  534.         params = wmemutil('add',params,cont_xy);
  535.         params = wmemutil('add',params,fcn_put);
  536.         params = wmemutil('add',params,fcn_get);
  537.         params = wmemutil('add',params,fcn_wri);
  538.         params = wmemutil('add',params,par_wri);
  539.         params = wmemutil('add',params,fcn_sel);
  540.         params = wmemutil('add',params,par_sel);
  541.         params = wmemutil('add',params,cbox);
  542.         VdynData = get(Fra_DynVTool,'UserData');
  543.         ind = wmemutil('ind',VdynData,params);
  544.         if ind==1 , return; end
  545.         max_stack = 3;
  546.         tmp = [];
  547.         tmp = wmemutil('add',tmp,params);
  548.         nb = 1; k=1;
  549.         while (k<=max_stack+ind) && (nb<=max_stack) 
  550.             if k~=ind
  551.                 tmp = wmemutil('add',tmp,wmemutil('get',VdynData,k));
  552.                 nb  = nb+1;
  553.             end
  554.             k = k+1;
  555.         end
  556.         VdynData = tmp;
  557.         set(Fra_DynVTool,'UserData',VdynData);
  558. dynvtool('set_BtnOnOff',fig,'On','Init')
  559. % dynvtool('dynvzaxe_BtnOnOff',fig,'On')
  560.     case 'on'
  561.         %***************************************%
  562.         %** OPTION = 'on' CONNECTER LE MODULE **%
  563.         %***************************************%
  564.         if nargin<3 , ini = 0; else ini = varargin{1}; end
  565.         if ini , dynvtool('get',fig,0,1); end
  566.         dVTmemB = dynvtool('rmb',fig);
  567.         Fra_DynVTool = dVTmemB.handles.Fra_DynVTool;
  568.         VdynData = get(Fra_DynVTool,'UserData');
  569.         if ~isempty(VdynData)
  570.             continu = 1;
  571.             params = wmemutil('get',VdynData);
  572.             [g_ind,params]   = wmemutil('get',params);
  573.             [g_cmd,params]   = wmemutil('get',params);
  574.             [g_act,params]   = wmemutil('get',params);
  575.             [cont_xy,params] = wmemutil('get',params);
  576.             [fcn_put,params] = wmemutil('get',params);
  577.             [fcn_get,params] = wmemutil('get',params);
  578.             [fcn_wri,params] = wmemutil('get',params);
  579.             [par_wri,params] = wmemutil('get',params);
  580.             [fcn_sel,params] = wmemutil('get',params);
  581.             [par_sel,params] = wmemutil('get',params);
  582.             [cbox,params]    = wmemutil('get',params);
  583.         else
  584.             continu = 0;
  585.             g_ind = []; g_cmd = []; g_act = []; 
  586.         end
  587.         dynvaxes = [g_ind g_cmd g_act];
  588.         figaxes = findobj(get(fig,'Children'),'flat','type','axes');
  589.         if ~isempty(setdiff(dynvaxes,figaxes)) , continu = 0; end 
  590.         if continu
  591.             mngmbtn('delLines',fig,'All',dVTmemB);
  592.             set(Fra_DynVTool,'UserData',VdynData);
  593.             dynvtool('go',fig,g_ind,g_cmd,g_act,cont_xy,...
  594.                     fcn_put,fcn_get,fcn_wri,par_wri,fcn_sel,par_sel,cbox);
  595.         else
  596.             dynvtool('attach',fig);
  597.         end
  598.     case 'stop'
  599.         %**********************************************************%
  600.         %** OPTION = 'stop'  REINITIALISATION ET ARRET DU MODULE **%
  601.         %**********************************************************%
  602.         if nargin<3 , ini = 1; else , ini = varargin{1}; end
  603.         dynvtool('get',fig,0);
  604.         if ini , dynvtool('ini_his',fig); end
  605.         dynvfcn = ['mngmbtn(''down'',' strNumFig ');'];
  606.         winfcn  = get(fig,'WindowButtonDownFcn');
  607.         if isequal(winfcn,dynvfcn), set(fig,'WindowButtonDownFcn',''); end
  608.         mngmbtn('delLines',fig,'All');
  609.     case 'fcn_w'
  610.         %***********************************************************%
  611.         %** OPTION = 'fcn_w' CHANGEMENT DE LA FONCTION D'ECRITURE **%
  612.         %***********************************************************%
  613.         dVTmemB       = dynvtool('rmb',fig);
  614.         Fra_DynVTool  = dVTmemB.handles.Fra_DynVTool;
  615.         Edi_PosX = dVTmemB.handles.Edi_PosX;
  616.         Edi_PosY = dVTmemB.handles.Edi_PosY;
  617.         VdynData      = get(Fra_DynVTool,'UserData');
  618.         if isempty(VdynData) , return; end
  619.         [params,VdynData] = wmemutil('get',VdynData);
  620.         [g_ind,params]   = wmemutil('get',params);
  621.         [g_cmd,params]   = wmemutil('get',params);
  622.         [g_act,params]   = wmemutil('get',params);
  623.         [cont_xy,params] = wmemutil('get',params);
  624.         [fcn_put,params] = wmemutil('get',params);
  625.         [fcn_get,params] = wmemutil('get',params);
  626.         [fcn_wri,params] = wmemutil('get',params);
  627.         [par_wri,params] = wmemutil('get',params);
  628.         [fcn_sel,params] = wmemutil('get',params);
  629.         [par_sel,params] = wmemutil('get',params);
  630.         [cbox,params]    = wmemutil('get',params);
  631.         fcn_wri = varargin{1};
  632.         if nargin==4 , par_wri = varargin{2}; else , par_wri = []; end 
  633.         if isempty(fcn_wri) , fcn_wri='mngcoor'; end
  634.         mempos_coor = wmemutil('add',[],fcn_wri);
  635.         mempos_coor = wmemutil('add',mempos_coor,par_wri);
  636.         mempos_coor = wmemutil('add',mempos_coor,fcn_sel);
  637.         mempos_coor = wmemutil('add',mempos_coor,par_sel);
  638.         set(Edi_PosX,'UserData',mempos_coor);
  639.         set(Edi_PosY,'UserData',mempos_coor);
  640.         params = [];
  641.         params = wmemutil('add',params,g_ind);
  642.         params = wmemutil('add',params,g_cmd);
  643.         params = wmemutil('add',params,g_act);
  644.         params = wmemutil('add',params,cont_xy);
  645.         params = wmemutil('add',params,fcn_put);
  646.         params = wmemutil('add',params,fcn_get);
  647.         params = wmemutil('add',params,fcn_wri);
  648.         params = wmemutil('add',params,par_wri);
  649.         params = wmemutil('add',params,fcn_sel);
  650.         params = wmemutil('add',params,par_sel);
  651.         params = wmemutil('add',params,cbox);
  652.         VdynData = wmemutil('add',VdynData,params,'top');
  653.         set(Fra_DynVTool,'UserData',VdynData);
  654.     case 'close'
  655.         %********************************************%
  656.         %** OPTION = 'close' DESTRUCTION DU MODULE **%
  657.         %********************************************%
  658.         dVTmemB = dynvtool('rmb',fig);
  659.         if isempty(dVTmemB) ,  return; end
  660.         Fra_DynVTool = dVTmemB.handles.Fra_DynVTool;
  661.         if ~isempty(Fra_DynVTool) , set(Fra_DynVTool,'UserData',''); end
  662.         mngmbtn('delLines',fig,'All',dVTmemB);
  663.     case 'visible'
  664.         dVTmemB = dynvtool('rmb',fig);
  665.         if isempty(dVTmemB) , return; end
  666.         handles = struct2cell(dVTmemB.handles);
  667.         handles = cat(1,handles{:});
  668.         vis = varargin{1};
  669.         set(handles,'Visible',vis);
  670.         switch vis
  671.           case 'off' , dynvtool('stop',fig,0);
  672.           case 'on'  , dynvtool('on',fig,1);
  673.         end
  674.     case 'hide'
  675.         dVTmemB = dynvtool('rmb',fig);
  676.         if isempty(dVTmemB) , return; end
  677.         handles = struct2cell(dVTmemB.handles);
  678.         handles = cat(1,handles{:});
  679.         if ~isempty(handles)
  680.             dynvfcn = ['mngmbtn(''down'',' strNumFig ');'];
  681.             winfcn  = get(fig,'WindowButtonDownFcn');
  682.             if isequal(winfcn,dynvfcn) , set(fig,'WindowButtonDownFcn',''); end
  683.             mngmbtn('delLines',fig,'All',dVTmemB);
  684.             set(handles,'Visible','off');
  685.         end
  686.     case 'show'
  687.         dVTmemB = dynvtool('rmb',fig);
  688.         if isempty(dVTmemB) , return; end
  689.         handles = struct2cell(dVTmemB.handles);
  690.         handles = cat(1,handles{:});
  691.         if ~isempty(handles)
  692.             dynvfcn = ['mngmbtn(''down'',' strNumFig ');'];
  693.             winfcn  = get(fig,'WindowButtonDownFcn');
  694.             set(fig,'WindowButtonDownFcn',dynvfcn);
  695.             set(handles,'Visible','on');
  696.         end
  697.     case 'set_BtnOnOff'
  698. ena_Val = varargin{1};
  699. typCall = varargin{2};
  700.         dVTmemB = dynvtool('rmb',fig);
  701.         if isempty(dVTmemB) , return; end
  702. switch dVTmemB.Enable_Style
  703. case 0 , if ~isequal(typCall,'Init'), return; end
  704. case 1 ,
  705. if isequal(typCall,'Init')
  706. dynvtool('dynvzaxe_BtnOnOff',fig,'On')
  707. return;
  708. end
  709. end
  710.         handles = dVTmemB.handles;
  711. zoomBtn = [...
  712. handles.Pus_ZoomXPlus ;  handles.Pus_ZoomYPlus;  handles.Pus_ZoomXYPlus; ...
  713. handles.Pus_ZoomXMinus ; handles.Pus_ZoomYMinus; handles.Pus_ZoomXYMinus  ...
  714. ];
  715. centerBtn = [handles.Pus_CenterX ; handles.Pus_CenterY ; handles.Txt_Center];
  716. ediCenter = handles.Edi_Center;
  717. infoBtn   = [handles.Edi_PosX ; handles.Edi_PosY];
  718. infoTxt   = handles.Txt_Info;
  719. Txt_History = handles.Txt_History;
  720. Tog_View_Axes = dVTmemB.handles.Tog_View_Axes;
  721. switch typCall
  722. case 'Init'
  723. btn = [zoomBtn ; centerBtn ; ediCenter; ...
  724.    infoTxt ; infoBtn ; Txt_History ; Tog_View_Axes];
  725.                 set(btn,'Enable',ena_Val);
  726. case 'All'
  727.                 set([zoomBtn ; centerBtn ; infoTxt],'Enable',ena_Val);
  728. switch lower(ena_Val)
  729. case 'off'
  730. set(ediCenter,'String','');
  731. set(infoBtn,'Enable',ena_Val);
  732.                     set(infoBtn(1),'String','X = ');
  733.                     set(infoBtn(2),'String','Y = ');
  734. case 'on'
  735. set(infoBtn,'Enable','Inactive');
  736. end
  737. case 'Zoom'
  738.                 set(zoomBtn,'Enable',ena_Val);
  739. case 'Center'
  740. set(centerBtn,'Enable',ena_Val);
  741. if isequal(lower(ena_Val),'off')
  742. set(ediCenter,'String','');
  743. end
  744. case 'Info'
  745.                 set(infoTxt,'Enable',ena_Val);
  746. switch lower(ena_Val)
  747. case 'off' , 
  748. set(infoBtn,'Enable',ena_Val);
  749. set(infoBtn(1),'String','X = ');
  750.                         set(infoBtn(2),'String','Y = ');
  751. case 'on'  , set(infoBtn,'Enable','Inactive');
  752. end
  753. end
  754.     case 'dynvzaxe_BtnOnOff'
  755.         dVTmemB = dynvtool('rmb',fig);
  756.         if isempty(dVTmemB) , return; end
  757.         Tog_View_Axes = dVTmemB.handles.Tog_View_Axes;
  758. if length(varargin)<1
  759. ax = wfindobj(get(fig,'Children'), ...
  760. 'flat','type','axes','Visible','on');
  761. if length(ax)<=1 , ena_Val = 'Off'; else , ena_Val = 'On'; end
  762. else
  763. ena_Val = varargin{1};
  764. end
  765. set(Tog_View_Axes,'Enable',ena_Val);
  766.         
  767.     case 'set_dynvzaxe'
  768.         tog = varargin{1};
  769. figPos  = get(fig,'Position');
  770.         figUnit = get(fig,'Units');
  771.         if isequal(lower(figUnit(1:3)),'pix')
  772.             Ymax = figPos(4);
  773.         else
  774.             Ymax = 1;
  775.         end
  776.         handles = dynvtool('handles',fig);
  777. dynVPos = get(handles.Fra_DynVTool,'Position');
  778. graPos  = [dynVPos(1),dynVPos(4)*1.05,dynVPos(3),Ymax-dynVPos(4)*1.05];
  779. dynvzaxe('ini',fig,graPos,tog)
  780.         
  781.     case 'edi_center'
  782.         edi = varargin{1};
  783.         strval = get(edi,'String');
  784.         [val_centre,count,err] = sscanf(strval,'%f');
  785.         if count==1 && isempty(err)
  786.             ena_Val = 'On'; 
  787.         else
  788.             ena_Val = 'Off';
  789.         end
  790.         dynvtool('set_BtnOnOff',fig,ena_Val,'Center');
  791.         
  792. otherwise
  793.         %********************%
  794.         %** UNKNOWN OPTION **%
  795.         %********************%
  796.         errargt(mfilename,'Unknown Option','msg');
  797.         error('*');
  798. end
  799. %======================================================================%
  800. % INTERNAL FUNCTIONS: DYNVTOOL CONSTRUCTION
  801. %======================================================================%
  802. function [handles,dynVPos] = CreateDynVTool(fig,varargin)
  803. % in3 = xprop (optional)
  804. % in4 = zoom_axe on/off (optional)
  805. %---------------------------------
  806. format = '%20.15f';
  807. strNumFig = sprintf(format,fig);
  808. Enable_Style = 0;
  809. % Get Globals.
  810. %-------------
  811. [Def_TxtBkColor,Def_EdiBkColor,Def_FraBkColor] = ...
  812.     mextglob('get','Def_TxtBkColor','Def_EdiBkColor','Def_FraBkColor');
  813. if nargin<2
  814.     pos = [0 0 1];
  815.     okZoomAxe = 1;
  816. elseif  nargin<3
  817.     pos = [0 0 varargin{1}];
  818.     okZoomAxe = 1;
  819. else
  820.     pos = [0 0 varargin{1}];
  821.     okZoomAxe = varargin{2};
  822. end
  823. fig_units = 'pixels';
  824. old_fig_units = get(fig,'Units');
  825. if ~isequal(old_fig_units,fig_units)
  826.     set(fig,'Units',fig_units)
  827. end
  828. flgTool      = 1+2+4+8+16;
  829. flgTool      = bitset(flgTool,5,okZoomAxe);
  830. posUIC       = getHorPos(fig,pos,flgTool);
  831. JJ           = 1;
  832. dynVPos      = posUIC(JJ,:); JJ = JJ+1;
  833. pos_btngx    = posUIC(JJ,:); JJ = JJ+1;
  834. pos_btndx    = posUIC(JJ,:); JJ = JJ+1;
  835. pos_btngy    = posUIC(JJ,:); JJ = JJ+1;
  836. pos_btndy    = posUIC(JJ,:); JJ = JJ+1;
  837. pos_btngxy   = posUIC(JJ,:); JJ = JJ+1;
  838. pos_btndxy   = posUIC(JJ,:); JJ = JJ+1;
  839. pos_fracent  = posUIC(JJ,:); JJ = JJ+1;
  840. pos_txtcent  = posUIC(JJ,:); JJ = JJ+1;
  841. pos_btncx    = posUIC(JJ,:); JJ = JJ+1;
  842. pos_btncy    = posUIC(JJ,:); JJ = JJ+1;
  843. pos_edcent   = posUIC(JJ,:); JJ = JJ+1;
  844. pos_frapos   = posUIC(JJ,:); JJ = JJ+1;
  845. pos_txtpos   = posUIC(JJ,:); JJ = JJ+1;
  846. pos_frapos2  = posUIC(JJ,:); JJ = JJ+1;
  847. pos_btn_xpos = posUIC(JJ,:); JJ = JJ+1;
  848. pos_btn_ypos = posUIC(JJ,:); JJ = JJ+1;
  849. pos_frahis   = posUIC(JJ,:); JJ = JJ+1;
  850. pos_txthis   = posUIC(JJ,:); JJ = JJ+1;
  851. pos_hinit    = posUIC(JJ,:); JJ = JJ+1;
  852. pos_hprev    = posUIC(JJ,:); JJ = JJ+1;
  853. pos_hnext    = posUIC(JJ,:); JJ = JJ+1;
  854. pos_btnzaxe  = posUIC(JJ,:); JJ = JJ+1;
  855. if ~isequal(get(0,'CurrentFigure'),fig) , figure(fig); end
  856. comFigProp = {'Parent',fig,'Unit',fig_units};
  857. comFraProp = {comFigProp{:},'Style','Frame'};
  858. comPusProp = {comFigProp{:},'Style','Pushbutton'};
  859. comEdiProp = {comFigProp{:},'Style','Edit'};
  860. Fra_DynVTool = uicontrol(...
  861.     comFigProp{:},                  ...
  862.     'Style','Frame',                ...
  863.     'Position',dynVPos,             ...
  864.     'BackGroundColor',Def_FraBkColor...
  865.     );
  866. switch Enable_Style
  867.     case -1
  868.         ena_Zoom = 'On'; ena_Cent = 'On';
  869.         ena_Info = 'On'; ena_Hist = 'On';
  870.     case {0,1}
  871.         ena_Zoom = 'Off'; ena_Cent = 'Off';
  872.         ena_Info = 'Off'; ena_Hist = 'Off';
  873. end
  874. if bitget(flgTool,1)
  875.     enaVal  = 'Off';
  876.     action  = [mfilename '(''zoom+'',' strNumFig ',[1 0])'];
  877.     Pus_ZoomXPlus   = uicontrol(...
  878.         comPusProp{:},        ...
  879.         'Position',pos_btngx, ...
  880.         'String','X+',        ...
  881.         'TooltipString','Zoom in X',...
  882.         'Enable',ena_Zoom,    ...
  883.         'Callback',action     ...
  884.     );
  885.     action  = [mfilename '(''zoom-'',' strNumFig ',[1 0])'];
  886.     Pus_ZoomXMinus   = uicontrol(...
  887.         comPusProp{:},        ...
  888.         'Position',pos_btndx, ...
  889.         'String','X-',        ...
  890.         'TooltipString','Zoom out X',...
  891.         'Enable',ena_Zoom,    ...
  892.         'Callback',action     ...
  893.     );
  894.     action  = [mfilename '(''zoom+'',' strNumFig ',[0 1])'];
  895.     Pus_ZoomYPlus   = uicontrol(...
  896.         comPusProp{:},        ...
  897.         'Position',pos_btngy, ...
  898.         'String','Y+',        ...
  899.         'TooltipString','Zoom in Y',...
  900.         'Enable',ena_Zoom,    ...
  901.         'Callback',action     ...
  902.     );
  903.     action  = [mfilename '(''zoom-'',' strNumFig ',[0 1])'];
  904.     Pus_ZoomYMinus   = uicontrol(...
  905.         comPusProp{:},        ...
  906.         'Position',pos_btndy, ...
  907.         'String','Y-',        ...
  908.         'TooltipString','Zoom out Y',...
  909.         'Enable',ena_Zoom,    ...
  910.         'Callback',action     ...
  911.     );
  912.     action  = [mfilename '(''zoom+'',' strNumFig ',[1 1])'];
  913.     Pus_ZoomXYPlus  = uicontrol(...
  914.         comPusProp{:},        ...
  915.         'Position',pos_btngxy,...
  916.         'String','XY+',       ...
  917.         'TooltipString','Zoom in XY',...
  918.         'Enable',ena_Zoom,    ...
  919.         'Callback',action     ...
  920.     );
  921.     action  = [mfilename '(''zoom-'',' strNumFig ',[1 1])'];
  922.     Pus_ZoomXYMinus  = uicontrol(...
  923.         comPusProp{:},        ...
  924.         'Position',pos_btndxy,...
  925.         'String','XY-',       ...
  926.         'TooltipString','Zoom out XY',...
  927.         'Enable',ena_Zoom,    ...
  928.         'Callback',action     ...
  929.     );
  930. else
  931.     Pus_ZoomXPlus   = [];   Pus_ZoomXMinus   = [];
  932.     Pus_ZoomYPlus   = [];   Pus_ZoomYMinus   = [];
  933.     Pus_ZoomXYPlus  = [];   Pus_ZoomXYMinus  = [];
  934. end
  935. if bitget(flgTool,2)
  936.     Fra_Center   = uicontrol(...
  937.         comFraProp{:},                  ...
  938.         'Position',pos_fracent,         ...
  939.         'BackGroundColor',Def_FraBkColor...
  940.         );
  941.     
  942.     strcent    = wmachdep('center_txt');
  943.     Txt_Center    = uicontrol(...
  944.         comFigProp{:},                  ...
  945.         'Style','Text',                 ...
  946.         'BackGroundColor',Def_FraBkColor,...
  947.         'Position',pos_txtcent,         ...
  948.         'Enable',ena_Cent,              ...
  949.         'String',strcent                ...
  950.     );   
  951.     Edi_Center = uicontrol(...
  952.         comEdiProp{:},                      ...
  953.         'BackGroundColor',Def_EdiBkColor,   ...
  954.         'Position',pos_edcent               ...
  955.     );
  956.     cbFunc = [mfilename '(''edi_center'',' strNumFig  ...
  957.             ',' num2mstr(Edi_Center) ');'];    
  958.     set(Edi_Center,'Callback',cbFunc);
  959.     Pus_CenterX  = uicontrol(...
  960.         comPusProp{:},        ...
  961.         'Position',pos_btncx, ...
  962.         'Enable',ena_Cent,    ...
  963.         'String','X'          ...
  964.         );
  965.     Pus_CenterY  = uicontrol(...
  966.         comPusProp{:},        ...
  967.         'Position',pos_btncy, ...
  968.         'Enable',ena_Cent,    ...
  969.         'String','Y'          ...
  970.         );
  971.     
  972.     cbFunc = [mfilename '(''center'',' strNumFig ',' ...
  973.             num2mstr(Edi_Center)];
  974.     set(Pus_CenterX,'Callback',[cbFunc ',0);']);
  975.     set(Pus_CenterY,'Callback',[cbFunc ',1);']);
  976. else
  977.     Fra_Center = []; Txt_Center = [];
  978.     Edi_Center = []; Pus_CenterX = []; Pus_CenterY = [];
  979. end
  980. if bitget(flgTool,3)
  981.     Fra_Info         = uicontrol(...
  982.         comFraProp{:},                  ...
  983.         'Style','Frame',                ...
  984.         'Unit',fig_units,               ...
  985.         'Position',pos_frapos,          ...
  986.         'BackGroundColor',Def_FraBkColor...
  987.         );
  988.     Txt_Info          = uicontrol(...
  989.         'Parent',fig,                   ...
  990.         'Style','Text',                 ...
  991.         'Unit',fig_units,               ...
  992.         'Enable',ena_Info,              ...
  993.         'BackGroundColor',Def_FraBkColor,...
  994.         'Position',pos_txtpos,          ...
  995.         'String',strvcat(' ','Info',' ') ...
  996.         );
  997.     Fra_Info_Bis        = uicontrol(...
  998.         comFraProp{:},                  ...
  999.         'Position',pos_frapos2,         ...
  1000.         'BackGroundColor',Def_FraBkColor...
  1001.         );
  1002.     Edi_PosX   = uicontrol(...
  1003.         comEdiProp{:},                  ...
  1004.         'BackGroundColor',Def_FraBkColor,...
  1005.         'Enable',ena_Info,              ...
  1006.         'Position',pos_btn_xpos,        ...
  1007.         'String','X = ',                ...
  1008.         'HorizontalAlignment','center'  ...
  1009.         );
  1010.     Edi_PosY   = uicontrol(...
  1011.         comEdiProp{:},                  ...
  1012.         'BackGroundColor',Def_FraBkColor,...
  1013.         'Enable',ena_Info,              ...
  1014.         'Position',pos_btn_ypos,        ...
  1015.         'String','Y = ',                ...
  1016.         'HorizontalAlignment','center'  ...
  1017.         );
  1018. else
  1019.     Fra_Info = []; Txt_Info = []; Fra_Info_Bis = [];
  1020.     Edi_PosX = []; Edi_PosY = [];
  1021. end
  1022. if bitget(flgTool,4)
  1023.     Fra_Hist = uicontrol(...
  1024.         comFraProp{:},                  ...
  1025.         'Position',pos_frahis,          ...
  1026.         'BackGroundColor',Def_FraBkColor...
  1027.         );
  1028.     
  1029.     Txt_History = uicontrol(...
  1030.         'Parent',fig,                   ...
  1031.         'Style','Text',                 ...
  1032.         'Unit',fig_units,               ...
  1033.         'BackGroundColor',Def_FraBkColor,...
  1034.         'Position',pos_txthis,          ...
  1035.         'Enable',ena_Hist,              ...
  1036.         'String',strvcat(' ','History',' ') ...
  1037.         );
  1038.     
  1039.     action = [mfilename '(''get'',' strNumFig ',0);'];
  1040.     Pus_Hist_Init = uicontrol(...
  1041.         comPusProp{:},          ...
  1042.         'Position',pos_hinit,   ...
  1043.         'Enable','Off',         ...
  1044.         'String','<<-',         ...
  1045.         'FontWeight','bold',    ...
  1046.         'Callback',action       ...
  1047.     );
  1048.     action         = [ mfilename '(''get'',' strNumFig ',-1);'];
  1049.     Pus_Hist_Prev  = uicontrol(...
  1050.         comPusProp{:},          ...
  1051.         'Position',pos_hprev,   ...
  1052.         'Enable','Off',         ...
  1053.         'String','<-',          ...
  1054.         'FontWeight','bold',    ...
  1055.         'Callback',action       ...
  1056.     );
  1057.     action         = [mfilename '(''get'',' strNumFig ',1);'];
  1058.     Pus_Hist_Next  = uicontrol(...
  1059.         comPusProp{:},          ...
  1060.         'Position',pos_hnext,   ...
  1061.         'Enable','Off',         ...
  1062.         'String','->',          ...
  1063.         'FontWeight','bold',    ...
  1064.         'Callback',action       ...
  1065.     );
  1066.     set(Pus_Hist_Init,'UserData',[ '[]'; '[]' ]);
  1067.     set(Pus_Hist_Prev,'UserData','');
  1068.     set(Pus_Hist_Next,'UserData','');
  1069. else
  1070.     Fra_Hist = [];
  1071.     Pus_Hist_Init =  [];  Pus_Hist_Prev = []; Pus_Hist_Next = [];
  1072. end
  1073. if bitget(flgTool,5)
  1074.     figPos = get(fig,'Position');
  1075.     graPos = [dynVPos(1),dynVPos(4),dynVPos(3),...
  1076.             figPos(4)-dynVPos(4)]./[figPos(3:4),figPos(3:4)];
  1077.     Tog_View_Axes = uicontrol(...
  1078.         comFigProp{:},         ...
  1079.         'Style','Togglebutton', ...
  1080.         'Position',pos_btnzaxe, ...
  1081.         'String','View Axes',   ...
  1082.         'Enable','Off'          ...
  1083.         );
  1084.     action = ['dynvzaxe(''ini'',' strNumFig ',' num2mstr(graPos) ...
  1085.             ',' num2mstr(Tog_View_Axes)  ');'];
  1086.     action = [mfilename '(''set_dynvzaxe'',' strNumFig ',' ...
  1087.             num2mstr(Tog_View_Axes) ');'];
  1088.     set(Tog_View_Axes,'Callback',action);
  1089. else
  1090.     Tog_View_Axes = [];
  1091. end
  1092. if ~isequal(old_fig_units,fig_units)
  1093.     set(fig,'Units',old_fig_units)
  1094. end
  1095. values = {...
  1096.         Fra_DynVTool,   ...
  1097.         Pus_ZoomXPlus,  Pus_ZoomXMinus,  ... 
  1098.         Pus_ZoomYPlus,  Pus_ZoomYMinus,  ... 
  1099.         Pus_ZoomXYPlus, Pus_ZoomXYMinus, ... 
  1100.         Fra_Center,     Txt_Center,      ...
  1101.         Pus_CenterX,    Pus_CenterY,     ...
  1102.         Edi_Center,     ...
  1103.         Fra_Info,       Fra_Info_Bis,  Txt_Info,  ...
  1104.         Edi_PosX,       Edi_PosY,        ...
  1105.         Fra_Hist,       Txt_History,     ...
  1106.         Pus_Hist_Init,  Pus_Hist_Prev, Pus_Hist_Next,   ...
  1107.         Tog_View_Axes   ...
  1108. };
  1109. fields = {...
  1110.         'Fra_DynVTool',                      ...
  1111.         'Pus_ZoomXPlus',  'Pus_ZoomXMinus',  ... 
  1112.         'Pus_ZoomYPlus',  'Pus_ZoomYMinus',  ...
  1113.         'Pus_ZoomXYPlus', 'Pus_ZoomXYMinus', ...
  1114.         'Fra_Center',     'Txt_Center',      ...
  1115.         'Pus_CenterX',    'Pus_CenterY',     ...
  1116.         'Edi_Center',  ...
  1117.         'Fra_Info', 'Fra_Info_Bis', 'Txt_Info',  ...
  1118.         'Edi_PosX', 'Edi_PosY'   ...
  1119.         'Fra_Hist', 'Txt_History',  'Pus_Hist_Init', ...
  1120.         'Pus_Hist_Prev', 'Pus_Hist_Next', ...
  1121.         'Tog_View_Axes'  ...
  1122.     };
  1123. handles = cell2struct(values,fields,2);
  1124. %-----------------------------------------------------------------------------%
  1125. function posUIC = getHorPos(fig,pos,flags)
  1126. % Get Globals.
  1127. %-------------
  1128. [heightBtn,xSpacing,ySpacing] = ...
  1129.     mextglob('get','Def_Btn_Height','X_Spacing','Y_Spacing');
  1130. okZoomTool = bitget(flags,1);
  1131. okCentTool = bitget(flags,2);
  1132. okInfoTool = bitget(flags,3);
  1133. okHistTool = bitget(flags,4);
  1134. okZAxeTool = bitget(flags,5);
  1135. posUIC  = zeros(23,4);
  1136. pos_f   = get(fig,'Position');
  1137. lmax    = pos(3);
  1138. if (lmax>1) || (lmax<0.5) , lmax = 1; end
  1139. lmax    = ceil(lmax*pos_f(3));
  1140. % Widths of Uicontrols.
  1141. inBox  = 1;            % Flag (buttons inside frame) 
  1142. large  = 180;
  1143. wid(1) = large/5;      % width for Zoom buttons.
  1144. wid(2) = large/3.25;   % width for Center text.
  1145. wid(3) = large/6;      % width for Center buttons.
  1146. wid(4) = large/5;      % width for Info text  (1).
  1147. wid(5) = large/3.2;    % width for Info texts (2).
  1148. wid(6) = large/4;      % width for History text.
  1149. wid(7) = large/7;      % width for History buttons.
  1150. mul = wmachdep('btnZoomAxes');
  1151. wid(8) = mul*large;    % width for View Axes buttons.
  1152. if ~okZAxeTool , wid(8) = 0; end
  1153. bdx     = min([xSpacing,4]);
  1154. bdcadx  = bdx;
  1155. margex  = 2*bdcadx+4*bdx;
  1156. lcad    = 3*wid(1)+wid(2)+2*wid(3)+wid(4)+wid(5)+wid(6)+2*wid(7)+wid(8)+margex;
  1157. deltaW  = lmax-lcad;
  1158. if abs(deltaW)>sqrt(eps)
  1159.     sum1 = (margex+3*wid(1)+2*wid(3)+2*wid(7)+wid(8));
  1160.     sum2 = wid(2)+wid(4)+wid(5)+wid(6);
  1161.     if deltaW>=0
  1162.         mul = (lmax-sum1)/sum2;
  1163.         ind = [2,4,5,6];
  1164.         wid(ind) = wid(ind)*mul;
  1165.     else
  1166.         % mul = lmax/(sum1+sum2);
  1167.         % wid = wid*mul;
  1168.         mul = (lmax-sum2)/sum1;
  1169.         ind = [1,3,7,8];
  1170.         wid(ind) = wid(ind)*mul;
  1171.     end
  1172.     lcad = 3*wid(1)+wid(2)+2*wid(3)+wid(4)+wid(5)+wid(6)+2*wid(7)+wid(8)+margex;
  1173. end
  1174. wid(1) = floor(wid(1));
  1175. wid(2) = floor(wid(2));
  1176. wid(3) = floor(wid(3));
  1177. wid(4) = floor(wid(4));
  1178. wid(6) = floor(wid(6));
  1179. wid(7) = floor(wid(7));
  1180. wid(8) = floor(wid(8));
  1181. wid(5) = lcad-3*wid(1)-wid(2)-2*wid(3)-wid(4)-wid(6)-2*wid(7)-wid(8)-margex;
  1182. bdy    = min([ySpacing,4]);
  1183. bdcady = bdy;
  1184. haut   = heightBtn;
  1185. hautX2 = 2*haut;
  1186. hcad   = hautX2+2*bdcady;
  1187. JJ = 0;
  1188. JJ = JJ+1; posUIC(JJ,:) = [pos(1) pos(2) lcad hcad];        % pos_FraDV
  1189. xl = posUIC(1,1)+bdcadx;
  1190. yh = posUIC(1,2)+hcad-bdcady-haut;
  1191. if okZoomTool
  1192.     JJ = JJ+1; posUIC(JJ,:) = [xl,yh,wid(1),haut];              % pos_btngx
  1193.     JJ = JJ+1; posUIC(JJ,:) = [xl,yh-haut,wid(1),haut];         % pos_btndx
  1194.     JJ = JJ+1; posUIC(JJ,:) = [xl+wid(1),yh,wid(1),haut];       % pos_btngy
  1195.     JJ = JJ+1; posUIC(JJ,:) = [xl+wid(1),yh-haut,wid(1),haut];  % pos_btndy
  1196.     JJ = JJ+1; posUIC(JJ,:) = [xl+2*wid(1),yh,wid(1),haut];     % pos_btngxy
  1197.     JJ = JJ+1; posUIC(JJ,:) = [xl+2*wid(1),yh-haut,wid(1),haut];% pos_btndxy
  1198.     xl = xl+3*wid(1)+bdx;
  1199. end
  1200. if okCentTool
  1201.     if inBox
  1202.         wfra = wid(2)+2*wid(3); dy = bdy/2; hedi = haut-bdy;
  1203.     else
  1204.         wfra = wid(2); dy = 0; hedi = haut-bdy/2;
  1205.     end
  1206.     JJ = JJ+1; posUIC(JJ,:) = [xl,yh-haut,wfra,hautX2];             % pos_fracent
  1207.     JJ = JJ+1; 
  1208.     posUIC(JJ,:) = [xl+bdx/2,yh-haut+bdy/2,wid(2)-bdx,hautX2-bdy];  % pos_txtcent
  1209.     xl = xl+wid(2)-inBox*bdx;
  1210.     JJ = JJ+1; posUIC(JJ,:) = [xl,yh,wid(3),haut-dy];        % pos_btncx
  1211.     JJ = JJ+1; posUIC(JJ,:) = [xl+wid(3),yh,wid(3),haut-dy]; % pos_btncy
  1212.     JJ = JJ+1; posUIC(JJ,:) = [xl,yh-haut+dy,2*wid(3),hedi]; % pos_edcent
  1213.     xl = xl+2*wid(3)+bdx+inBox*bdx;
  1214. end
  1215. if okInfoTool
  1216.     JJ = JJ+1; posUIC(JJ,:) = [xl,yh-haut,wid(4)+wid(5),hautX2];   % pos_frapos
  1217.     JJ = JJ+1; 
  1218.     posUIC(JJ,:) = [xl+bdx/2,yh-haut+bdy/2,wid(4)-bdx,hautX2-bdy]; % pos_txtpos
  1219.     xl = xl+wid(4)+bdx/2;
  1220.     JJ = JJ+1;
  1221.     posUIC(JJ,:) = [xl,yh-haut,wid(5),hautX2];                     % pos_frapos2
  1222.     JJ = JJ+1; 
  1223.     posUIC(JJ,:) = [xl+bdx/2,yh+bdy/2,wid(5)-bdx,haut-bdy];        % pos_btn_xpos
  1224.     JJ = JJ+1; 
  1225.     posUIC(JJ,:) = [xl+bdx/2,yh-haut+bdy/2,wid(5)-bdx,haut-bdy];   % pos_btn_ypos
  1226.     xl = xl+wid(5)+bdx;
  1227. end
  1228. if okHistTool
  1229.     if inBox , wfra = wid(6)+2*wid(7); dy = bdy/2;
  1230.     else , wfra = wid(6); dy = 0; 
  1231.     end
  1232.     JJ = JJ+1; posUIC(JJ,:) = [xl,yh-haut,wfra,hautX2];           % pos_frahis
  1233.     JJ = JJ+1; posUIC(JJ,:) = [xl+bdx/2,yh-haut+bdy/2,...
  1234.                                     wid(6)-bdx,hautX2-bdy];       % pos_txthis
  1235.     xlBtn = xl+wid(6)-inBox*bdx;
  1236.     JJ = JJ+1; posUIC(JJ,:) = [xlBtn,yh-haut+dy,2*wid(7),haut-dy];% pos_hinit
  1237.     JJ = JJ+1; posUIC(JJ,:) = [xlBtn,yh,wid(7),haut-dy];          % pos_hprev
  1238.     JJ = JJ+1; posUIC(JJ,:) = [xlBtn+wid(7),yh,wid(7),haut-dy];   % pos_hnext
  1239.     xl = xl+wid(6)+2*wid(7)+bdx;
  1240. end
  1241. if okZAxeTool
  1242.     JJ = JJ+1; posUIC(JJ,:) = [xl,yh-haut,wid(8),hautX2];     % pos_btnzaxe
  1243. end
  1244. %=============================================================================%