文档

rotate3d

使用鼠标旋转3d视图

语法

rotate3d上
rotate3d掉
rotate3d
rotate3d (figure_handle…)
rotate3d (axes_handle…)
H = rotate3d(figure_handle)

描述

rotate3d上在当前图中的所有轴上启用基于鼠标的旋转。

rotate3d掉禁用当前图中的交互轴旋转。

rotate3d切换当前图中的交互轴旋转。

rotate3d (figure_handle…)启用在指定图形而不是当前图形内旋转。

rotate3d (axes_handle…)只允许在指定的轴上旋转。

H = rotate3d(figure_handle)返回一个旋转的3d模式对象图figure_handle用于自定义模式的行为。

使用旋转模式对象

您可以访问以下旋转模式对象的属性。

  • FigureHandle <处理>-关联的图句柄,不能设置的只读属性

  • 启用“上”|“了”-指定当前是否在图上启用此图模式

  • RotateStyle“轨道”|“盒子”—设置旋转的方法

    “轨道”旋转整个轴;“盒子”旋转坐标轴的绘图框轮廓。

旋转3d模式回调

您可以为rotate3d模式操作编写以下回调程序。

  • ButtonDownFilter < function_handle >-拦截功能ButtonDown事件

    应用程序可以在程序员定义的情况下禁止旋转操作,这取决于回调返回的内容。输入函数句柄应该引用一个带有两个隐式参数的函数(类似于句柄回调):

    函数[res] = myfunction(obj,event_obj)% obj句柄指向已被单击的对象事件数据对象的% event_obj句柄(此版本为空)% res [output]逻辑标志来确定是否旋转%操作或'ButtonDownFcn'对象的%属性应该优先
  • ActionPreCallback < function_handle >-旋转前执行的函数

    将此回调设置为监听旋转操作何时开始。输入函数句柄应该引用一个带有两个隐式参数的函数(类似于图形对象回调函数):

    函数myfunction (obj event_obj)% obj句柄到已单击的图形包含事件数据结构的event_obj对象

    事件数据有以下字段:

    被平移的轴柄

  • ActionPostCallback < function_handle >-旋转后执行的函数

    将此回调设置为在旋转操作完成时监听。输入函数句柄应该引用一个带有两个隐式参数的函数(类似于图形对象回调函数):

    函数myfunction (obj event_obj)% obj句柄到已单击的图形包含事件数据结构的% event_obj对象'ActionPreCallback'回调的%事件数据)

旋转3d模式实用函数

以下函数在pan模式下查询和设置其某些属性。

  • flags = isAllowAxesRotate(h,axes)—查询轴的旋转权限

    调用函数isAllowAxesRotate在rotate3d对象上,h,有一个轴句柄的向量,,作为输入将返回一个与坐标轴句柄向量相同维度的逻辑数组,坐标轴句柄向量指示是否允许对坐标轴对象进行旋转操作。

  • setAllowAxesRotate (h,轴,标志)-设置对平移轴的权限

    调用函数setAllowAxesRotate在rotate3d对象上,h,有一个轴句柄的向量,,一个逻辑标量,国旗,将允许或禁止对坐标轴对象进行旋转操作。

例子

示例1

使用鼠标旋转绘图:

冲浪(峰);rotate3d

示例2

使用“plot Box”旋转样式旋转剧情:

冲浪(峰);H = rotate3d;h.RotateStyle =“盒子”;h.Enable =“上”

示例3

创建两个轴作为子图,然后阻止其中一个旋转:

Ax1 = subplot(1,2,1);冲浪(峰);H = rotate3d;h.Enable =“上”;Ax2 = subplot(1,2,2);冲浪(膜);setAllowAxesRotate (h, ax2假);禁用第二个图的旋转。

示例4

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

函数demo_mbd允许一行有自己的'ButtonDownFcn'回调hLine = plot(rand(1,10),“ButtonDownFcn”“disp(“这执行”)”);线。标签=“DoNotIgnore”;H = rotate3d;h.ButtonDownFilter = @mycallback;h.Enable =“上”%鼠标点击线上函数[flag] = mycallback(obj,event_obj)如果对象的标签是'DoNotIgnore',则返回trueobjTag = obj.Tag;如果strcmpi (objTag“DoNotIgnore”) flag = true;其他的Flag = false;结束

示例5

为要触发的旋转3d模式对象创建前置和后buttondown事件的回调。复制以下代码到一个新文件,执行它,并观察旋转行为:

函数demo_mbd2%收听旋转事件冲浪(峰);H = rotate3d;h.ActionPreCallback = @myprecallback;h.ActionPostCallback = @mypostcallback;h.Enable =“上”函数myprecallback (obj, evd) disp (“旋转即将发生。”);函数mypostcallback(obj,evd) newView = round(evd. ax . view);对话框(sprintf (新的观点是[%d %d]。newView));

提示

当启用时,rotate3d通过鼠标移动提供轴和它包含的对象的连续旋转。在旋转过程中,数字读数将出现在图的左下角,显示轴的当前方位角和仰角。松开鼠标按钮将移除动画框和读数。这不同于camorbit函数在rotate3d工具修改视图坐标轴的性质camorbit函数固定纵横比并修改CameraTargetCameraPosition而且CameraUpVector坐标轴的性质。看到轴属性更多信息。

还可以从图中启用3-D旋转工具菜单或图工具栏。

您可以创建rotate3dMode对象一次,并使用它自定义不同轴的行为,如示例3所示。您还可以动态更改它的回调函数。

    注意:不要在交互模式中更改图回调。当模式处于活动状态时(当平移、缩放等),如果您试图更改任何图形的回调,并且操作不成功,则会收到一个警告。这个规则的一个例外是图WindowButtonMotionFcn回调函数,它可以在模式内更改。因此,如果您正在创建一个更新图形回调的UI,那么在尝试执行此操作之前,UI应该在一定程度上跟踪哪个交互模式是活动的(如果有的话)。

当你把不同的三维旋转行为分配给不同的次要情节坐标轴通过模式对象,然后使用linkaxes函数中,您用鼠标操作的轴的行为将延续到链接的轴,而不管您先前为其他轴设置的行为如何。

选择

使用Rotate3D工具在图形工具栏上启用和禁用旋转3d模式,或选择三维旋转从图中工具菜单。详情请参见3d旋转

R2006a之前介绍过

这个话题有帮助吗?