2012-09-21 70 views
6

Tôi muốn có một chương trình trong MATLAB với GUI, khi chạy chương trình, người dùng có thể vẽ bất kỳ thứ gì bằng chuột trên trục trong GUI và tôi muốn lưu hình ảnh đã tạo trong ma trận. làm thế nào tôi có thể làm điều này?Vẽ bằng chuột trên GUI trong MATLAB

Trả lời

8

Cuối cùng tôi tìm thấy mã tốt và tôi đã thay đổi một số phần để tùy chỉnh cho tôi. bằng cách này, người dùng có thể vẽ bất kỳ thứ gì trong trục bằng chuột:

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','') 
+0

Làm cách nào để sử dụng chức năng này để vẽ? – mikeglaz

3

Chức năng ginput lấy tọa độ của moueclicks trong một hình. Bạn có thể sử dụng chúng như các điểm của một đường thẳng, đa giác, v.v.

Nếu điều này không phù hợp với nhu cầu của bạn, bạn cần phải giải thích chính xác bạn mong đợi người dùng vẽ gì.

Đối với bản vẽ tự do này có thể hữu ích:

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

+0

tôi đã phát triển một chương trình để phát hiện ký tự mà người dùng vẽ, để người dùng có thể vẽ ký tự chữ và số. –

+0

Xem chỉnh sửa của tôi ở trên. –

2

Cách duy nhất mà tôi biết để tương tác với các cửa sổ matlab sử dụng một con chuột là ginput, nhưng bây giờ điều này sẽ cho phép bạn vẽ bất cứ điều gì với lỏng.

Có nhiều cách để sử dụng các thành phần Java Swing trong kiểm tra MATLAB http://undocumentedmatlab.com/ để biết thêm thông tin.

EDIT: Bạn có thể muốn kiểm tra điều này.

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

Các vấn đề liên quan