Diff of /util/mtit.m [000000] .. [1422d3]

Switch to side-by-side view

--- a
+++ b/util/mtit.m
@@ -0,0 +1,164 @@
+%MTIT		creates a major title in a figure with many axes
+%
+%		MTIT
+%		- creates a major title above all
+%		  axes in a figure
+%		- preserves the stack order of
+%		  the axis handles
+%
+%SYNTAX
+%-------------------------------------------------------------------------------
+%		P = MTIT(TXT,[OPT1,...,OPTn])
+%		P = MTIT(FH,TXT,[OPT1,...,OPTn])
+%
+%INPUT
+%-------------------------------------------------------------------------------
+%    FH	:	a valid figure handle		[def: gcf]
+%   TXT	:	title string
+%
+% OPT	:	argument
+% -------------------------------------------
+%  xoff	:	+/- displacement along X axis
+%  yoff	:	+/- displacement along Y axis
+%  zoff	:	+/- displacement along Z axis
+%
+%		title modifier pair(s)
+% -------------------------------------------
+%   TPx	:	TVx
+%		see: get(text) for possible
+%		     parameters/values
+%
+%OUTPUT
+%-------------------------------------------------------------------------------
+% par	:	parameter structure
+%  .pos :	position of surrounding axis
+%   .oh	:	handle of last used axis
+%   .ah :	handle of invisible surrounding axis
+%   .th :	handle of main title
+%
+%EXAMPLE
+%-------------------------------------------------------------------------------
+%	subplot(2,3,[1 3]);		title('PLOT 1');
+%	subplot(2,3,4); 		title('PLOT 2');
+%	subplot(2,3,5); 		title('PLOT 3');
+%	axes('units','inches',...
+%	     'color',[0 1 .5],...
+%	     'position',[.5 .5 2 2]);	title('PLOT 41');
+%	axes('units','inches',...
+%	     'color',[0 .5 1],...
+%	     'position',[3.5 .5 2 2]);	title('PLOT 42');
+%	shg;
+%	p=mtit('the BIG title',...
+%	     'fontsize',14,'color',[1 0 0],...
+%	     'xoff',-.1,'yoff',.025);
+% % refine title using its handle <p.th>
+%	set(p.th,'edgecolor',.5*[1 1 1]);
+
+% created:
+%	us	24-Feb-2003		/ R13
+% modified:
+%	us	24-Feb-2003		/ CSSM
+%	us	06-Apr-2003		/ TMW
+%	us	13-Nov-2009 17:38:17
+
+%-------------------------------------------------------------------------------
+function	par=mtit(varargin)
+
+		defunit='normalized';
+	if	nargout
+		par=[];
+	end
+
+% check input
+	if	nargin < 1
+		help(mfilename);
+		return;
+	end
+	if	isempty(get(0,'currentfigure'))
+		disp('MTIT> no figure');
+		return;
+	end
+
+		vl=true(size(varargin));
+	if	ischar(varargin{1})
+		vl(1)=false;
+		figh=gcf;
+		txt=varargin{1};
+	elseif	any(ishandle(varargin{1}(:)))		&&...
+		ischar(varargin{2})
+		vl(1:2)=false;
+		figh=varargin{1};
+		txt=varargin{2};
+	else
+		error('MTIT> invalid input');
+	end
+		vin=varargin(vl);
+		[off,vout]=get_off(vin{:});
+
+% find surrounding box
+		ah=findall(figh,'type','axes');
+	if	isempty(ah)
+		disp('MTIT> no axis');
+		return;
+	end
+		oah=ah(1);
+
+		ou=get(ah,'units');
+		set(ah,'units',defunit);
+		ap=get(ah,'position');
+	if	iscell(ap)
+		ap=cell2mat(get(ah,'position'));
+	end
+		ap=[	min(ap(:,1)),max(ap(:,1)+ap(:,3)),...
+			min(ap(:,2)),max(ap(:,2)+ap(:,4))];
+		ap=[	ap(1),ap(3),...
+			ap(2)-ap(1),ap(4)-ap(3)];
+
+% create axis...
+		xh=axes('position',ap);
+% ...and title
+		th=title(txt,vout{:});
+		tp=get(th,'position');
+		set(th,'position',tp+off);
+		set(xh,'visible','off','hittest','on');
+		set(th,'visible','on');
+
+% reset original units
+		ix=find(~strcmpi(ou,defunit));
+	if	~isempty(ix)
+	for	i=ix(:).'
+		set(ah(i),'units',ou{i});
+	end
+	end
+
+% ...and axis' order
+		uistack(xh,'bottom');
+		axes(oah);				%#ok
+
+	if	nargout
+		par.pos=ap;
+		par.oh=oah;
+		par.ah=xh;
+		par.th=th;
+	end
+end
+%-------------------------------------------------------------------------------
+function	[off,vout]=get_off(varargin)
+
+% search for pairs <.off>/<value>
+
+		off=zeros(1,3);
+		io=0;
+	for	mode={'xoff','yoff','zoff'};
+		ix=strcmpi(varargin,mode);
+	if	any(ix)
+		io=io+1;
+		yx=find(ix);
+		ix(yx+1)=1;
+		off(1,io)=varargin{yx(end)+1};
+		varargin=varargin(xor(ix,1));
+	end
+	end
+		vout=varargin;
+end
+%-------------------------------------------------------------------------------
\ No newline at end of file