6

GUIを使用してmatlabにプログラムを作成したいのですが、プログラムを実行すると、ユーザーはGUIの軸にマウスを使って何かを描くことができ、作成した画像をマトリックスに保存したいと考えています。どうすればこれを行うことができますか?

4

3 に答える 3

8

最後に、私は良いコードを見つけ、私のためにカスタマイズするためにいくつかの部分を変更しました。このようにして、ユーザーはマウスを使って軸に何でも描くことができます。

function userDraw(handles)
%F=figure;
%setptr(F,'eraser'); %a custom cursor just for fun

A=handles.axesUserDraw; % axesUserDraw is tag of my axes
set(A,'buttondownfcn',@start_pencil)

function start_pencil(src,eventdata)
coords=get(src,'currentpoint'); %since this is the axes callback, src=gca
x=coords(1,1,1);
y=coords(1,2,1);

r=line(x, y, 'color', [0 .5 1], 'LineWidth', 2, 'hittest', 'off'); %turning     hittset off allows you to draw new lines that start on top of an existing line.
set(gcf,'windowbuttonmotionfcn',{@continue_pencil,r})
set(gcf,'windowbuttonupfcn',@done_pencil)

function continue_pencil(src,eventdata,r)
%Note: src is now the figure handle, not the axes, so we need to use gca.
coords=get(gca,'currentpoint'); %this updates every time i move the mouse
x=coords(1,1,1);
y=coords(1,2,1);
%get the line's existing coordinates and append the new ones.
lastx=get(r,'xdata');  
lasty=get(r,'ydata');
newx=[lastx x];
newy=[lasty y];
set(r,'xdata',newx,'ydata',newy);

function done_pencil(src,evendata)
%all this funciton does is turn the motion function off 
set(gcf,'windowbuttonmotionfcn','')
set(gcf,'windowbuttonupfcn','')
于 2012-09-24T08:21:55.237 に答える
3

このginput関数は、Figure 内のマウス クリックの座標を取得します。これらを線、多角形などの点として使用できます。

これがニーズに合わない場合は、ユーザーが描画することを正確に説明する必要があります。

フリーハンドの描画には、これが役立つ場合があります。

http://www.mathworks.com/matlabcentral/fileexchange/7347-freehanddraw

于 2012-09-21T18:53:38.557 に答える
2

マウスを使用して matlab ウィンドウを操作する唯一の方法は ginput ですが、これにより、流動的に何でも描画できるようになりました。

詳細については、 http://undocumentedmatlab.com/を参照してください。

編集:これもチェックしたいかもしれません。

http://blogs.mathworks.com/videos/2008/05/27/advanced-matlab-capture-mouse-movement/

于 2012-09-21T18:55:22.430 に答える