Получение точек мыши с помощью Matlab App Designer

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

first frame = vid(:,:,:,1);
imshow(firstframe,'Parent',app.UIAxes); 
[centers_X centers_Y]=getpts;

person Qiana Curcuru    schedule 22.02.2018    source источник
comment
Вы пытались использовать figure, чтобы открыть новое окно?   -  person excaza    schedule 22.02.2018
comment
да, я получаю Укажите UIAxes в качестве значения для «Родителя». Я предполагаю, что это потому, что я работаю в дизайнере приложений, поэтому я не думаю, что могу просто открыть обычную фигуру, если это не фигура пользовательского интерфейса.   -  person Qiana Curcuru    schedule 22.02.2018
comment
h.f = figure; h.a = axes('Parent', h.f); RGB = imread('peppers.png'); imshow(RGB, 'Parent', h.a); отлично работает для меня в качестве обратного вызова дизайнера приложений.   -  person excaza    schedule 22.02.2018
comment
Трудно сказать, в чем вам нужна помощь. Не могли бы вы отредактировать этот вопрос и начать с того, что что вы пытаетесь сделать (например, Я хотел бы получить положение щелчков мыши в uifigure) вместо того, чтобы спрашивать о конкретном решении, которое вы имеете в виду (например, как мне открыть новое окно, чтобы я мог передать щелкает мышью на uifigure из него). Лучшей структурой в вашем случае будет то, что я хочу; что я пробовал; с какой проблемой я столкнулся. Также взгляните на минимально воспроизводимый пример.   -  person Dev-iL    schedule 17.09.2018


Ответы (1)


Что сработало для меня, так это установка обратного вызова на изображение, а не на оси:

ih = imshow(firstframe,'Parent',app.UIAxes);
ih.ButtonDownFcn = {@im_ButtonDownFcn, app}; %app will be passed to the callback

Затем в отдельном файле в той же папке (или как приватная функция в конструкторе приложений... должно работать, но я не пробовал):

function im_ButtonDownFcn(im, hit, app)
mouse_pos = flip(hit.IntersectionPoint(1:2)); %gives floats. Round if you want integers e.g. for indexing pixels
person craq    schedule 03.07.2018