Функция 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');
Этот пример показывает, как найти указатели на объект с помощью регулярных выражений, чтобы идентифицировать определенные значения свойств. Для получения дополнительной информации о регулярных выражениях, смотрите 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
.