반응형
아래 그림과 모델의 SECTION 단면의 면적을 구해 봅니다.
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
'Creo Reference Room > Part' 카테고리의 다른 글
멀티 바디 사용 하기 #1 (0) | 2023.01.29 |
---|---|
Spur 기어 #1 (0) | 2023.01.22 |
모델에 대한 참조 드로잉을 찾는 방법은 무엇입니까? (0) | 2022.10.20 |
Sheetmetal - Bend 각도 값을 변경 하기 (0) | 2022.10.13 |
전개 전/ 후를 하나의 파일로 관리 하기 (0) | 2022.08.24 |