Main Content

객체 찾기

특정 속성값을 가지는 객체 찾기

findobj 함수는 객체 계층 구조를 검색하여 특정 속성값을 가지는 객체의 핸들을 가져올 수 있습니다.

식별을 위해 모든 그래픽스 객체에는 사용자가 임의의 문자형 벡터로 설정할 수 있는 Tag 속성이 있습니다. 이 속성에 문자열을 설정해두면 특정 속성/값 쌍을 검색할 수 있습니다. 예를 들어 UI에서 경우에 따라 비활성화되는 체크박스를 생성한다고 가정해 보겠습니다. Tag 속성에 고유한 값을 할당해 두면 그 특정 객체를 찾을 수 있습니다.

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

findobj를 사용하여 Tag 속성이 'save option'으로 설정된 객체를 찾은 후 비활성화합니다.

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

검색을 시작할 객체를 지정하지 않으면 findobj는 root 객체에서부터 검색을 시작하여 지정한 속성 이름/속성값 조합을 모두 찾습니다.

숨겨진 핸들이 있는 객체를 찾으려면 findall을 사용합니다.

문자열 속성을 사용하여 텍스트 찾기

이 예제에서는 String 속성을 사용하여 text 객체를 찾는 방법을 보여줍니다.

다음 그래프에는 함수의 특정 값이 레이블로 지정된 text 객체가 포함되어 있습니다.

값 sin(t) = .707이라는 레이블을 지정하는 텍스트를 현재 위치인 [pi/4,sin(pi/4)]에서 함수가 같은 값을 가지는 점 [3*pi/4,sin(3*pi/4)](그래프에서 회색 부분)로 이동한다고 가정하겠습니다.

이렇게 하려면 점 [pi/4,sin(pi/4)]에 레이블을 지정하고 있는 text 객체의 핸들을 확인하고 이의 Position 속성을 변경합니다.

findobj를 사용하려면 객체를 고유하게 식별하는 속성값을 선택합니다. 이 예제에서는 text 객체의 String 속성을 사용합니다.

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

좌표축 단위로 text 객체의 Position 속성을 정의하여 객체를 새로운 위치로 옮깁니다.

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

findobj를 사용하면 root 객체에서 시작하는 대신 계층 구조 내에 시작 지점을 지정하여 검색을 제한할 수 있습니다. 객체 트리에 많은 객체가 있을 경우에 이 기능을 사용하면 검색 속도가 향상됩니다. 이전 예제에서 원하는 text 객체가 현재 좌표축에 있는 것을 알았으므로 다음을 입력할 수 있습니다.

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로 전달하면 특정 패턴과 일치시킬 수 있습니다. 예를 들어, 'Steady State'(즉, 감쇠 및 확장 지수를 나타내는 줄기)로 설정된 Tag 속성을 가지지 않는 모든 줄기 객체에 대해 MarkerFaceColor 속성의 값을 녹색으로 설정한다고 가정하겠습니다.

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

검색 범위 제한하기

객체 트리에서 시작점을 지정하여 검색 범위를 제한합니다. 시작점은 Figure나 좌표축의 핸들, 또는 객체 핸들의 그룹일 수 있습니다.

예를 들어, 특정 좌표축 내 줄기의 마커 면 색을 변경한다고 가정하겠습니다.

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';

객체 검색에 대한 범위와 심도를 제한하는 방법에 대한 자세한 내용은 findobjfindall을 참조하십시오.