Documentation

rotate3d

Rotate 3-D view using mouse

Syntax

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

Description

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

rotate3d offdisables interactive axes rotation in the current figure.

rotate3dtoggles 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 rotate3dmode objectfor figure figure_handle for you to customize the mode's behavior.

Using Rotate Mode Objects

You access the following properties of rotate mode objects.

  • FigureHandle — The associated figure handle, a read-only property that 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.

Rotate3D Mode Callbacks

You can program the following callbacks for rotate3d mode operations.

  • ButtonDownFilter — Function to interceptButtonDownevents

    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 data object (empty in this release)% res [output] logical flag to determine whether the rotate应该发生或“ButtonDownFc %操作n'% property of the object should take precedence
  • ActionPreCallback — Function to execute before rotating

    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 graphics object callbacks):

    functionmyfunction(obj,event_obj)% obj handle to the figure that has been clicked on% event_obj object containing struct of event data

    The event data has the following field:

    Axes

    The handle of the axes that is being panned

  • ActionPostCallback — Function to execute after rotating

    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 graphics object callbacks):

    functionmyfunction(obj,event_obj)% obj handle to the figure that has been clicked on% event_obj object containing struct of event data (same as the% event data of the 'ActionPreCallback' callback)

Rotate3D Mode Utility Functions

The following functions in pan mode query and set certain of its properties.

  • flags = isAllowAxesRotate(h,axes)— Function querying permission to rotate axes

    Calling the functionisAllowAxesRotateon 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)— Function to set permission to pan axes

    Calling the functionsetAllowAxesRotateon 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

Rotate the plot using the mouse:

surf(peaks); rotate3don;

Example 2

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

surf(peaks); h = rotate3d; h.RotateStyle ='box'; h.Enable ='on';

Example 3

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

ax1 = subplot(1,2,1); surf(peaks); h = rotate3d; h.Enable ='on'; ax2 = subplot(1,2,2); surf(membrane); setAllowAxesRotate(h,ax2,false);% disable rotating for second plot

Example 4

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

functiondemo_mbd% Allow a line to have its own 'ButtonDownFcn' callbackhLine = plot(rand(1,10),'ButtonDownFcn','disp(''This executes'')'); hLine.Tag ='DoNotIgnore'; h = rotate3d; h.ButtonDownFilter = @mycallback; h.Enable ='on';% mouse-click on the linefunction[flag] = mycallback(obj,event_obj)% If the tag of the object is 'DoNotIgnore', then return trueobjTag = obj.Tag;ifstrcmpi(objTag,'DoNotIgnore') flag = true;else国旗= 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 file, execute it, and observe rotation behavior:

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

Tips

When enabled,rotate3dprovides 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. This differs from thecamorbitfunction in that while therotate3dtool modifies theViewproperty of the axes, thecamorbitfunction fixes the aspect ratio and modifies theCameraTarget,CameraPositionandCameraUpVectorproperties of the axes. SeeAxes Propertiesfor more information.

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

You can create arotate3dmode 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.

Note

Do not change figure callbacks within an interactive mode.While a mode is active (when panning, zooming, etc.), you will receive a warning if you attempt to change any of the figure's callbacks and the operation will not succeed. The one exception to this rule is the figureWindowButtonMotionFcncallback, which can be changed from within a mode. Therefore, if you are creating a UI that updates a figure's callbacks, the UI should some keep track of which interactive mode is active, if any, before attempting to do this.

When you assign different 3-D rotation behaviors to differentsubplotaxes via a mode object and then link them using thelinkaxesfunction, 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.

Alternatives

Use the Rotate3D toolon the figure toolbar to enable and disable rotate3D mode on a plot, or selectRotate 3Dfrom the figure'sToolsmenu. For details, seeRotate in 3-D.

Introduced before R2006a

Was this topic helpful?