@findall in an arrayfun?

5 visualizzazioni (ultimi 30 giorni)
David L
David L il 6 Gen 2021
Commentato: Star Strider il 7 Gen 2021
Hi,
I'm having trouble using findall as an arrayfun. In AppDesigner, I'd like to find all objects whose 'Tag' has 'img' in it - I have lots of uiimages, img_1, img_2... img_25, and then run a function on all these uiimages?
I've tried the following:
arrayfun(@findall,0, 'Tag', a);
where a = is a cell array of strcat of 'img_' + num2str(n);
a = cell(25,1);
for i = 1:25
a{i} = strcat('img_',num2str(i));
end
Thanks!

Risposta accettata

Star Strider
Star Strider il 6 Gen 2021
The cellfun function is likely a better option.
Experiment with something like this:
Out = cellfun(@(x)findall(0,'Tag','img'), a, 'Unif',0);
It will likely be necessary to experiment with that to get it to work with your images.
I cannot test this with your images, so I am posting it as UNTESTED CODE. (If it or some version of it does not work in your application, I will delete my Answer.)
  4 Commenti
David L
David L il 6 Gen 2021
Thank you all very much for your answers! Steven, I'll think about linking all my images to a parent object - which might make getting their handles easier.
In the end, I went with your approach, Star and Walter, and Walter your response worked perfectly. Again, thank you all very much.
Star Strider
Star Strider il 7 Gen 2021
As always, (our) pleasure!

Accedi per commentare.

Più risposte (1)

Steven Lord
Steven Lord il 6 Gen 2021
As written this will find all graphics objects with those Tag values, those that are part of your app and those that are not. That strikes me as a Bad Idea. Instead, if you're displaying those images in your app I'd store their handles in a property of your app and then simply iterate through the elements of that property. This example doesn't use an app but shows the technique I have in mind.
f = figure;
ax = axes('Parent', f);
axis([0 360 -1 1])
hold on
x = 0:360;
h = gobjects(1, 5);
for k = 1:5
h(k) = plot(x, sind(k*x), 'DisplayName', "sine of " + k + "*x");
end
legend show
Now I can change a subset of the lines without using findobj or findall just by indexing into h.
h(1).LineStyle = '--';
h(3).Color = 'k';
h(5).Marker = '^';
h(5).MarkerIndices = 1:30:361;

Categorie

Scopri di più su Graphics Object Programming in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by