Если вы не используете GUIDE и, следовательно, не имеют handles
структуру (см внизу), вы можете использовать UserData
свойство фигуры передавать любую информацию:
set(gcf,'UserData',pos);
Тогда вы можете получить доступ к pos
из в другом месте с помощью:
pos = get(gcf,'UserData');
См this MathWorks description of the UserData
property и this full example. На первой странице:
Все компоненты GUI, включая меню и сам рисунок, имеют свойство UserData
. Вы можете присвоить любое действительное значение рабочей области MATLAB как значение свойства UserData
, но за один раз может существовать только одно значение.
В качестве временного решения этого ограничения, вы можете назначить struct
для UserData
, который имеет все свойства, необходимые для вашей программы, хранящейся в различных областях.
Деталь, которую я оставил в приведенных выше командах, - это ручка фигуры/объекта (вы, вероятно, на самом деле не хотите использовать gcf
). В mytestfunction
вы сохранили его в f
. В функции обратного вызова вы можете найти родительскую фигуру hObject
по:
f = ancestor(hObject,'figure');
Одним из способов использования вышеуказанного подхода просто ждать изменений в UserData
собственности:
function mytestfunction()
f=figure; set(f,'WindowButtonDownFcn',@mytestcallback)
maxPos=10; cnt=0;
while cnt<maxPos, waitfor(f,'UserData'); pos=get(gcf,'UserData'), cnt=cnt+1; end
function mytestcallback(hObject,~)
pos=get(hObject,'CurrentPoint');
set(ancestor(hObject,'figure'),'UserData',pos);
Примечание что другим способом обработки событий является реализация a listener для ответа на событие щелчка, но обратный вызов WindowButtonDownFcn
должен работать нормально.
Первоначально я думал GUIDE, в котором вы бы иметь handles
структуру. Это одна из целей структуры handles
. Хранить положение в области handles
, и обновлять его:
handles.pos = pos; % store it
guidata(hObject,handles); % update handles in GUI
Потом обратно в mytestfunction
или любой другой обратный вызов необходим доступ к pos
, вы можете использовать handles.pos
, если handles
структура находится в актуальном состоянии.
Вы могли бы дать простой пример? – tqjustc
Ну, что вы хотите делать с 'pos' в' mytestfunction'? Тогда я могу привести пример. – chappjc
Я понял это. Я использую это: set (f, 'WindowButtonDownFcn', 'pt = mytestcallback()'); Тогда pt - возвращаемое значение, в котором я нуждаюсь.но спасибо @chappjc – tqjustc