Part를 구성 하는 Feature에 오류가 생기면, 어셈블을 Save As 하면, 오류 때문에 "재사용"이 불가능 합니다.
필요에 의해 최상위 어셈블 파일만 새롭게 만들어야 합니다. (Part를 변경하지 않고 어셈블리만 복사본 저장)
수백, 수천개의 부품이 "재사용" 불가 상태 입니다. 수백개의 파일을 수정 할수 없습니다.
다음과 같은 방법을 사용 합니다. >> 편법을 사용 합니다.
1) 최상위 어셈블리를 엽니다.
2) 삽입 화살표를 트리의 맨 위로 이동합니다(효과적으로 모든 항목을 억제 합니다)
3) 이제 어셈블리 사본을 새 이름으로 저장합니다.
4) 기존 어셈블리를 닫고 지웁니다.
5) 새 어셈블리를 열고 삽입 화살표를 취소합니다. 어셈블 이름만 변경된 파일을 만들수 있습니다.
A, B plate에 체결을 위한 구멍을 만들때 "B"는 "A" 구멍을 스케치 참조로 사용 합니다. 스케치 참조한 "A" Part 파일이 Session에 없으면 오류 입니다. 수백, 수천개의 Part 파일에 참조 오류가 없는지 자동으로 알고 싶습니다.
"B" Part는 시간이 지남에 따라 "B-1", "B-2" . . . 등으로 파생 모델이 생성 됩니다. 불필요한 "참조"가 있는지 검색 하는 기능이 가능 한지 테스하는 코드 입니다
사람들이 가장 빠른 시간 또는 가장 적은 수의 Feature로 모델을 만들고자 합니다. 이같은 잘못된 목표로 모델을 만들면, 강력하고 유연하지 않은 파라메트릭 CAD 모델링으로 재 활용이 어려운 모델을 만들게 됩니다. 모델에 이러한 품질이 부족하면 재사용이 불가능하지는 않더라도 엉성하고 어려울 것입니다. 초기 설계 단계에서 우리는 요구 사항과 모델이 미래에 어떻게 변할 것으로 예상 할 수 있습니다 그러나 시간이 지나 갈수록 모델을 간단하게 변경해도 재생성 실패를 겪을 것입니다. Circular References가 표시되고 어느 시점에서 지저분한 참조가 너무 다루기 힘들어지고, 모델을 다시 만들어야 한다는 것을 느끼게 됩니다 |
■ 어셈블에 포함된 어셈블 및 Part 파일 모두 표시
Sub PartDependency_check()
On Error GoTo RunError
Dim asynconn As New pfcls.CCpfcAsyncConnection
Dim conn As pfcls.IpfcAsyncConnection: Set conn = asynconn.Connect("", "", ".", 5)
Dim oBaseSession As pfcls.IpfcBaseSession: Set oBaseSession = conn.session
Dim oModel As pfcls.IpfcModel: Set oModel = oBaseSession.CurrentModel
Dim oDependencies As IpfcDependencies: Set oDependencies = oModel.ListDependencies
Dim i As Long
Dim oDependency As IpfcDependency
Dim oModelDescriptor As IpfcModelDescriptor
For i = 0 To oDependencies.Count - 1
Set oDependency = oDependencies.Item(i)
Set oModelDescriptor = oDependency.DepModel
Cells(i + 2, "D") = oModelDescriptor.GetFileName
Next i
'Disconnect with Creo
conn.Disconnect (2)
'Cleanup
Set asynconn = Nothing
Set conn = Nothing
Set oBaseSession = 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 파일 과 어셈블 파일에서 사용 결과가 다릅니다. Part 모드에서는 모델이 종속 하는 "참조 모델들"을 표시 합니다. VBA 코드를 이용하여 오류가 발생한 Feature를 검색 하는 기능을 테스트 합니다. - 어떤 모델이 Session에 없는지 검색 할수 없습니다.
- 모델 참조 뷰
아래 코드는 Part 파일에서 참조하는 모델중, Session에 없으면 파일 이름이 null 이 됩니다. 이 경우 만 엑셀 파일에 표시 됩니다
Option Explicit
Sub Failchek()
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") = oModel.Filename
Dim oModelDependencies As IpfcDependencies
Set oModelDependencies = oModel.ListDependencies
Dim oModelDependency As IpfcDependency
Dim oModelDescriptor As IpfcModelDescriptor
Dim oSessionFileName As String
Dim oCreateModelDescriptor As New CCpfcModelDescriptor
Dim oSessioncheck As IpfcModel
Dim iCnt As Long
If oModelDependencies.Count > 0 Then
For iCnt = 0 To oModelDependencies.Count - 1
Set oModelDependency = oModelDependencies.Item(iCnt)
Set oModelDescriptor = oModelDependency.DepModel
oSessionFileName = oModelDescriptor.GetFileName
Set oModelDescriptor = oCreateModelDescriptor.CreateFromFileName(oSessionFileName)
Set oSessioncheck = oSession.GetModelFromDescr(oModelDescriptor) '// Retrieve model name from session
'// Referance Model Fail Check
If oSessioncheck Is Nothing Then
Cells(iCnt + 4, "A") = iCnt + 1
Cells(iCnt + 4, "B") = oSessionFileName
Cells(iCnt + 4, "c") = "Session has no files"
End If
Next iCnt
End If
'// Feature Fail Check
Dim oFailedFeatures As IpfcFeatures
Set oFailedFeatures = oSolid.ListFailedFeatures
Dim oFailedFeature As IpfcFeature
Dim i As Long
If oFailedFeatures.Count > 0 Then
For i = 0 To oFailedFeatures.Count - 1
Cells(i + 4 + oModelDependencies.Count, "E") = i + 1 + oModelDependencies.Count
Set oFailedFeature = oFailedFeatures.Item(i)
Cells(i + 4 + oModelDependencies.Count, "F") = oFailedFeature.Number
Cells(i + 4 + oModelDependencies.Count, "G") = "regenerate Failed"
Next i
End If
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
'VBA For Creo' 카테고리의 다른 글
Feature ID 및 Feature 이름 검색 프로그램 # 3/3 (0) | 2022.12.23 |
---|---|
Parent-Child Relationships between the VB API Objects (0) | 2022.12.23 |
regenerate Failed Feature / Component Check (0) | 2022.12.19 |
Regenerate 코드 (0) | 2022.12.18 |
Create Creo Parameter (0) | 2022.12.16 |