Панорамирование графика в интерактивном режиме
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'или как числовое или логическое 1 (true) или 0 (false). Значение 'on' эквивалентно true, и 'off' эквивалентно false. Таким образом, можно использовать значение этого свойства в качестве логического значения. Значение сохраняется как логическое значение типа вкл/выкл 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
Структура данных события имеет следующее поле:
| Ручка разворачиваемых осей |
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.
Создайте обратный вызов butureDown для запускаемых объектов режима панорамирования. Скопируйте следующий код в новый файл, выполните его и проверьте поведение панорамирования:
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
Создание обратных вызовов для событий до и после ButureDown для запускаемых объектов режима панорамирования. Скопируйте следующий код в новый файл, выполните его и проверьте поведение панорамирования:
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 оси через объект режима, а затем связать их с помощью linkaxes , поведение осей, которыми вы манипулируете с помощью мыши, переносится на связанные оси, независимо от поведения, заданного ранее для других осей.
Используйте инструмент «Панорамирование» на панели инструментов для включения и отключения режима панорамирования на графике или выберите команду «Панорамирование» в меню «Сервис» рисунка.