панорамирование

Представление панорамирования графика в интерактивном режиме

Синтаксис

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

Описание

pan on включает режим панорамирования для осей в текущей фигуре.

pan xon включает режим панорамирования и позволяет панорамировать только в направлении X для осей в 2D представлении в текущей фигуре.

pan yon включает режим панорамирования и позволяет панорамировать только в направлении Y для осей в 2D представлении в текущей фигуре.

pan off выключает режим панорамирования для осей в текущей фигуре. При запуске в R2018b некоторые взаимодействия панорамирования включены по умолчанию, независимо от режима панорамирования. Если вы хотите отключить эти взаимодействия по умолчанию, то используйте функцию disableDefaultInteractivity.

pan переключается режим панорамирования для осей в текущей фигуре к on или off.

pan(fig,...) устанавливает режим панорамирования для осей в заданной фигуре.

h = pan(fig) возвращает объект режима панорамирования фигуры для фигуры fig для вас, чтобы настроить поведение режима.

Используя объекты режима панорамирования

Доступ к следующим свойствам объектов режима панорамирования.

  • Enable 'on'|'off' — Задает, включен ли этот режим фигуры в настоящее время на фигуре.

  • Motion 'horizontal'|'vertical'|'both' — Тип панорамирования активированного для фигуры. Это свойство только влияет на оси в 2D представлении ([0 90]).

  • FigureHandle <handle> — Связанный указатель фигуры, свойство только для чтения, которое не может быть установлено.

Обратные вызовы режима панорамирования

Можно программировать следующие коллбэки для операций режима панорамирования.

  • 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
    

    Struct данных о событиях имеет следующее поле:

    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) — Разрешение запроса функции панорамировать оси.

    Вызывая функциональный isAllowAxesPan на объекте панорамирования, h, с вектором указателей осей, ax, когда вход возвращает логический массив той же размерности как оси, обрабатывает вектор, который указывает, разрешена ли операция панорамирования на объектах осей.

  • setAllowAxesPan(h,ax,flag) — Функционируйте, чтобы установить разрешение панорамировать оси.

    Вызывая функциональный setAllowAxesPan на объекте панорамирования, h, с вектором указателей осей, ax и логического скаляра, flag, или позволяет или запрещает операцию панорамирования на объектах осей.

  • cn = getAxesPanConstraint(h,ax) — Функция, чтобы получить ограничения операций панорамирования.

    Вызывая функциональный getAxesPanConstraint на объекте панорамирования, h, с объектом осей, ax, когда вход возвращает ограничение для осей. Возвращенное ограничение является одним из этих значений: 'x', 'y', 'z', 'xy', 'xz', 'yz' или 'unconstrained'.

  • setAxesPanConstraint(h,ax,cnstr) — Функционируйте, чтобы установить ограничения операций панорамирования.

    Вызывая функциональный setAxesPanConstraint на объекте панорамирования, h, с объектом осей, ax, и ограничительной опцией, cnstr, устанавливает ограничение для осей. Задайте ограничение как одно из этих значений: 'x', 'y', 'z', 'xy', 'xz', 'yz' или 'unconstrained'.

  • sty = getAxes3DPanAndZoomStyle(h,ax) — Функция, чтобы получить стиль операций панорамирования.

    Вызывая функциональный getAxes3DPanAndZoomStyle на объекте панорамирования, h, с вектором указателей осей, ax, когда вход возвращает стиль панорамирования для каждого, исключает. Возвращенное значение для каждого исключает, или 'limits' или 'camera'.

  • setAxes3DPanAndZoomStyle(h,ax,style) — Функционируйте, чтобы установить стиль операций панорамирования.

    Вызывая функциональный setAxes3DPanAndZoomStyle на объекте панорамирования, h, с вектором указателей осей, ax, и символьного массива, style, устанавливает стиль панорамирования на каждом, исключает. Задайте стиль или как 'limits' или как 'camera'.

  • cns = getAxesPanMotion(h,ax) — Функция, чтобы получить ограничения операций панорамирования (не рекомендуемый, используйте getAxesPanConstraint).

    Вызывая функциональный getAxesPanMotion на объекте панорамирования, h, с вектором объектов осей, ax, когда вход возвращает символьный массив ячеек той же размерности как ax, который указывает, ограничение для каждого исключает. Возвращенное значение для каждого исключает, 'horizontal', 'vertical' или 'both'.

  • setAxesPanMotion(h,ax,constraints) — Функционируйте, чтобы установить ограничения операций панорамирования (не рекомендуемый, используйте setAxesPanConstraint).

    Вызывая функциональный setAxesPanMotion на объекте панорамирования, h, с вектором объектов осей, ax, и символьного массива, constraints, устанавливает ограничение для каждого, исключает. Задайте ограничения как 'horizontal', 'vertical' или 'both'.

Примеры

Пример 1 - переход к режиму панорамирования

Постройте график и включите режим Pan:

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

Пример 2 - ограниченное панорамирование

Ограничьте панорамирование к оси X с помощью set:

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

Пример 3 - ограниченное панорамирование в подграфиках

Создайте четыре оси как подграфики и дайте каждому различное поведение панорамирования:

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.

Пример 4 - кодирование обратного вызова 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

Пример 5 - кодирующий пред - и поведение постобратного вызова

Создайте коллбэки для пред - и постконсервативные события для режима панорамирования возражает против триггера. Скопируйте следующий код в новый файл, выполните его и наблюдайте поведение панорамирования:

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));

Пример 6 - создание контекстного меню для режима панорамирования

Кодирование контекстного меню, которое позволяет пользователю, чтобы переключиться, чтобы масштабировать режим путем щелчка правой кнопкой:

figure
plot(magic(10)); 
hCM = uicontextmenu; 
hMenu = uimenu('Parent',hCM,'Label','Switch to zoom',...
        'Callback','zoom(gcbf,''on'')'); 
hPan = pan(gcf); 
hPan.UIContextMenu = hCM; 
pan('on')
Вы не можете добавить элементы во встроенное контекстное меню панорамирования, но можно заменить его на собственное.

Советы

Можно создать объект режима панорамирования однажды и использовать его, чтобы настроить поведение различных осей, когда Пример 3 иллюстрирует. Можно также изменить его функции обратного вызова на лету.

Примечание

Не изменяйте коллбэки фигуры в интерактивном режиме. В то время как режим активен (при панорамировании, масштабируя, и т.д.), вы получите предупреждение, при попытке изменить какой-либо из коллбэков фигуры, и операция не успешно выполнится. Одним исключением к этому правилу является фигура коллбэк WindowButtonMotionFcn, который может быть изменен из режима. Поэтому, если вы создаете пользовательский интерфейс, который обновляет коллбэки фигуры, пользовательский интерфейс должен некоторые отслеживать, которых интерактивный режим активен, если таковые имеются, прежде, чем попытаться сделать это.

Когда вы присваиваете различные поведения панорамирования различным осям subplot через объект режима и затем соединяете их использующий функцию linkaxes, поведение осей, которыми вы управляете с мышью, переносит на соединенные оси, независимо от поведения, которое вы ранее устанавливаете для других осей.

Альтернативы

Используйте инструмент Pan на панели инструментов, чтобы включить и отключить режим панорамирования на графике или выбрать Pan из меню Tools фигуры.

Представлено до R2006a