MATLAB Answers

Draw points on UIAxes until you press a button in APP DESIGNER

27 views (last 30 days)
Hi, I have a problem, I'm developing an application using the app designer but there comes a moment when I have to be able to select points from an image I show in a UIAxes using the drawcircle function.
What I need is to be able to enter points (without having defined how many in advance) until I press on a status button, but I also need to save the position of the points, what I came up with was this but it doesn't work well
i = 1;
ROI = zeros(8,2);
while app.AplicarInterpolacinButton.Value == 0
a = drawpoint(app.UIAxes);
ROI(i,:) = a.Position;
i = i + 1;
end
Thank you.

  5 Comments

Show 2 older comments
Adam Danz
Adam Danz on 9 Jun 2020
Your code should already be doing that. When you call drawpoint(app.UIAxes), it starts an interactive draggable point within your axes and it waits for the user to interact with it. It may require r2020a. To get the (x,y) coordinate of the point, a.Position.
Alejandro Fernández
Alejandro Fernández on 9 Jun 2020
Yes but when I press the button it doenst stop, i have to enter another point... and i'm usiing r2020a

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 9 Jun 2020
Edited: Adam Danz on 9 Jun 2020
Once drawpoint() is called, it waits for a response and the waiting time cannot be interrupted until you either draw a point, press escape, or close the figure. Since the rest of your while-loop is very fast, there is very little time between iterations so there is very little time that your code can detect that the stop-button was pressed. Therefore, it's very highly likely that any randomly timed button press will occur during the drawpoint() execution and the button press will not be detected until either a point is drawn or the user presses escape or the figure is closed. There's no way to programmatically end the drawpoint() wait-time.
If you can figure out an algorithm that detects when enough points were drawn, you could end the while-loop prior to initializing the next drawpoint.
To end loop when escape is pressed or figure is closed
When you end drawpoint by pressing escape, it returns an empty position value. When you end drawpoint by closing the figure, a "handle to deleted point" is returned.
To continually draw points until esc is pressed or the fig is closed, just test of those conditions.
userStopped = false;
pointhandles = gobjects();
while ~userStopped
a = drawpoint();
if ~isvalid(a) || isempty(a.Position)
% End the loop
userStopped = true;
else
% store point object handle
pointhandles(end+1) = a;
end
end

  8 Comments

Show 5 older comments

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!