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

라이브러리 관리 프로그램 #1

by ToolBOX01 2022. 12. 28.
반응형

라이브러리 특성 값을 사용 하여, 어셈블 파일에 적용할 파일을 선택 할 수 있습니다. 관리자는 동일한 Class의  라이브러리 파일들을 특정 폴더에 저장 합니다 

>> 관리자 모드

1. List 
- Creo에서 라이브리 파일이 모여 있는 "Folder"를 작업 Directory 으로 설정 합니다.
- "List" 버튼을 클릭 하면 "Folder" 항목에 작업 Directory가 입력 됩니다.
  작업 Directory의  모든 파일들의 "번호" 와 "Creo File Name" 항목에 표시합니다. 

[ List 표시 결과 ]

2. IMG
- 표시된 "Creo File Name" 모델의 이미지를 생성 합니다.
- 이미지 저장은 작업 Directory에 표시됩니다 

3. 특성 값 "Maker", "Size", "Length", "DIA" 값을 입력 합니다.
- 엑셀의 필터링을 사용 합니다. 쉽게 검색을 할 수 있습니다.

[ 특성 값 입력]


* 라이브러리 내용이 갱신이 되면 관리자 모드를 재 실행 합니다. 또는 수동으로 입력 해야 합니다.

구글 드라이버, 네이버 N드이버등을 활용해 보세요.  다른 설계자와 협업이 가능 합니다.  VBA 엑셀 프로그램 파일, CREO 라이브러리 파일들을 공유 하여 사용해보십시요. 설계 생산성이 매우 혁신적으로 개선 됩니다.


>> 사용자 모드

4. Open
 -  "Creo File Name" 항목을 파일 이름을 선택 합니다. 모델을 open 합니다

5. ASS'Y
-  "Creo File Name" 항목을 파일 이름을 선택 합니다. 선택된 모델은 ASSY 모들에서 OPEN 됩니다

>>  참조

라이브러리 파일들은 폴더 단위로 관리 하고 공유 합니다.  라이브러리 폴더를 공유 하는 방법은 아래와 같습니다.

 

라이브러리 저장소로 FTP 서버 구축 하기

■ FTP? FTP란 파일 전송 프로토콜(File Transfer Protocol)의 약자입니다. 기본적으로 '프로토콜'은 전자기기가 서로 통신하는 데 필요한 절차나 규칙을 뜻합니다. FTP는 TCP/IP 네트워크(인터넷)상의 장치

tool-2020.tistory.com

부품을 재사용할 수 있을 때마다 설계, 프로토타이핑, 검증, 제조 및 재고 유지 비용에 대한 불필요한 비용을 $20,000 이상 줄일 수 있습니다.


>> 라이브러리 관리 프로그램 이점

라이브러리 파일은 구매품, 또는 자주 사용하는 모델입니다. 라이브러리 파일은 검증, 설계 시간을 감소 시키고, 설계 생산성을 향상 시킵니다. 대부분 라이브러리 파일은 한군데 모여있습니다. 하지만 이름으로 검색 하기 때문에 설계자의 기억력을 테스트(?) 합니다. 엑셀의 필터링 기능을 사용하여, 검색을 쉽게 하여 creo 파일을 조립 할수 있습니다.  

1. 모델 재사용 향상 (↑)
2. 부품 재사용 향상 (↑)
3. 지식 재사용 향상 (↑)

■ 어셈블 모드로 라이브러리 파일 불러오기 코드 

Option Explicit
Sub CreoFileassy()

Application.EnableEvents = False
On Error GoTo RunError

        Dim asynconn As New pfcls.CCpfcAsyncConnection
        Dim conn As pfcls.IpfcAsyncConnection
        Dim oSession As pfcls.IpfcBaseSession
        Dim oModel As IpfcModel
        Dim oSolid As IpfcSolid
        Dim oAssembly As IpfcAssembly
        Dim oAsmcomp As IpfcComponentFeat
        Dim oCreoFileName As String
        
        Set conn = asynconn.Connect("", "", ".", 5)
        Set oSession = conn.session
        Set oModel = oSession.CurrentModel
        
        Dim oCreateModelDescriptor As New CCpfcModelDescriptor
        Dim oModelDescriptor As IpfcModelDescriptor

        '// cells Selecte File Open
        oCreoFileName = Selection.Value
        Set oModelDescriptor = oCreateModelDescriptor.CreateFromFileName(oCreoFileName)
        Set oSolid = oSession.RetrieveModel(oModelDescriptor)  '// Session으로 모델 불러오기
        
        Set oAssembly = oModel
        Set oAsmcomp = oAssembly.AssembleComponent(oSolid, Nothing)
        oAsmcomp.RedefineThroughUI
        
        
        conn.Disconnect (2)
    
        'Cleanup
        Set asynconn = Nothing
        Set conn = Nothing
        Set oSession = Nothing
        Set oModel = 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

 

■  라이브러리 파일들 불러오기 코드 

라이브러리 파일은 일반 PART 파일과 페밀리 테이블 파일이 섞여 있습니다. 페밀리 테이블 파일은 인스턴스 파일만 사용 합니다. 아래 코드는 일반 파일과 페밀리 테이블 파일의 인스터스 파일을 표시 합니다.

어셈블 기능은 표시 하지 않습니다. 개발을 하지 않았습니다. 다음 버전에서 추가할 예정 입니다.

Option Explicit
Public asynconn As New pfcls.CCpfcAsyncConnection
Public conn As pfcls.IpfcAsyncConnection
Public oSession As pfcls.IpfcBaseSession
Public oModel As IpfcModel
Sub FileList()

    Application.EnableEvents = False
    On Error GoTo RunError
        
        '// Make an asynchronous connection with Creo
        Set conn = asynconn.Connect("", "", ".", 5)
        Set oSession = conn.Session
        
        '// Family Table's Parameter
        Dim generic As IpfcFamilyMember
        Dim FamilyTablerows As IpfcFamilyTableRows
        Dim FamilyTablerow As IpfcFamilyTableRow
        Dim InstName As String
        
        '// Work Folder Part File List
        Dim oCreoFIleList As Istringseq
        Set oCreoFIleList = oSession.ListFiles("*.prt", EpfcFILE_LIST_LATEST, Null)
             
        Dim oCreoFileName As String
        Dim oModelDescriptorCreate As New CCpfcModelDescriptor
        Dim oModelDescriptor As IpfcModelDescriptor
        Dim i, j, icnt, oCreoFileNameTrim, oCreoFileNamelength As Long
        
        Dim rng As Range
        icnt = 0
                
        If oCreoFIleList.Count > 0 Then
                      
            For i = 0 To oCreoFIleList.Count - 1
                               
                '// Creo File Name : "W" Remove
                oCreoFileName = oCreoFIleList.Item(i)
                oCreoFileNamelength = Len(oCreoFileName)
                oCreoFileNameTrim = InStrRev(oCreoFileName, "\")
                oCreoFileNameTrim = oCreoFileNamelength - oCreoFileNameTrim
                oCreoFileName = Right(oCreoFileName, oCreoFileNameTrim)
                
                Set oModelDescriptor = oModelDescriptorCreate.Create(EpfcMDL_PART, oCreoFileName, Null)
                                
                '//Retrieve the model into the oModel handle
                Set oModel = oSession.RetrieveModel(oModelDescriptor)
                
                '// Declare (make) the Model as a IpfcFamilyMember type object
                Set generic = oModel
                
                '// list the ROws of family table. If the part is not a generic, there will be 0 rows
                Set FamilyTablerows = generic.ListRows()
                
                    If FamilyTablerows.Count > 0 Then
                
                        '// Now, get each row and print the instance name. Once, each instance is obtained, perform required operations.
    
                        For j = 0 To FamilyTablerows.Count - 1
                
                            Set FamilyTablerow = FamilyTablerows.Item(j)
                            Cells(j + icnt + 8, "A") = j + icnt + 1
                            Cells(j + icnt + 8, "C") = FamilyTablerow.InstanceName & ".prt"
                                           
                        Next j
                        
                        '// 초기화
                        j = 0
                        
                    Else
                    
                            Cells(j + icnt + 8, "A") = j + icnt + 1
                            Cells(j + icnt + 8, "C") = oModel.Filename
                    
                    End If
                                
                    Set rng = Range("A8", Cells(rows.Count, "A").End(xlUp))
                    icnt = rng.Count

            Next i
            
        End If
  
        MsgBox "라이브러리 파일 이름을 표시 하였습니다", vbInformation, "www.idt21c.com"
        
        conn.Disconnect (2)
            
        '// Cleanup
        Set asynconn = Nothing
        Set conn = Nothing
        Set oSession = Nothing
        Set oModel = 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

 

>> instance Display

 

Family Table Part

하드 디스크에 저장된 Family Table Part의 Instance 이름을 표시 합니다 by PTC Sub Main2() ' ' This routine will open a Pro/ENGINEER file from your WorkingDirectory in a new window: ' Dim asynconn As New pfcls.CCpfcAsyncConnection Dim conn A

tool-2020.tistory.com

 

by lionkk@idt21c.com

 

 

'VBA For Creo' 카테고리의 다른 글

라이브러리 관리 프로그램 #2  (0) 2023.01.03
Family Table Part  (1) 2023.01.01
Model 파일 Assemble  (0) 2022.12.28
ToolBOX VBA 1.5 개발 작업 #4  (0) 2022.12.27
Feature ID 및 Feature 이름 검색 프로그램 # 3/3  (0) 2022.12.23