%
% ELLSCALE  draw a speed scale on an ellipse plot 
%
% ELLSCALE  draw a speed scale on an ellipse picture.  Typically
%           called after TELLIPSE, passing the object handle returned 
%           by TELLIPSE.  If TELLIPSE was used in "particle-excursion"
%           mode, then ELLSCALE cannot draw a vector scale, as there is 
%           to draw.
%
%           htel MUST be the handle returned by TELLIPSE.
%           TELLIPSE returns this number to the main
%           workspace.
%
%           unitn (optional) is the flag that indicates which
%           units-text ELLSCALE should put on the figure to 
%           correspond to the vector magnitudes:
% 
%              If omitted, ELLSCALE uses the string 'units'.
%              If unitn=1, ELLSCALE uses the string 'm/sec'.
%              If unitn=2, ELLSCALE uses the string 'cm/sec'.
%              If unitn='text', ELLSCALE uses the string 'text'.
%   
%           This last option provides for the user to specify
%           the string of choice for units.
%  
%           If unitn is anything other than one of the possibilities
%           specified above, ELLSCALE aborts.
%
% Call as: >>  ellscale(h,unitn)
%
% Written by : Brian O. Blanton
%
function ellscale(htel,unitn,scale_xor,scale_yor)
err1=['UserData associated with the object handle supplied to ELLSCALE',...
      ' is empty. ELLSCALE cannot draw the ellipse scale.'];
err2=['Improper unit specification in unitn; type "help ELLSCALE"'];
err3=['TELLIPSE was used in "particle-excursion" mode. No scaling.'];

if nargin<2 | nargin > 5
   error('Wrong number of input arguments to ELLSCALE')
end

if nargin==2
   if isstr(htel)
      error('Arg 1 to ELLSCALE cannot be a string.')
   end
end
   
parent_of_htel=get(htel,'Parent');      % the axes
parent_of_parent_of_htel=get(parent_of_htel,'Parent');  % the figure
children_of_parent_of_htel=get(parent_of_htel,'Children');

X=get(parent_of_htel,'XLim');
Y=get(parent_of_htel,'YLim');
xrange=X(2)-X(1);
yrange=Y(2)-Y(1);

% ensure that the current axes is the parent
% of the vector handle passed to ELLSCALE
axes(parent_of_htel);
 
% clear previous scales from this axes
for i=1:length(children_of_parent_of_htel)
   if strcmp(get(children_of_parent_of_htel(i),'UserData'),'scaletext')==1
      delete(children_of_parent_of_htel(i));
   elseif strcmp(get(children_of_parent_of_htel(i),'UserData'),'scalearrow')==1
      delete(children_of_parent_of_htel(i));
   end
end

data=get(htel,'UserData');
if isempty(data)== 1
   error(err1);
end

% determine which text to use for units-string
if ~exist('unitn')
   unitstring='units';
else
   if unitn==1
      unitstring='m/sec';
   elseif unitn==2
      unitstring='cm/sec';
   elseif isstr(unitn)
      unitstring=unitn;
   else
      error(err2);
   end
end

% The last line of "data" is the scaling information.  If TELLIPSE
% was used in "particle-excursiuon" mode, the 2nd and 3rd values in the
% last line will both be NaN.  "Check this and return if so.
magscale=data(length(data(:,1)),2);
vecscale=data(length(data(:,1)),3);
if (isnan(magscale)|isnan(vecscale))
   error(err3)
end

%FILTER DATA THROUGH VIEWING WINDOW
filt=find(data(:,1)>=X(1)&data(:,1)<=X(2)&data(:,2)>=Y(1)&data(:,2)<=Y(2));
umaj=data(filt,3);

% now working with umaj
maxell=max(umaj)

%
% save the current value of the current figure's WindowButtonDownFcn,
% WindowButtonMotionFcn, and WindowButtonUpFcn
%
WindowButtonDownFcn=get(gcf,'WindowButtonDownFcn');
WindowButtonMotionFcn=get(gcf,'WindowButtonMotionFcn');
WindowButtonUpFcn=get(gcf,'WindowButtonUpFcn');
set(gcf,'WindowButtonDownFcn','');
set(gcf,'WindowButtonMotionFcn','');
set(gcf,'WindowButtonUpFcn','');

if ~exist('scale_xor')| ~exist('scale_yor')
   disp('place scale on plot with a mouse button');
   [scale_xor,scale_yor]=ginput(1);
end 
hp=drawvec(scale_xor,scale_yor,maxell,0.,25,'r');
set(hp,'UserData','scalearrow');
set(hp,'Tag','scalearrow');
tnum=num2str(magscale);
tnum=[tnum ' ' unitstring];

scaletext=text(scale_xor,scale_yor-(Y(2)-Y(1))*(.05),tnum);
set(scaletext,'HorizontalAlignment','center');
set(scaletext,'UserData','scaletext');
set(scaletext,'Tag','scaletext');

%
% return the saved values of the current figure's WindowButtonDownFcn,
% WindowButtonMotionFcn, and WindowButtonUpFcn to the current figure
%
set(gcf,'WindowButtonDownFcn',WindowButtonDownFcn);
set(gcf,'WindowButtonMotionFcn',WindowButtonMotionFcn);
set(gcf,'WindowButtonUpFcn',WindowButtonUpFcn);
%
%        Brian O. Blanton
%        Curr. in Marine Sciences
%        15-1A Venable Hall
%        CB# 3300
%        Uni. of North Carolina
%        Chapel Hill, NC
%                 27599-3300
%
%        919-962-4466
%        blanton@marine.unc.edu
%


