MATLAB에서 그림 그리기 도구를 만들어 보았다 (마우스 조작 이벤트에 따른 프로그램 예)
소개
MATLAB에서는 마우스 조작에 따라 프로그램을 실행할 수 있습니다. 여기에서는 간단한 그림 그리기 도구를 예로 그 방법을 설명합니다.
어떻게 프로그래밍합니까?
스크립트나 함수를 기술하는 MATLAB에 있어서, 마우스 조작에 따른 프로그래밍을 어떻게 하는지, 확실히 알기 어렵습니다만, 실은, 그래프 등을 묘화 하는 figure 에 콜백 함수를 설정하는 것으로, 마우스 조작에 적절한 프로그램을 할 수 있습니다. 마우스 조작에 따른 선을 그리면 그림 도구를 만들 수 있습니다.
마우스 조작에 대한 figure 콜백 함수
figure에는 마우스 조작에 따라 다음과 같은 콜백 함수가 있습니다.
콜백 함수
개요
WindowButtonDownFcn
마우스를 클릭할 때 호출되는 콜백 함수
WindowButtonMotionFcn
마우스를 움직일 때 호출되는 콜백 함수
WindowButtonUpFcn
마우스를 놓을 때 호출되는 콜백 함수
덧붙여서, 이번 예제에서는 사용하지 않지만, figure에는 키보드 입력에 대응하는 WindowKeyPressFcn이라는 콜백 함수도 있습니다.
마우스 위치 얻기
마우스가 있는 장소는, figure, 또는, axes 의 CurrentPoint property로 취득할 수가 있습니다. 이 그림 그리기 도구는 축의 좌표를 원하므로 축의 CurrentPoint를 사용합니다.
프로그램 예
다음 아이디어로 프로그램을 만듭니다.
스크립트나 함수를 기술하는 MATLAB에 있어서, 마우스 조작에 따른 프로그래밍을 어떻게 하는지, 확실히 알기 어렵습니다만, 실은, 그래프 등을 묘화 하는 figure 에 콜백 함수를 설정하는 것으로, 마우스 조작에 적절한 프로그램을 할 수 있습니다. 마우스 조작에 따른 선을 그리면 그림 도구를 만들 수 있습니다.
마우스 조작에 대한 figure 콜백 함수
figure에는 마우스 조작에 따라 다음과 같은 콜백 함수가 있습니다.
콜백 함수
개요
WindowButtonDownFcn
마우스를 클릭할 때 호출되는 콜백 함수
WindowButtonMotionFcn
마우스를 움직일 때 호출되는 콜백 함수
WindowButtonUpFcn
마우스를 놓을 때 호출되는 콜백 함수
덧붙여서, 이번 예제에서는 사용하지 않지만, figure에는 키보드 입력에 대응하는 WindowKeyPressFcn이라는 콜백 함수도 있습니다.
마우스 위치 얻기
마우스가 있는 장소는, figure, 또는, axes 의 CurrentPoint property로 취득할 수가 있습니다. 이 그림 그리기 도구는 축의 좌표를 원하므로 축의 CurrentPoint를 사용합니다.
프로그램 예
다음 아이디어로 프로그램을 만듭니다.
마우스가 있는 장소는, figure, 또는, axes 의 CurrentPoint property로 취득할 수가 있습니다. 이 그림 그리기 도구는 축의 좌표를 원하므로 축의 CurrentPoint를 사용합니다.
프로그램 예
다음 아이디어로 프로그램을 만듭니다.
그럼 실제 프로그램의 예입니다.
simple_draw.m
function simple_draw()
%% 共通変数の定義
ButtonState = false; % マウスボタンの押下状態
curLineH = gobjects(); % 現在のLineのオブジェクト
curLineX = []; % 現在のLineのX座標
curLineY = []; % 現在のLineのY座標
%% Figureの表示
figH = figure(); % figH: Figureオブジェクト
figH.MenuBar = 'none'; % メニューをオフ
figH.WindowButtonDownFcn = @WindowButtonDownFcn_figH; % マウスボタン押下時のコールバック関数を指定
figH.WindowButtonMotionFcn = @WindowButtonMotionFcn_figH; % マウスボタン移動時のコールバック関数を指定
figH.WindowButtonUpFcn = @WindowButtonUpFcn_figH; % マウスボタンリリース時のコールバック関数を指定
%% Axesの表示
axH = axes(figH); % axH: 軸オブジェクト
axH.XTick = []; % X軸目盛をオフ
axH.YTick = []; % Y軸目盛をオフ
axH.Units = 'normalized'; % Positionの単位指定
axH.Position = [0,0,1,1]; % Figure全体にAxesを表示
axH.XLim = [0,1]; % X軸範囲を指定
axH.YLim = [0,1]; % Y軸範囲を指定
%% コールバック関数の定義
function WindowButtonDownFcn_figH(~,~)
%% マウスボタン押下時のコールバック
ButtonState = true; % 押下状態を保存
% マウスの位置の取得
curLineX = axH.CurrentPoint(1,1);
curLineY = axH.CurrentPoint(1,2);
% 線の描画
curLineH = line(axH,curLineX, curLineY);
end
function WindowButtonMotionFcn_figH(~,~)
%% マウスボタン移動時のコールバック
if ButtonState
% マウスボタンを押下時には、Lineの描画を更新
% 現在のマウスの位置
X = axH.CurrentPoint(1,1);
Y = axH.CurrentPoint(1,2);
% 線の座標値を更新
curLineX = [curLineX;X];
curLineY = [curLineY;Y];
% 描画の更新
curLineH.XData = curLineX;
curLineH.YData = curLineY;
end
end
function WindowButtonUpFcn_figH(~,~)
%% マウスボタンリリース時のコールバック
ButtonState = false; % ボタン押下状態を解除
end
end
콜백 함수를 중첩 함수로 설정하면 마우스 클릭 상태를 유지하는 ButtonState를 공통 변수로 사용합니다.
실행 예
실행하면 아무것도 표시되지 않는 figure가 표시되므로 마우스를 클릭하여 그림을 그릴 수 있습니다.
이런 느낌입니다. (그림 마음이 없어서 스미마센..)
일반적인 PC를 상정해, 「마우스」라고 설명해 왔습니다만, 터치 패널 대응의 PC라면, 손가락이나 펜으로 그림을 그릴 수도 있습니다.
끝에
MATLAB에서 마우스 조작에 대응하는 프로그램 예로서, figure의 콜백 함수를 이용한 그림 그리기 도구의 예를 소개했습니다. 60행 정도의 프로그램으로 되어 버리므로, 콜백 함수를 알면 여러가지 예에 적용하고 싶어지는군요.
그림 그리기 도구의 응용 프로그램은 라인의 속성을 변경하여 선의 두께와 색상 등을 변경하거나 그린 그림을 이미지 파일로 저장하는 기능을 추가 할 수 있습니다. OCR 기능을 사용하여 필기 문자 인식도 가능하네요. 「좋아요」가 많이 붙으면 다음에 소개하고 싶습니다!
계속 기사 : MATLAB에서 그림 그리기 도구를 만들어 보았습니다 (2) (버튼으로 다양한 설정)
【보충】uifigure, uiaxes의 경우
최신 MATLAB은 AppDesginer에서 사용되는 새로운 기술을 사용하는 uifigure를 제공하지만 uifigure는 비슷한 콜백 함수를 제공합니다.
Reference
이 문제에 관하여(MATLAB에서 그림 그리기 도구를 만들어 보았다 (마우스 조작 이벤트에 따른 프로그램 예)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sanmojih/items/5ac9ed1510da863d42f2
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
MATLAB에서 마우스 조작에 대응하는 프로그램 예로서, figure의 콜백 함수를 이용한 그림 그리기 도구의 예를 소개했습니다. 60행 정도의 프로그램으로 되어 버리므로, 콜백 함수를 알면 여러가지 예에 적용하고 싶어지는군요.
그림 그리기 도구의 응용 프로그램은 라인의 속성을 변경하여 선의 두께와 색상 등을 변경하거나 그린 그림을 이미지 파일로 저장하는 기능을 추가 할 수 있습니다. OCR 기능을 사용하여 필기 문자 인식도 가능하네요. 「좋아요」가 많이 붙으면 다음에 소개하고 싶습니다!
계속 기사 : MATLAB에서 그림 그리기 도구를 만들어 보았습니다 (2) (버튼으로 다양한 설정)
【보충】uifigure, uiaxes의 경우
최신 MATLAB은 AppDesginer에서 사용되는 새로운 기술을 사용하는 uifigure를 제공하지만 uifigure는 비슷한 콜백 함수를 제공합니다.
Reference
이 문제에 관하여(MATLAB에서 그림 그리기 도구를 만들어 보았다 (마우스 조작 이벤트에 따른 프로그램 예)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sanmojih/items/5ac9ed1510da863d42f2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)