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. x = linspace(0,4*pi,2000);y=sin(x);plot(x,y);timeout=2;tic;[xt,yt]=ginput(1);if toc>2 xt=NaN; yt=NaN;end
John Williams answered .
2025-11-20
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