2012-04-02 2 views
3

Я создаю графический интерфейс с руководством Matlab. Я помещаю точки с impoint, и я использую addNewPositionCallback, чтобы иметь возможность обновлять свой «список точек». Одним из аргументов моей функции обновления, которую я предоставляю в качестве обратного вызова, является объект «handles». Но Matlab передает это значение, поэтому, когда вызывается callback, у меня есть объект handle, но это устаревшая версия. Я хотел бы иметь что-то вроде указателя на объект handle.Matlab GUI, нужен ручка объекта

Или более общий: я хотел бы получить доступ к объекту «handle» где-то в функции, где у меня нет его в качестве параметра.

Edit: Так у меня есть функция обратного вызова, которая выглядит следующим образом:

function updatePosition(pos, hObject, handles)

Что я добавляю в качестве обратного вызова, как это:

addNewPositionCallback(testh,@(pos) updatePosition(pos, hObject, handles));

И у меня есть PointList в ручках, handles.pointlist. Он должен содержать 5 пунктов, но когда у меня есть вызов updatePosition для первой точки, список содержит только одну точку: ручки, похоже, не обновляются, у него просто есть копия с более раннего.

ответ

0

Если вы создаете свой GUI с помощью GUIDE, handles.output храните ручки в главном интерфейсе. Так что, если вы добавите эту строку в обратном вызове:

handles=guidata(handles.output); 

он должен обновить ручки до текущей версии. Вы можете получить подробную информацию о всех этих здесь: http://www.matlabtips.com/guide-me-in-the-guide/

3

Как JavaScript, MATLAB скрипт может создавать замыкания, как функция обрабатывает. Это означает, что он может «захватывать» переменные. Вы можете создать updatePosition в контексте, где у вас есть доступ к объекту handle. Вы должны сделать это следующим образом:

H = handles.figure1; % get the figure handle 
updatePosition = @(p) get(guihandles(H)... % the guihandles(H) contains the handles structure of the figure. Do whatever you need with it. 

addNewPositionCallback(testh,updatePosition);