How to put a timeout to ginput. (2024)

38 views (last 30 days)

Show older comments

Akshat on 24 Jun 2024 at 17:57

  • Link

    Direct link to this question

    https://www.mathworks.com/matlabcentral/answers/2131546-how-to-put-a-timeout-to-ginput

  • Link

    Direct link to this question

    https://www.mathworks.com/matlabcentral/answers/2131546-how-to-put-a-timeout-to-ginput

Edited: Akshat about 13 hours ago

Accepted Answer: Sudarsanan A K

Open in MATLAB Online

I want to show user a figure, and ask them to click somewhere within a stipulated time limit, like 2 seconds.

I am using ginput as follows, but it seems to be pausing the execution before a button is pressed. I went to check in the ginput function and indeed it was using waitforbuttonpress. I tried some hands in getting a workaround but wasn't much succesfull to interrup ginput (specifically it's wfbp function).

I am attaching a sample code what i need.

I am okay in getting to know some work-arounds, even if they don't use ginput, but i'd still love to know what exactly could ba a solution if I were to use ginput.

Thanks in advanced

0 Comments

Show -2 older commentsHide -2 older comments

Sign in to comment.

Sign in to answer this question.

Accepted Answer

Sudarsanan A K on 25 Jun 2024 at 10:03

  • Link

    Direct link to this answer

    https://www.mathworks.com/matlabcentral/answers/2131546-how-to-put-a-timeout-to-ginput#answer_1476636

  • Link

    Direct link to this answer

    https://www.mathworks.com/matlabcentral/answers/2131546-how-to-put-a-timeout-to-ginput#answer_1476636

Open in MATLAB Online

Hi Akshat,

I understand that your goal is to show a figure and ask the user to click somewhere within a stipulated time limit (e.g., 2 seconds). The following approach would enable you achieve this:

  1. Plot the Figure: Plot the figure you wish to show the customer.
  2. Initialize Coordinates: Initialize "xt" and "yt" to "NaN".
  3. Create Click Flag: Create a flag "clicked" to check if the user has clicked.
  4. Create Timer: Create a timer object "t" with a "StartDelay" of "timeout" seconds. Set the "TimerFcn" to "uiresume(gcbf)", which resumes the figure's execution when the timer elapses.
  5. Start Timer: Start the timer with "start(t)".
  6. Set Mouse Click Callback: Set the "WindowButtonDownFcn" to "mouseClickFcn", which sets the "clicked" flag to "true" and resumes the figure's execution when the user clicks.
  7. Wait for User Input or Timeout: Use the "uiwait(gcf, timeout)" function to wait for the figure to be resumed by either the timer or the mouse click.
  8. Clean Up Timer: Stop and delete the timer object with "stop(t)" and "delete(t)".
  9. Check Click Flag: Check if the "clicked" flag is "true" to determine if the user clicked within the timeout period.
  10. Display Coordinates: Print the clicked coordinates to the console.

Here is an example:

timed_example();

function timed_example()

x = linspace(0, 4*pi, 2000);

y = sin(x);

plot(x, y);

timeout = 2;

[xt, yt] = deal(NaN); % Initialize the coordinates

% Create a flag to check if the user has clicked

clicked = false;

% Create a timer object to interrupt the execution after the timeout

t = timer('StartDelay', timeout, 'TimerFcn', @(~,~) uiresume(gcbf));

start(t);

% Set the WindowButtonDownFcn to capture the click and resume the figure

set(gcf, 'WindowButtonDownFcn', @mouseClickFcn);

% Wait for the figure to be resumed by either the timer or the mouse click

uiwait(gcf, timeout);

% Clean up the timer object

stop(t);

delete(t);

% Display the clicked coordinates if clicked within the timeout

if clicked

fprintf('Clicked coordinates: (%f, %f)\n', xt, yt);

else

fprintf('No click detected within the timeout period.\n');

end

function mouseClickFcn(~, ~)

% Capture the coordinates of the click

coords = get(gca, 'CurrentPoint');

xt = coords(1, 1);

yt = coords(1, 2);

clicked = true;

uiresume(gcbf);

end

end

The following resources are useful for further explorations:

  • https://www.mathworks.com/help/matlab/creating_plots/capturing-mouse-clicks.html
  • https://www.mathworks.com/help/matlab/creating_plots/create-callbacks-for-graphics-objects.html
  • "uiwait": https://www.mathworks.com/help/matlab/ref/uiwait.html
  • "uiresume": https://www.mathworks.com/help/matlab/ref/uiresume.html

I hope this helps!

1 Comment

Show -1 older commentsHide -1 older comments

Akshat about 13 hours ago

Direct link to this comment

https://www.mathworks.com/matlabcentral/answers/2131546-how-to-put-a-timeout-to-ginput#comment_3197021

  • Link

    Direct link to this comment

    https://www.mathworks.com/matlabcentral/answers/2131546-how-to-put-a-timeout-to-ginput#comment_3197021

Edited: Akshat about 13 hours ago

It worked, though i was looking for a one line solution like ginput only, this will do for now I guess. thanks.

Sign in to comment.

More Answers (0)

Sign in to answer this question.

See Also

Categories

MATLABGraphicsGraphics ObjectsGraphics Object Programming

Find more on Graphics Object Programming in Help Center and File Exchange

Tags

  • ginput
  • matlab
  • matlab gui
  • figure
  • plot
  • plotting
  • function
  • functions
  • matlab function
  • if statement
  • input
  • urgent

Products

  • MATLAB
  • MATLAB Coder
  • MATLAB Compiler
  • Image Processing Toolbox

Release

R2024a

Community Treasure Hunt

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

Start Hunting!

An Error Occurred

Unable to complete the action because of changes made to the page. Reload the page to see its updated state.


How to put a timeout to ginput. (4)

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list

Americas

  • América Latina (Español)
  • Canada (English)
  • United States (English)

Europe

  • Belgium (English)
  • Denmark (English)
  • Deutschland (Deutsch)
  • España (Español)
  • Finland (English)
  • France (Français)
  • Ireland (English)
  • Italia (Italiano)
  • Luxembourg (English)
  • Netherlands (English)
  • Norway (English)
  • Österreich (Deutsch)
  • Portugal (English)
  • Sweden (English)
  • Switzerland
    • Deutsch
    • English
    • Français
  • United Kingdom(English)

Asia Pacific

Contact your local office

How to put a timeout to ginput. (2024)
Top Articles
Latest Posts
Article information

Author: Tyson Zemlak

Last Updated:

Views: 6482

Rating: 4.2 / 5 (43 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Tyson Zemlak

Birthday: 1992-03-17

Address: Apt. 662 96191 Quigley Dam, Kubview, MA 42013

Phone: +441678032891

Job: Community-Services Orchestrator

Hobby: Coffee roasting, Calligraphy, Metalworking, Fashion, Vehicle restoration, Shopping, Photography

Introduction: My name is Tyson Zemlak, I am a excited, light, sparkling, super, open, fair, magnificent person who loves writing and wants to share my knowledge and understanding with you.