我有一个回调函数(参见下面的function annotateSelectedRegion
),它将获取刷新数据并保存以供日后参考。我使用GUIDE开发了一个GUI,并创建了一个处理大部分功能和数据存储的类。我目前有一个刷子对象(在类中创建),我可以在函数中成功启用它并将回调设置为类中的另一个函数(参见下面的function startAnnotating
)。
我现在希望在保存数据后刷子自动关闭(set(brushHandle, 'Enable', off')
)。我已经看过各种示例,其中在回调本身(http://www.mathworks.com/matlabcentral/answers/79531-create-a-callback-that-waits-for-the-brush-to-include-some-data-and-then-display-them)中禁用了画笔。
但是,当我在回调中尝试类似的方法时,我收到回调错误。 值得注意的是,当我删除该行 set(obj.regionSelector, 'Enable', 'off');
时,回调功能正常运行。 我不完全确定我做错了什么,因为我已经在其他例子中看到了它。我引用的示例是使用编程 GUI完成的。这可能与我的错误有关吗?指南与程序化?
刷回调
% Input:
% eventdata variable provides the axes being brushed...
% ...NOTE: The call back automatically provides...
% ...eventdata. You do NOT need to pass it along explicitly.
%
% Output:
% None
function annotateSelectedRegion(obj, ~, eventdata)
currentSelection = eventdata.Axes;
selectedData = currentSelection.Children;
if isempty(selectedData) || ~any(selectedData.BrushData(:))
% Do nothing
disp('please select data or load data');
elseif ~isempty(selectedData.BrushData)
brushedIdx = logical(selectedData.BrushData);
brushedXData = selectedData.XData(brushedIdx);
brushedYData = selectedData.YData(brushedIdx);
obj.t1 = brushedXData(1);
obj.t2 = brushedXData(end);
fillRecPairInfo(obj);
fillAnnotIDInfo(obj);
fillUniqueIDInfo(obj);
fillAnnotRangeInfo(obj, currentSelection);
annotationPopUp;
end
set(obj.regionSelector, 'Enable', 'off');
end
此功能中启用了画笔。画笔开始只是一个空的"在课堂上的财产。
function startAnnotating(obj)
switch obj.annotationMode
case 1
obj.regionSelector = brush;
set(obj.regionSelector, 'Enable', 'on', 'ActionPostCallback', {@obj.annotateSelectedRegion})
case 2
% Bring up window
case 3
% Bring up window
case 4
% Bring up window
end
end