How to draw rectangle on a figure, based on mouse location?
8 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Mark Golberg
le 19 Juil 2016
Commenté : Mark Golberg
le 19 Juil 2016
Hello, I'd like to "live-draw" a rectangle on my figure, based on mouse location.
I'm using the following:
set (gcf, 'WindowButtonMotionFcn', @mg_BPP_mouseMove);
function mg_BPP_mouseMove(object,eventdata)
windowSize = 64;
C = get (gca, 'CurrentPoint');
topLeftCornerX = round(C(1,1)) - windowSize/2;
topLeftCornerY = round(C(1,2)) - windowSize/2;
width = windowSize;
height = windowSize;
imrect(gca, [topLeftCornerX, topLeftCornerY, width, height]);
end
Two questions:
1. How can I make the windowSize be an input variable of mg_BPP_mouseMove? I don't want explicitly define it within the function itself.
2. At the moment it draws lots of rectangles (like a "snake") as my mouse moves across the figure. I'd like to display only the last one. I mean, I would like to have one rectangle that "flows" with my mouse cursor.
0 commentaires
Réponse acceptée
Guillaume
le 19 Juil 2016
For 1, create an anonymous function that binds the window size to BPP_mouseMove (with an added input argument).
For 2, keep track of the previously drawn rectangle and delete it.
windowsize = 40;
set(gcf, 'WindowButtonMotionFcn', @(source, eventarg) mg_BPP_mouseMove(source, eventarg, windowsize));
function mg_BPP_mouseMove(object, eventdata, windowSize)
persistent lastrect;
C = get (gca, 'CurrentPoint');
topLeftCornerX = round(C(1,1)) - windowSize/2;
topLeftCornerY = round(C(1,2)) - windowSize/2;
width = windowSize;
height = windowSize;
if ~isempty(lastrect) && lastrect.isvalid
delete(lastrect);
end
lastrect = imrect(gca, [topLeftCornerX, topLeftCornerY, width, height]);
end
Plus de réponses (1)
Voir également
Catégories
En savoir plus sur Migrate GUIDE Apps dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!