Поворот вида 3-D с помощью мыши
rotate3d on
rotate3d off
rotate3d
rotate3d(figure_handle,...)
rotate3d(axes_handle,...)
h = rotate3d(figure_handle)
rotate3d on включает режим поворота и разрешает поворот по всем осям в пределах текущей фигуры.
rotate3d off отключает режим поворота и отключает интерактивный поворот осей на текущем рисунке. Начиная с R2018b, некоторые взаимодействия поворота включены по умолчанию, независимо от режима поворота. Если вы хотите отключить эти взаимодействия по умолчанию, то используйте disableDefaultInteractivity функция.
rotate3d переключает вращение интерактивных осей на текущем рисунке.
rotate3d(figure_handle,...) включает поворот в пределах указанной фигуры вместо текущей фигуры.
rotate3d(axes_handle,...) включает режим поворота только в указанных осях.
h = rotate3d(figure_handle) возвращает объект режима rotate3d для рисунка figure_handle, чтобы настроить поведение режима.
Доступ к следующим свойствам объектов режима поворота.
FigureHandle <handle> - связанный дескриптор фигуры, свойство, доступное только для чтения, которое невозможно задать;
Enable 'on'|'off' - Указывает, включен ли данный режим фигуры в данный момент
RotateStyle 'orbit'|'box' - Задает метод поворота
'orbit' поворачивает все оси; 'box' поворачивает контур окна графика осей.
UseLegacyExplorationModes
'off' (по умолчанию) | логическое значение вкл/выкл - устаревший режим, указанный как 'on' или 'off'или как числовое или логическое 1 (true) или 0 (false). Значение 'on' эквивалентно true, и 'off' эквивалентно false. Таким образом, можно использовать значение этого свойства в качестве логического значения. Значение сохраняется как логическое значение типа вкл/выкл matlab.lang.OnOffSwitchState.
Установка для этого свойства значения 'on' изменяет поведение режимов взаимодействия в фигурах пользовательского интерфейса, чтобы они соответствовали поведению режимов в традиционных фигурах. Дополнительные сведения см. в разделе enableLegacyExplorationModes. Как только для этого свойства будет установлено значение 'on', его нельзя изменить обратно на 'off'. Это свойство применяется только к объектам rotate3d для фигур, созданных с помощью uifigure или в MATLAB ® Online™.
Для операций в режиме rotate3d можно запрограммировать следующие обратные вызовы.
ButtonDownFilter <function_handle> - Функция для перехвата ButtonDown события
Приложение может запретить операцию поворота в условиях, определенных программистом, в зависимости от того, что возвращает обратный вызов. Дескриптор входной функции должен ссылаться на функцию с двумя неявными аргументами (аналогично обратному вызову дескриптора):
function [res] = myfunction(obj,event_obj) % obj handle to the object that has been clicked on % event_obj handle to event data object (empty in this release) % res [output] logical flag to determine whether the rotate % operation should take place or the 'ButtonDownFcn' % property of the object should take precedence
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 = isAllowAxesRotate(h,axes) - Функция запроса разрешения на поворот осей
Вызов функции isAllowAxesRotate на объекте rotate3d, h, с вектором маркеров осей, axes, поскольку ввод возвращает логический массив того же размера, что и вектор маркера осей, который указывает, разрешена ли операция поворота для объектов осей.
setAllowAxesRotate(h,axes,flag) - Функция для установки разрешения на панорамирование осей
Вызов функции setAllowAxesRotate на объекте rotate3d, h, с вектором маркеров осей, axesи логический скаляр, flag, либо разрешает, либо запрещает операцию поворота для объектов осей.
Поверните график с помощью мыши:
surf(peaks);
rotate3d on;Поверните график с помощью стиля поворота «Поле печати»:
surf(peaks); h = rotate3d; h.RotateStyle = 'box'; h.Enable = 'on';
Создайте две оси как вложенные диаграммы, а затем предотвратите поворот одной из них:
ax1 = subplot(1,2,1); surf(peaks); h = rotate3d; h.Enable = 'on'; ax2 = subplot(1,2,2); surf(membrane); setAllowAxesRotate(h,ax2,false); % disable rotating for second plot
Создайте обратный вызов butureDown для запуска объектов режима поворота. Скопируйте следующий код в новый файл, выполните его и проверьте поведение ротации:
function demo_mbd % Allow a line to have its own 'ButtonDownFcn' callback hLine = plot(rand(1,10),'ButtonDownFcn','disp(''This executes'')'); hLine.Tag = 'DoNotIgnore'; h = rotate3d; 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 objTag = obj.Tag; if strcmpi(objTag,'DoNotIgnore') flag = true; else flag = false; end
Создание обратных вызовов для пред- и постбутийных событий Down для запускаемых объектов режима rotate3D. Скопируйте следующий код в новый файл, выполните его и проверьте поведение ротации:
function demo_mbd2 % Listen to rotate events surf(peaks); h = rotate3d; h.ActionPreCallback = @myprecallback; h.ActionPostCallback = @mypostcallback; h.Enable = 'on'; function myprecallback(obj,evd) disp('A rotation is about to occur.'); function mypostcallback(obj,evd) newView = round(evd.Axes.View); msgbox(sprintf('The new view is [%d %d].',newView));
Если включено, rotate3d обеспечивает непрерывное вращение осей и содержащихся в них объектов посредством перемещения мыши. В левом нижнем углу фигуры при вращении появляется числовое считывание, показывающее текущий азимут и отметку осей. При отпускании кнопки мыши анимированное поле и считывание удаляются. Это отличается от camorbit в то время как rotate3d инструмент изменяет View свойства осей, camorbit функция фиксирует соотношение сторон и изменяет CameraTarget, CameraPosition и CameraUpVector свойства осей. Дополнительные сведения см. в разделе Свойства осей.
Можно также включить поворот 3-D в меню «Инструменты» фигуры или на панели инструментов фигуры.
Можно создать rotate3d один раз и используйте его для настройки поведения различных осей, как показано в примере 3. Вы также можете изменить его функции обратного вызова на лету.
Примечание
Не изменяйте обратные вызовы фигур в интерактивном режиме. Пока режим активен (при панорамировании, масштабировании и т.д.), вы получите предупреждение, если попытаетесь изменить любой из обратных вызовов фигуры, и операция не будет выполнена. Единственным исключением из этого правила является цифра WindowButtonMotionFcn обратный вызов, который может быть изменен из режима. Поэтому при создании пользовательского интерфейса, который обновляет обратные вызовы фигуры, пользовательский интерфейс должен отслеживать, какой интерактивный режим активен, если он есть, прежде чем пытаться сделать это.
При назначении различных режимов вращения 3-D различным subplot оси через объект режима, а затем связать их с помощью linkaxes функция, поведение осей, которыми вы манипулируете с помощью мыши, переносится на связанные оси, независимо от поведения, заданного ранее для других осей.
Используйте инструмент «Rotate3D» на панели инструментов для включения и отключения режима rotate3D на графике или выберите «Повернуть 3D» в меню «Сервис» рисунка.