본문 바로가기
  • 환영 합니다 ! Welcome!
VBA For Creo

Feature Delete - V1

by ToolBOX01 2021. 2. 7.
반응형

Feature를 삭제 하는 프로그램. 먼저 모델의 Feature 번호와 타입 이름을 엑셀 파일에 표시 하여보자

1. Creo에 활성화된 모델과 VBA를 연결 하여보자. 자주 사용 하는 프로시셔 이다. 


 

Sub feature_delete()

    Dim asynconn As New pfcls.CCpfcAsyncConnection
    Dim conn As pfcls.IpfcAsyncConnection
    Set conn = asynconn.Connect("", "", ".", 5)
    Dim oSession As IpfcBaseSession
    Set oSession = conn.Session
    Dim oModel As IpfcModel
    Set oModel = oSession.CurrentModel

 


Dim oSession As IpfcBaseSession

변수 "oSession"은 객체 타입으로 "IpfcBaseSession" 클래스로 정의.  속성값 "CurrentModel"은 현재 활성화된 

Creo 파일을 정의 한다.  전달 받는 변수는 "IpfcModel" 클래스 여야 한다. 

 

VBA 문서

 

2. 모델이 가지고 있는 Feature를 표시해 보자. 표시 방법은 모델이 가지고 있는 Feature 배열로 정의 하고, 한개씩
   엑셀에 표시한다. Feature에 관한 클래스는 IpfcFeature 이다. 여러개의  Feaure들을 가지고 와야 하니 복수를
   나타내는 "s"를 붙인다.  Dim oFeatures As IpfcFeatures 


    Dim oSolid As IpfcSolid
    Set oSolid = oModel
    
    Dim oModelItem As IpfcModelItem
    Dim oFeatures As IpfcFeatures
    Set oFeatures = oSolid.ListFeaturesByType(False, EpfcFeatureType_nil)
    Dim oFeature As IpfcFeature
    Dim oFeaturetypeName As String

   For Each oFeature In oFeatures
        oFeaturetypeName = oFeature.FeatTypeName
        Set oModelItem = oFeature
        Cells(i + 1, "a") = oModelItem.ID
        Cells(i + 1, "b") = oModelItem.Type
        Cells(i + 1, "c") = oFeaturetypeName
        i = i + 1
    Next
        
    'Disconnect with Creo
    conn.Disconnect (2)
    
End Sub

Set oFeatures = oSolid.ListFeaturesByType(False, EpfcFeatureType_nil)는 모델에서 모든 Feature들을 가지고온다

변수 oFeatures는 16개의 Feature를 가져왔다

 

 Feature Count

 

Feature 설명

 

for each 문을 통해 oFeatures 에 저장되어 있는 list를 하나씩 oFeature 대입하고 엑셀 파일에 표시한다.

 

LIST 분석 파일

 

더보기

 

 

 

 

 

 

"ListFeaturesByType" 는 Part, Assemble 의 Feature 상태를 알수 있다. Supress , exclude 상태를 알수있다. 그러나 Hidden 상태를 알수 없다.

 

 


선택된 Feature 지우기

 

 

프로그램 으도는 CREO 화면에서 Feature를 선택하고, 선택된것은 강제적으로 삭제 하는 프로그램 입니다.

Chilldren Feature를 강제로 삭제합니다.

Creo 화면에서 선택된 Feature는  아래와 같은 리스트를 가집니다. "ITEM1"이 KEY 입니다.


Sub feature_delete()

    Dim asynconn As New pfcls.CCpfcAsyncConnection
    Dim conn As pfcls.IpfcAsyncConnection
    Set conn = asynconn.connect("", "", ".", 5)
    Dim oSession As IpfcBaseSession
    Set oSession = conn.Session
    Dim oModel As IpfcModel
    Set oModel = oSession.CurrentModel
    Dim oSolid As IpfcSolid
    Set oSolid = oModel
       
    '마우스로 Feature를 선택
    Dim oSelectionOptionsCreate As New CCpfcSelectionOptions
    Dim oSelectionOptions As IpfcSelectionOptions
    Set oSelectionOptions = oSelectionOptionsCreate.Create("feature")
    oSelectionOptions.MaxNumSels = 1
    Dim oSelections As CpfcSelections
    Set oSelections = oSession.Select(oSelectionOptions, Nothing)
    Dim oSelection As IpfcSelection
    Set oSelection = oSelections.Item(0)
    
    
    'Feature 동작
    Dim oFeature As IpfcFeature
    Set oFeature = oSelection.SelItem

    Dim featureOperations As New CpfcFeatureOperations
    Dim oDeleteOperation As IpfcDeleteOperation
    Set oDeleteOperation = oFeature.CreateDeleteOp
    oDeleteOperation.Clip = True
    
    Dim oRegenInstructionsCreate As New CCpfcRegenInstructions
    Dim regenInstructions As IpfcRegenInstructions
    Set regenInstructions = oRegenInstructionsCreate.Create(True, True, Nothing)
    regenInstructions.UpdateInstances = False
    
    Call featureOperations.Append(oDeleteOperation)
    Call oSolid.ExecuteFeatureOps(featureOperations, regenInstructions)
    Call oSession.CurrentWindow.Refresh
    
             
    'Disconnect with Creo
    conn.Disconnect (2)
    
End Sub

 

 

Feature Delete - V2

Feature Delete - V1이 어려워 프로그램 안에서 선택한 Feature를 삭제하는 프로그램 입니다. Sub feature_delete() Dim asynconn As New pfcls.CCpfcAsyncConnection Dim conn As pfcls.IpfcAsyncConnection Set..

tool-2020.tistory.com

 

FEATURE DELETE v2.xlsm
0.02MB

 

비즈니스 문의 : lionkk@idt21c.com