rotate3d - Rotate 3-D view using mouse

GUI Alternatives

Use the Rotate3D tool on the figure toolbar to enable and disable rotate3D mode on a plot, or select Rotate 3D from the figure's Tools menu. For details, see Rotate 3D — Interactive Rotation of 3-D Views in the MATLAB® Graphics documentation.

Syntax

rotate3d
rotate3d
rotate3d
rotate3d(figure_handle,...)
rotate3d(axes_handle,...)
h = rotate3d(figure_handle)

Description

rotate3d on enables mouse-base rotation on all axes within the current figure.

rotate3d off disables interactive axes rotation in the current figure.

rotate3d toggles interactive axes rotation in the current figure.

rotate3d(figure_handle,...) enables rotation within the specified figure instead of the current figure.

rotate3d(axes_handle,...) enables rotation only in the specified axes.

h = rotate3d(figure_handle) returns a rotate3d mode object for figure figure_handle for you to customize the mode's behavior.

Using Rotate Mode Objects

You access the following properties of rotate mode objects via get and modify some of them using set:

FigureHandle <handle>

The associated figure handle. This read-only property cannot be set.

Enable 'on'|'off'

Specifies whether this figure mode is currently enabled on the figure.

RotateStyle 'orbit'|'box'

Sets the method of rotation. 'orbit' rotates the entire axes; 'box' rotates a plot-box outline of the axes.

ButtonDownFilter <function_handle>

The application can inhibit the rotate operation under circumstances the programmer defines, depending on what the callback returns. The input function handle should reference a function with two implicit arguments (similar to handle callbacks):

function [res] = myfunction(obj,event_obj)
% OBJ        handle to the object that has been clicked on.
% EVENT_OBJ  handle to event object (empty in this release).
% RES        a logical flag to determine whether the rotate
             operation should take place or the 
             'ButtonDownFcn' property of the object should 
             take precedence.

ActionPreCallback <function_handle>

Set this callback to listen to when a rotate operation will start. The input function handle should reference a function with two implicit arguments (similar to handle callbacks):

function myfunction(obj,event_obj)
% obj        handle to the figure that has been clicked on.
% event_obj  handle to event object.

The event object has the following read-only property:

Axes

The handle of the axes that is being rotated.

ActionPostCallback <function_handle>

Set this callback to listen to when a rotate operation has finished. The input function handle should reference a function with two implicit arguments (similar to handle callbacks):

function myfunction(obj,event_obj)
% obj         handle to the figure that has been clicked on.
% event_obj   handle to event object. The object has the same
              properties as the EVENT_OBJ of the
              'ActionPreCallback' callback.

flags = isAllowAxesRotate(h,axes)

Calling the function isAllowAxesRotate on the rotate3d object, h, with a vector of axes handles, axes, as input will return a logical array of the same dimension as the axes handle vector which indicate whether a rotate operation is permitted on the axes objects.

setAllowAxesRotate(h,axes,flag)

Calling the function setAllowAxesRotate on the rotate3d object, h, with a vector of axes handles, axes, and a logical scalar, flag, will either allow or disallow a rotate operation on the axes objects.

Examples

Example 1

Simple 3-D rotation

surf(peaks);
rotate3d on
% rotate the plot using the mouse pointer.

Example 2

Rotate the plot using the "Plot Box" rotate style:

surf(peaks);
h = rotate3d;
set(h,'RotateStyle','box','Enable','on');
% Rotate the plot.

Example 3

Create two axes as subplots and then prevent one from rotating:

ax1 = subplot(1,2,1);
surf(peaks);
h = rotate3d;
ax2 = subplot(1,2,2);
surf(membrane);
setAllowAxesRotate(h,ax2,false);
% rotate the plots.

Example 4

Create a buttonDown callback for rotate mode objects to trigger. Copy the following code to a new M-file, execute it, and observe rotation behavior:

function demo
% Allow a line to have its own 'ButtonDownFcn' callback.
hLine = plot(rand(1,10));
set(hLine,'ButtonDownFcn','disp(''This executes'')');
set(hLine,'Tag','DoNotIgnore');
h = rotate3d;
set(h,'ButtonDownFilter',@mycallback);
set(h,'Enable','on');
% mouse-click on the line
%
function [flag] = mycallback(obj,event_obj)
% If the tag of the object is 'DoNotIgnore', then return true.
objTag = get(obj,'Tag');
if strcmpi(objTag,'DoNotIgnore')
   flag = true;
else
   flag = false;
end

Example 5

Create callbacks for pre- and post-buttonDown events for rotate3D mode objects to trigger. Copy the following code to a new M-file, execute it, and observe rotation behavior:

function demo
% Listen to rotate events
surf(peaks);
h = rotate3d;
set(h,'ActionPreCallback',@myprecallback);
set(h,'ActionPostCallback',@mypostcallback);
set(h,'Enable','on');
%
function myprecallback(obj,evd)
disp('A rotation is about to occur.');
%
function mypostcallback(obj,evd)
newView = round(get(evd.Axes,'View'));
msgbox(sprintf('The new view is [%d %d].',newView));

Remarks

When enabled, rotate3d provides continuous rotation of axes and the objects it contains through mouse movement. A numeric readout appears in the lower left corner of the figure during rotation, showing the current azimuth and elevation of the axes. Releasing the mouse button removes the animated box and the readout.

You can also enable 3-D rotation from the figure Tools menu or the figure toolbar.

You can create a rotate3D mode object once and use it to customize the behavior of different axes, as example 3 illustrates. You can also change its callback functions on the fly.

When you assign different 3-D rotation behaviors to different subplot axes via a mode object and then link them using the linkaxes function, the behavior of the axes you manipulate with the mouse will carry over to the linked axes, regardless of the behavior you previously set for the other axes.

See Also

camorbit, pan, rotate, view, zoom

Object Manipulation for related functions

  


 © 1984-2008- The MathWorks, Inc.    -   Site Help   -   Patents   -   Trademarks   -   Privacy Policy   -   Preventing Piracy   -   RSS