主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

pan

R2022a

以交互方式平移图形视图

语法

pan on
pan xon
pan yon
pan off
pan
pan(fig,...)
h = pan(fig)

描述

pan on 为当前图窗中的坐标区启用平移模式。

pan xon 为当前图窗中的坐标区二维视图启用平移模式并仅支持 x 轴方向的平移。

pan yon 为当前图窗中的坐标区二维视图启用平移模式并仅支持 y 轴方向的平移。

pan off 为当前图窗中的坐标区关闭平移模式。从 R2018b 开始,不管平移模式设置如何,都会默认启用一些平移交互。如果要禁用这些默认交互,请使用 disableDefaultInteractivity 函数。

pan 将当前图窗中的坐标区平移模式切换为 on 或 off。

pan(fig,...) 在指定图窗中设置相对于坐标区的平移模式。

h = pan(fig) 返回图窗 fig 的图窗平移模式对象,供您用来自定义模式的行为。

使用平移模式对象

访问平移模式对象的以下属性。

  • Enable 'on'|'off' - 指定当前是否在图窗中启用此图窗模式。

  • Motion 'horizontal'|'vertical'|'both' - 图窗所启用的平移类型。此属性仅影响二维视图 ([0 90]) 中的坐标区。

  • FigureHandle <handle> - 关联的图窗句柄,无法设置的只读属性。

  • ContextMenu <handle> - 指定右键点击动作期间要显示的自定义上下文菜单。

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

    将此属性设置为 'on' 会更改 UI 图窗中交互模式的行为,使其与传统图窗中模式的行为相匹配。有关详细信息,请参阅 enableLegacyExplorationModes。一旦该属性设置为 'on',它就无法再更改回 'off'。此属性仅应用于使用 uifigure 函数或在 MATLAB® Online™ 中创建的图窗的平移对象。

平移模式回调

您可以对平移模式操作的以下回调进行编程。

  • ButtonDownFilter <function_handle> - 拦截 ButtonDown 事件的函数

    应用程序可以在编程人员定义的情况下禁止平移操作,具体取决于回调返回的内容。输入函数句柄应引用包含两个隐式参数的函数(类似于图形对象回调):

    function [res] = myfunction(obj,event_obj)
    % obj          handle to the object clicked on
    % event_obj    event data (empty in this release)
    % res [output] a logical flag to determine whether the pan
    %              operation should take place(for 'res' set to 'false') 
    %              or the 'ButtonDownFcn' property of the object should 
    %              take precedence (when 'res' is 'true')
    
  • ActionPreCallback <function_handle> - 平移前执行的函数

    如果需要在平移操作开始时执行代码,则设置该回调。函数句柄应引用包含两个隐式参数的函数(类似于图形对象回调):

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

    事件数据结构体包含以下字段:

    Axes

    要平移的坐标区的句柄

  • ActionPostCallback <function_handle> - 平移后执行的函数

    如果需要在平移操作结束时执行代码,则设置该回调。函数句柄应引用包含两个隐式参数的函数(类似于图形对象回调):

    function myfunction(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)
    

平移模式工具函数

处于平移模式的以下函数查询并设置其某些属性。

  • flags = isAllowAxesPan(h,ax) - 查询平移坐标区的权限的函数。

    如果对平移对象 h 调用函数 isAllowAxesPan,并且坐标区句柄的向量 ax 作为输入,则返回与坐标区句柄向量具有相同维度的逻辑数组,指示是否允许对坐标区对象执行平移操作。

  • setAllowAxesPan(h,ax,flag) - 设置平移坐标区的权限的函数。

    如果对平移对象 h 调用函数 setAllowAxesPan 并且具有坐标区句柄向量 ax 和逻辑标量 flag,则将允许或禁止对坐标区对象执行平移操作。

  • cn = getAxesPanConstraint(h,ax) - 用来获取平移操作的约束条件的函数。

    对平移对象 h 调用函数 getAxesPanConstraint 并以坐标区对象 ax 作为输入,可返回坐标区的约束条件。返回的约束条件是下列值之一:'x'、'y'、'z'、'xy'、'xz'、'yz' 或 'unconstrained'。

  • setAxesPanConstraint(h,ax,cnstr) - 用来为平移操作设置约束条件的函数。

    对平移对象 h 调用函数 setAxesPanConstraint 并使用坐标区对象 ax 和约束条件选项 cnstr,可设置坐标区的约束条件。指定约束条件为下列值之一:'x'、'y'、'z'、'xy'、'xz'、'yz' 或 'unconstrained'。

  • sty = getAxes3DPanAndZoomStyle(h,ax) - 获取平移操作类型的函数。

    对平移对象 h 调用函数 getAxes3DPanAndZoomStyle 并以坐标区句柄向量 ax 作为输入,可返回每个坐标区的平移类型。为每个坐标区返回的值为 'limits' 或 'camera'。

  • setAxes3DPanAndZoomStyle(h,ax,style) - 设置平移操作类型的函数。

    如果对平移对象 h 调用函数 setAxes3DPanAndZoomStyle 并且坐标区句柄向量 ax 和字符数组 style 作为输入,则将设置每个坐标区的平移类型。将样式指定为 'limits' 或 'camera'。

  • cns = getAxesPanMotion(h,ax) - 用来获取平移操作的约束条件的函数(不建议,请使用 getAxesPanConstraint)。

    对平移对象 h 调用函数 getAxesPanMotion 并以坐标区对象向量 ax 作为输入,将返回与 ax 维度相同的字符元胞数组,指示每个坐标区的约束条件。为每个坐标区返回的值为 'horizontal'、'vertical' 或 'both'。

  • setAxesPanMotion(h,ax,constraints) - 用来设置平移操作的约束条件的函数(不建议,请使用 setAxesPanConstraint)。

    对平移对象 h 调用函数 setAxesPanMotion 并使用坐标区对象向量 ax 和字符数组 constraints,可设置每个坐标区的约束条件。将约束条件指定为 'horizontal'、'vertical' 或 'both'。

示例

全部折叠

绘制一个图形并启用平移模式:

plot(magic(10));
pan on
% pan on the plot

将平移约束到 x 轴:

plot(magic(10));
h = pan;
h.Motion = 'horizontal';
h.Enable = 'on';
% pan on the plot in the horizontal direction.

创建四个坐标区作为子图并为每个坐标区设置不同的平移行为:

ax1 = subplot(2,2,1);
plot(1:10);
h = pan;
ax2 = subplot(2,2,2);
plot(rand(3));
setAllowAxesPan(h,ax2,false);
ax3 = subplot(2,2,3);
plot(peaks);
setAxesPanMotion(h,ax3,'horizontal');
ax4 = subplot(2,2,4);
contour(peaks);
setAxesPanMotion(h,ax4,'vertical');
% pan on the plots.

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

function demo
% Allow a line to have its own 'ButtonDownFcn' callback.
hLine = plot(rand(1,10));
hLine.ButtonDownFcn = 'disp(''This executes'')';
hLine.Tag = 'DoNotIgnore';
h = pan;
h.ButtonDownFilter = @mycallback;
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.

% Indicate what the target is.
disp(['Clicked ' obj.Type ' object'])
objTag = obj.Tag;
if strcmpi(objTag,'DoNotIgnore')
   flag = true;
else
   flag = false;
end

为要触发的平移模式对象的 ButtonDown 前和后事件创建回调。将以下代码复制到一个新文件,执行代码并观察平移行为:

function demo
% Listen to pan events
plot(1:10);
h = pan;
h.ActionPreCallback = @myprecallback;
h.ActionPostCallback = @mypostcallback;
h.Enable = 'on';
%
function myprecallback(obj,evd)
disp('A pan is about to occur.');
%
function mypostcallback(obj,evd)
newLim = evd.Axes.XLim;
msgbox(sprintf('The new X-Limits are [%.2f,%.2f].',newLim));

创建一个上下文菜单,用户可以通过右击来切换到缩放模式:

figure
plot(magic(10)); 
hCM = uicontextmenu; 
hMenu = uimenu('Parent',hCM,'Label','Switch to zoom',...
        'Callback','zoom(gcbf,''on'')'); 
hPan = pan(gcf); 
hPan.ContextMenu = hCM; 
pan('on')

提示

您可以一次性创建平移模式对象,然后将其用于自定义不同坐标区的行为。您也可以动态更改其回调函数。

注意

不要在交互式模式下更改图窗回调。虽然缩放模式在进行平移、缩放等操作时有效,但在尝试更改图窗的任何回调时会收到警告,操作也会失败。此规则的一个例外情况是图窗的 WindowButtonMotionFcn 回调,您可以在缩放模式下更改该回调。因此,如果创建的 UI 将更新图窗的回调,UI 应以某种方式跟踪哪种交互式模式(如果有)处于活动状态,然后再尝试执行该操作。

当通过模式对象为不同的 subplot 坐标区指定不同的平移行为,然后使用 linkaxes 函数链接这些坐标区时,无论之前为另外的坐标区设置了何种行为,使用鼠标操作的坐标区的行为将会延伸到所链接的坐标区。

备选方法

使用工具栏上的平移工具启用和禁用绘图的平移模式,或从图窗的工具菜单中选择平移。

版本历史记录

在 R2006a 之前推出

全部展开