Рисование линий перетаскиванием мыши в Matlab

Я хочу нарисовать набор несвязанных линий поверх изображения, перетаскивая мышь при нажатой левой кнопке. Однако, если я нажму на ранее нарисованную линию, чтобы указать начальную точку следующей строки, функция обратного вызова не будет вызвана, и я не улавливаю суть. Вот мой код:

function main_test

S.fH = figure('menubar','none');
im = imread( 'image.jpg' );

S.aH = axes;
S.iH = imshow( im ); hold on
axis image;

X = [];
Y = [];

set(S.aH,'ButtonDownFcn',@startDragFcn)
set(S.iH,'ButtonDownFcn',@startDragFcn)
set(S.fH, 'WindowButtonUpFcn', @stopDragFcn);

function startDragFcn(varargin)
    set( S.fH, 'WindowButtonMotionFcn', @draggingFcn );
    pt = get(S.aH, 'CurrentPoint');
    x = pt(1,1);
    y = pt(1,2);
    X = x;
    Y = y;
end

function draggingFcn(varargin)
    pt = get(S.aH, 'CurrentPoint');
    x = pt(1,1);
    y = pt(1,2);
    X = [X x];
    Y = [Y y];

    plot(X, Y, 'r', 'LineWidth', 6);
    hold on
    drawnow 
end

function stopDragFcn(varargin)
    set(S.fH, 'WindowButtonMotionFcn', '');  %eliminate fcn on release
end

end

Не могли бы вы помочь мне определить проблему в этом.

Заранее спасибо..

привет, Савсан


person Sawsan    schedule 06.11.2012    source источник


Ответы (1)


Вам также необходимо установить свойство ButtonDownFcn на построенной линии, т.е.

plot(X,Y,'r','LineWidth',6,'ButtonDownFcn',@startDragFcn)
person Jonas    schedule 06.11.2012