MATLAB Answers


How can we draw a customizable rectangular ROI on an axes using AppDesigner?

Asked by Marc McLean on 19 Mar 2019
Latest activity Commented on by Sean de Wolski
on 31 Oct 2019
I need to draw a customizable rectangular ROI on an axes in AppDesigner:
I tried this in AppDesigner:
h = drawrectangle(app.FullImageUIAxes, 'Position', [25,25,50,50], 'LineWidth', [2], 'Color', [1 0 0]);
But I get this error: ROI parent must be a valid Axes object.
I know the axes reference is correct.
Next I tried:
h = drawrectangle(app.FullImageUIAxes, 'Parent', app.UIFigure, 'Position', [25,25,50,50], 'LineWidth', [2], 'Color', [1 0 0]);
But I get the same error.
How should the axes be referenced when using drawrectangle in AppDesigner?


Sign in to comment.

2 Answers

Answer by Marc McLean on 20 Mar 2019
 Accepted Answer

App Designer errors if the axes is produced through the App Designer GUI. However, if the axes is produced programatically, App Designer finds the axes correctly. To produce the axes programatically, for example:
app.FullImageUIAxes = axes(app.UIFigure, 'Units', 'Pixels', 'Position',[166,84,750,744], 'XTick', [], 'YTick', []);
Then you can use drawrectangle:
app.ROI = drawrectangle(app.FullImageUIAxes, 'Position', [app.ROIposition(1),app.ROIposition(2),app.ROIposition(3),app.ROIposition(4)], 'LineWidth', [1], 'Color', [1 0 0]);
You have to add listeners programatically since you cannot add them through App Designer in this case:
addlistener(app.ROI,'MovingROI', @(varargin)ROIMoving(app, app.ROI));


Show 1 older comment
It's an axes not a uiaxes. Only uiaxes can be added interactively.
I see. This makes sense then. Thanks for replying on this.
It's worth noting that this answer was true for 18b and 19a. With 19b, uiaxes is supported natively.

Sign in to comment.

Answer by Sean de Wolski
on 30 Oct 2019

In 19b, this works on a uiaxes as well.

  1 Comment

Excellent ! Great feature to have.

Sign in to comment.