Skip to Main Content Skip to Search
File Exchange
MATLAB Newsgroup
Link Exchange
  Blogs  
 Contest 
MathWorks.com

File Exchange Pick of the Week

May 27th, 2008

Advanced MATLAB: Capture mouse movement

This week we will take a look at how you can capture the mouse movement through callbacks. As the mouse moves, we will update the xdata of a line so that you are moving the line with the mouse.

Video Content

iconFiles.jpgiconPod.jpg

10 Responses to “Advanced MATLAB: Capture mouse movement”

  1. vincent replied on :

    hee Doug,

    this is a really nice feature… I want to use it for my GUI as well, but if I apply it on real data (obtained from a racecar) then Matlab gives the following error:

    Warning: line XData length (2) and YData length (500) must be equal.

    and all I did with your m-file was replacing the definition of h into:

    h=plot(data(1:500,1),data(1:500,4),’ButtonDownFcn’, @startDragFcn)

    and the plot disappears from the figure.
    how can I apply this feature to a dataplot?

    cheers Vincent

  2. Doug replied on :

    Vincent,

    Assign these variables as a trouble shooting step:

    x = data(1:500,1)
    y = data(1:500,4)

    Check to see if these are the same size.

    Then try:

    plot(x,y) %skip button down for now

    Test that

    Finally go to this command

    plot(x,y,’ButtonDownFcn’, @startDragFcn)

    If you take these systematic steps, I think you will find the problem.

    Doug

  3. vincent replied on :

    yeah I solved that problem, the length of x was not correct. I have it working on my own data, very cool. now i want to put it in my gui, but matlab gave me the following error;

    ??? Input argument “handles” is undefined.

    Error in ==> Data_Postprocessor_v7>startDragFcn at 658
    Data=getappdata(handles.figure1,’mydata’)

    ??? Error while evaluating line ButtonDownFcn

    I use the above code at the start in every callback function of the gui to get the data. so it works in all the callback functions but when I put it in the ButtonDown function Matlab produces the above error. is it maybe because a callback function is not the same as the ButtonDown function?

    thanks Doug

    Vincent

  4. Doug replied on :

    Vincent,

    I would need to see the code to figure this out. Send it to support and we can figure it out.

    www.mathworks.com/support

  5. Jan Lauber replied on :

    Very cool. Works great as an intereactive thresholding

  6. Tahim replied on :

    I have a similar problem as Vincent. I tried to use these functions inside my GUI, although I think these created functions can’t see the handles of the GUI.
    My startDragFcn is written basically the same way as Vincent:

    startDragFcn(hObject, eventdata, handles)
    %Inside this function handles is not availabel and I need the axes that is stored in the handles.

    When I click over the line I get ??? Input argument “handles” is undefined.

  7. Tahim replied on :

    I was looking for an answer for this problem in matlab web page and I found the solution. When using the functions presented by the Doug (nice work Doug) all you have to do to use them inside your GUIs is to pass the handles of the GUI inside a cell.

    When using additional arguments for the callback function, you must set the value of the property to a cell array (i.e., enclose the function handle and arguments in curly braces). For example,
    You can define the callback function to accept additional input arguments by adding them to the function definition. For example,

    function startDragFcn(src,eventdata,arg1)

    arg1 is an additional argument. In my case I used the handles of the GUI as an additional argument:

    function startDragFcn(hObject,eventdata,handles)

    So, for the callback function you have to enclose the function handle and the additional arguments in curly braces. For example,

    set(hLine,’ButtonDownFcn’,{@startDragFcn,handles});
    set(hFigure, ‘WindowButtonUpFcn’,{@stopDragFcn,handles});

  8. Everest replied on :

    Hi!
    This is really great!:] I’ve used this idea to move the data points on my plot. But here is my query:
    the code works really great on Matlab 7.1, but when I run it on the older version (actually it is Matlab 6.1.0.450)
    I get the following error:

    ********************************************************
    ??? Undefined function or variable ‘f’.

    Error in ==> G:\MATLAB_61\MOUSE_CAPTURE\mouse_capt.m (startDragFcn)
    On line 66 ==> set(f,’WindowButtonMotionFcn’,@draggingFcn)

    ??? Error while evaluating line ButtonDownFcn.

    ??? Undefined function or variable ‘f’.

    Error in ==> G:\MATLAB_61\MOUSE_CAPTURE\mouse_capt.m (stopDragFcn)
    On line 128 ==> set(f, ‘WindowButtonMotionFcn’,”)

    ??? Error while evaluating figure WindowButtonUpFcn.
    ********************************************************

    Why is that? What to do to make it work on the older version?

  9. Doug replied on :

    Everest,

    I just did a quick check. That version of MATLAB is about three years ago. There have been enough changes in function handles that I suspect that is the reason code written for the newer version of MATLAB does not work in an older version.

    Doug

  10. Everest replied on :

    Thanks Doug!

    The problem is solved now.. Actually I’ve used UserData property to gave the name to my ‘figure’,axis’ and ‘line’ so I could call them in the external function (draggingFcn etc.)
    However, it was not so obvious at the beginning.

    Everest

Leave a Reply


Bob, Brett & Jiro share their favorite user-contributed submissions from the File Exchange.

  • Doug: Gamal, That is something that can be done. Do you have the Data Acquisition toolbox? What have you tried, can...
  • Gamal: Dear Sir, I am working in a project that i use an Analogue to digital converter HW to transfer analogue...
  • Berdakh Abibullaev: Great! This is very convinient to use. But I use matlab codes for opening the data and...
  • jiro: Mahmood, It’s probably best to ask the author of the tool for specific questions regarding the...
  • Mahmood: Hi there, when I run this program application, it gives me the following error ??? Error using ==>...
  • Brett: Hi M, Back from vacation…just downloaded DEMORSE, and ran it on the WAV file I created for this post....
  • Quan Quach: Doug is my favorite MathWorks blogger. Loren is also my favorite. That Mike guy not so bad. So Arthur got...
  • Doug: Maram, You might want to look at the Database toolbox. http://www.mathworks .com/products/databa se/ Doug
  • Bob: Nayaki, if you need additional help using a File Exchange submission, you might try contacting the author. You...
  • maram: hi, I have a question I have a matlab code and i want to read a data from SQL server database to use it in...

These postings are the author's and don't necessarily represent the opinions of The MathWorks.

Related Topics