【问题标题】:How to get an output variable in matlab from handler callback如何从处理程序回调中获取matlab中的输出变量
【发布时间】:2016-03-29 11:00:16
【问题描述】:

我的 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 是我希望作为输出获得的变量。

【问题讨论】:

    标签: matlab


    【解决方案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');
    

    【讨论】:

    • 你好苏弗!首先感谢您回答我的问题。我已经尝到了你所有的建议,但我的程序仍然存在一些问题。现在我正在使用 UserData 选项;我的问题是我的 selectedPoint = get(gcf, 'UserData'); 上什么也收不到因为句柄永远不会结束,那句话永远不会执行。你知道我该如何解决我的问题吗?谢谢你所做的一切。
    • @CarolinaSchoch 你能把你的整个代码贴在 pastebin.com 或其他地方,这样我就可以看到你在说什么?
    • 这是我第一次使用pastebin.com,希望能做好。
    • @CarolinaSchoch 你需要在这里发布一个链接,这样我才能看到它。
    • Esta es la primea vez que utilizo pastebin.com así que espero hacerlo bien。第一个链接是我的函数 clickA3DPoint (pastebin.com/hxR6YMCF)。这里是我调用句柄函数 callbackClickA3DPoint (pastebin.com/zh35zZKs) 的地方。此外,我还有另一个脚本(我的主程序),我在其中调用 clickA3DPoint 函数,例如:p= clickA3DPoint(vertex)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2011-12-28
    相关资源
    最近更新 更多