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 + -
显示快捷键?