본문 바로가기
  • Welcome!
Creo Reference Room/Part

SECTION 단면들의 면적 구하기

by ToolBOX01 2022. 11. 9.
반응형

아래 그림과 모델의 SECTION 단면의 면적을 구해 봅니다.

 

section_surface.prt.1
0.12MB

Distance 값을 VBA 프로그램으로 변경 합니다. 시작 값은 "0" ~ "200' 사이 입니다. 간격은 "10"을 증가 합니다. 

■ VBA 프로그램 코딩 순서

1. session을 연결 합니다.
2. 모델에서 치수 이름 "DISTANCE" 와 값을 확인 합니다.
3. "DISTANCE" 값을 변경 합니다.
4. 모델에서 면적을 측정한 "MEASURE_AREA01"  이름을 검색 합니다
5. "ARE" 값을 검색 합니다

프로그램 코드

Option Explicit
Sub DimAreaMeasure()
 
 On Error GoTo RunError

      ' CurrentModel 연결
        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
               
        'Creo Dimension 개체 정의
        'IpfcModelItem 변수에 모델에 정의된 "DISTANCE" 개체 가져오기
        Dim oModelItemOwner As IpfcModelItemOwner: Set oModelItemOwner = model
        Dim oDIM01 As IpfcModelItem
        Set oDIM01 = oModelItemOwner.GetItemByName(EpfcModelItemType.EpfcITEM_DIMENSION, "DISTANCE")
        Dim oDim01value As IpfcBaseDimension: Set oDim01value = oDIM01

                      
        'Dimension 개체에서 이름 및 값 가져오는 변수 정의
        Dim oDimensionName As String
        Dim oDimensionValue As Double
        
        '모델의 "MEASURE_AREA01" Feature 개체의 변수 (변수 이름 : AREA) 정의
        Dim oModelItem As IpfcModelItem
        Set oModelItem = oModelItemOwner.GetItemByName(EpfcModelItemType.EpfcITEM_FEATURE, "MEASURE_AREA01")
          

       ' "MEASURE_AREA01" Feature 개체의에서 로컬 매개변수 개체  가져오기
        Dim oParameterOwner As IpfcParameterOwner: Set oParameterOwner = oModelItem
       

        ' 프로그램으로 치수 값 변경을 하려면 반드시 Config,pro 옵션을 추가 해야한다,
        '  "resolve_mode" 설정이 안되면 치수 값 변경이 불가능 하다
         Call session.SetConfigOption("regen_failure_handling", "resolve_mode")
        
        Dim i, k As Long: k = 1

        Dim RegenInstructions As New CCpfcRegenInstructions
        Dim Instrs As IpfcRegenInstructions: Set Instrs = RegenInstructions.Create(True, True, Nothing)
        Dim Solid As IpfcSolid: Set Solid = model
               
        For i = 0 To 200 Step 10
        
             oDim01value.DimValue = i
        
            Call Solid.Regenerate(Instrs)
            Call Solid.Regenerate(Instrs)    ' 관계식 값 변경을 위해 실행
            
            
            'Local Parameter Name : "AREA"
            Dim oParameter As IpfcParameter: Set oParameter = oParameterOwner.GetParam("AREA")
            Dim oBaseParameter As IpfcBaseParameter: Set oBaseParameter = oParameter
            Dim oParamValue As IpfcParamValue: Set oParamValue = oBaseParameter.Value
            
            k = k + 1
            Cells(k, "A") = k - 1
            Cells(k, "B") = i
            Cells(k, "C") = Format(oParamValue.DoubleValue, "0.0")
            
            
                         
            'Window Repaint
            Dim window As pfcls.IpfcWindow
            Set window = session.CurrentWindow
            window.Repaint

        Next i
        

        'CREO Config.pro 초기화
         Call session.SetConfigOption("regen_failure_handling", "no_resolve_mode")
         Call session.SetConfigOption("mass_property_calculate", "by_request")
     
        MsgBox "면적 측정을 완료 하였습니다", vbInformation, "www.idt21c.com"
        

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