◎ Function GetModelFromDescr(MdlDescr as IpfcModelDescriptor) as IpfcModel [optional]
Creo VBA API를 사용하여 모델 디스크립터(Model Descriptor) 객체를 통해 현재 Creo Parametric 세션에 로드되어 있는 모델을 검색하는 기능입니다. 파일의 버전을 확인하거나 지정하는 핵심은 모델 디스크립터 (Model Descriptor) 객체를 활용하는 것입니다.
이 함수는 모델의 이름과 유형을 직접 입력하는 대신, 모델을 고유하게 식별하는 정보를 담고 있는 디스크립터 객체를 사용하여 모델을 찾는 고급 방법입니다.
💡 모델 디스크립터 (IpfcModelDescriptor)의 역할
모델 디스크립터는 특정 모델의 고유한 식별 정보를 담고 있는 일종의 신분증과 같습니다. 모델 디스크립터는 실제 Creo 세션에 로드(Load)되어 있지 않은 모델까지 포함하여 모든 Creo 파일을 참조하고 식별할 수 있는 핵심 도구입니다.
- 일반적으로 IpfcBaseSession.RetrieveModel()과 같은 함수를 사용하여 모델을 로드하거나, 다른 API 함수로부터 모델 정보를 받을 때 이 디스크립터를 얻게 됩니다.
- Function GetModelFromDescr는 이 디스크립터의 정보를 활용하여, 디스크립터가 가리키는 모델이 현재 Creo 세션에 이미 로드되어 사용 중인지 빠르게 확인하는 데 유용합니다.
- 모델 식별 정보 포함: 파일 이름, 모델 유형, 버전 등의 정보를 캡슐화하여, 특정 모델을 Creo 시스템 전체에서 고유하게 가리킵니다. 디스크립터에는 모델 이름, 모델 유형, 버전(선택적) 등의 정보가 포함되어 있습니다.
- 세션 외부 모델 표현: 모델 디스크립터는 현재 Creo 세션 메모리에 로드되어 있지 않은 파일 시스템 상의 모델도 나타낼 수 있습니다. 이는 모델을 로드하기 전에 존재 여부를 확인하거나 참조 정보를 저장할 때 유용합니다.
🗂️ 모델 디스크립터 (IpfcModelDescriptor) 지원되는 모델 유형 (Model Types)
모델 디스크립터가 식별할 수 있는 주요 Creo 모델 및 파일 유형은 다음과 같습니다. 이들은 IpfcModelType 열거형 상수로 정의됩니다.
| 모델 유형 | 상수 (VBA/API) | 설명 |
| MDL_ASSEMBLY | pfcMDL_ASSEMBLY | 어셈블리 파일 (.ASM) |
| MDL_PART | pfcMDL_PART | 파트 파일 (.PRT) |
| MDL_DRAWING | pfcMDL_DRAWING | 드로잉 파일 (.DRW) |
| MDL_DWG_FORMAT | pfcMDL_DWG_FORMAT | 드로잉 형식 파일 (.FRM) |
| MDL_MFG | pfcMDL_MFG | 제조 파일 (NC, 주조 등) |
| MDL_REPORT | pfcMDL_REPORT | 보고서 파일 |
| MDL_LAYOUT | pfcMDL_LAYOUT | 레이아웃 파일 |
| MDL_MARKUP | pfcMDL_MARKUP | 마크업 파일 |
| MDL_DIAGRAM | pfcMDL_DIAGRAM | 다이어그램 파일 |
| MDL_2D_SECTION | pfcMDL_2D_SECTION | 2D 단면 파일 |
모델 디스크립터는 Creo 자동화 프로그램이 모델 파일을 식별하고 관리하는 데 사용하는 데이터 구조체입니다.
이 모델 디스크립터 객체는 다음과 같은 함수에서 사용됩니다.
IpfcBaseSession.RetrieveModel(MdlDescr):
디스크립터가 지정하는 모델을 디스크에서 찾아 Creo 세션으로 로드할 때 사용합니다.
IpfcBaseSession.GetModelFromDescr(MdlDescr):
디스크립터가 지정하는 모델이 이미 세션에 로드되어 있는지 확인할 때 사용합니다.
IpfcBaseSession.CreateModelDescriptor(...):
코드를 통해 새로운 디스크립터 객체를 생성할 때 사용합니다.
매개변수
MdlDescr (IpfcModelDescriptor): 검색할 모델의 이름, 유형, 버전 등의 고유 식별 정보가 담긴 객체입니다.
반환값
IpfcModel [선택 사항]: 검색된 모델 객체를 반환합니다. 해당 모델이 현재 세션에 로드되어 있지 않다면 Nothing을 반환합니다.
주요 예외
IpfcXToolkitNotFound: 디스크립터와 일치하는 모델을 세션에서 찾을 수 없을 때 발생할 수 있습니다.
💻 Sample code : 디스크립터를 사용하여 모델 찾기
특정 모델의 디스크립터를 생성하고, 그 디스크립터를 사용하여 모델이 세션에 로드되어 있는지 확인하는 과정을 보여줍니다.
Dim pfcSession As pfcls.IpfcBaseSession
Dim modelDescriptor As pfcls.IpfcModelDescriptor
Dim foundModel As pfcls.IpfcModel
' // 검색할 모델 정보 정의 //'
Const MODEL_NAME As String = "bracket.prt"
Const MODEL_TYPE As pfcls.IpfcModelType = pfcls.pfcMDL_PART
' // 검색에 사용할 모델 디스크립터 생성 //'
Set modelDescriptor = pfcSession.CreateModelDescriptor( _
Name:=MODEL_NAME, _
Type:=MODEL_TYPE, _
Version:=0 ' 버전은 일반적으로 0을 사용하거나 생략 가능
)
'// 디스크립터를 사용하여 모델 검색 //'
Set foundModel = pfcSession.GetModelFromDescr(modelDescriptor)
' // 모델을 성공적으로 찾음 //'
MsgBox "디스크립터로 모델을 찾았습니다! 이름: " & foundModel.FileName, vbInformation
by korealionkk@gmail.com

'업무 자동화 > VBA, VB.NET For Creo' 카테고리의 다른 글
| IpfcBaseSession : Method (Function GetModelWindow) (0) | 2025.11.09 |
|---|---|
| IpfcBaseSession : Method (Function GetModelFromFileName) (0) | 2025.11.09 |
| IpfcBaseSession : Method (Function GetLocalizedMessageContents) (0) | 2025.11.09 |
| IpfcBaseSession : Method (Function GetEnvironmentVariable) (0) | 2025.11.09 |
| IpfcBaseSession : Method (Function GetByRelationId) (0) | 2025.11.09 |