pgsetup.m

来自「matlab处理图像的一些基本方法。其中有一部分mex程序需要安装编译」· M 代码 · 共 655 行 · 第 1/2 页

M
655
字号
			'PaperOrientation',Orient,...			'PaperUnits',PaperUnits);	axis(axis);	hold on;elseif(strcmp(command,'DrawPage'))	UserData = get(gcf,'UserData');	PatchObj = UserData(2);	ShrinkFactor = UserData(3);		PaperPosition = get(gcf,'PaperPosition');	PaperUnits = get(gcf,'PaperUnits');	if(strcmp(get(gca,'Units'),'normalized'))		set(gca,'units',PaperUnits);		else		set(gcf,'PaperUnits',get(gca,'Units'));	end	PaperSize = get(gcf,'PaperSize');	set(gcf,'PaperUnits',PaperUnits);	AxPos = get(gca,'Position');	set(gca,'Position',[AxPos(1) AxPos(2) PaperSize(1)/ShrinkFactor PaperSize(2)/ShrinkFactor]);	set(gca,'Units',PaperUnits);	if(strcmp(PaperUnits,'normalized'))		axis('normal');		axis([0 1 0 1]);	else		axis('equal');		PaperSize = get(gcf,'PaperSize');		axis([0 PaperSize(1) 0 PaperSize(2)]);	end	PlotRect = [PaperPosition(1) PaperPosition(2);	            PaperPosition(1)+PaperPosition(3) PaperPosition(2);				PaperPosition(1)+PaperPosition(3) PaperPosition(2)+PaperPosition(4);			  				PaperPosition(1) PaperPosition(2)+PaperPosition(4)];		set(PatchObj,'EraseMode','Xor',...				'XData',PlotRect(:,1),...				'YData',PlotRect(:,2));	set(PatchObj,'EraseMode','Normal');	axis(axis);	hold on;elseif(strcmp(command,'Resize'))	UserData = get(gcf,'UserData');	PatchObj = UserData(2);	if(nargin<2)		cp = get(gca,'CurrentPoint');		XData = get(PatchObj,'XData');		YData = get(PatchObj,'YData');		minx = min(XData);		miny = min(YData);		ext = [minx miny max(XData)-minx max(YData)-miny];		set(PatchObj,'UserData',ext);		if(cp(1,1)<ext(1)+.2*ext(3))			if(cp(1,2)<ext(2)+.2*ext(4)) 		% Lower Left Corner				set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Corner'',1)');			elseif(cp(1,2)>ext(2)+.8*ext(4)) 	% Upper Left Corner				set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Corner'',2)');			else								% Left Side				set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Side'',1)');			end		elseif(cp(1,1)>ext(1)+.8*ext(3))			if(cp(1,2)<ext(2)+.2*ext(4)) 		% Lower Right Corner				set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Corner'',4)');			elseif(cp(1,2)>ext(2)+.8*ext(4)) 	% Upper Right Corner				set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Corner'',3)');			else								% Right Side				set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Side'',3)');			end		elseif(cp(1,2)>ext(2)+.8*ext(4))		% Top Side				set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Side'',2)')		elseif(cp(1,2)<ext(2)+.2*ext(4))		% Bottom Side				set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Side'',4)')		else									% Center			set(gca,'UserData',cp);			set(gcf,'WindowButtonMotionFcn','pgsetup(''Resize'',''Move'')');		end		set(PatchObj,'erasemode','xor');		set(gcf,'WindowButtonUpFcn','pgsetup(''Resize'',''Up'')');	elseif(strcmp(subcommand,'Corner'))		cp = get(gca,'CurrentPoint');		ext = get(PatchObj,'UserData');		if(comnum == 1)			ext = [cp(1,1:2) ext(1:2)+ext(3:4)-cp(1,1:2)];		elseif(comnum == 2)			ext = [cp(1,1) ext(2) ext(1)+ext(3)-cp(1,1) cp(1,2)-ext(2)];		elseif(comnum == 3)			ext(3:4) = cp(1,1:2)-ext(1:2);		else			ext(2:4) = [cp(1,2) cp(1,1)-ext(1) ext(2)+ext(4)-cp(1,2)];		end		XData = ext(1)+[0 ext(3) ext(3) 0];		YData = ext(2)+[0 0 ext(4) ext(4)];		set(PatchObj,'XData',XData,'YData',YData);	elseif(strcmp(subcommand,'Side'))		cp = get(gca,'CurrentPoint');		ext = get(PatchObj,'UserData');		if(comnum == 1)			ext = [cp(1,1) ext(2) ext(1)+ext(3)-cp(1,1) ext(4)];		elseif(comnum == 2)			ext = [ext(1) ext(2) ext(3) cp(1,2)-ext(2)];		elseif(comnum == 3)			ext = [ext(1) ext(2) cp(1,1)-ext(1) ext(4)];		else			ext = [ext(1) cp(1,2) ext(3) ext(2)+ext(4)-cp(1,2)];		end		XData = ext(1)+[0 ext(3) ext(3) 0];		YData = ext(2)+[0 0 ext(4) ext(4)];		set(PatchObj,'XData',XData,'YData',YData);	elseif(strcmp(subcommand,'Move'))		startpoint = get(gca,'UserData');		cp = get(gca,'CurrentPoint');		XData = get(PatchObj,'XData');		YData = get(PatchObj,'YData');		XData = XData+cp(1,1)-startpoint(1,1);		YData = YData+cp(1,2)-startpoint(1,2);		set(PatchObj,'XData',XData,'YData',YData);		set(gca,'UserData',cp);	else		PaperSize = get(gcf,'PaperSize');		set(PatchObj,'EraseMode','normal');		set(gcf,'WindowButtonMotionFcn','',...				'WindowButtonUpFcn','');		XData = get(PatchObj,'XData');		YData = get(PatchObj,'YData');		ext = [XData(1) YData(1) XData(2)-XData(1) YData(3)-YData(2)];		set(gcf,'PaperPosition',ext);		set(findobj(gcf,'Tag','Bottom'),'String',num2str(ext(1)));		set(findobj(gcf,'Tag','Left'),'String',num2str(ext(2)));		set(findobj(gcf,'Tag','Top'),'String',num2str(PaperSize(2)-ext(2)-ext(4)));		set(findobj(gcf,'Tag','Right'),'String',num2str(PaperSize(1)-ext(1)-ext(3)));		set(PatchObj,'UserData',ext);	endelseif(strcmp(command,'Margins'))	PaperPosition = get(gcf,'PaperPosition');	PaperSize = get(gcf,'PaperSize');	Bottom = str2num(get(findobj(gcf,'Tag','Bottom'),'String'));	Left = str2num(get(findobj(gcf,'Tag','Left'),'String'));	Top = str2num(get(findobj(gcf,'Tag','Top'),'String'));	Right = str2num(get(findobj(gcf,'Tag','Right'),'String'));	set(gcf,'PaperPosition',[Left ...									 Bottom ...									 PaperSize(1)-Left-Right ...									 PaperSize(2)-Bottom-Top]);	pgsetup('DrawPage');elseif(strcmp(command,'Invert'))	if(get(findobj(gcf,'Tag','Invert'),'Value'))		set(gcf,'InvertHardCopy','on');		set(gca, 'color', 'white');	else		set(gcf,'InvertHardCopy','off');		set(gca, 'color', 'black');	endelseif(strcmp(command,'PaperUnits'))	units = get(findobj(gcf,'Tag','PaperUnits'),'Value');	if(units == 1)		set(gcf,'PaperUnits','Inches');	elseif(units == 2)		set(gcf,'PaperUnits','Centimeters');	elseif(units == 3)		set(gcf,'PaperUnits','Normalized');	elseif(units == 4)		set(gcf,'PaperUnits','Points');	end	PaperSize = get(gcf,'PaperSize');	PaperPosition = get(gcf,'PaperPosition');	set(findobj(gcf,'Tag','Left'),'String',...		num2str(PaperPosition(1)));	set(findobj(gcf,'Tag','Right'),'String',...		num2str(PaperSize(1)-PaperPosition(1)-PaperPosition(3)));	set(findobj(gcf,'Tag','Top'),'String',...		num2str(PaperSize(2)-PaperPosition(2)-PaperPosition(4)));	set(findobj(gcf,'Tag','Bottom'),'String',...		num2str(PaperPosition(2)));	pgsetup('DrawPage');elseif(strcmp(command,'PaperType'))	UserData = get(gcf,'UserData');	val = get(findobj(gcf,'Tag','PaperType'),'Value');	if(val == 1)		set(gcf,'PaperType','usletter');		UserData(3) = 3.5;		set(gcf,'UserData',UserData);	elseif(val == 2)		set(gcf,'PaperType','uslegal');		UserData(3) = 4;		set(gcf,'UserData',UserData);	elseif(val == 3)		set(gcf,'PaperType','a3');		UserData(3) = 5;		set(gcf,'UserData',UserData);	elseif(val == 4)		set(gcf,'PaperType','a4letter');		UserData(3) = 3.5;		set(gcf,'UserData',UserData);	elseif(val == 5)		set(gcf,'PaperType','a5');		UserData(3) = 2.5;		set(gcf,'UserData',UserData);	elseif(val == 6)		set(gcf,'PaperType','b4');		UserData(3) = 4;		set(gcf,'UserData',UserData);	else		set(gcf,'PaperType','tabloid');		UserData(3) = 5;		set(gcf,'UserData',UserData);	end	pgsetup('Margins');elseif(strcmp(command,'Orient'))	val = get(findobj(gcf,'Tag','Orient'),'Value');	if(val == 1)		orient portrait;	elseif(val == 2)		orient landscape;	else		orient tall;	end	ext = get(gcf,'PaperPosition');	PaperSize = get(gcf,'PaperSize');	set(findobj(gcf,'Tag','Bottom'),'String',num2str(ext(1)));	set(findobj(gcf,'Tag','Left'),'String',num2str(ext(2)));	set(findobj(gcf,'Tag','Top'),'String',num2str(PaperSize(2)-ext(2)-ext(4)));	set(findobj(gcf,'Tag','Right'),'String',num2str(PaperSize(1)-ext(1)-ext(3)));	pgsetup('DrawPage');elseif(strcmp(command,'Printer'))	Device=get(findobj(gcf,'Tag','Printer'), 'value');	elseif(strcmp(command,'Cancel'))	delete(gcf);		elseif(strcmp(command,'Print'))	Fext='*.ptr';	if Device > 0 & Device < 3	  Fext='*.ps';	end	if Device > 2 & Device < 7	  Fext='*.eps';	end	if Device == 7	  Fext='*.hpgl';	end	if Device == 8	  Fext='*.adb';	end	output=get(findobj('tag', 'PRINTITEM'), 'userdata');		if output==1 % FILE	  [name, path] = uiputfile([savepath Fext]);	  if isempty(name) | name == 0		return	  end	  PTRname = [path name];	  pmsg=PTRname;	else	  PTRname='';	  pmsg=printopt;	end	wm=findobj('tag', 'WINMENU');	spf=findobj('name', 'Printer Setup');	hfigs=get(wm, 'Userdata');	n=get(wm, 'value');	pu=get(spf,'PaperUnits');	pt=get(spf,'PaperType');	po=get(spf,'PaperOrientation');	pp=get(spf,'PaperPosition');	pi=get(spf,'InvertHardCopy');		delete(findobj('name', 'Printer Setup'));	set(Handlefig,'Pointer','watch');	if hfigs(n)==0	  hfigs=hfigs(2:length(hfigs));	else	  hfigs=hfigs(n);	end	for i=1:length(hfigs)	  if i==1		cprint=['print ' Printer(Device,:)  ' ' PTRname];	  else		cprint=['print ' Printer(Device,:)  ' -append ' PTRname];	  end	  if isobj(hfigs(i))	    set(hfigs(i),'PaperUnits',pu);		set(hfigs(i),'PaperType',pt);		set(hfigs(i),'PaperOrientation',po);		set(hfigs(i),'PaperPosition',pp);		set(hfigs(i),'InvertHardCopy',pi);		fcolor=get(hfigs(i),'color');		if onoff(pi) & ~any(fcolor==[0 0 0])		  set(hfigs(i), 'color', [0 0 0]);		end		figname=get(hfigs(i), 'name');	    if isempty(figname)		  figname=['Figure No. ' num2str(hfigs(i))];	    end		statusbar(['Printing ' figname ' to ' pmsg]);		figure(hfigs(i));		eval(cprint);		set(hfigs(i), 'color', fcolor);	  end      	end	 	set(Handlefig,'Pointer','arrow');	clearstatusbar;elseif(strcmp(command,'Window'))	FigureListLab='All Windows';	FigureList=[0];	figs=findobj(0, 'type', 'figure');	for i=1:length(figs)	  figname=get(figs(i), 'name');	  if isempty(figname)		figname=['Figure No. ' num2str(figs(i))];	  end	  if ~strcmp(figname, 'Printer Setup')		FigureListLab=[FigureListLab '|' figname];		FigureList=[FigureList figs(i)];	  end	end		wm=findobj('tag', 'WINMENU');	if isobj(wm)	  set(wm, 'string', FigureListLab, 'Userdata', FigureList);	endendreturn

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?