Brush callbacks: what am I missing?

10 次查看(过去 30 天)
Hi, folks! So, the Tips for the brush command state (I've spliced the following up a little to focus on ActionPostCallback but still include all the pertinent available info): "You can program the following callbacks for brush mode operations. ActionPostCallback < function_handle > — Function to execute after brushing Use this callback to execute code when a brush operation ends. The function handle should reference a function with two implicit arguments: function myfunction(obj,event_obj) % obj handle to the figure that has been clicked % event_obj object containing struct of event data The event data struct has the following field: AxesThe handle of the axes that is being brushed"
OK, so I do the following:
>> f = @(x,y) disp([x y]);
>> f(1,2)
1 2
>> plot(1:10, 1:10)
>> bO = brush(1)
bO =
graphics.brush
>> set(bO, 'ActionPostCallback', f, 'enable', 'on')
>> get(bO)
ButtonDownFilter: @localButtonDownFilter
ActionPreCallback: []
ActionPostCallback: @(x,y)disp([x,y])
Enable: 'on'
FigureHandle: 1
Color: [1 0 0]
Then, when I brush the plot, the figure disappears and back in the command window I get:
"Warning: An error occurred during the mode callback.
> In uitools.uimode.fireActionPostCallback at 14
In datamanager.brushup at 114
In brush>@(es,ed)datamanager.brushup(es,ed)
In hgfeval at 63
In uitools.uimode.modeWindowButtonUpFcn at 46
In uitools.uimode.modeControl>localModeWindowButtonUpFcn at 155"
and no display of either the figure's handle nor the axis' handle.
What am I missing?
Thanks,
OlyDLG

采纳的回答

per isakson
per isakson 2013-3-27
Run this script and try the brush. | 1 2| will be displayed in the command window.
%%Script
plot( 1:10, 1:10 )
bO = brush( gcf );
x = 1;
y = 2;
set( bO, 'ActionPostCallback', @(ohf,s) BrushAction(ohf,s,x,y), 'enable', 'on' )
where
function BrushAction( varargin )
disp([ varargin{3:4} ])
end
I guess this does what you expected. It is much easier to debug ordinary functions.
  1 个评论
David Goldsmith
David Goldsmith 2013-3-27
Thanks, Per, that showed me what I was missing: I thought that "The function handle should reference a function with two implicit arguments" meant that I didn't need to actually include those implicit arguments in the value of the 'ActionPostCallback' property (what I provided was a simplified example of what I'm really trying to do, which is make an object method the callback). Your example--with explicit inclusion of the implied arguments in the property value specification, along w/ the use of varargin in the callback definition--showed me, quite litterally, what I was missing. Thanks!!!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Graphics Object Programming 的更多信息

标签

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by