Drawrectangle on multiple tiles or figures using clickcallback

5 views (last 30 days)
I have been able to add rectangles with drawrectangle with the mouse click callback, like this:
My main code for plotting:
ti1=nexttile;
im1=imagesc(pspp.pos_c_mm,pspp.pos_z_mm,dummie2);
ti3=nexttile;
im2=imagesc(pspp.pos_c_mm,pspp.pos_z_mm,dummie);
ti5=nexttile;
im3=imagesc(pspp.pos_c_mm,pspp.pos_z_mm,asymmetry);
linkaxes([ti1 ti3 ti5],'xy')
set([im1 im2 im3],'ButtonDownFcn',@ImageClickCallback);
My callback function:
function ImageClickCallback (objectHandle , eventData )
axesHandle = get(objectHandle,'Parent')
coordinates = get(axesHandle,'CurrentPoint');
coordinates = coordinates(1,1:2)
drawrectangle('Position',[coordinates(1)-10,coordinates(2)-10,20,20],'StripeColor','g','LineWidth',0.2);
end
With this I'm able to draw the rectangle in the image where the click was perfromed, and I would like to draw the rectangle in the 3 images simultaneously , so no matter what image you click, you will add in that same location a rectangle in the 3 images. Is that possible?
The 3 images have the same width and length.
  2 Comments
Benjamin Kraus
Benjamin Kraus on 12 Jan 2021
In future questions, I recommend using the code formatting tools to make your post easier to read (and thus more likely to get a response).

Sign in to comment.

Accepted Answer

Benjamin Kraus
Benjamin Kraus on 12 Jan 2021
Edited: Benjamin Kraus on 12 Jan 2021
When you call drawrectangle, you need to indicate which axes/tile you want to draw into. If you call drawrectangle three times, this should raw the same rectangle in each tile.
drawrectangle(ti1,'Position',[coordinates(1)-10,coordinates(2)-10,20,20],'StripeColor','g','LineWidth',0.2);
drawrectangle(ti3,'Position',[coordinates(1)-10,coordinates(2)-10,20,20],'StripeColor','g','LineWidth',0.2);
drawrectangle(ti5,'Position',[coordinates(1)-10,coordinates(2)-10,20,20],'StripeColor','g','LineWidth',0.2);
Depending on how the rest of your code is structured, you may need to pass the axes handles into your callback function. For example, modify your callback like this to pass your axes/tile handles into the callback:
set([im1 im2 im3],'ButtonDownFcn',@(o,e) ImageClickCallback(o,e,ti1,ti3,ti5));
Then modify your callback function to have three more inputs:
function ImageClickCallback (objectHandle, eventData, ti1, ti3, ti5)

More Answers (0)

Community Treasure Hunt

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

Start Hunting!