⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 printuim.m

📁 ADSP TOOLBOX: Version 2.0 and gui m-files
💻 M
字号:
function printuim(figname)
% PRINTUIM Print utility for ADSP TOOLBOX GUIS with uicontrols and menus.
% PRINTUIM with no arguments prints to a printer.
% PRINTUIM('fileame') Prints to an eps file called filename.eps.
% NOTE: Filename must be in quotes with no extension [e.g. 'testfile']

% Modified version of printui
%       Loren Dean   May 9, 1995.
%       Copyright (c) 1995 by The MathWorks, Inc.

% ADSP Toolbox: Version 2.0 
% For use with "Analog and Digital Signal Processing", 2nd Ed.
% Published by PWS Publishing Co.
%
% Ashok Ambardar, EE Dept. MTU, Houghton, MI 49931, USA
% http://www.ee.mtu/faculty/akambard.html
% e-mail: akambard@mtu.edu


%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Get Correct Figure %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%MenuFlag=0;
MenuFlag=1;
Fig=get(0,'CurrentFigure');
%for lp=1:nargin,
%  eval(['cur_arg=arg' num2str(lp) ';']);
%  if (cur_arg(2) == 'f'),
%    Fig=str2num(cur_arg( 3:length(cur_arg) ));
%  elseif cur_arg(2)=='m',
%    MenuFlag=1;
%    eval(['arg' num2str(lp) '=[];']);
%  end
%end
%Fig=gcf;  %%%NEW
%%%%%%%%%%%%%%
%%% Set Up %%%
%%%%%%%%%%%%%%
ComputerType=computer;
OldRootUnits=get(0,'Units');
OldFigUnits=get(Fig,'Units');
OldFigCMap=get(Fig,'Colormap');
OldFigCopy=get(Fig,'InvertHardCopy');
set(0,'Units','pixels');
set(Fig,'Units','pixels','NextPlot','add');%,'InvertHardCopy','off');
FigPos=get(Fig,'Position');

%%%%%%%%%%%%%%%%%%%
%%% UI Controls %%%
%%%%%%%%%%%%%%%%%%%
UICHandles=findobj(Fig,'Type','uicontrol','Visible','on');
if ~isempty(UICHandles),
  % Making the assumption that the bottom uicontrol is usually
  % created first and underneath the others.
  UICHandles=flipud(UICHandles);
  UICUnits=[];
  for lp=1:length(UICHandles),
    UICUnits=str2mat(UICUnits,get(UICHandles(lp),'Units'));
  end % for lp
  UICUnits(1,:)=[];
  set(UICHandles,'Units','pixels');

  FramePos=[];
  FrameNum=0;
  AxisHandles=[];

  for Clp=1:length(UICHandles),
    FrameFlag=1;
    CurCtrlPos=get(UICHandles(Clp),'Position');
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %Check to see if completely contained in previous frames
    for Frmlp=1:FrameNum,
      if CurCtrlPos(1)>=FramePos(Frmlp,1) & ...
         CurCtrlPos(2)>=FramePos(Frmlp,2) & ...
         sum(CurCtrlPos([1 3]))<=sum(FramePos(Frmlp,[1 3])) & ...
         sum(CurCtrlPos([2 4]))<=sum(FramePos(Frmlp,[2 4])) ,         
        FrameFlag=0;
        break;
      end % if CurCtrlPos
    end % Frmlp
    %%%%%%%%%%%%%%%%%%%
    % It is a new frame
    if ~isempty(FramePos),
      RmvFrmLoc=[];
      if FrameFlag,
        for inlp=1:size(FramePos,1),
          if CurCtrlPos(1)>=FramePos(inlp,1) & ...
             CurCtrlPos(2)>=FramePos(inlp,2) & ...
             sum(CurCtrlPos([1 3]))<=sum(FramePos(inlp,[1 3])) & ...
             sum(CurCtrlPos([2 4]))<=sum(FramePos(inlp,[2 4])) ,         
             % New Frame Contains an old frame
               RmvFrmLoc=[RmvFrmLoc inlp];
           end
        end
      
        FramePos(RmvFrmLoc,:)=[];
        FrameNum=size(FramePos,1)+1;
        FramePos(FrameNum,1:4)=CurCtrlPos;
      end % if FrameFlag
    else,
      FramePos=CurCtrlPos;
      FrameNum=1;
    end % if ~isempty
  end % for Clp
  
end % if ~isempty(UIC)

%%%%%%%%%%%%%%%%%%%%%
%%% Create images %%%
%%%%%%%%%%%%%%%%%%%%%
figure(Fig);
drawnow;
if ~isempty(FramePos),
  for lp=1:length(FramePos(:,1)),
    [CaptureMat,CaptureMap]=getframe(Fig,FramePos(lp,:));
    AxisHandles(lp)=axes(           ...
                        'Units'   ,'pixels'      , ...
                        'Position',FramePos(lp,:), ...
                        'Visible' ,'off'           ...
                        ); 

%if ~MenuFlag,
%    ImgHandle=image(CaptureMat);
%    colormap(CaptureMap);
%    drawnow;
%end

  end % for lp

end % if ~isempty

FigAxisHandles=[];
MenuCaptureMap=[];

%%%%%%%%%%%%%%%%
%%% UI Menus %%%
%%%%%%%%%%%%%%%%
if MenuFlag,

  MenuFlag=0;
  if ~strcmp(ComputerType(1:3),'MAC'),
    if strcmp(ComputerType(1:2),'PC'),
      MenuHeight=19;
    else,
      MenuHeight=29;
    end
    
    UIMHandles=findobj(get(Fig,'Children'),'flat'  , ...
                      'Type'              ,'uimenu', ...
                      'Visible'           ,'on'      ...
                      );
                      
    if ~isempty(UIMHandles)| ...
         ( strcmp('figure',get(Fig,'Menubar')) & ...
           strcmp(ComputerType(1:2),'PC')        ...
          ),
      MenuFlag=1;
      
      %The following statement gets the image axis handles too
      %Minimal time hit, so I'm not going to worry about it.
      FigAxisHandles=findobj(Fig,'Type','axes');
      FigAxisUnits=[];
      for lp=1:length(FigAxisHandles),
        FigAxisUnits=str2mat(FigAxisUnits,get(FigAxisHandles(lp),'Units'));
      end % for lp
      FigAxisUnits(1,:)=[];
      set(FigAxisHandles,'Units','pixels');
      
      MenuFramePos=[0 FigPos(4) FigPos(3)+1 MenuHeight];
      [MenuCaptureMat,MenuCaptureMap]=getframe(Fig,MenuFramePos);
      colormap(MenuCaptureMap);
      set(Fig,'Position',FigPos+[0 0 0 MenuHeight]);
      set(FigAxisHandles,'Units','normalized');
    
      BoxHandle=axes('Units'   ,'pixels'                      , ...
                     'Position',get(Fig,'Position').*[0 0 1 1], ...
                     'XTick'   ,[]                            , ...
                     'YTick'   ,[]                            , ...
                     'Box'     ,'off'                           ...
                    );
      set(BoxHandle,'Units','normalized');
      
      if isempty(AxisHandles),
        HandleLoc=1;
      else,
        HandleLoc=length(AxisHandles)+1;
      end
      
      AxisHandles(HandleLoc)=axes(               ...
                        'Units'   ,'pixels'    , ...
                        'Position',MenuFramePos, ...
                        'Visible' ,'off'         ...
                        );
      ImgHandle=image(MenuCaptureMat);
    end % if ~isempty(UIM)
  end % if strcmp
end % if MenuFlag

if ~isempty(AxisHandles),
  set(AxisHandles,'Units','normalized','Visible','off');
end


%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Print and Clean Up %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%PrintStr='print ';
%for lp=1:nargin,
%  eval(['PrintStr=[PrintStr '' '' arg' num2str(lp) '];']);
%end
%eval(PrintStr);

%%%%%%%%%% NEW %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
drawnow;
if nargin==0
print            % send figure to printer
else
print('-deps', '-epsi',figname)   % print as .eps file to figname.eps
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if MenuFlag,
  delete(BoxHandle);
  set(FigAxisHandles,'Units','pixels');
  set(Fig,'Position',FigPos);
  for lp=1:length(FigAxisHandles),
    set(FigAxisHandles(lp),'Units',deblank(FigAxisUnits(lp,:)));
  end % for lp
end % if MenuFlag

delete(AxisHandles);
set(Fig            , ...
   'Units'         ,OldFigUnits, ...
   'InvertHardCopy',OldFigCopy , ...
   'Colormap'      ,OldFigCMap   ...
   );
set(0,'Units',OldRootUnits);
for lp=1:length(UICHandles),
  set(UICHandles(lp),'Units',deblank(UICUnits(lp,:)));
end % for lp

⌨️ 快捷键说明

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