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

2 ビュー (過去 30 日間)
Rightia Rollmann 2017 年 3 月 6 日
コメント済み: Adam 2017 年 3 月 6 日
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 件のコメント表示非表示 1 件の古いコメント
Adam 2017 年 3 月 6 日
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.

サインインしてコメントする。

### 採用された回答

Walter Roberson 2017 年 3 月 6 日
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 件のコメント表示非表示 1 件の古いコメント
Adam 2017 年 3 月 6 日
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.

サインインしてコメントする。

### カテゴリ

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!

Translated by