gusucode.com > demos工具箱matlab源码程序 > demos/graf3d.m

    function graf3d(action)
%GRAF3D Demonstrate Handle Graphics for surface plots in MATLAB.
%   This window allows you to assemble a string
%   of MATLAB commands that results in a plot in
%   the axis in the upper left corner.
%
%   By playing with the popup menus on the right
%   side of the window, you can adjust the type
%   of plot, the type of shading, the color map,
%   and so on.
%
%   The MiniCommand Window in the lower
%   right shows the list of commands that create
%   the plot. If you like, you can even directly edit
%   the commands in the MiniCommand Window.
%   Type control-return to execute code in the
%   MiniCommand Window.

%   Ned Gulley, 6-21-93
%   Copyright 1984-2014 The MathWorks, Inc.

if nargin<1,
   action = 'initialize';
end;

if strcmp(action,'initialize'),
   oldFigNumber = watchon;
   
   figNumber = figure( ...
      'Visible','off', ...
      'NumberTitle','off', ...
      'Toolbar', 'None', ...
      'Color','black', ...
      'Name',getString(message('MATLAB:demos:graf3d:Title3DPlotsInHandleGraphics')));
   colordef(figNumber,'none')
   ax = axes( ...
      'Units','normalized', ...
      'Position',[0.07 0.45 0.60 0.50]);
   %   colormap(ax, parula) ;
   
   % ===================================
   % Set up the MiniCommand Window
   top = 0.35;
   left = 0.05;
   right = 0.70;
   bottom = 0.05;
   labelHt = 0.05;
   spacing = 0.005;
   % First, the MiniCommand Window frame
   frmBorder = 0.02;
   frmPos = [left-frmBorder bottom-frmBorder ...
      (right-left)+2*frmBorder (top-bottom)+2*frmBorder];
   uicontrol( ...
      'Style','frame', ...
      'Units','normalized', ...
      'Position',frmPos, ...
      'BackgroundColor',[0.50 0.50 0.50]);
   % Then the text label
   labelPos = [left top-labelHt (right-left) labelHt];
   uicontrol( ...
      'Style','text', ...
      'Units','normalized', ...
      'Position',labelPos, ...
      'BackgroundColor',[0.50 0.50 0.50], ...
      'ForegroundColor',[1 1 1], ...
      'String',getString(message('MATLAB:demos:graf3d:LabelCommandWindow')));
   % Then the editable text field
   mcwPos = [left bottom (right-left) top-bottom-labelHt-spacing];
   mcwHndl = uicontrol( ...
      'Style','edit', ...
      'HorizontalAlignment','left', ...
      'Units','normalized', ...
      'Max',10, ...
      'BackgroundColor',[1 1 1], ...
      'Position',mcwPos, ...
      'Callback','graf3d(''quickeval'')', ...
      'String',getString(message('MATLAB:demos:shared:CommentPressButtonsForExamplePlots')));
   % Save this handle for future use
   set(gcf,'UserData',mcwHndl);
   
   % ====================================
   % Information for all buttons
   labelColor = [0.8 0.8 0.8];
   top = 0.95;
   bottom = 0.05;
   left = 0.75;
   yInitLabelPos = 0.90;
   left = 0.75;
   labelWid = 0.20;
   labelHt = 0.05;
   btnWid = 0.20;
   btnHt = 0.05;
   % Spacing between the label and the button for the same command
   btnOffset = 0.003;
   % Spacing between the button and the next command's label
   spacing = 0.05;
   
   % ====================================
   % The CONSOLE frame
   frmBorder = 0.02;
   yPos = 0.05-frmBorder;
   frmPos = [left-frmBorder yPos btnWid+2*frmBorder 0.9+2*frmBorder];
   h = uicontrol( ...
      'Style','frame', ...
      'Units','normalized', ...
      'Position',frmPos, ...
      'BackgroundColor',[0.50 0.50 0.50]);
   
   % ====================================
   % The PLOT TYPE command popup button
   btnNumber = 1;
   yLabelPos = top-(btnNumber-1)*(btnHt+labelHt+spacing);
   labelStr = getString(message('MATLAB:demos:graf3d:LabelPlotType'));
   labelList = ' surf| surfl| mesh| meshz| waterfall| pcolor';
   cmdList = str2mat( ...
      ' surf(z)',' surfl(z)',' mesh(z)', ...
      ' meshz(z)',' waterfall(z)',' pcolor(z)');
   callbackStr = 'graf3d eval';
   
   % Generic label information
   labelPos = [left yLabelPos-labelHt labelWid labelHt];
   uicontrol( ...
      'Style','text', ...
      'Units','normalized', ...
      'Position',labelPos, ...
      'BackgroundColor',labelColor, ...
      'HorizontalAlignment','left', ...
      'String',labelStr);
   
   % Generic popup button information
   btnPos = [left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt];
   hndl1 = uicontrol( ...
      'Style','popup', ...
      'Units','normalized', ...
      'Position',btnPos, ...
      'String',labelList, ...
      'Callback',callbackStr, ...
      'UserData',cmdList);
   
   % ====================================
   % The SHADING command popup button
   btnNumber = 2;
   yLabelPos = top-(btnNumber-1)*(btnHt+labelHt+spacing);
   labelStr = getString(message('MATLAB:demos:graf3d:LabelShading'));
   labelList = ' faceted| flat| interp';
   cmdList = str2mat( ...
      ' ',' shading flat',' shading interp');
   callbackStr = 'graf3d eval';
   
   % Generic label information
   labelPos = [left yLabelPos-labelHt labelWid labelHt];
   uicontrol( ...
      'Style','text', ...
      'Units','normalized', ...
      'Position',labelPos, ...
      'BackgroundColor',labelColor, ...
      'HorizontalAlignment','left', ...
      'String',labelStr);
   
   % Generic popup button information
   btnPos = [left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt];
   hndl2 = uicontrol( ...
      'Style','popup', ...
      'Units','normalized', ...
      'Position',btnPos, ...
      'String',labelList, ...
      'Callback',callbackStr, ...
      'UserData',cmdList);
   
   % ====================================
   % The COLORMAP command popup button
   btnNumber = 3;
   yLabelPos = top-(btnNumber-1)*(btnHt+labelHt+spacing);
   labelStr = getString(message('MATLAB:demos:graf3d:LabelColormap'));
   labelList = ' parula| hsv| jet| cool| hot| gray| pink| copper';
   cmdList = str2mat( ...
      ' colormap(gcf, parula)', ' colormap(gcf, hsv)',' colormap(gcf, jet)', ...
      ' colormap(gcf, cool)', ' colormap(gcf, hot)', ' colormap(gcf, gray)', ...
      ' colormap(gcf, pink)',' colormap(gcf, copper)');
   callbackStr = 'graf3d eval';
   
   % Generic label information
   labelPos = [left yLabelPos-labelHt labelWid labelHt];
   uicontrol( ...
      'Style','text', ...
      'Units','normalized', ...
      'Position',labelPos, ...
      'BackgroundColor',labelColor, ...
      'HorizontalAlignment','left', ...
      'String',labelStr);
   
   % Generic popup button information
   btnPos = [left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt];
   hndl3 = uicontrol( ...
      'Style','popup', ...
      'Units','normalized', ...
      'Position',btnPos, ...
      'String',labelList, ...
      'Callback',callbackStr, ...
      'UserData',cmdList);
   
   % ====================================
   % The AXIS command popup button
   btnNumber = 4;
   yLabelPos = top-(btnNumber-1)*(btnHt+labelHt+spacing);
   labelStr = getString(message('MATLAB:demos:graf3d:LabelAxis'));
   labelList = ' on| off| ij| xy';
   cmdList = str2mat( ...
      ' ',' axis off',' axis ij',' axis xy');
   callbackStr = 'graf3d eval';
   
   % Generic label information
   labelPos = [left yLabelPos-labelHt labelWid labelHt];
   uicontrol( ...
      'Style','text', ...
      'Units','normalized', ...
      'Position',labelPos, ...
      'BackgroundColor',labelColor, ...
      'HorizontalAlignment','left', ...
      'String',labelStr);
   
   % Generic popup button information
   btnPos = [left yLabelPos-labelHt-btnHt-btnOffset btnWid btnHt];
   hndl4 = uicontrol( ...
      'Style','popup', ...
      'Units','normalized', ...
      'Position',btnPos, ...
      'String',labelList, ...
      'Callback',callbackStr, ...
      'UserData',cmdList);
   
   % ====================================
   uicontrol( ...
      'Style','pushbutton', ...
      'Units','normalized', ...
      'Position',[left bottom+2*btnHt+spacing btnWid 2*btnHt], ...
      'String',getString(message('MATLAB:demos:shared:LabelInfo')), ...
      'Callback','graf3d(''info'')');
   
   % The close button.
   uicontrol( ...
      'Style','pushbutton', ...
      'Units','normalized', ...
      'Position',[left bottom btnWid 2*btnHt], ...
      'String',getString(message('MATLAB:demos:shared:LabelClose')), ...
      'Callback','close(gcf)');
   
   % Uncover the figure
   hndlList = [mcwHndl hndl1 hndl2 hndl3 hndl4];
   watchoff(oldFigNumber);
   set(figNumber,'Visible','on', ...
      'UserData',hndlList);
   graf3d('eval');
   
elseif strcmp(action,'info'),
   helpwin(mfilename)
   
elseif strcmp(action,'quickeval'),
   % Execute the MiniCommand Window text exactly as it is now.
   hndlList = get(gcf,'UserData');
   mcwHndl = hndlList(1);
   evalmcw(mcwHndl);
   
elseif strcmp(action,'eval'),
   % Assemble and execute the completed command
   hndlList = get(gcf,'UserData');
   n = length(hndlList);
   mcwHndl = hndlList(1);
   evalStr = str2mat(' z = peaks(25);');
   for count = 2:n,
      newStrList = get(hndlList(count),'UserData');
      newStrVal = get(hndlList(count),'Value');
      newStr = deblank(newStrList(newStrVal,:));
      if ~isempty(newStr)
         evalStr = str2mat(evalStr,newStr);
      end
   end
   set(mcwHndl,'String',evalStr);
   evalmcw(mcwHndl);
   
end;    % if strcmp(action, ...