2012-11-07 32 views
0

我想實現的事情,從這個鏈路改變情節手動

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

如果你想指定的最小/最大步長,你可以拖動然後您需要編輯您的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 
+0

有兩件事情在YOUT答案 - 1.當拖動缺失 - 它拖動所有XES,我希望它拖動只有一個離開的人在他們的地方.. 2.它只改變雙方而不是向上\下。你可以添加這些東西嗎? – user1742463

+0

@ user1742463缺少什麼? – slayton