MATLAB Answers

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

조회 수: 29(최근 30일)
Alejandro Fernández
Alejandro Fernández 2020년 6월 9일
댓글: Adam Danz 2020년 6월 9일
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;
Thank you.
  댓글 수: 5
Adam Danz
Adam Danz 2020년 6월 9일
Now the problem is clear. I'll write an answer below.

댓글을 달려면 로그인하십시오.

채택된 답변

Adam Danz
Adam Danz 2020년 6월 9일
편집: Adam Danz 2020년 6월 9일
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;
% store point object handle
pointhandles(end+1) = a;
  댓글 수: 8

댓글을 달려면 로그인하십시오.

추가 답변(0개)

Community Treasure Hunt

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

Start Hunting!

Translated by