[C#] CATIA AUTOMATION - CATIA 열기, 실행하기

우롱밀크티당도70·2024년 6월 28일
0

C#_CATIA_AUTOMATION

목록 보기
1/2
post-custom-banner

1. 배경

C#을 사용해서 Catia V5용 매크로/프로그램을 MVVM 구조로 작성하기.
CATIA 열기 또는 실행 방법


2. 개발환경

  • Visual Studio 2022 / WPF 애플리케이션(.NET Framework 4.7.2)

3. 내용

MVVM 패턴 구조의 신규 프로젝트를 구성한 후 Catia 관련 작업을 할 class를 새로 추가한다. static 또는 singleton으로...나는 singleton으로 만들어 사용하기로 했다.

	public class CatiaDefine
    {
        private static CATIA_Define _Instance = null;
        
        public static CATIA_Define GetInstance()
        {
            if (_Instance == null)
            {
                _Instance = new CATIA_Define();
            }
            return _Instance;
        }
    }

INFITF CATIA Application에 대한 Typelib 라이브러리를 추가한다.

CATIA V5 Infinterfaces Object Library

참조>참조 추가

catia를 변수로 선언한다.

public INFITF.Application catia;

GetActiveObject는 이미 CATIA가 실행 중인 상태에서의 인스턴스를 가져온다.

catia = (INFITF.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("CATIA.Application");

CreateInstance는 새 인스턴스를 생성한다.

catia = (INFITF.Application)Activator.CreateInstance(Type.GetTypeFromProgID("CATIA.Application"));

메서드로 만들어 컨트롤의 동작이 이루어질 때 실행하게 할 수 있다.

		public void CatiaApp()
        {
            try
            {
                catia = (INFITF.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("CATIA.Application");
            }
            catch (Exception ex)
            {
                catia = (INFITF.Application)Activator.CreateInstance(Type.GetTypeFromProgID("CATIA.Application"));
                catia.Visible = true;
                Console.WriteLine(ex.Message);
            }
        }

이렇게 작성하면 try에서 실행중인 CATIA 인스턴스를 못 가져왔을 경우 catch에서 새로 CATIA를 실행하게 된다.
다만 이미 CATIA가 실행 중일 때 새 CATIA를 실행하는 것이므로 계속해서 새 CATIA를 띄우는 문제가 생긴다.


4. 재부팅 또는 재실행

처음 코드를 작성했을 때

catia = (INFITF.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("CATIA.Application");

이 부분에서 catia = null 상태였다. 인스턴스를 가져오지 못한 것인데 코드의 문제는 아니었고 Visual Studio를 껐다가 다시 켜보거나 컴퓨터의 재부팅을 하면 해결되는 문제였다.


5. 참조


profile
안뇽하세용
post-custom-banner

0개의 댓글