我试图在MATLAB GUI中创建一个具有可拖动点的绘图(使用imppoly)。
最常用的addNewPositionCallback函数在点移动时执行。
我想触发另一个函数一旦我停止拖动点,因为这是一个密集的计算,我不想在点移动时执行
我尝试了使用WindowButtonUpFcn的方法,但问题是,impoint有一个stopDrag()函数,其中WindowButtonUpFcn在拖动停止时被清除…
function stopDrag(varargin)
dragMotion();
iptremovecallback(h_fig, 'WindowButtonMotionFcn', ...
drag_motion_callback_id);
iptremovecallback(h_fig, 'WindowButtonUpFcn', ...
drag_up_callback_id);
% enable the figures pointer manager.
iptPointerManager(h_fig, 'enable');
end % stopDrag
请帮忙建议一些解决这个问题的方法。谢谢。
这个怎么样(这只是一个想法,虽然我还没有用像你这样的应用程序测试过,但它可能值得一试):
1)在你的GUI中,如果你像这样添加addNewPositionCallback:
SomeVariable = addNewPositionCallback(hPoint,@GetPointPosition);
其中hPoint是移动点的句柄,@GetPointPosition是一个匿名函数,你可以调用它来获取当前点的位置:
PointPosition(someIndex) = getPosition(hPoint) % store positions in an array
,那么你可以比较PointPosition的连续条目,如果两个连续的位置相同,那么点已经停止移动,你可以调用你感兴趣的函数
正如我上面所说的,这只是一个想法;我使用了类似的代码来检测GUI中拖动的矩形(即直接而不是导入),效果很好。