【问题标题】:MATLAB - how to use event.eventData, and efficientlyMATLAB - 如何高效地使用 event.eventData
【发布时间】:2011-11-30 18:54:28
【问题描述】:

有关我的问题的背景信息和上下文,请阅读this question

注意在我的DynamicPlotter 代码的updatePlot() 方法中,我有点“进入”DynamicDataset 属性,如下:

function updatePlot(obj, propNum)
    X = get(obj.LH(propNum), 'XData');
    Y = get(obj.LH(propNum), 'YData');

    X(end+1) = obj.(dynProps{propNum}).newestData(1);
    Y(end+1) = obj.(dynProps{propNum}).newestData(2);

    set(obj.LH(propNum), 'XData', X, 'YData', Y);
end

updatePlot 是一个监听回调。而不是“伸手”去获取newestData,我想知道将数据“呈现”给event.eventData的回调是否会更有效。但我不确定 (a) 如何使用 event.eventData(文档中提供的示例对我来说不是很清楚),以及 (b) 是否会产生更好或更差的性能。

所以我想我的主要问题是,updatePlot() 访问newestData 的最佳方式是什么指向要绘制的函数?

我希望这不是非常模棱两可。

【问题讨论】:

    标签: oop matlab


    【解决方案1】:

    您首先需要有一个定义事件的类(在 MyClass.m 中):

    classdef MyClass < handle
      events
        % Event
        MyEvent
      end
    
      methods
        function obj = MyClass
          % Constructor
        end
      end
    end
    

    然后你需要创建自己的 EventData 子类(在 MyEventData.m 中):

    classdef MyEventData < event.EventData
      properties (Access = public)
        % Event data
        Data
      end
    
      methods
        function this = MyEventData(data)
          % Constructor
          this.Data = data;
        end
      end
    end
    

    将您的数据附加到事件数据类的实例(在脚本文件中):

    X = 1:10;
    Y = 1:10;
    data = struct('XData', X, 'YData', Y);
    eventData = MyEventData(data);
    

    然后从您的obj 触发事件并让听众收听:

    obj = MyClass;
    l = addlistener(obj, 'MyEvent', @(evtSrc,evtData)disp(evtData.Data));
    notify(obj, 'MyEvent', eventData)
    

    无论何时您调用notify(...),您的侦听器回调中的evtData 参数都会在其Data 属性中包含您的数据:

    >> notify(obj, 'MyEvent', eventData)
        XData: [1 2 3 4 5 6 7 8 9 10]
        YData: [1 2 3 4 5 6 7 8 9 10]
    

    【讨论】:

      猜你喜欢
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      相关资源
      最近更新 更多