Creo 모델 외곽 사이즈 계산 . . . 작업중
□ 외곽 사이즈(Outline)를 측정 필요성
설계 과정에서 외곽 사이즈(Outline)를 측정하는 것은 제품의 적합성, 제조 가능성, 효율성을 보장하기 위해 매우 중요한 역할을 합니다. 외곽 사이즈를 측정해야 하는 주요 이유는 다음과 같습니다:
1. 설계 제약 조건 충족
- 설계 시 제품은 특정 크기 또는 공간 내에서 작동하거나 조립되어야 합니다.
- 외곽 치수는 해당 설계가 주어진 공간 또는 장비에 적합한지 확인하는 데 필수적입니다.
예: 기계 내부의 부품이 인클로저에 맞아야 함.
예: 전자기기의 PCB 보드가 외부 케이스와 정확히 들어맞아야 함.
2. 제조 가능성 확인
- 제조 장비의 가공 가능 범위를 초과하지 않도록 보장하기 위해 외곽 사이즈를 측정합니다.
예: CNC 머신, 3D 프린터 또는 성형 기계의 최대 크기 한계를 초과하지 않아야 함. - 가공 재료의 크기를 초과하지 않도록 하기 위해 확인이 필요합니다.
예: 금속 판재나 원자재 블록 크기에 맞는지 확인.
3. 비용 및 자재 절감
- 부품의 외곽 크기를 정확히 측정하여 자재를 효율적으로 사용하고 낭비를 줄입니다.
예: 자재 절단 후 남는 잉여 부분을 최소화하기 위해. - 크기가 커질수록 제조 및 운송 비용이 증가하므로, 설계 단계에서 이를 최소화할 방법을 모색할 수 있습니다.
4. 규격 및 표준 준수
- 산업 표준이나 고객 요구사항에 따라 제품의 크기를 특정 규격에 맞춰야 합니다.
예: 항공우주, 자동차, 의료 기기 등의 산업은 엄격한 크기 및 무게 제한을 가짐. - 외곽 치수는 이러한 규격 준수를 보장하는 핵심 요소 중 하나.
5. 운송 및 보관 고려
- 제품이 운송 또는 보관 중 제한된 공간에 맞아야 하므로 외곽 크기를 미리 측정하고 최적화해야 합니다.
예: 물류 과정에서 팔레트 크기, 컨테이너 크기 등에 적합한지 확인. - 크기 최적화를 통해 운송비를 절감할 수 있음.
참고 자료 . . .
□ IpfcSolid.GeomOutline
기본 좌표계를 기준으로 모델의 모든 형상(데이텀 커브. 포인트 . . .등 포함)의 외곽 사이즈를 좌표계의 X/Y/Z 방향의 길이를 측정 합니다. 가로 * 세로 * 높이 값을 고정 하려면, 모델링 표준으로 정의 해야 합니다 (예지: X축 가로, Y축 세로, Z축 높이) 메인 프로그램은 1개의 SUB()와 1개의 Function을 호출 합니다
1. Sub CreoConnt01()
Option Explicit
Public asynconn As New pfcls.CCpfcAsyncConnection
Public conn As pfcls.IpfcAsyncConnection
Public BaseSession As pfcls.IpfcBaseSession
Public Model As pfcls.IpfcModel
Public Sub CreoConnt01()
'// connect creo model
Set conn = asynconn.Connect(Null, Null, Null, Null)
Set BaseSession = conn.Session
Set Model = BaseSession.CurrentModel
'// creo model connection check
If Model Is Nothing Then
MsgBox "There are No Active Creo Models", vbInformation, "korealionkk@gmail.com"
Exit Sub
End If
End Sub
2. Function CurrentOutline()
Public Function CurrentOutline() As Variant
Dim Solid As pfcls.IpfcSolid
Dim outline(2) As Double
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double, z1 As Double, z2 As Double
Set Solid = Model
' GeomOutline 값을 계산
x2 = Solid.GeomOutline.Item(1).Item(0)
x1 = Solid.GeomOutline.Item(0).Item(0)
y2 = Solid.GeomOutline.Item(1).Item(1)
y1 = Solid.GeomOutline.Item(0).Item(1)
z2 = Solid.GeomOutline.Item(1).Item(2)
z1 = Solid.GeomOutline.Item(0).Item(2)
outline(0) = Abs(x2 - x1)
outline(1) = Abs(y2 - y1)
outline(2) = Abs(z2 - z1)
' 결과 반환
CurrentOutline = outline
End Function
3. Sub modelsize01()
Option Explicit
Sub modelsize01()
On Error GoTo RunError
Application.EnableEvents = False
Dim myModelOutline As Variant
'// Module Name : CreoVBAStart
Call CreoVBAStart.CreoConnt01
myModelOutline = CurrentOutline.CurrentOutline()
MsgBox "Length in X direction : " & myModelOutline(0), vbInformation, "korealionkk@gmail.com"
MsgBox "Length in Y direction : " & myModelOutline(1), vbInformation, "korealionkk@gmail.com"
MsgBox "Length in Z direction : " & myModelOutline(2), vbInformation, "korealionkk@gmail.com"
conn.Disconnect (2)
'// Cleanup
Set asynconn = Nothing
Set conn = Nothing
Set BaseSession = Nothing
Set Model = Nothing
RunError:
If Err.Number <> 0 Then
MsgBox "Process Failed: An error occurred." & vbCrLf & _
"Error No: " & CStr(Err.Number) & vbCrLf & _
"Error Description: " & Err.Description & vbCrLf & _
"Error Source: " & Err.Source, vbCritical, "Error"
If Not conn Is Nothing Then
If conn.IsRunning Then
conn.Disconnect (2)
End If
End If
End If
End Sub
□ IpfcSolid.EvalOutline
Function EvalOutline(Trf As IpfcTransform3D [optional], ExcludeTypes As IpfcModelItemTypes [optional]) As IpfcOutline3D
- 기능: 솔리드(Solid) 객체의 외곽선을 계산합니다.
- 매개변수:
1) Trf (IpfcTransform3D, 선택적): 외곽선을 계산할 기준 좌표계에 대한 변환 행렬입니다.
2) ExcludeTypes (IpfcModelItemTypes, 선택적): 외곽선 계산에서 제외할 모델 항목 유형의 배열입니다.
제외할 수 있는 유형은 ITEM_COORD_SYS, ITEM_AXIS, ITEM_POINT입니다. - 반환값:
IpfcOutline3D 객체입니다. 이 객체는 솔리드의 경계를 정의하는 두 개의 점을 포함합니다.
이 함수는 지정된 좌표계 변환(Trf)과 제외할 항목 유형(ExcludeTypes)을 기반으로 솔리드 객체의 외곽선을 계산하고, 그 결과를 IpfcOutline3D 객체로 반환합니다.
IpfcTransform3D: 3D 변환을 나타내는 인터페이스입니다. 좌표계 변환, 회전, 이동 등을 표현할 수 있습니다.
아래 코드는 정상적으로 값을 가져 오지 못합니다. 모델이 +/- 영역에 있어야 값을 정확히 가져 옵니다.
Sub modelsize02()
On Error GoTo RunError
Application.EnableEvents = False
Dim myModelOutline As Variant
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("modelsize")
'// Module Name : CreoVBAStart
Call CreoVBAStart.CreoConnt01
Dim solid As IpfcSolid
Dim outline3d As IpfcOutline3D
Dim excludeTypes As IpfcModelItemTypes
Dim Transform3D As IpfcTransform3D
Dim Point3D As IpfcPoint3D
Dim boundingBox(5) As Double
Dim targetValue As Double
Set solid = Model
' Transform3D 초기화
Set Transform3D = Nothing
Set excludeTypes = New CpfcModelItemTypes
excludeTypes.Append (EpfcModelItemType.EpfcITEM_AXIS)
excludeTypes.Append (EpfcModelItemType.EpfcITEM_COORD_SYS)
Set outline3d = solid.EvalOutline(Transform3D, excludeTypes)
Dim i, j, k As Integer
k = 0
For i = 0 To 1
Set Point3D = outline3d.Item(i)
For j = 0 To 2
k = i * 3 + j
boundingBox(k) = Point3D.Item(j)
Next j
Next i
targetValue = 0.5937171043591
ws.Cells(6, "B") = Model.fileName
' 배열 요소 순회하며 값 변경
For i = 0 To 5
If boundingBox(i) > 0 Then
boundingBox(i) = Round(boundingBox(i) - targetValue, 4)
Else
boundingBox(i) = Round(boundingBox(i) + targetValue, 4)
End If
Next i
ws.Cells(8, "A") = Abs(boundingBox(3) - boundingBox(0))
ws.Cells(8, "B") = Abs(boundingBox(4) - boundingBox(1))
ws.Cells(8, "C") = Abs(boundingBox(5) - boundingBox(2))
conn.Disconnect (2)
'// Cleanup
Set asynconn = Nothing
Set conn = Nothing
Set BaseSession = Nothing
Set Model = Nothing
RunError:
If Err.Number <> 0 Then
MsgBox "Process Failed: An error occurred." & vbCrLf & _
"Error No: " & CStr(Err.Number) & vbCrLf & _
"Error Description: " & Err.Description & vbCrLf & _
"Error Source: " & Err.Source, vbCritical, "Error"
If Not conn Is Nothing Then
If conn.IsRunning Then
conn.Disconnect (2)
End If
End If
End If
End Sub
Sub deletecaell01()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("modelsize")
ws.Range("B6:C6").ClearContents
ws.Rows("8:" & ws.Rows.Count).ClearContents
End Sub
참고
외곽 사이즈 측정은 1개의 파일만 대상으로 사용하지 않습니다. 수많은 Creo 파일을 자동으로 외곽 사이즈 측정을 해야 합니다. 이것을 구현 하기 위해서는 데이터베이스가 요구 됩니다.
데이터베이스(DB)는 여러 사람이 공유하여 사용할 수 있도록 체계화하여 통합, 관리하는 데이터의 집합입니다.
데이터베이스는 데이터를 쉽게 액세스하고 관리, 수정, 업데이트, 제어, 구성할 수 있도록, 일련의
테이블에서 행과 열로 모델링됩니다.
데이터베이스의 특징은 다음과 같습니다.
1.실시간 접근: 사용자의 데이터 요구에 실시간으로 응답합니다.
2.계속 변화: 데이터의 계속적인 삽입, 삭제, 수정을 통해 현재의 정확한 데이터를 유지합니다.
3.동시 공유: 서로 다른 데이터의 동시 사용 뿐만 아니라 같은 데이터의 동시 사용도 지원합니다.
외곽 사이즈 측정은 단순히 크기를 확인하는 작업이 아니라, 제품이 설계 의도와 제약 조건을 충족하도록 보장하는 중요한 과정입니다. 이를 통해 설계 오류를 예방하고, 제조 공정의 효율성을 높이며, 최종적으로 제품 품질을 향상시킬 수 있습니다.
by korealionkk@gmail.com