我正在尝试通过此链接实现内容 -
http://blogs.mathworks.com/pick/2008/05/27/advanced-matlab-capture-mouse-movement/
在一个更复杂的gui ..我有一个曲线绘制,并使用peakfinder函数我找到图中的所有最大值,并用X标记(使用另一个绘图函数),但后来我希望用户如果错误,可以纠正最大值的位置,或者如果不需要则删除一些X.
我无法理解我应该更改或添加什么才能使每个步骤只拖动某个X.
在这段代码中它不是一个gui但我仍然有同样的问题
我的代码 -
function main
global data_file
x=0:0.1:100
data_file=sin(x)*5+(rand(100*10+1,1)’-0.5)
starting_sample= 1;
sampling_rate=1;
len = length(data_file);
f = figure('NumberTitle','off','color','w','Menubar','none');
[picks1,locs1] = findpeaks(data_file(starting_sample:sampling_rate:len),'MINPEAKDISTANCE',10);
a = axes('xlim',[0 100], 'ylim',[-5 5]);
plot( 1:sampling_rate:len, data_file( starting_sample:sampling_rate:len ) );
hold on
p=plot(locs1,picks1,'x','linewidth',2,'color','r','ButtonDownFcn',@start_drag1);
hold off
set(f,'WindowButtonUpFcn',@stop_drag1)
function start_drag1(varargin)
set(f,'WindowButtonMotionFcn',@draging)
end
function draging(varargin)
pt= get(a,'currentpoint')
set(p,'XData',pt(1)*[1 1])
end
function stop_drag1(varargin)
set(f,'WindowButtonMotionFcn','')
end
end
答案 0 :(得分:0)
如果您要指定可以拖动的最小/最大步长,则需要修改draging
函数,以便在超过某个拖动阈值后逐步更新XData
。
这样的事情可能会起作用
function draging(varargin)
dragDist = 1;
pt = get(a,'currentpoint')
curX = get(p,'XData')
if ( curX(1) - pt(1) > dragDist) %drag to the left
set(p,'XData',curX - dragDist)
elseif (pt(1) - curX(1) > dragDist) % drag to the right
set(p, 'XData', curX + dragDist)
end
end