Matlab GUI, нужно обрабатывать объект - PullRequest
3 голосов
/ 02 апреля 2012

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

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

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

function updatePosition(pos, hObject, handles)

, которую я добавляю как обратный вызов, как это:

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

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

Ответы [ 2 ]

3 голосов
/ 09 ноября 2012

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

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);
0 голосов
/ 01 мая 2012

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

handles=guidata(handles.output);

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

...