본문 바로가기
  • Welcome!
VBA For Creo

모델의 Feature 정보 알아보기

by ToolBOX01 2022. 9. 8.
반응형

■ 모델의 Features 이름, Feature Type, Feature 순서 번호 검색 하는 프로그램 소스

Part 모드에서 Feature의 이름과 ID, 순서 번호, Type을 검색 합니다.

 

▶ 소스 코드 

 

Sub Feature_LIST2()
     On Error GoTo RunError
        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
        Dim model As IpfcModel: Set model = session.CurrentModel
        
        'Model Path Name
        Cells(1, "c").Select: Selection.ClearContents
        Cells(1, "c") = session.GetCurrentDirectory
        
        'Model File Name
        Cells(1, "D").Select: Selection.ClearContents
        Cells(1, "D") = model.Filename
               
        'Cells 초기화
        Range(Cells(3, "A"), Cells(Rows.Count, "A")).EntireRow.Delete
        
        'Feature LIST
        Dim Modelowner As IpfcModelItemOwner: Set Modelowner = model
        Dim FeatureItems As IpfcModelItems: Set FeatureItems = Modelowner.ListItems(EpfcModelItemType.EpfcITEM_FEATURE)
        Dim oModelitem As IpfcModelItem
        Dim Feature As IpfcFeature
        
        'Feature Pattern
        Dim Featurepattern As IpfcFeaturePattern
        Dim PatternListMembers As IpfcFeatures
        Dim Pattern As IpfcFeature
        Dim oFeatureStatus As EpfcFeatureStatus
            
        'Excel Display
        For i = 0 To FeatureItems.Count - 1
                  Set oModelitem = FeatureItems(i)
                  Set Feature = FeatureItems(i)
                  Set Featurepattern = Feature.Pattern
                  
                        Cells(i + 3, "A") = i + 1
                        Cells(i + 3, "B") = oModelitem.GetName
                        Cells(i + 3, "C") = Feature.FeatTypeName
                        Cells(i + 3, "D") = Feature.Number
                        Cells(i + 3, "E") = Feature.FeatType
                        oFeatureStatus = Feature.Status
                        Cells(i + 3, "G") = oFeatureStatus
                           

                   If Not Featurepattern Is Nothing Then
                          Set PatternListMembers = Featurepattern.ListMembers
                                
                                For j = 0 To PatternListMembers.Count - 1
                                        Set Pattern = PatternListMembers(j)
                                        Cells(i + 7, "F") = "Pattern"
                                Next j
                   End If
                   
        Next i

     
    conn.Disconnect (2)
    
    'Cleanup
    Set asynconn = Nothing
    Set conn = Nothing
    Set session = Nothing
    Set model = Nothing
    

RunError:

    If Err.Number <> 0 Then
        MsgBox "Process Failed : Unknown error occurred." + Chr(13) + _
                "Error No: " + CStr(Err.Number) + Chr(13) + _
                "Error: " + Err.Description, vbCritical, "Error"

        If Not conn Is Nothing Then
            If conn.IsRunning Then
                conn.Disconnect (2)
            End If
        End If
    End If

End Sub

 

 

주의) 

Cells(i + 3, "C") = Feature.Number 의 코드는 "regeneration" 상태 인것만 표시 합니다

-> The regeneration number of the feature. If the feature is suppressed or unregenerated, this will be null.

 

프로그램 실행 결과)

6번 기준면, 8번 기준면은 "suppressed" 되었습니다. 재미 있는것은 스케치 Feature는 suppressed 데이텀 면을 하나 가지고 있습니다.

[ suppressed 데이텀 평면 ]
[ 프로그램 실행 결과 ]

주의) 

Cells(i + 3, "H") = Feature.IsGroupMember

그룹의 멤버를 체크 합니다.

 

 

주의) 

Cells(i + 3, "I") = Feature.IsEmbedded

내부 데이텀을 체크 합니다.