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

1 visualización (últimos 30 días)
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 comentarios
Walter Roberson
Walter Roberson el 6 de Mzo. de 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 el 6 de Mzo. de 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.

Iniciar sesión para comentar.

Respuesta aceptada

Walter Roberson
Walter Roberson el 6 de Mzo. de 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 comentarios
Rightia Rollmann
Rightia Rollmann el 6 de Mzo. de 2017
Editada: Rightia Rollmann el 6 de Mzo. de 2017
Thank you!
What does
'Uniform', 0
do?
Adam
Adam el 6 de Mzo. de 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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Structures en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by