모델이 가지고 있는 치수 값을 불러오고, 사용자는 엑셀에서 치수 값을 변경 합니다.
■ "치수 값 불러오기" 버튼
- 모델에서 치수 값을 불러옵니다
■ "치수 변경" 버튼
- 엑셀에 입력한 치수 값을 모델에 반영 합니다.
>> 치수 변경 코드
Option Explicit
Sub Main()
Application.EnableEvents = False
On Error GoTo RunError
Dim asynconn As New pfcls.CCpfcAsyncConnection
Dim conn As pfcls.IpfcAsyncConnection: Set conn = asynconn.Connect("", "", ".", 5)
Dim oSession As pfcls.IpfcBaseSession: Set oSession = conn.Session
Dim oModel As IpfcModel: Set oModel = oSession.CurrentModel
Dim oSolid As IpfcSolid: Set oSolid = oModel
'// 활성화된 모델의 폴더 이름과 모델 이름을 표시
'// Cells(1, "B") = oSession.GetCurrentDirectory
'// Cells(2, "B") = oModel.Filename
'// 엑셀에 정의 되어 있는 치수 이름의 값을 가지고 오기
Dim Modelowner As IpfcModelItemOwner: Set Modelowner = oSolid
Dim oBaseDimension As IpfcBaseDimension
Dim oDimName As String
Dim i As Integer
Dim oDimNameCount As Integer
oDimNameCount = Cells(4, Columns.Count).End(xlToLeft).Column
'// SET Regenerate
Dim RegenInstructions As New CCpfcRegenInstructions
Dim oInstrs As IpfcRegenInstructions
Set oInstrs = RegenInstructions.Create(False, False, Nothing)
For i = 0 To oDimNameCount - 1
oDimName = Cells(4, i + 1)
Set oBaseDimension = Modelowner.GetItemByName(EpfcModelItemType.EpfcITEM_DIMENSION, oDimName)
oBaseDimension.DimValue = Cells(5, i + 1)
'// Regenerate 실행
Call oSolid.Regenerate(oInstrs)
Next i
'// Window Repaint
Dim oWindow As pfcls.IpfcWindow
Set oWindow = oSession.CurrentWindow
oWindow.Repaint
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
모델의 치수 이름은 추가 될수 있습니다. 아래 코드를 이용하여 "4 열"에 치수 이름을 추가 할수 있습니다
아래 코드는 4열의 치수 이름 개수를 반환 받는 코드 입니다
Dim oDimNameCount As Integer
oDimNameCount = Cells(4, Columns.Count).End(xlToLeft).Column
VBA는 Cell로 시작해서 Cell로 끝납니다. 그만큰 중요합니다.
cell에 입력된 값을 모델에 전달 합니다
oDimName = Cells(4, i + 1)
Set oBaseDimension = Modelowner.GetItemByName(EpfcModelItemType.EpfcITEM_DIMENSION, oDimName)
oBaseDimension.DimValue = Cells(5, i + 1)
모델의 치수 값을 반영 합니다 (모델을 변경 합니다 - Regenerate)
'// SET Regenerate
Dim RegenInstructions As New CCpfcRegenInstructions
Dim oInstrs As IpfcRegenInstructions
Set oInstrs = RegenInstructions.Create(False, False, Nothing)
'// Regenerate 실행
Call oSolid.Regenerate(oInstrs)
Creo 화면을 업데이트 합니다'// Window Repaint
Dim oWindow As pfcls.IpfcWindow
Set oWindow = oSession.CurrentWindow
oWindow.Repaint
위 기능을 활용하여 Template 모델을 만들어 보십시요. 또한 Form 기능을 이용하여, 입력을 편리하게 할 수 있습니다.
>> Template 모델 개발 화면 예시
>> Reference
'VBA For Creo' 카테고리의 다른 글
IpfcViewOwner (0) | 2023.01.16 |
---|---|
IpfcWindow (0) | 2023.01.16 |
모델이 가지고 있는 치수 값을 가지고 오기 (0) | 2023.01.14 |
Creo VBA 시작 코드 (0) | 2023.01.14 |
Coordinate Systems and Transformations (0) | 2023.01.13 |