Функция 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)
Надеюсь, это поможет!