如何从处理程序回调

时间:2016-03-29 11:00:17

标签: matlab

我在matlab程序中有这个句柄回调:

% set the callback, pass pointCloud to the callback function
set(h, 'WindowButtonDownFcn', {@callbackClickA3DPoint, pointCloud});

callbackClickA3DPoint函数中,我有一个变量,我希望在主程序的工作区中得到它。

function callbackClickA3DPoint(src, eventData, pointCloud)
selectedPoint = pointCloud(:, pointCloudIndex); 

目前,callbackClickA3DPoint不返回任何内容,selectedPoint是我想要作为输出获取的变量。

1 个答案:

答案 0 :(得分:1)

有很多方法可以实现这一目标。

子功能

一种方法是使callbackClickA3DPoint成为主函数的子函数,然后回调可以看到并修改父函数中存在的任何变量。

function main()
    set(h, 'WindowButtonDownFcn', {@callbackClickA3DPoint, pointCloud});

    selectedPoint = [];

    function callbackClickA3DPoint(src, evnt, pointcloud)
        selectedPoint = pointCloud(:,pointCloudIndex);
    end
end

UserData

另一种选择是将信息存储在图中的UserData字段中。这将使任何函数可以访问,希望知道值,您可以在UserData中放置任意数据。

function callbackClickA3DPoint(src, evnt, pointcloud)
    selectedPoint = pointCloud(:,pointCloudIndex);
    set(src, 'UserData', selectedPoint)
end

 % Then in another function
 selectedPoint = get(gcf, 'UserData');

申请数据

您也可以使用与UserData方法类似的setappdatagetappdata

function callbackClickA3DPoint(src, evnt, pointcloud)
    selectedPoint = pointCloud(:,pointCloudIndex);
    setappdata(src, 'SelectedPoint', selectedPoint)
end

% Then in another function
point = getappdata(gcf, 'SelectedPoint');