Main Content

이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

rotate3d

마우스를 사용하여 3차원 보기 회전

구문

rotate3d on
rotate3d off
rotate3d
rotate3d(figure_handle,...)
rotate3d(axes_handle,...)
h = rotate3d(figure_handle)

설명

rotate3d on은 회전 모드를 켜고 현재 Figure 내에서 모든 좌표축에 대한 회전을 활성화합니다.

rotate3d off는 회전 모드를 끄고 현재 Figure 내에서 대화형 방식 좌표축 회전을 비활성화합니다. R2018b부터 일부 회전 상호 작용은 회전 모드에 무관하게 기본적으로 활성화됩니다. 이러한 디폴트 상호 작용을 비활성화하려면 disableDefaultInteractivity 함수를 사용하십시오.

rotate3d는 현재 Figure 내에서 대화형 방식 좌표축 회전을 활성화하거나 비활성화합니다.

rotate3d(figure_handle,...)은 현재 Figure 대신 지정된 Figure 내에서 회전을 활성화합니다.

rotate3d(axes_handle,...)은 지정된 좌표축에서만 회전 모드를 켭니다.

h = rotate3d(figure_handle)은 사용자가 모드의 동작을 정의할 수 있도록 Figure figure_handle에 대한 rotate3d 모드 객체를 반환합니다.

회전 모드 객체 사용하기

회전 모드 객체의 다음 속성에 액세스할 수 있습니다.

  • FigureHandle <handle> — 관련 figure 핸들입니다. 이 속성은 읽기 전용이며 설정할 수 없습니다.

  • Enable 'on'|'off' — 이 Figure 모드가 현재 해당 Figure에서 활성화되어 있는지 여부를 지정합니다.

  • RotateStyle 'orbit'|'box' — 회전 메서드를 설정합니다.

    'orbit'은 전체 좌표축을 회전시키고 'box'는 좌표축의 플롯 상자 윤곽선을 회전시킵니다.

  • UseLegacyExplorationModes 'off'(디폴트) | on/off 논리값 – 레거시 모드로, 'on' 또는 'off'나 숫자형 값 또는 논리값 1(true) 또는 0(false)으로 지정됩니다. 값 'on'true와 동일하고 값 'off'false와 동일합니다. 따라서 이 속성의 값을 논리값으로 사용할 수 있습니다. 값은 matlab.lang.OnOffSwitchState 유형의 on/off 논리값으로 저장됩니다.

    이 속성을 'on'으로 설정하면 기존 Figure의 모드 동작과 일치하도록 UI Figure의 상호 작용 모드 동작이 변경됩니다. 자세한 내용은 enableLegacyExplorationModes를 참조하십시오. 이 속성을 'on'으로 설정한 후에는 다시 'off'로 변경할 수 없습니다. 이 속성은 uifigure 함수를 사용해 생성하거나 MATLAB® Online™에서 생성한 Figure의 rotate3d 객체에만 적용됩니다.

rotate3D 모드 콜백

rotate3d 모드 작업을 위해 다음 콜백을 프로그래밍할 수 있습니다.

  • ButtonDownFilter <function_handle>ButtonDown 이벤트를 가로채는 함수

    응용 프로그램은 콜백이 반환하는 결과에 따라 프로그래머가 정의하는 조건에서 회전 작업을 금지할 수 있습니다. 이 입력 함수 핸들은 2개의 암시적 인수가 있는 함수를 참조해야 합니다(핸들 콜백과 유사).

    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> — 회전 전에 실행할 함수

    회전 작업이 시작될 때를 수신 대기(Listen)하려면 이 콜백을 사용하십시오. 이 입력 함수 핸들은 2개의 암시적 인수가 있는 함수를 참조해야 합니다(그래픽스 객체 콜백과 유사).

    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> — 회전 후에 실행할 함수

    회전 작업이 끝났을 때를 수신 대기(Listen)하려면 이 콜백을 설정하십시오. 이 입력 함수 핸들은 2개의 암시적 인수가 있는 함수를 참조해야 합니다(그래픽스 객체 콜백과 유사).

    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) — 좌표축을 회전할 수 있는 권한을 쿼리하는 함수

    axes 핸들로 구성된 벡터 axes를 입력값으로 사용하여 rotate3d 객체 h에 대해 함수 isAllowAxesRotate를 호출하면 해당 axes 객체에서 회전 작업이 허용되는지 여부를 표시하는, axes 핸들 벡터와 동일한 차원의 논리형 배열이 반환됩니다.

  • setAllowAxesRotate(h,axes,flag) — 좌표축을 패닝할 수 있는 권한을 설정하는 함수

    axes 핸들로 구성된 벡터 axes와 논리형 스칼라 flag를 사용하여 rotate3d 객체 h에 대해 함수 setAllowAxesRotate를 호출하면 axes 객체에 대해 회전 작업을 허용하거나 허용하지 않을 수 있습니다.

예제

예제 1

마우스를 사용하여 플롯을 회전합니다.

surf(peaks);
rotate3d on;

예제 2

"플롯 상자" 회전 스타일을 사용하여 플롯을 회전합니다.

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

트리거할 rotate3D 모드 객체의 사전 및 사후 buttonDown 이벤트에 대한 콜백을 만듭니다. 다음 코드를 새 파일에 복사하고, 실행하고, 회전 동작을 관측합니다.

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는 마우스 이동을 통해 좌표축과 이에 포함된 객체에 대한 연속적인 회전을 제공합니다. 회전하는 동안 Figure의 왼쪽 아래 코너에 좌표축의 방위각과 고도각을 표시하는 숫자형 측정값이 나타납니다. 마우스 버튼을 놓으면 애니메이션된 상자와 측정값이 제거됩니다. 이는 camorbit 함수와 다릅니다. 즉, rotate3d 툴은 좌표축의 View 속성을 수정하는 반면 camorbit 함수는 종횡비를 고정한 채로 좌표축의 CameraTarget 속성, CameraPosition 속성, CameraUpVector 속성을 수정합니다. 자세한 내용은 Axes 속성를 참조하십시오.

Figure 메뉴 또는 Figure 도구 모음(Toolbar)에서 3차원 회전(3-D Rotation)을 활성화할 수도 있습니다.

예제 3에 표시된 대로, rotate3d 모드 객체를 한 번 만든 후 이를 사용하여 다양한 좌표축의 동작을 사용자 지정할 수 있습니다. 실행 중에 해당 콜백 함수를 수정할 수도 있습니다.

참고

대화형 모드에서 Figure 콜백을 변경하지 마십시오. 모드가 활성 상태일 때(패닝, 확대/축소 등), Figure의 콜백을 변경하려고 시도하면 경고 메시지가 표시되고 변경 작업이 실패합니다. 이 규칙에 대한 한 가지 예외는 Figure WindowButtonMotionFcn 콜백으로, 이 콜백은 모드 내에서 변경할 수 있습니다. 그러므로, Figure의 콜백을 업데이트하는 UI를 생성하는 경우, 이 UI는 업데이트 작업을 시도하기 전에, 어떤 대화형 모드가 활성 상태인지를 추적해야 합니다(그런 활성 상태가 있는 경우).

모드 객체를 통해 여러 subplot 좌표축에 다양한 3차원 회전 동작을 할당한 다음 linkaxes 함수를 사용하여 이러한 좌표축을 연결하면, 이전에 다른 좌표축에 대해 설정한 동작에 관계없이 마우스로 조작하는 좌표축의 동작이 연결된 좌표축으로 넘어갑니다.

대안

도구 모음에서 Rotate3D 툴을 사용하여 플롯에서 rotate3D 모드를 활성화하거나 비활성화합니다. 또는 Figure의 메뉴에서 3차원 회전을 선택합니다.

R2006a 이전에 개발됨