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

1 vue (au cours des 30 derniers jours)
Rightia Rollmann
Rightia Rollmann le 6 Mar 2017
Commenté : Adam le 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 commentaires
Walter Roberson
Walter Roberson le 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
Adam le 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.

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 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 commentaires
Rightia Rollmann
Rightia Rollmann le 6 Mar 2017
Modifié(e) : Rightia Rollmann le 6 Mar 2017
Thank you!
What does
'Uniform', 0
do?
Adam
Adam le 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.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by