rotate3d

Поверните 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 mode для рисунка figure_handle, чтобы настроить поведение режима.

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

Вы получаете доступ к следующим свойствам объектов режима поворота.

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

  • Enable 'on'|'off' - Определяет, включен ли этот режим фигуры в данный момент на рисунке

  • RotateStyle 'orbit'|'box' - Устанавливает метод вращения

    'orbit' вращает все оси; 'box' поворачивает график контура осей.

  • UseLegacyExplorationModes 'off' (по умолчанию) | логическое значение on/off - Устаревший режим, заданный как 'on' или 'off', или как числовое или логическое 1 (true) или 0 (false). Значение 'on' эквивалентно true, и 'off' эквивалентно false. Таким образом, можно использовать значение этого свойства как логическое значение. Значение сохранено в виде логического значения on/off типа matlab.lang.OnOffSwitchState.

    Установка значения свойства 'on' изменяет поведение режимов взаимодействия в фигурах пользовательского интерфейса так, чтобы они совпадали с поведением режимов в традиционных рисунках. Для получения дополнительной информации см. enableLegacyExplorationModes. Если для этого свойства задано значение 'on', его нельзя изменить назад на 'off'. Это свойство применяется только к вращению 3d объектов для рисунков, созданных с помощью uifigure функция или в MATLAB® Online™.

Rotate3D коллбэки режима

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

  • ButtonDownFilter <function_handle> - Функция для перехвата ButtonDown события

    Приложение может запретить операцию вращения при обстоятельствах, заданных программистом, в зависимости от того, что возвращает коллбэк. Вход указателя на функцию должна ссылаться на функцию с двумя неявными аргументами (подобными handle коллбэков):

    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
    

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

    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)
    
    

Rotate3D Служебных функций режима

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

  • flags = isAllowAxesRotate(h,axes) - Функция, запрашивающая разрешение на поворот осей

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

  • setAllowAxesRotate(h,axes,flag) - Функция для установки разрешения на панорамирование осей

    Вызов функции setAllowAxesRotate на объекте rotate3d, h, с вектором указателей осей, axes, и логический скаляр, flag, разрешает или запрещает операцию поворота объектов осей.

Примеры

Пример 1

Поверните график с помощью мыши:

surf(peaks);
rotate3d on;

Пример 2

Поверните график с помощью стиля поворота «Plot Box»:

surf(peaks);
h = rotate3d;
h.RotateStyle = 'box';
h.Enable = 'on';

Пример 3

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

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

Пример 4

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

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

Пример 5

Создайте коллбэки для событий pre- и post-buttonDown для инициируемых объектов rotate3D mode. Скопируйте следующий код в новый файл, выполните его и наблюдайте за поведением вращения:

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 mode object один раз и используйте его, чтобы настроить поведение различных осей, как иллюстрирует пример 3. Вы также можете изменять его функции обратного вызова на лету.

Примечание

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

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

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

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

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