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

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

Функция 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)]';
ax(1) = subplot(3,1,1);
stem(x,y(:,1))
ax(2) = subplot(3,1,2);
stem(x,y(:,2))
ax(3) = subplot(3,1,3);
stem(x,y(:,3))

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

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

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