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)]'; 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
.