www.pudn.com > 精通Matlab综合辅导与指南-源程序.zip > mmview3d.m
function mmview3d(cmd)
%MMVIEW3D GUI Controlled Azimuth and Elevation Adjustment.
% MMVIEW3D adds sliders and text boxes to the current figure window
% for adjusting azimuth and elevation using the mouse.
%
% The 'Revert' pushbutton reverts to the original view.
% The 'Done' pushbutton removes all GUIs.
% The 'cmd' argument executes the callbacks.
% B.R. Littlefield, University of Maine, Orono, ME 04469
% 4/11/95
% Copyright (c) 1996 by Prentice-Hall, Inc.
global Hc_asli Hc_acur Hc_esli Hc_ecur CVIEW
%======================================================================
% If this is a user call, create the uicontrols.
%======================================================================
if nargin == 0
%--------------------------------------------------------------------
% Assign a handle to the current figure window.
% Get the current view for slider initial values.
% If the view is out of range, adjust as best we can.
% Use normalized uicontrol units rather than the default 'pixels'.
%--------------------------------------------------------------------
Hf_fig = gcf;
CVIEW = get(gca,'View');
if abs(CVIEW(1))>180, CVIEW(1)=CVIEW(1)-(360*sign(CVIEW(1))); end
set(Hf_fig,'DefaultUicontrolUnits','normalized');
%--------------------------------------------------------------------
% Define azimuth and elevation sliders.
% The position is in normalized units (0-1).
% Maximum, minimum, and initial values are set.
%--------------------------------------------------------------------
Hc_asli = uicontrol( Hf_fig,'style','slider',...
'position',[.09 .02 .3 .05],...
'min',-180,'max',180,'value',CVIEW(1),...
'callback','mmview3d(991)');
Hc_esli = uicontrol( Hf_fig,'style','slider',...
'position',[.92 .5 .04 .42],...
'min',-90,'max',90,'val',CVIEW(2),...
'callback','mmview3d(992)');
%--------------------------------------------------------------------
% Place the text boxes showing the minimum and max values at the
% ends of each slider. These are text displays, and cannot be edited.
%--------------------------------------------------------------------
uicontrol(Hf_fig,'style','text',...
'pos',[.02 .02 .07 .05],...
'string',num2str(get(Hc_asli,'min')));
uicontrol(Hf_fig,'style','text',...
'pos',[.39 .02 .07 .05],...
'string',num2str(get(Hc_asli,'max')));
uicontrol(Hf_fig,'style','text',...
'pos',[.915 .45 .05 .05],...
'string',num2str(get(Hc_esli,'min')));
uicontrol(Hf_fig,'style','text',...
'pos',[.915 .92 .05 .05],...
'string',num2str(get(Hc_esli,'max')));
%--------------------------------------------------------------------
% Place labels for each slider
%--------------------------------------------------------------------
uicontrol(Hf_fig,'style','text',...
'pos',[.095 .08 .15 .05],...
'string','Azimuth');
uicontrol(Hf_fig,'style','text',...
'pos',[.885 .39 .11 .05],...
'string','Elevation');
%--------------------------------------------------------------------
% Define the current value text displays for each slider.
%--------------------------------------------------------------------
% These are editable text displays to display the current value
% of the slider and at the same time allow the user to enter
% a value using the keyboard.
%
% Note that on the text is centered on X Window Systems, but is
% left-justified on MS-Windows and Macintosh machines.
%
% The initial value is found from the value of the sliders.
% When text is entered into the text area and the return key is
% pressed, the callback string is evaluated.
%--------------------------------------------------------------------
Hc_acur = uicontrol(Hf_fig,'style','edit',...
'pos',[.25 .08 .13 .053],...
'string',num2str(get(Hc_asli,'val')),...
'callback','mmview3d(993)');
Hc_ecur = uicontrol(Hf_fig,'style','edit',...
'pos',[.885 .333 .11 .053],...
'string',num2str(get(Hc_esli,'val')),...
'callback','mmview3d(994)');
%--------------------------------------------------------------------
% Place a 'Done' button in the lower right corner.
% When clicked, all of the uicontrols will be erased.
%--------------------------------------------------------------------
uicontrol(Hf_fig,'style','push',...
'pos',[.88 .02 .10 .08],...
'backgroundcolor',[.7 .7 .8],...
'string','Done',...
'callback','delete(findobj(gcf,''Type'',''uicontrol''))');
%--------------------------------------------------------------------
% Place a 'Revert' button next to the 'Done' button.
% When clicked, the view reverts to the original view.
%--------------------------------------------------------------------
uicontrol(Hf_fig,'style','push',...
'pos',[.77 .02 .10 .08],...
'backgroundcolor',[.7 .7 .8],...
'string','Revert',...
'callback','mmview3d(995)');
else
%======================================================================
% This is the callback section.
%======================================================================
%--------------------------------------------------------------------
% The callbacks for the azimuth and elevation sliders will:
%--------------------------------------------------------------------
% 1) get the value of the slider and display it in the text window
% 2) set the 'View' property to the current values of the azimuth
% and elevation sliders.
%--------------------------------------------------------------------
if cmd == 991
set(Hc_acur,'string',num2str(get(Hc_asli,'val')));
set(gca,'View',[get(Hc_asli,'val'),get(Hc_esli,'val')]);
elseif cmd == 992
set(Hc_ecur,'string',num2str(get(Hc_esli,'val')));
set(gca,'View',[get(Hc_asli,'val'),get(Hc_esli,'val')]);
%--------------------------------------------------------------------
% The 'slider current value' text display callbacks:
%--------------------------------------------------------------------
% When text is entered into the text area and the return key is
% pressed, the entered value is compared to the limits.
%
% If the limits have been exceeded, the display is reset to the
% value of the slider and an error message is displayed.
%
% If the value is within the limits, the slider is set to the
% new value, and the view is updated.
%--------------------------------------------------------------------
elseif cmd == 993
if str2num(get(Hc_acur,'string')) < get(Hc_asli,'min')...
| str2num(get(Hc_acur,'string')) > get(Hc_asli,'max')
set(Hc_acur,'string',num2str(get(Hc_asli,'val')));
disp('ERROR - Value out of range');
else
set(Hc_asli,'val',str2num(get(Hc_acur,'string')));
set(gca,'View',[get(Hc_asli,'val'),get(Hc_esli,'val')]);
end
elseif cmd == 994
if str2num(get(Hc_ecur,'string')) < get(Hc_esli,'min')...
| str2num(get(Hc_ecur,'string')) > get(Hc_esli,'max')
set(Hc_ecur,'string',num2str(get(Hc_esli,'val')));
disp('ERROR - Value out of range');
else
set(Hc_esli,'val',str2num(get(Hc_ecur,'string')));
set(gca,'View',[get(Hc_asli,'val'),get(Hc_esli,'val')]);
end
%--------------------------------------------------------------------
% Revert to the original view.
%--------------------------------------------------------------------
elseif cmd == 995
set(Hc_asli,'val',CVIEW(1));
set(Hc_esli,'val',CVIEW(2));
set(Hc_acur,'string',num2str(get(Hc_asli,'val')));
set(Hc_ecur,'string',num2str(get(Hc_esli,'val')));
set(gca,'View',[get(Hc_asli,'val'),get(Hc_esli,'val')]);
%--------------------------------------------------------------------
% Must be bad arguments.
%--------------------------------------------------------------------
else
disp('mmview3d: Illegal argument.')
end
end