본문 바로가기

프로그래밍/MaxSDK

[MAXSDK] UtilityObj 클래스

    원문 : 맥스 SDK 도움말. Class UtilityObj

    UtilityObj 클래스

    설명 :

    3ds 맥스 유틸리티 플러그인은 이 클래스로부터 상속된다. 유틸리티 파라미터를 편집하고 현재 집합에서의 변경에 응답하기 위한 메서드들이 제공된다. 인터페이스 포인터는 맥스에 의해 제공되는 유틸리티 메서드들을 호출하기 위해서 제공된다.

    주의 : 유틸리티 플러그인은 수정자나 공간 워프처럼 3ds 맥스 기하 파이프라인 시스템에 직접적으로 참여하지 않는다. 그런 이유로 UtilityObj 플러그인은 파이프라인을 따라 내려 가는 오브젝트들을 수정하는 데는 적절치 않다. 그러한 목적을 위해서는 Modifier 나 WSModifier 플러그인을 사용하라.

    주의 : 모들리스(modeless) 다이얼로그 박스를 사용하는 유틸리티 플러그인을 생성하는 것도 가능하다. 3ds 맥스 자체적으로 모들리스 다이얼로그를 사용할 때, 그것은 Track View, Material Editor 등과 같은 다른 열려진 윈도우들에 대한 입력을 비활성화한다. 이러한 방식을 사용해 사용자는 모들리스 다이얼로그의 연산을 간섭하는 행동을 수행할 수 없게 된다. 예를 들어 Track View 를 사용할 때 사용자는 노드에 다른 컨트롤러를 할당하고, 유틸리티 플러그인은 노드의 이전 컨트롤러로부터의 키에 접근할 수 있다. 유틸리티 플러그인은 현재 사용자가 맥스의 이러한 다른 부분을 연산하는 것을 막을 수 없기 때문에, 개발자는 모들리스 다이얼로그를 주의 깊게사용할 필요가 있다.

    메서드 :

    프로토타입 :

      virtual void BeginEditParams(Interface* ip, IUtil* iu) = 0;


    비고 :

      플러그인에 의해 구현된다.
      이 메서드는 유틸리티 플러그인이 커맨드 패널의 Utility 가지(branch)에서 사용될 때 호출된다. 예를 들어 플러그인은 이 메서드에서 커맨드 패널에 롤업(rollup) 페이지를 추가할 수 있다.


      인자 :

      Interface* ip

        Interface 클래스의 메서드를 호출하는데 사용할 수 있는 인터페이스 포인터


      IUtil* iu

      커맨드 패널에서 현재 유틸리티를 닫기 위해 사용할 수 있는 인터페이스 포인터.



    프로토타입 :

      virtual void EndEditParams(Interface* ip, IUtil* iu) = 0;


    비고 :

      플러그인에 의해 구현된다.
      이 메서드는 유틸리티 플러그인이 커맨드 패널의 Utility 가지에서의 사용이 끝났을 때 호출된다. (예를 들어 사용자가 Create 가지에 대한 변경을 했을 때)


    인자 :

      Interface* ip

      인터페이스의 메서드를 호출하기 위해 사용할 수 있는 인터페이스 포인터.

      IUtil* iu

      현재 유틸리티를 커맨드 패널에서 닫기 위해 사용할 수 있는 인터페이스 포인터.



    프로토타입 :

      virtual void SelectionSetChanged(Interface* ip, IUtil* iu);


    비고 :

    플러그인에 의해 구현된다.

    이 메서드는 선택 집합이 변경되었을 때 호출된다. 플러그인은 이 메서드를 이 상황에 대한 응답을 위해서 구현할 수 있다.

    인자 :

      Interface* ip

      인터페이스의 메서드를 호출하기 위해 사용할 수 있는 인터페이스 포인터.

      IUtil* iu

      현재 유틸리티를 커맨드 패널에서 닫기 위해 사용할 수 있는 인터페이스 포인터.



    프로토타입 :

      virtual void SetStartupParam(TSTR param)


    비고 :

    2.0 이상의 릴리즈에서만 이용 가능한 메서드이다.

    이 메서드는 사용자가 -U 옵션을 사용해 커맨드 라인으로부터 유틸리티를 사용하고 유틸리티에 인자를 넘길 때 BeginEditParams() 다음에 호출된다.

    인자 :

    TSTR param

      여기에 넘겨진 커맨드 라인 인자.


    기본 구현

      {}



    프로토타입 :

      virtual void DeleteThis() = 0;


    비고 :

      플러그인에 의해 구현된다.

      이 메서드는 ClassDesc::Create() 에 의해 할당된 유틸리티 오브젝트를 해제하기 위해서 호출된다.

      예를 들어 만약 개발자가 new 연산자를 사용해 플러그인 클래스를 위한 메모리를 할당했다면, 그들은 반드시 이 메서드를 { delete this; } 와 같이 구현해 플러그인 오브젝트를 해제해야 한다.

      어떤 경우에는 플러그인 클래스의 단일 정적 인스턴스를 사용하고 메모리를 할당/해제 하지 않는 것이 더 좋다. 예를 들어 예제 유틸리티 플러그인의 일부는 플러그인의 단일 정적 인스턴스를 사용한다. 이렇게 함으로써 사용자가 커맨드 패널에서 가지를 옮겨 다니더라도(Create 가지로 갔다가 Utility 가지로 이동해도), 모든 유틸리티 플러그인 파라미터가 그대로 남아 있도록 한다. 만약 메모리가 매번 할당/해제된다면 파라미터가 남아있지 않게 될 것이다. 단일 정적 인스턴스를 사용하는 예제는 이 메서드를 {} (NLLL) 로 구현한다. 그 예를 위해서는 \MAXSDK\SAMPLES\UTILITIES\COLCLIP.CPP 의 샘플 코드를 참조하라.

       


    [출처] - 라이푸님의
    http://blog.naver.com/lifeisforu 네이버 블로그