Функция Matlab Getrect - Как пропустить ввод мыши

В Matlab GUI мне нужен ввод мыши в виде прямоугольника, который я должен нарисовать на осях1.

Для этого у меня есть код ниже:

   axes(handles.axes1);
   filename = 'A';
   img = imread(filename);
   imshow(img);
   hold on;
   rect_cord = getrect(handles.axes1);
   rectangle('Curvature', [0 0],'Position', [rect_cord],'EdgeColor',[1 0 0]);

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

У меня есть кнопка ("следующий"), я хочу показать следующее изображение, когда нажата кнопка вместо ввода пользователя.

Спасибо,

1 ответ

Я постараюсь перефразировать и немного изменить: вы хотите нарисовать прямоугольник, только если нажать на оси или изображение.

Поэтому: прежде всего я бы предложил поместить getrect -part в другую функцию. Эта функция должна запускаться только при нажатии на изображение. Так называемый "ButtownDownFcn", кажется, подходит для этой работы. При использовании GUIDE вы обнаружите двойной щелчок по осям в инспекторе свойств, который появляется. Затем поместите getrect -part в эту функцию:

function axes1_ButtonDownFcn(hObject, eventdata, handles)
% hObject    handle to axes1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
rect_cord = getrect(handles.axes1);
rectangle('Curvature', [0 0],'Position', [rect_cord],'EdgeColor',[1 0 0]);

Теперь я подумал, что это все, что нужно сделать. Но проверка этого с помощью графика или изображения в пределах осей доказала, что я не прав: o

К сожалению, нужно перенаправить дочерние элементы осей в эту функцию, потому что по умолчанию она назначается только фону осей (= пустым осям).

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

Это работает так: при построении изображения, вы должны добавить линию

% and we also have to attach the function to the children, in this
% case that is the line in the axes.
set(get(gca,'Children'),'ButtonDownFcn', @mouseclick_callback)

Надеюсь, это поможет!

Другие вопросы по тегам