본문 바로가기
  • You find inspiration to create your own path !
업무 자동화/VBA, VB.NET For Creo

초보자를 위해 . . . . 모델의 Parameter 값 가져오기

by ToolBOX01 2026. 5. 2.
반응형

■Parameter(매개변수) 개념

Creo Parametric에서 Parameter(매개변수)는 모델의 지표나 특성을 정의하는 '변수'와 같습니다. 단순히 치수(Dimension)를 조절하는 것을 넘어, 모델에 지능을 부여하고 외부 데이터(Excel, ERP 등)나 수식(Relation)과 연결하는 핵심적인 역할을 합니다.

 

1. Parameter의 주요 속성

각 매개변수는 다음과 같은 정보를 포함합니다.

  • Name (이름): 매개변수를 식별하는 고유 명칭 (예: MATERIAL, COST, PART_NUMBER).
  • Type (유형): 데이터의 성격에 따라 결정됩니다.
    • String (문자열): 텍스트 정보.
    • Real Number (실수): 소수점이 포함된 숫자.
    • Integer (정수): 소수점이 없는 정수.
    • Yes/No (불리언): 논리값 (참/거짓).
  • Value (값): 해당 매개변수에 저장된 실제 데이터.
  • Unit (단위): 길이(mm), 질량(kg) 등 물리적 단위를 지정할 수 있습니다.

 

2. Parameter의 주요 용도

매개변수는 단순 기록용부터 설계 자동화까지 폭넓게 사용됩니다.

  • 설계 의도 제어 (Relation과 연동): 치수와 매개변수를 수식으로 연결합니다.
    • 예: d1 = TOTAL_LENGTH / 2 (치수 d1을 매개변수 값의 절반으로 고정)
  • 도면(Drawing) 자동화: 도면 표제란(Title Block)에 모델의 매개변수를 자동으로 불러와 표시합니다.
    • 예: &PART_NUMBER를 도면에 입력하면 모델의 부번이 자동으로 출력됨
  • 패밀리 테이블(Family Table): 하나의 원본 모델에서 매개변수 값만 바꾸어 여러 변형 모델(Instance)을 생성할 때 사용합니다.
  • Windchill(PLM) 연동: 모델 내의 매개변수를 Windchill의 속성(Attribute)과 매핑하여 시스템적으로 관리합니다.

 

3. 생성 및 관리 방법 (Accessing Parameters)

  1. 경로: 상단 리본 메뉴에서 Tools(도구) → Parameters(매개변수)를 클릭합니다.
  2. 범위(Context): 매개변수는 어디에 생성하느냐에 따라 영향력이 달라집니다.
    •  Part Level: 개별 부품 내에서 사용.
    •  Assembly Level: 조립품 전체에서 사용.
    •  Feature Level: 특정 피처(돌출, 회전 등) 내부에서만 사용.

 

4. 수식(Relation)과의 차이점

많이 혼동하시는 부분이지만, 두 개념은 상호 보완적입니다.

  • Parameter: 데이터를 담는 그릇.
  • Relation: 그 그릇들 사이의 연산 규칙.

현재 open 되어 있는 모델의 parameter 이름 및 유형, 값을 메세지 창으로 표시하는 코드 입니다.

  • 참조 라이브러리: pfcls.dll (Creo VB API) 가 Excel VBA 참조에 등록되어 있어야 합니다.
  • 위 코드는 현재 활성화된 모델을 자동으로 읽으므로, 별도의 파일명/폴더 입력 없이 실행 가능합니다.
  • 파트(.prt)뿐 아니라 어셈블리(.asm)에도 동일하게 동작합니다.
  • Parameter가 많을 경우 MsgBox 대신 Excel 시트에 출력하도록 변경하는 것도 권장됩니다.
 
[AI 예상 결과 이미지]
 
 
 
Sub ShowParameters()

    '--- 1. Creo 연결 ---'
    Dim asynconn As New pfcls.CCpfcAsyncConnection
    Dim conn As pfcls.IpfcAsyncConnection
    Set conn = asynconn.Connect("", "", ".", 5)

    Dim session As pfcls.IpfcBaseSession
    Set session = conn.Session

    '--- 2. 현재 활성 모델 가져오기 ---'
    Dim oModel As pfcls.IpfcModel
    Set oModel = session.CurrentModel

    If oModel Is Nothing Then
        MsgBox "열려있는 Creo 모델이 없습니다.", vbExclamation, "오류"
        conn.Disconnect (2)
        Exit Sub
    End If

    '--- 3. Parameter Owner 및 Parameter 리스트 ---'
    Dim Powner As pfcls.IpfcParameterOwner
    Set Powner = oModel

    Dim params As pfcls.IpfcParameters
    Set params = Powner.ListParams()

    If params Is Nothing Or params.Count = 0 Then
        MsgBox "이 모델에 Parameter가 없습니다.", vbInformation, "Parameter 없음"
        conn.Disconnect (2)
        Exit Sub
    End If

    '--- 4. Parameter 정보 수집 ---'
    Dim i As Integer
    Dim param As pfcls.IpfcParameter
    Dim oParamItem As pfcls.IpfcNamedModelItem
    Dim oParamValue As pfcls.IpfcParamValue

    Dim oName As String
    Dim oType As String
    Dim oValue As String
    Dim msgText As String

    ' 헤더'
    msgText = "[ " & oModel.FileName & " ] 의 Parameter 목록" & vbCrLf
    msgText = msgText & String(55, "-") & vbCrLf
    msgText = msgText & "No.  이름                  유형          값" & vbCrLf
    msgText = msgText & String(55, "-") & vbCrLf

    For i = 0 To params.Count - 1

        Set param = params.Item(i)
        Set oParamItem = param
        oName = oParamItem.Name

        Set oParamValue = param.Value

        '--- 유형(Type) 판별 ---'
        Select Case oParamValue.DiscrimType

            Case EpfcParamValueType.EpfcPARAM_DOUBLE
                oType = "DOUBLE (실수)"
                oValue = CStr(oParamValue.DoubleValue)

            Case EpfcParamValueType.EpfcPARAM_STRING
                oType = "STRING (문자)"
                oValue = oParamValue.StringValue

            Case EpfcParamValueType.EpfcPARAM_INTEGER
                oType = "INTEGER (정수)"
                oValue = CStr(oParamValue.IntValue)

            Case EpfcParamValueType.EpfcPARAM_BOOLEAN
                oType = "BOOLEAN (논리)"
                If oParamValue.BoolValue Then
                    oValue = "TRUE"
                Else
                    oValue = "FALSE"
                End If

            Case EpfcParamValueType.EpfcPARAM_NOTE
                oType = "NOTE"
                oValue = "(노트 유형)"

            Case Else
                oType = "UNKNOWN"
                oValue = "알 수 없음"

        End Select

        '--- 행 추가 ---'
        msgText = msgText & _
                  Format(i + 1, "00") & "   " & _
                  Left(oName & Space(22), 22) & _
                  Left(oType & Space(14), 14) & _
                  oValue & vbCrLf

    Next i

    msgText = msgText & String(55, "-") & vbCrLf
    msgText = msgText & "총 " & params.Count & " 개의 Parameter"

    '--- 5. 메시지 창에 표시 ---'
    MsgBox msgText, vbInformation, "Creo Parameter 정보"

    '--- 6. 연결 해제 ---'
    conn.Disconnect (2)

End Sub

 

코드 설명

1단계 CCpfcAsyncConnection으로 Creo에 연결
2단계 session.CurrentModel로 현재 열린 모델을 가져옴 (파일명 지정 불필요)
3단계 IpfcParameterOwner → ListParams()로 전체 파라미터 목록 수집
4단계 DiscrimType으로 파라미터 유형을 판별 (Double / String / Integer / Boolean / Note)
5단계 MsgBox에 번호 · 이름 · 유형 · 값을 정렬하여 출력

위 코드는 "Claude Ai"로 만든 코드 입니다. 아래 "참고 자료"를 Ai에 전달하여 코드를 수정 하였습니다.
정상적으로 동작하는지 테스트는 하지 않았습니다. 참고 자료에 있는 코드는 Test를 오나료 하였습니다.

참고 자료

 

4-5 # Parameter : 엑셀에서 매개변수 읽고, CREO 변경 하기

CREO 파일에서 매개 변수 이름 확인하고, 동일한 매개변수가 있으면, 값만 변경 하고, 동일한 매개변수 이름이 없으면 매개변수 이름을 생성 하고, 값을 입력 하는 프로그램. 다음과 같은 순서로

tool-2020.tistory.com

 


프로그램은 변수 정의,  "IF"를 사용하는 조건문, "FOR"를 사용하는 반복문의 조합으로 구성되어 있습니다.
변수는 VBA에서 "Dim"으로 정의 합니다. 반드시 이름과 "유형"으로 구성 합니다. "유형"은 Creo VBA API에서 제공하는 것을 사용 합니다.  예시 Dim oModel As pfcls.IpfcModel   변수의 이름은 " oMode" 입니다. 유형 (Type)은 "IpfcModel" 입니다. Creo VBA API 문서에 아래 그림과 같이 사용 메뉴얼을 제공하고 다양한 하위 메뉴들을 제공 합니다.

하위 메뉴들을 이용하여, 모델이 가지고 있는 치수, 선의 길이, 면적, 부피 값을 가져오고, 변경 하여 자동화를 합니다.  

하의 메뉴는 기능에 따라 "Property", "Function", "Sub" 3가지로 구분 됩니다. 이 용어는 블로그 또는 VBA 기초 학습을 검색하여 자세히 알수 있습니다.

Property FileName as String

IpfcModel의 하위 메뉴 사용 방법 : "."를 입력하고 하위메뉴 이름을 넣고, 반환 되는 값이 있는 경우. 메뉴얼에 나와 있는 반환 값 "유형"을 사용 합니다. 예제의 경우 "String" 타입을 사용 합니다. "oFileName = oModel.FileName" 모델이 가지고 있는 " FileName"을 변수 "oFileName"에 가져 옵니다.

Dim oModel As pfcls.IpfcModel
Dim oFileName as String

oFileName = oModel.FileName

 


Creo VBA API의 핵심 구조와 자동화 원리를 정리해 드립니다. Creo(구 Pro/E) 자동화는 객체 지향 모델을 이해하는 것이 가장 중요하며, 변수 정의(Dim), 조건문(IF), 반복문(FOR)이 그 로직의 뼈대를 이룹니다.

1. 변수 정의와 유형 (Variable Definition)

VBA에서 Creo 객체를 제어하기 위해서는 pfcls 라이브러리(커넥터)에서 제공하는 정확한 유형을 지정해야 합니다.

  • 구문: Dim [변수명] As pfcls.[객체유형]
  • 예시:
    • Dim oModel As pfcls.IpfcModel: 현재 활성화된 모델(부품 또는 어셈블리)을 담는 변수
    • Dim oSolid As pfcls.IpfcSolid: 모델을 솔리드 객체로 취급하여 질량 정보를 가져올 때 사용
    • Dim oWindow As pfcls.IpfcWindow: Creo 화면 창을 제어할 때 사용

 

2. 하위 메뉴(메서드 및 속성) 활용

IpfcModel과 같은 객체 변수를 정의한 후에는 마침표(.)를 찍어 해당 객체가 가진 하위 기능에 접근합니다. 이를 통해 모델의 물리적 성질이나 요소를 추출합니다.

주요 자동화 대상 예시:

  • 치수 (Dimensions): oSolid.ListItems(EpfcModelItemType.EpfcITEM_DIMENSION)를 통해 모델 내 모든 치수 목록을 가져올 수 있습니다.
  • 부피 및 질량 (Mass Properties): oSolid.GetMassProperty를 사용하여 부피, 표면적, 밀도 등을 계산합니다.
  • 파라미터 (Parameters): 설계 변경의 핵심인 매개변수 값을 읽거나 수정합니다.

 

3. 프로그램 제어 로직 (Logic Control)

추출한 데이터를 바탕으로 의사결정을 내리거나 반복 작업을 수행합니다.

IF 조건문 (판단)

특정 치수가 기준치를 초과할 경우 경고를 띄우거나 색상을 변경하는 등의 로직을 짭니다.

VBA
 
If oDimension.DimValue > 100 Then
    ' 치수가 100보다 크면 실행할 코드
    oModel.Display ' 모델을 다시 그리기
End If

FOR 반복문 (일괄 처리)

어셈블리 내의 모든 부품을 순회하거나, 모델 내의 모든 선(Edge)의 길이를 합산할 때 사용합니다.

VBA
 
Dim i As Integer
For i = 0 To oItems.Count - 1
    ' 목록 내의 모든 항목에 대해 동일한 작업 반복
    Set oItem = oItems.Item(i)
    Debug.Print oItem.GetName
Next i

자동화 프로세스 요약

  1. 연결: IpfcAsyncConnection을 통해 실행 중인 Creo 세션에 접속합니다.
  2. 객체 획득: 활성화된 모델(GetCurrentModel)을 변수에 할당합니다.
  3. 데이터 조작: 하위 메뉴를 사용하여 치수를 변경하거나 면적을 계산합니다.
  4. 갱신: 변경된 값을 모델에 반영하기 위해 Regenerate 명령을 실행합니다.

이러한 API 구조를 숙달하면 수백 개의 도면 치수를 한 번에 변경하거나, 복잡한 형상의 부피를 자동으로 엑셀에 리포트하는 도구를 만들 수 있습니다.

 

by korealionkk@gmail.com

 

반응형