Нахождение объектов

Нахождение объектов с определенными значениями свойств

findobj функция может отсканировать иерархию объектов, чтобы получить указатели объектов, которые имеют определенные значения свойств.

Для идентификации все графические объекты имеют Tag свойство, которое можно установить на любой вектор символов. Можно затем искать определенную пару свойства/значения. Например, предположите, что вы создаете флажок, который иногда деактивирован в пользовательском интерфейсе. Путем присвоения уникального значения для Tag свойство, можно найти что конкретный объект:

uicontrol('Style','checkbox','Tag','save option')

Используйте findobj определять местоположение объекта чей Tag свойство установлено в 'save option'и отключите его:

hCheckbox = findobj('Tag','save option');
hCheckbox.Enable = 'off'

Если вы не задаете стартовый объект, findobj поисковые запросы от корневого объекта, находя все случаи имени свойства / комбинацией значения свойства, которую вы задаете.

Чтобы найти объекты со скрытыми указателями, используйте findall.

Нахождение текста свойством строки

В этом примере показано, как найти текстовые объекты с помощью String свойство.

Следующий график содержит текстовые объекты, маркирующие особые значения функции.

Предположим, что вы хотите переместить текст, маркирующий sin значения (t) =.707 от его текущего местоположения в [pi/4,sin(pi/4)] к точке [3*pi/4,sin(3*pi/4)] где функция имеет то же значение (отображенный светло-серым в графике).

Определите указатель текстового объекта, маркирующего точку [pi/4,sin(pi/4)] и измените его Position свойство.

Использовать findobj, выберите значение свойства, которое однозначно определяет объект. Этот пример использует текст String свойство:

hText = findobj('String','\leftarrowsin(t) = .707');

Переместите объект в новое положение, задав текст Position в модулях осей.

hText.Position = [3*pi/4,sin(3*pi/4),0];

findobj позволяет вам ограничить поиск путем определения начальной точки в иерархии, вместо того, чтобы начаться с корневого объекта. Если существует много объектов в дереве объектов, эта возможность результаты в более быстрых поисковых запросах. В предыдущем примере вы знаете, что текстовый объект интереса находится в текущей системе координат, таким образом, можно ввести:

hText = findobj(gca,'String','\leftarrowsin(t) = .707');

Использование Регулярных выражений с findobj

В этом примере показано, как найти указатели на объект с помощью регулярных выражений, чтобы идентифицировать определенные значения свойств. Для получения дополнительной информации о регулярных выражениях, смотрите regexp.

Предположим, что вы создаете следующий график и хотите изменить определенные свойства созданных объектов.

x = 0:30;
y = [1.5*cos(x);4*exp(-.1*x).*cos(x);exp(.05*x).*cos(x)]';
h = stem(x,y);
h(1).Marker = 'o';
h(1).Tag = 'Decaying Exponential';
h(2).Marker = 'square';
h(2).Tag = 'Growing Exponential';
h(3).Marker = '*';
h(3).Tag = 'Steady State';

Передача регулярного выражения к findobj позволяет вам совпадать с определенными шаблонами. Например, предположите, что вы хотите установить значение MarkerFaceColor свойство к зеленому на всех объектах основы, которые не имеют их Tag набор свойств к 'Steady State' (то есть, основы, которые представляют затухающие и растущие экспоненциалы).

hStems = findobj('-regexp','Tag','^(?!Steady State$).');
for k = 1:length(hStems)
   hStems(k).MarkerFaceColor = 'green'
end

Ограничение области поиска

Задайте начальную точку в дереве объектов, чтобы ограничить осциллограф поиска. Начальная точка может быть указателем фигуры, осей или группы указателей на объект.

Например, предположите, что вы хотите изменить цвет поверхности маркера основ в определенные оси:

x = 0:30;
y = [1.5*cos(x);4*exp(-.1*x).*cos(x);exp(.05*x).*cos(x)]';
tiledlayout(3,1)
ax1 = nexttile;
stem(x,y(:,1))
ax2 = nexttile;
stem(x,y(:,2))
ax3 = nexttile;
stem(x,y(:,3))

Выберите цвет поверхности маркера основ в третьих осях только.

h = findobj(ax3,'Type','stem');
h.MarkerFaceColor = 'red';

Для получения дополнительной информации об ограничении осциллографа и глубины поиска объектов, смотрите findobj и findall.