max export 3. 노드관계도를 출력해 보자!!

반응형

이제 코딩을 해봐야 할듯 하다..
난 정말 셋팅 하는게 정말 싫다.ㅜㅜ.
드디어 코딩 시간~!!!

이 강좌와 함께 추가한 max 파일을 열어보자
만약 max 파일이 안 열린다면 이 max 파일을 만든 max의 버전 보다 낮은 거니 max 버전업을 하는게....

max 파일을 연 후에 위쪽 메뉴를 보면

Graph Editors 라는 메뉴가 있다.
이 메뉴의 하단에 "New Schematic View"라는 메뉴를 클릭해 보자.


위쪽으로 아래 오브젝트들의 관계도가 뜬다.
이제 이 관계를 출력할 프로그램을 만들어 보자.

간단하게 위의 관계도를 출력하는 프로그램을 만들 계획이다.
출력해야 하는 정보는 노드의 이름과 하위 노드의 갯수 정도면 될것 같다.
하위노드의 관계는 노드가 다시 노드를 가지는 계층구조이므로 재귀함수가 필요하다.


int MgExport2::DoExport(const TCHAR *name,ExpInterface *ei,Interface *i, BOOL suppressPrompts, DWORD options)
{
 // 1. 파일 생성
 if (Begin(name))
 {
  // 2. 부모노드
  INode* pRootNode = i->GetRootNode();

  // 3. 노드 순회
  Export(pRootNode);

  // 4. 파일 종료
  End();

  return TRUE; 
 }
 return FALSE;
}

이정도면 괜찮을 것 같다.
모든 코드를 다 적으면 귀찮으니까 핵심인 Export()함수만 살짝 살표보자.

/*
Action : max의 node를 export 한다, 이 함수는 재귀함수로
max scene tree를 순회하고 각 노드를 방문한 정보를 exporting한다.
*/
void MgExport2::Export(INode* node, int treeDepth)
{
 // 1. 노드 이름
 MCHAR* nodeName = node->GetName();  

 // 2. 노드의 자식 갯수
 int cntChildren   = node->NumberOfChildren();

 // 3. 들여쓰기, 자식 이름, 자식의 갯수를 출력
 Write(treeDepth, "[%s] : %i children", nodeName, cntChildren);

 // 3. 재귀함수
 treeDepth++;
 for(int i=0; i<cntChildren; i++)
 {
  Export(node->GetChildNode(i), treeDepth);
 }
}

DoExport함수에서 root Node를 받아서 노드의 이름을 얻고 자식 노드의 갯수를 구한다.
그리고 자식 갯수의 노드만큼 재귀를 돈다.

이제 Export를 해보자.
미리 설정해둔(소스에서 코딩해둔) shortDesc와 Ext값으로 된 목록을 선택하자



이를 출력하면 결과는 아래와 같다.

[Scene Root] : 1 children
 [BasePivot] : 1 children
  [WheelTrack] : 3 children
   [Wheel] : 0 children
   [RightPyramid] : 0 children
   [LeftPyramid] : 0 children

TAGS.

Comments