# Easiest Way to Assign Graphics Objects to a 1-by-n Struct?

1 view (last 30 days)
Rightia Rollmann on 6 Mar 2017
Commented: Adam on 6 Mar 2017
How to assign graphics objects to a 1-by-5 struct field? Is there an easier way than using a for loop and assign the values elementwise?
When there is more than one row, it works perfectly and I get 10 rectangles:
Rectangles1(2, 5).r = rectangle();
But when I run the code below with only one row, MATLAB only creates one rectangle, instead of 5 rectangles?
Rectangles2(1, 5).r = rectangle();
##### 2 CommentsShow NoneHide None
Walter Roberson on 6 Mar 2017
No,
Rectangles1(2, 5).r = rectangle();
only assigns 1 rectangle, to element (2,5) . The "r" fields for the other structure members will be empty.
Adam on 6 Mar 2017
A for loop seems like the best way. rectangle does not support vectorised creation and if you try to get fancy with something like:
[ Rectangles2(1, 1:5).r ] = deal( rectangle() );
you get a rectangle in each of your structs, but it is a reference to the same rectangle in all of them which I assume is not what you want.
To create 5 distinct rectangles you will need 5 calls to rectangle( ) by some method or other.

Sign in to comment.

### Accepted Answer

Walter Roberson on 6 Mar 2017
template = ones(2,5); %shape matters, content does not
Rectangles2 = cell2mat( arrayfun( @(r) struct('r', rectangle()), template, 'Uniform', 0) );
This will, however, overwrite the entire contents of Rectangles2
##### 2 CommentsShow NoneHide None
Rightia Rollmann on 6 Mar 2017
Edited: Rightia Rollmann on 6 Mar 2017
Thank you!
What does
'Uniform', 0
do?
Adam on 6 Mar 2017
Try it without and you'll get an error message telling you. Basically it means a regular array of whatever the output is is not supported by arrayfun though so you need the 'catch-all' option of dumping the outputs into a cell array.

Sign in to comment.

### Categories

Find more on Structures in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!