2011-11-30 57 views
0

有關我的問題的背景信息和上下文,請閱讀this question。在我DynamicPlotter代碼updatePlot()方法MATLAB的 - 如何使用event.eventData和高效

通知,我有種「深入到」一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在上述方法中所描繪的最好方式:「達到並取回」或使用event.eventData到「發送」的數據點的功能情節?

我希望這不是非常模棱兩可。

回答

2

您首先需要有一個類定義一個事件(在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]