모델은 다양한 요소를 가지고 있습니다. Feature, Dimension, Parameter . . .등의 정보가 저장 되어 있습니다. 모델은 데이터 덩어리 입니다. 모델 안에 있는 요소들을 가져올수 있습니다. IpfcModelItemOwner는 Creo Parametric VBA API에서 모델 아이템(Feature, Datum 등)을 소유(포함)하는 객체에 대한 인터페이스입니다. 쉽게 말하면, "모델 아이템들을 리스트로 가져올 수 있는 능력을 부여하는 인터페이스"입니다.
디양한 요소들은 배열(Array)로 저정되어 있습니다, 순차적으로 저장 됩니다. (k1,k2,k3...)

예시 코드 : AI로 아래 코드를 분석 해보세요
| Sub ListExample() Dim myFruitList As New Collection ' 1. 데이터 추가 (Add) myFruitList.Add "사과" myFruitList.Add "바나나" myFruitList.Add "포도" ' 2. 특정 데이터 출력 (인덱스 사용) Debug.Print myFruitList(1) ' 결과: 사과 ' 3. 전체 데이터 순환 (For Each) Dim fruit As Variant For Each fruit In myFruitList Debug.Print fruit Next fruit End Sub |
인터페이스란?
한 마디로 말하면 "무엇을 할 수 있는가"를 약속한 계약서입니다.
비유를 들면, 콘센트(인터페이스)를 생각해보세요. 콘센트는 "220V, 50Hz 전기를 꽂을 수 있다"는 약속만 정의합니다. 선풍기든, 냉장고든, TV든 — 이 약속을 지키는 제품이면 무엇이든 꽂을 수 있습니다. 콘센트는 내부 구조를 신경 쓰지 않고, 오직 "꽂는 행위"만 보장합니다.
프로그래밍에서 인터페이스도 똑같습니다. IpfcModelItemOwner는 ListItems()를 반드시 가져야 한다고만 선언합니다. 실제로 어떻게 동작하는지는 그 인터페이스를 구현하는 클래스(IpfcModel 등)가 결정합니다.
인터페이스는 "무엇을"만 정의하고, "어떻게"는 정의하지 않습니다. IpfcModelItemOwner는 ListItems()가 있어야 한다고만 선언하고, 실제 동작은 IpfcModel이 결정합니다.
여러 클래스가 같은 인터페이스를 구현할 수 있습니다. 콘센트 규격을 따르는 제품이 선풍기도, 냉장고도 될 수 있듯이, IpfcModelItemOwner를 구현하는 클래스는 IpfcModel 외에도 여러 개가 될 수 있습니다.
코드가 유연해집니다. Dim owner As IpfcModelItemOwner로 선언하면, model 자리에 나중에 다른 객체가 와도 ListItems() 호출 코드는 그대로 유지됩니다. 이것이 인터페이스를 쓰는 가장 큰 이유입니다.
예제 코드
| Dim model As pfcls.IpfcModel Dim Modelowner As IpfcModelItemOwner Dim FeatureItems As IpfcModelItems Set Modelowner = model ' IpfcModel → IpfcModelItemOwner로 할당 Set FeatureItems = Modelowner.ListItems(EpfcModelItemType.EpfcITEM_FEATURE) |
EpfcModelItemType 예시

| Option Explicit '// Creo Parametric의 피처 정보를 Excel로 가져오는 매크로 Sub Feature_name() On Error GoTo RunError ' 에러 발생 시 RunError 레이블로 이동 ' 속도 향상 및 화면 깜빡임 방지를 위해 이벤트 비활성화 Application.EnableEvents = False ' 1. 시트 존재 여부 확인 ' "Program02"라는 이름의 시트가 있는지 체크합니다. If Not WorksheetExists("Program02") Then MsgBox "Worksheet 'Program02'를 찾을 수 없습니다.", vbExclamation, "오류" Exit Sub End If ' 2. Creo 접속을 위한 변수 선언 Dim asynconn As New pfcls.CCpfcAsyncConnection ' 비동기 접속 객체 생성 Dim conn As pfcls.IpfcAsyncConnection ' 접속 상태 저장 객체 ' 3. 실행 중인 Creo 세션에 연결 ' Connect(디스플레이, 설정파일, IP주소, 타임아웃초) Set conn = asynconn.Connect("", "", ".", 5) ' 접속 실패 시 메시지 출력 후 종료 If conn Is Nothing Then MsgBox "Creo Parametric 세션을 시작하거나 연결하는 중 오류가 발생했습니다.", vbInformation, "IDT" Exit Sub End If ' 4. Creo 세션 및 모델 정보 가져오기 Dim BaseSession As pfcls.IpfcBaseSession Dim model As pfcls.IpfcModel Set BaseSession = conn.Session ' 현재 활성화된 세션 할당 Set model = BaseSession.CurrentModel ' 세션에서 현재 열려 있는 모델 할당 ' 만약 열린 모델이 없다면 종료 If model Is Nothing Then MsgBox "활성화된 모델이 없습니다.", vbExclamation GoTo Cleanup End If ' 5. 현재 모델 정보를 엑셀 시트에 기록 ' D2 셀에는 작업 디렉토리, D3 셀에는 파일명을 입력합니다. With Worksheets("Program02") .Cells(2, "D") = BaseSession.GetCurrentDirectory .Cells(3, "D") = model.FileName End With ' 6. 피처(Feature) 목록 추출 시작 Dim Modelowner As IpfcModelItemOwner Dim FeatureItems As IpfcModelItems Dim Feature As IpfcFeature Set Modelowner = model ' 모델을 아이템 소유자 객체로 캐스팅 ' 모델 내의 모든 '피처(ITEM_FEATURE)' 목록을 가져옵니다. Set FeatureItems = Modelowner.ListItems(EpfcModelItemType.EpfcITEM_FEATURE) Dim i As Long ' 7. 추출된 피처 목록을 순회하며 엑셀에 데이터 입력 ' 루프는 0부터 (피처 개수 - 1)까지 반복됩니다. For i = 0 To FeatureItems.Count - 1 Set Feature = FeatureItems(i) ' i번째 피처 객체 할당 ' B열부터 E열까지 정보를 입력 (6행부터 시작) Cells(i + 6, "B") = i + 1 ' 순번 Cells(i + 6, "C") = Feature.FeatTypeName ' 피처 타입 이름 (예: PRO_FEAT_EXTRUSION) Cells(i + 6, "D") = Feature.Number ' 피처 번호 (ID) Cells(i + 6, "E") = Feature.FeatType ' 피처 타입 (정수값) Next i ' 작업 완료 알림 MsgBox "완료하였습니다" ' 8. 종료 및 메모리 정리 (Cleanup) Cleanup: If Not conn Is Nothing Then If conn.IsRunning Then conn.Disconnect (2) ' Creo 세션과의 연결 해제 End If End If ' 객체 변수 초기화 (메모리 해제) Set asynconn = Nothing Set conn = Nothing Set BaseSession = Nothing Set model = Nothing Application.EnableEvents = True Exit Sub ' 에러 처리 핸들러 RunError: If Err.Number <> 0 Then MsgBox "프로세스 실패: 오류가 발생했습니다." & vbCrLf & _ "오류 번호: " & CStr(Err.Number) & vbCrLf & _ "오류 설명: " & Err.Description, vbCritical, "에러 발생" Resume Cleanup ' 에러가 발생해도 정리 코드로 이동 End If End Sub '// 시트 존재 여부를 확인하는 보조 함수 Function WorksheetExists(shtName As String) As Boolean On Error Resume Next WorksheetExists = Not Worksheets(shtName) Is Nothing On Error GoTo 0 End Function |
위 코드 실행 결과는 아래 사이트를 참고 하세요
Creo Feature Type 가져오기
□ Feature Type을 표시 하는 방법Creo 모델은 다양한 Feature로 구성 되어 있습니다 다음과 같이 가져올 수 있습니다.PartAssemble □ 코드Option ExplicitSub Feature_name() On Error GoTo RunError Application.EnableEvents = Fa
tool-2020.tistory.com
by korealionkk@gmail.com
'업무 자동화 > VBA, VB.NET For Creo' 카테고리의 다른 글
| Parameter 값을 읽기/ 쓰기 (0) | 2026.05.09 |
|---|---|
| 초보자를 위해 . . . . 반복되는 코드 라이브러리로 구성 하기 (0) | 2026.05.06 |
| 초보자를 위해 . . . . Feature 정보 가져오기 #1 (0) | 2026.05.06 |
| 초보자를 위해 . . . . IpfcBaseSession 환경설정 기능 (0) | 2026.05.04 |
| 초보자를 위해 . . . . IpfcBaseSession 세션에 로드된 모델을 찾기 (0) | 2026.05.04 |