Рисование линий мышью при записи движения с помощью Matlab - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь сделать программу записи подписи.Он должен уметь рисовать линии с помощью мыши / планшета, а также записывать движение в режиме реального времени.

На основе этого файла: https://www.mathworks.com/matlabcentral/fileexchange/16539-mouseinput_timeout Я изменил его, чтобы он мог записывать несколько строк.

%to call: out = mouseinput_timeout(timeoutval)
function selectedPts = mouseinput_timeout(timeoutval, axesHandle)

startTime = tic; %time start
a = 0;

if ~exist('axesHandle', 'var')
    axesHandle = gca;
end
if ~exist('timeoutval', 'var') 
    timeoutval = inf;
end
if ~(ishandle(axesHandle) && strcmp(get(axesHandle,'type'),'axes'))
    error('Axis handle is not valid');
end
if ~(isscalar(timeoutval) && (timeoutval > 0))
    error('Timeout should be a positive scalar');
end

figHandle = get(axesHandle, 'parent');
selectedPts = [];

oldProperties = get(figHandle, ...
    {'WindowButtonDownFcn','WindowButtonUpFcn',...
     'WindowButtonMotionFcn', 'units','pointer'});

set(figHandle, ...
    {'WindowButtonDownFcn','WindowButtonUpFcn',...
     'WindowButtonMotionFcn','units','pointer'}, ...
    { @buttonDownCallback, @buttonUpCallback, ...
      [], 'pixels', 'crosshair'}); 
figLocation = get(figHandle, 'Position'); 

if isinf(timeoutval)
    uiwait(figHandle);
else
    uiwait(figHandle, timeoutval);
end

set(figHandle, ...
    {'WindowButtonDownFcn','WindowButtonUpFcn',...
     'WindowButtonMotionFcn', 'units','pointer'}, ...
     oldProperties);

    function buttonMotionCallback(obj, eventdata) %#ok<INUSD>
        pt = mapCurrentPosition();
        selectedPts(end+1,:) = [pt(1,1:2) toc(startTime)];
    end

    function buttonStopCallback(obj, eventdata) %#ok<INUSD>
        selectedPts(end+1,:) = [0 0 toc(startTime)];
    end

    function buttonDownCallback(obj, eventdata) %#ok<INUSD>
        a = a+1;
        if a == 1
            selectedPts = [];
            set(obj, 'WindowButtonMotionFcn', @buttonMotionCallback);
        else
            set(obj, 'WindowButtonMotionFcn', @buttonMotionCallback);
        end
    end

    function buttonUpCallback(obj, eventdata) %#ok<INUSD>
        set(obj, 'WindowButtonMotionFcn', @buttonStopCallback);
    end

    function pt = mapCurrentPosition()
        scrn_pt = get(0, 'PointerLocation');              
        set(figHandle,'CurrentPoint',...
            [scrn_pt(1) - figLocation(1) + 1, ...
             scrn_pt(2) - figLocation(2) + 1]);
        pt = get(axesHandle,'CurrentPoint');       
    end
end

Однако эта программа пока не может нарисовать видимую линию.Я пытаюсь объединить его с https://www.mathworks.com/matlabcentral/answers/75525-freehand-drawing-in-axes или https://www.mathworks.com/matlabcentral/fileexchange/70372-matlab-paint, но пока не удалось.

function buttonMotionCallback(obj, eventdata) %#ok<INUSD>
    pt = mapCurrentPosition();
    line(pt(1,1),pt(1,2),'Color','k');
    selectedPts(end+1,:) = [pt(1,1:2) toc(startTime)];
end

Заранее спасибо.Любая помощь приветствуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...