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

appdesignerdrawrectangle

Hello,
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?

Best 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));