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을 참조하십시오.