본문 바로가기
  • Welcome!
VBA, VB.NET For Creo

Creo VB API 개념 - Related Classes

by ToolBOX01 2024. 12. 12.
반응형

□ 주요 클래스 유형

VB API는 여러 모듈에 걸쳐 다양한 클래스들로 구성되어 있습니다. 주요 클래스 유형은 다음과 같습니다:

1. Creo Parametric 관련 클래스 (Related Classes)  
   - 특정 기능과 직접적으로 관련된 고유한 메서드와 속성을 포함합니다.  
   - 자세한 내용은 *Creo Parametric-Related Classes* 섹션을 참고하세요.

2. Compact 데이터 클래스 (Compact Data Classes)   
   - VB 메서드의 인수로 필요한 데이터를 포함하는 클래스입니다.  
   - 자세한 내용은 *Compact Data Classes* 섹션을 참고하세요.

3. Union 클래스 (Union Classes)
   - 여러 유형의 값을 포함할 가능성이 있는 클래스입니다.  
   - 자세한 내용은 *Unions* 섹션을 참고하세요.

4. Sequence 클래스 (Sequence Classes)  
   - 객체나 기본 데이터 유형의 확장 가능한 배열입니다.  
   - 자세한 내용은 *Sequences* 섹션을 참고하세요.

5. Array 클래스 (Array Classes)
   - 특정 크기로 제한된 배열을 포함하는 클래스입니다.  
   - 자세한 내용은 *Arrays* 섹션을 참고하세요.

6. Enumeration 클래스 (Enumeration Classes)
   - 속성에 대해 제한적이고 유효한 옵션 집합을 나열하는 열거형 데이터 유형을 포함합니다.  
   - 자세한 내용은 *Enumeration Classes* 섹션을 참고하세요.

7. 모듈 레벨 클래스 (Module-Level Classes)
   - 특정 VB 객체를 초기화하는 데 사용되는 정적 메서드를 포함합니다.  
   - 자세한 내용은 *Module-Level Classes* 섹션을 참고하세요.

8. ActionListener 클래스 (ActionListener Classes)
   - 특정 이벤트가 발생할 때 실행될 코드를 지정할 수 있도록 지원합니다.  
   - 자세한 내용은 *Action Listeners* 섹션을 참고하세요.

각 클래스는 초기화, 속성, 메서드, 상속 또는 예외 처리와 관련된 고유한 규칙을 따릅니다. 


▷Related Classes

객체(예: 모델, 피처, 매개변수 등)를 직접 조작할 수 있는 메서드를 포함하는 클래스입니다. 

1. Initialization(초기화)

Related Classes에 속한 객체는 단독으로 생성할 수 없으며, 반드시 상위 계층(parent)에 해당하는 객체의 메서드를
사용하여 해당 객체의 핸들(handle)을 가져와야 한다는 뜻입니다.

상위 계층(parent) 란

부모 객체는 계층 구조에서 상위 레벨에 있는 객체를 의미합니다. 예를 들어, Creo API의 계층 구조에서 IpfcSession은 IpfcWindow와 같은 객체보다 상위에 위치합니다. IpfcSession → IpfcWindow → 기타 객체. 따라서 IpfcWindow 객체를 사용하려면 먼저 IpfcSession 객체를 초기화해야 합니다.

왜 직접 생성할 수 없을까?

Related Classes 객체들은 Creo 내부 데이터를 참조하는 핸들일 뿐입니다. 예를 들어, IpfcWindow 객체는 실제 Creo 애플리케이션에서 열려 있는 창을 나타내며, 객체를 직접 생성하면 실제 데이터와 연결되지 않은 상태가 됩니다.
이를 방지하기 위해, Creo API는 특정 메서드(예: session.CurrentWindow)를 통해서만 객체를 초기화하도록 설계되었습니다.

핸들(handle)의 의미는 프로그램이 특정 객체(데이터나 리소스)에 접근하고 조작할 수 있도록 제공하는 
참조(reference) 또는 연결(connection)을 의미합니다. 
핸들은 프로그래밍에서 "그 객체를 가리키는 키(key) 또는 주소"라고 이해할 수 있습니다.

Creo API 문맥에서 핸들은 Creo 내부 데이터나 객체를 직접 다루는 것이 아니라, 해당 데이터를 안전하고 
간접적으로 참조하기 위한 매개체로 사용됩니다.

예제 코드

Dim asyncConnection As pfcls.IpfcAsyncConnection
Dim session As pfcls.IpfcSession
Dim window As pfcls.IpfcWindow
Dim Casync As New pfcls.CCpfcAsyncConnection

asyncConnection = Casync.Connect(DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value)
session = asyncConnection.Session   '// 상위 객체인 session 초기화
window = session.CurrentWindow      '// 부모 객체(session)를 통해 하위 객체(window) 초기화

window.Activate()  '// 올바르게 초기화된 객체이므로 메서드 호출 가능
  • 여기서 session은 window 객체의 부모이며, session.CurrentWindow 메서드를 통해 window 객체를 가져옵니다.
  • 초기화된 window 객체는 실제 Creo 애플리케이션의 창과 연결되었으므로 메서드 호출이 가능합니다.

파라미터 객체 초기화 예제 코드

Dim model As pfcls.IpfcModel
Dim paramOwner As pfcls.IpfcParameterOwner
Dim parameter As pfcls.IpfcParameter

paramOwner = model  '// 모델 객체를 파라미터 소유 객체로 사용
parameter = paramOwner.CreateParam("param_name", 1) '// 파라미터 생성

param_name : Parameter 이름
1 : Parameter Type

모델 초기화 예제 코드

Dim session As pfcls.IpfcSession
Dim model As pfcls.IpfcModel

model = session.CurrentModel  ' 세션 객체를 통해 현재 모델 초기화

"부모 객체를 통해 초기화"란 객체의 상위 계층에 있는 부모 객체의 메서드를 사용해 객체를 생성하거나 핸들을 가져오는 것을 의미합니다. 이는 Creo API가 객체 간 계층 구조와 내부 데이터의 연결성을 유지하기 위해 설계된 방식입니다.
객체 사용 전에 올바른 초기화가 이루어져야 메서드 호출 및 속성 접근이 가능합니다.

 

2.속성(Properties)

Related 객체 내 속성(Property)은 직접 접근 가능합니다.
읽기 전용(Read-only)으로 지정된 일부 속성은 API를 통해 값을 읽을 수는 있지만 수정할 수는 없습니다.

'// 현재 모델 가져오기
Dim currentModel As IpfcModel
crrentModel = session.CurrentModel

 

3. Methods

"Methods"는 프로그래밍에서 객체 지향 프로그래밍(Object-Oriented Programming, OOP)의 주요 구성 요소 중 하나로,
객체(Object)가 수행할 수 있는 동작이나 기능을 정의한 함수(Function)를 의미합니다.

Methods의 의미와 역할

1.특정 작업을 수행
1)메서드는 객체와 관련된 특정 작업이나 동작을 실행합니다.
2)예를 들어, window.Activate()는 창(Window)을 활성화하는 작업을 수행하는 메서드입니다.

2. 객체와 밀접하게 연관
1)메서드는 특정 객체와 연관되어 있으며, 해당 객체를 통해 호출됩니다.
2)객체가 초기화되지 않으면 메서드를 호출할 수 없습니다.

3.객체의 상태 변경
1)메서드는 객체의 내부 상태를 변경하거나, 특정 데이터를 처리합니다.
2)예를 들어, window.Repaint()는 창을 새로 고치는 작업을 통해 화면 상태를 변경합니다.

 

1. 잘못된 호출 예시 (Illegal Calls)

객체를 초기화하지 않고 메서드를 호출하려 하면 오류가 발생합니다.

Dim window as pfcls.IpfcWindow
window.Activate()          '// 객체(window)가 초기화되지 않아 호출 불가능.
Repaint()                  '// 호출할 객체가 없으므로 불가능.

위 코드는 window 객체가 생성되거나 초기화되지 않았으므로 메서드 호출이 불가능합니다.

2. 올바른 호출 예시 (Legal Calls)

객체를 먼저 초기화한 후 메서드를 호출해야 합니다. 초기화 과정을 거치면 메서드 호출이 가능합니다.
다음은 올바른 호출 예시입니다:

Dim window As Pfcls.IpfcWindow
Dim session As Pfcls.IpfcSession
Dim asyncConnection As Pfcls.IpfcAsyncConnection
Dim Casync As New Pfcls.CCpfcAsyncConnection

'// 비동기 연결 생성
asyncConnection = Casync.Connect(DBNull.Value, DBNull.Value, DBNull.Value, DBNull.Value)

'// 세션 객체 초기화
session = asyncConnection.Session

'// 현재 윈도우 객체 초기화
window = session.CurrentWindow    '// window 객체를 초기화

'// 초기화된 객체에서 메서드 호출
window.Activate()                 '// 초기화되었으므로 호출 가능
window.Repaint()                  '// 초기화되었으므로 호출 가능

>>> 코드 상세 설명

1. 객체 초기화

  • asyncConnection = Casync.Connect(...)를 통해 Creo 세션과의 연결이 설정됩니다.
  • 이후, session = asyncConnection.Session을 통해 세션 객체를 얻습니다.
  • window = session.CurrentWindow를 사용하여 현재 활성화된 윈도우 객체를 초기화합니다.

2. 메서드 호출

  • Activate(): 현재 창을 활성화합니다.
  • Repaint(): 창을 새로 고칩니다.

3. 중요 규칙

  • 메서드를 호출하기 전에 반드시 해당 객체를 초기화해야 합니다.
  • 초기화되지 않은 객체에서 메서드를 호출하면 런타임 오류가 발생합니다.

 

4. 상속(Inheritance) 개념 및 적용 방법

related objects는 객체 지향 프로그래밍의 상속(Inheritance) 개념을 사용합니다. 하나의 객체는 다른 인터페이스(부모 클래스)로부터 속성과 메서드를 상속받아 사용할 수 있습니다.
예를 들어, IpfcComponentFeat 객체는 아래의 인터페이스로부터 메서드와 속성을 상속받습니다:

  • IpfcObject
  • IpfcChild
  • IpfcActionSource
  • IpfcModelItem
  • IpfcFeature
  • IpfcComponentFeat

상속받은 메서드를 사용하는 방법에는 두 가지가 있습니다:

1. 직접 메서드 호출
상속받은 메서드는 Intellisense(자동 완성)에 표시되지 않을 수 있습니다.
그러나 코드에서 직접 호출하면 메서드가 동작할 수 있습니다(VB.NET에서만 가능)

Dim componentFeat As pfcls.IpfcComponentFeat
MsgBox("Feature number: " & componentFeat.Number)

 

2. 올바른 객체 타입으로 변환 후 호출
객체의 핸들을 다른 적절한 타입의 객체에 할당한 후 메서드를 호출합니다.
이 방법은 VB.NET과 VBA 모두에서 안정적으로 작동합니다.

Dim componentFeat As pfcls.IpfcComponentFeat
Dim feat As pfcls.IpfcFeature

feat = componentFeat    ' 핸들을 적절한 타입으로 변환
MsgBox("Feature number: " & feat.Number)

>>> 코드 상세 설명

  • IpfcComponentFeat 객체의 핸들을 IpfcFeature 타입 객체로 변환하여 사용합니다.
  • feat.Number를 호출하면 상속받은 Number 속성을 사용할 수 있습니다.

 

by korealionkk@gmail.com