객체 찾기
특정 속성값을 가지는 객체 찾기
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';
객체 검색에 대한 범위와 심도를 제한하는 방법에 대한 자세한 내용은 findobj
및 findall
을 참조하십시오.