VIZZARD Document Help

Plugin 구현

예제

  1. Visual Studio 실행

  2. [클래스 라이브러리(.NET Framework)] 유형 선택

Figure 1 : 프로젝트 유형 선택

VIZZARD_DEV_PLUGIN_EX01.png
    1. 이름에 "MyPlugin" 입력 후, 확인 버튼 선택

    2. "MyPlugin" 선택 후, 마우스 오른쪽 버튼 클릭해서 Context Menu에서 추가 선택하고 사용자 정의 컨트롤 유형 선택

    Figure 2 : 사용자 정의 컨트롤 추가

    VIZZARD_DEV_PLUGIN_EX02.png
      1. 이름에 "MyControl.cs" 입력 후, 추가 버튼 선택

      Figure 3 : 사용자 정의 컨트롤 추가

      VIZZARD_DEV_PLUGIN_EX03.png
        1. "MyPlugin" 프로젝트 하위의 "참조" 선택 후, 마우스 오른쪽 버튼 클릭해서 Context Menu에서 참조 추가 선택

        Figure 4 : 참조 추가

        VIZZARD_DEV_PLUGIN_EX04.png
          1. "참조 관리자"의 "찾아보기" 선택 후, 찾아보기... 선택하고, VIZZARD가 설치된 폴더의 "SHConnector.dll" 선택 후, 추가

          Figure 5 : SHConnector.dll 추가

          VIZZARD_DEV_PLUGIN_EX05.png
            1. Namespace 추가

            using SHConnector;
            1. Base Class 추가

            IEntryConnector
            1. VIZZARD 응용프로그램과 연결을 위한 객체 선언

            public IVIZZARDService Connector { get; set; }
            1. 생성자 재정의 (추가)

            public MyControl(IVIZZARDService conn) : this() { Connector = conn; }
            1. Plugin 자체 라이선스 체크를 위한 메서드 추가

            public bool CheckLicense(int hostApp) { return true; }
            1. Plugin.xml 정의

            최종 코드 내용

            using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using SHConnector; namespace MyPlugin { public partial class MyControl : UserControl, IEntryConnector { // ======================================== // Property // ======================================== public IVIZZARDService Connector { get; set; } // ======================================== // Construction // ======================================== public MyControl() { InitializeComponent(); } public MyControl(IVIZZARDService conn) : this() { Connector = conn; } // ======================================== // Custom License // ======================================== public bool CheckLicense(int hostApp) { return true; } } }

            필수 이벤트 선언

            public MyControl(IVIZZARDService conn) : this() { Connector = conn; // ======================================== // 기본 이벤트 선언 // ======================================== // VIZZARD 초기화 완료 이벤트 Connector.OnInitializedAppEvent += Connector_OnInitializedAppEvent; // VIZZARD 종료 예정 이벤트 Connector.OnClosingApplicationEvent += Connector_OnClosingApplicationEvent; // 모델 열림(열기/추가) 이벤트 Connector.OnOpenedDocumentEvent += Connector_OnOpenedDocumentEvent; // 모델의 인덱스 변경 이벤트 Connector.ObjectIndexChangedEvent += Connector_ObjectIndexChangedEvent; // 모델 선택 이벤트 Connector.ObjectSelectedEvent += Connector_ObjectSelectedEvent; // 여러 모델 선택 이벤트 Connector.ObjectsSelectedEvent += Connector_ObjectsSelectedEvent; } // ======================================== // Event // ======================================== private void Connector_OnInitializedAppEvent(object sender, EventArgs e) { // 이벤트 발생 시, VIZZARD 초기 구동 프로세스가 완료된 상태임. // ======================== // 기본 설정 변경 // ======================== // 변경사항 알림 해제 Connector.IgnoreModelChangedStatus(true); // 모델전체보기 Connector.EnableShapeCache(UsingShapeCacheModes.NOT_USE_SHAPE_CACHE); // 모델 파일의 EDGE 정보 읽기 Connector.SetReadEdge(true); } private void Connector_OnClosingApplicationEvent(object sender, EventArgs e) { // 이벤트 발생 시, VIZZARD 종료 혹은 시스템 아이콘[X] 클릭한 상태 // 변경사항 저장이 필요 시, 처리 필요 } private void Connector_OnOpenedDocumentEvent(object sender, OpenedDocumentEventArgs e) { // 이벤트 발생 시, 모델이 열림 // Rendering Mode 필요시 재정의 Connector.SetShaderEffect(SHADER_TYPE.PHONG, true); // PHONG SHADING 활성화 Connector.SetShaderEffect(SHADER_TYPE.SILHOUETTEDGE, true); // 윤곽 활성화 Connector.SetShaderEffect(SHADER_TYPE.SSAO, true); // 음영 활성화 Connector.SetShaderEffect(SHADER_TYPE.SHADOWMAPPING, true); // 실시간 그림자 활성화 Connector.SetShaderEffect(SHADER_TYPE.LIGHT, true); // 환경조명 활성화 } private void Connector_ObjectIndexChangedEvent(object sender, ObjectIndexChangedEventArgs e) { // 이벤트 발생 시, 일부 모델 파일이 Unload 혹은 모델 삭제가 발생 } private void Connector_ObjectSelectedEvent(object sender, ObjectSelectedEventArgs e) { // 이벤트 발생 시, 모델이 선택됨 if(e.Index < 0) { // 선택된 모델이 없음 } else { // 선택된 모델의 인덱스 int NodeIndex = e.Index; // 선택된 모델 정보 NodeVO item = Connector.GetObject(NodeIndex); // 선택된 모델의 속성 ObjectPropertyVO prop = Connector.GetObjectProperty(NodeIndex, false); } } private void Connector_ObjectsSelectedEvent(object sender, EventArgs e) { // 이벤트 발생 시, 여러 모델이 선택됨 List<NodeVO> items = Connector.GetSelectedObjects(false); foreach (NodeVO item in items) { // 처리 로직 추가... } }

            Plugin Code Template

            using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; using SHConnector; namespace MyPlugin { public partial class MyControl : UserControl, IEntryConnector { // ======================================== // Property // ======================================== public IVIZZARDService Connector { get; set; } // ======================================== // Construction // ======================================== public MyControl() { InitializeComponent(); } public MyControl(IVIZZARDService conn) : this() { Connector = conn; // ======================================== // 기본 이벤트 선언 // ======================================== // VIZZARD 초기화 완료 이벤트 Connector.OnInitializedAppEvent += Connector_OnInitializedAppEvent; // VIZZARD 종료 예정 이벤트 Connector.OnClosingApplicationEvent += Connector_OnClosingApplicationEvent; // 모델 열림(열기/추가) 이벤트 Connector.OnOpenedDocumentEvent += Connector_OnOpenedDocumentEvent; // 모델의 인덱스 변경 이벤트 Connector.ObjectIndexChangedEvent += Connector_ObjectIndexChangedEvent; // 모델 선택 이벤트 Connector.ObjectSelectedEvent += Connector_ObjectSelectedEvent; // 여러 모델 선택 이벤트 Connector.ObjectsSelectedEvent += Connector_ObjectsSelectedEvent; } // ======================================== // Custom License // ======================================== public bool CheckLicense(int hostApp) { return true; } // ======================================== // Event // ======================================== private void Connector_OnInitializedAppEvent(object sender, EventArgs e) { // 이벤트 발생 시, VIZZARD 초기 구동 프로세스가 완료된 상태임. // ======================== // 기본 설정 변경 // ======================== // 변경사항 알림 해제 Connector.IgnoreModelChangedStatus(true); // 모델전체보기 Connector.EnableShapeCache(UsingShapeCacheModes.NOT_USE_SHAPE_CACHE); // 모델 파일의 EDGE 정보 읽기 Connector.SetReadEdge(true); } private void Connector_OnClosingApplicationEvent(object sender, EventArgs e) { // 이벤트 발생 시, VIZZARD 종료 혹은 시스템 아이콘[X] 클릭한 상태 // 변경사항 저장이 필요 시, 처리 필요 } private void Connector_OnOpenedDocumentEvent(object sender, OpenedDocumentEventArgs e) { // 이벤트 발생 시, 모델이 열림 // Rendering Mode 필요시 재정의 Connector.SetShaderEffect(SHADER_TYPE.PHONG, true); // PHONG SHADING 활성화 Connector.SetShaderEffect(SHADER_TYPE.SILHOUETTEDGE, true); // 윤곽 활성화 Connector.SetShaderEffect(SHADER_TYPE.SSAO, true); // 음영 활성화 Connector.SetShaderEffect(SHADER_TYPE.SHADOWMAPPING, true); // 실시간 그림자 활성화 Connector.SetShaderEffect(SHADER_TYPE.LIGHT, true); // 환경조명 활성화 } private void Connector_ObjectIndexChangedEvent(object sender, ObjectIndexChangedEventArgs e) { // 이벤트 발생 시, 일부 모델 파일이 Unload 혹은 모델 삭제가 발생 } private void Connector_ObjectSelectedEvent(object sender, ObjectSelectedEventArgs e) { // 이벤트 발생 시, 모델이 선택됨 if(e.Index < 0) { // 선택된 모델이 없음 } else { // 선택된 모델의 인덱스 int NodeIndex = e.Index; // 선택된 모델 정보 NodeVO item = Connector.GetObject(NodeIndex); // 선택된 모델의 속성 ObjectPropertyVO prop = Connector.GetObjectProperty(NodeIndex, false); } } private void Connector_ObjectsSelectedEvent(object sender, EventArgs e) { // 이벤트 발생 시, 여러 모델이 선택됨 List<NodeVO> items = Connector.GetSelectedObjects(false); foreach (NodeVO item in items) { // 처리 로직 추가... } } } }
            Last modified: 04 3월 2024