Main Content

rotate3d

启用旋转模式

说明

您可以使用旋转模式,通过以交互方式旋转坐标区的三维视图来浏览数据。使用 rotate3d 函数启用或禁用旋转模式,并设置其他基本选项。要进一步控制旋转模式行为,请返回并使用 rotate3d 对象。

大多数三维图都支持旋转模式,包括三维气泡图、三维散点图和曲面图。支持旋转模式的图通常在坐标区工具栏中显示旋转 图标。

您还可以使用默认情况下启用的内置坐标区交互来以交互方式浏览数据。例如,您可以通过拖动坐标区来旋转三维坐标区的视图。内置交互不要求您启用交互模式,并且比交互模式响应更快。但是,您可以启用旋转模式来自定义旋转行为。有关内置交互的详细信息,请参阅对图的交互进行控制

创建对象

描述

示例

rotate3d option 为当前图窗中的所有坐标区设置旋转模式。例如,rotate3d on 启用旋转模式,而 rotate3d off 禁用旋转模式。

在启用了旋转模式时,使用光标或键盘可旋转坐标区的视图。

  • 光标 - 点击并在坐标区中拖动光标。

  • 键盘 - 要增大或减小方位角,请按向右箭头 (→) 键或向左箭头 (←) 键。要增大或减小高度,请按向上箭头 (↑) 键或向下箭头 (↓) 键。

不管当前交换模式如何,某些内置交互都默认处于启用状态。要禁用独立于旋转模式的内置旋转交互,请使用 disableDefaultInteractivity 函数。

rotate3d 切换旋转模式。例如,如果禁用了旋转模式,则调用 rotate3d 会启用旋转模式。

rotate3d(fig,option) 为指定图窗中的所有坐标区设置旋转模式。例如,要为图窗 fig 中的所有坐标区启用旋转模式,请使用 rotate3d(fig,'on')

示例

rotate3d(ax,option) 设置指定坐标区的旋转模式。例如,要为坐标区 ax 启用旋转模式,请使用 rotate3d(ax,'on')。将此语法用于在 App 设计工具中创建的 App 和使用 uifigure 函数创建的 App。 (自 R2023a 起)

示例

r = rotate3d 为当前图窗创建一个 rotate3d 对象。此语法对于自定义旋转模式和样式非常有用。

r = rotate3d(fig) 为指定的图窗创建 rotate3d 对象。

输入参量

全部展开

旋转模式选项,指定为下列值之一:

  • 'on' - 启用旋转模式。

  • 'off' - 禁用旋转模式。不管当前交换模式如何,某些内置交互都默认处于启用状态。要禁用独立于旋转模式的内置旋转交互,请使用 disableDefaultInteractivity 函数。

目标图窗,指定为 Figure 对象。指定目标图窗将为所有当前或将来的 Axes 子级设置模式。

目标坐标区,指定为 Axes 对象。

属性

全部展开

旋转模式状态,指定为 'off''on'

旋转方法,指定为以下值之一:

  • 'orbit' - 旋转整个坐标区。

  • 'box' - 旋转坐标区的图框轮廓。使用 uifigure 函数创建的图窗或在 MATLAB® Online™ 中创建的图窗不支持 'box'

注意

在以后的版本中,此属性将不起作用。有关详细信息,请参阅版本历史记录

旋转前要执行的函数,指定为下列值之一:

  • 函数句柄

  • 元胞数组,包含一个函数句柄和其他参量

  • 包含有效 MATLAB 命令或函数(在基础工作区中计算)的字符向量(不推荐)

使用此属性在开始旋转时执行代码。如果使用函数句柄指定此属性,则 MATLAB 将向回调函数传递两个参量:

  • figure - 要旋转的 Figure 对象。

  • axesStruct - 包含一个字段 Axes 的结构体,该字段表示您正在旋转的坐标区对象。如果在回调函数中不使用此参量,请用波浪号字符 (~) 替换它。

有关回调的详细信息,请参阅Create Callbacks for Graphics Objects

旋转后执行的函数,指定为下列值之一:

  • 函数句柄

  • 元胞数组,包含一个函数句柄和其他参量

  • 包含有效 MATLAB 命令或函数(在基础工作区中计算)的字符向量(不推荐)

使用此属性在完成旋转后执行代码。如果使用函数句柄指定此属性,则 MATLAB 将向回调函数传递两个参量:

  • figure - 您正在其中执行旋转操作的 Figure 对象。

  • axesStruct - 包含一个字段 Axes 的结构体,该字段表示您正在旋转的坐标区对象。如果在回调函数中不使用此参量,请用波浪号字符 (~) 替换它。

有关回调的详细信息,请参阅Create Callbacks for Graphics Objects

旋转禁止回调,指定为下列值之一:

  • 函数句柄

  • 元胞数组,包含一个函数句柄和其他参量

  • 包含有效 MATLAB 命令或函数(在基础工作区中计算)的字符向量(不推荐)

使用此属性可隐藏在您定义的条件下的旋转。数值或逻辑输出 1 (true) 禁止旋转,数值或逻辑输出 0 (false) 允许旋转。如果使用函数句柄指定此属性,则 MATLAB 将向回调函数传递两个参量:

  • axes - 正在旋转的坐标区对象。

  • eventData - 空参量。在函数定义中将其替换为波浪号字符 (~) 以指示不使用此参量。

如果使用函数句柄指定此属性,则必须将此函数的输出赋给变量。

有关回调的详细信息,请参阅Create Callbacks for Graphics Objects

此 属性 为只读。

创建 rotate3d 对象时指定的 Figure 对象。如果未指定图窗,则 FigureHandle 是创建 rotate3d 对象时的当前图窗。

旧模式,指定为 'on''off',或者指定为数值或逻辑值 1 (true) 或 0 (false)。值 'on' 等效于 true'off' 等效于 false。因此,您可以使用此属性的值作为逻辑值。该值存储为 OnOffSwitchState 类型的 on/off 逻辑值。

此属性仅适用于使用 uifigure 函数或在 MATLAB Online 中创建的图窗的 rotate3d 对象。将此属性设置为 'on' 会更改 UI 图窗中交互模式的行为,使其与传统图窗中模式的行为相匹配。有关详细信息,请参阅 enableLegacyExplorationModes

一旦该属性设置为 'on',它就无法再更改回 'off'

对象函数

使用 rotate3d 对象函数自定义图窗中坐标区对象的旋转行为。对于所有这些函数,坐标区和旋转模式对象必须与同一图窗相关联。

setAllowAxesRotate

setAllowAxesRotate 函数设置旋转坐标区的权限。

如果对 rotate3d 对象 r 调用 setAllowAxesRotate(r,axes,tf) 并以坐标区对象向量 axes 和逻辑标量 tf 作为输入,将允许或禁止对坐标区对象执行旋转操作。

使用 setAllowAxesRotate 对坐标区启用旋转模式不会对图窗启用旋转模式。要实现此目的,请设置 rotate3d 对象的 Enable 属性。

isAllowAxesRotate

isAllowAxesRotate 函数用于查询旋转坐标区的权限。

如果对 rotate3d 对象 r 调用 tf = isAllowAxesRotate(r,axes) 并以坐标区对象向量 axes 作为输入,将返回与 axes 大小相同的逻辑数组 tftf 指示是否允许对坐标区对象执行旋转操作。

使用 isAllowAxesRotate 返回坐标区的旋转模式不会返回图窗的旋转模式。要实现此目的,请访问 rotate3d 对象的 Enable 属性。

示例

全部折叠

创建三维绘图并启用旋转模式。然后,以交互方式旋转坐标区。

surf(peaks)
rotate3d on

在一个分块图布局中创建两个坐标区,并仅对第一个坐标区启用旋转模式。

tiledlayout(1,2);
ax1 = nexttile;
surf(peaks)

ax2 = nexttile;
contour(peaks);

rotate3d(ax1,'on')

Tiled chart layout with rotate mode enabled for the first axes

为要触发的旋转模式对象创建一个按钮按下回调。将以下代码复制到一个新文件,执行代码并观察旋转行为。

function demo_mbd
    % Allow a line to have its own 'ButtonDownFcn' callback
    hLine = plot(rand(1,10),'ButtonDownFcn','disp(''This executes'')');
    hLine.Tag = 'DoNotIgnore';
    h = rotate3d;
    h.ButtonDownFilter = @mycallback;
    h.Enable = 'on';
    % mouse-click on the line
end

function [flag] = mycallback(obj,event_obj)
    % If the tag of the object is 'DoNotIgnore', then return true
    objTag = obj.Tag;
    if strcmpi(objTag,'DoNotIgnore')
       flag = true;
    else
       flag = false;
    end
end

详细信息

全部展开

替代功能

坐标区工具栏

对于某些图,通过点击坐标区工具栏中的旋转 图标来启用旋转模式。

版本历史记录

在 R2006a 之前推出

全部展开