Представление панорамирования графика в интерактивном режиме
pan on
pan xon
pan yon
pan off
pan
pan(fig,...)
h = pan(fig)
pan on
включает режим панорамирования для осей на текущей фигуре.
pan xon
включает режим панорамирования и включает панорамирование только в направлении x для осей на 2-D виде на текущей фигуре.
pan yon
включает режим панорамирования и включает панорамирование только в направлении y для осей на 2-D виде на текущей фигуре.
pan off
отключает режим панорамирования для осей на текущей фигуре. Начиная с R2018b, некоторые взаимодействия панорамирования активируются по умолчанию, независимо от режима панорамирования. Если вы хотите отключить эти взаимодействия по умолчанию, используйте disableDefaultInteractivity
функция.
pan
переключение режима панорамирования для осей на текущей фигуре на on
или off
.
pan(fig,...)
устанавливает режим панорамирования для осей на заданном рисунке.
h = pan(fig)
возвращает объект режима панорамирования рисунка для рисунка fig
для настройки поведения режима.
Доступ к следующим свойствам объектов режима панорамирования.
Enable
'on'|'off'
- Определяет, включен ли этот режим фигуры в данный момент на рисунке.
Motion
'horizontal'|'vertical'|'both'
- Тип панорамирования, активируемый для рисунка. Это свойство влияет только на оси в 2-D виде ([0 90]
).
FigureHandle <handle>
- связанный указатель на рисунок, свойство, доступное только для чтения, которое невозможно задать.
ContextMenu <handle>
- Задает пользовательское контекстное меню, отображаемое во время действия щелчка правой кнопкой мыши.
UseLegacyExplorationModes
'off'
(по умолчанию) | логическое значение on/off - Устаревший режим, заданный как 'on'
или 'off'
, или как числовое или логическое 1
(true
) или 0
(false
). Значение 'on'
эквивалентно true
, и 'off'
эквивалентно false
. Таким образом, можно использовать значение этого свойства как логическое значение. Значение сохранено в виде логического значения on/off типа matlab.lang.OnOffSwitchState
.
Установка значения свойства 'on'
изменяет поведение режимов взаимодействия в фигурах пользовательского интерфейса так, чтобы они совпадали с поведением режимов в традиционных рисунках. Для получения дополнительной информации см. 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
Данные о событиях struct имеют следующее поле:
| Указатель на оси, которая панорамируется |
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'
.
Постройте график и включите режим панорамирования:
plot(magic(10)); pan on % pan on the plot
Ограничьте панорамирование осью X с помощью set
:
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
Создайте коллбэки для событий pre- и post-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')
Можно создать объект режима панорамирования один раз и использовать его для настройки поведения различных осей, как иллюстрирует Пример 3. Вы также можете изменять его функции обратного вызова на лету.
Примечание
Не изменяйте коллбэки рисунка в интерактивном режиме. В то время как режим активен (при панорамировании, масштабировании и т.д.), вы получите предупреждение, если попытаетесь изменить любой из коллбэков рисунка, и операция не будет успешной. Единственным исключением из этого правила является рисунок WindowButtonMotionFcn
коллбэк, который может быть изменен из режима. Поэтому, если вы создаете пользовательский интерфейс, который обновляет коллбэки рисунка, пользовательский интерфейс должен отслеживать, какой интерактивный режим активен, если он есть, прежде чем пытаться сделать это.
При назначении различных режимов панорамирования различным subplot
оси через объект mode, а затем связать их с помощью linkaxes
функция, поведение осей, которыми вы манипулируете с помощью мыши, переносится на связанные оси, независимо от поведения, которое вы ранее задали для других осей.
Используйте инструмент Pan на панели инструментов, чтобы включить и отключить режим панорамирования на графике, или выберите Pan из Tools меню рисунка.