Files
250928_esp32_spi_sdcard_ads…/esp32 3d modeling vba
2025-10-07 17:44:32 +00:00

286 lines
11 KiB
Plaintext

Sub Main()
' ESP32-WROOM-32D DevKitC V4 3D 모델 생성
' Autodesk Inventor 2025 호환
Dim oApp As Inventor.Application
Set oApp = ThisApplication
' 새 파트 문서 생성
Dim oPartDoc As PartDocument
Set oPartDoc = oApp.Documents.Add(kPartDocumentObject, , True)
Dim oCompDef As PartComponentDefinition
Set oCompDef = oPartDoc.ComponentDefinition
Dim oTG As TransientGeometry
Set oTG = oApp.TransientGeometry
' 단위: cm
Dim cm As Double
cm = 1
Dim mm As Double
mm = 0.1
' ===== 치수 정의 =====
Dim boardLength As Double: boardLength = 5.53 * cm
Dim boardWidth As Double: boardWidth = 2.8 * cm
Dim boardThickness As Double: boardThickness = 1.6 * mm
Dim moduleLength As Double: moduleLength = 2.55 * cm
Dim moduleWidth As Double: moduleWidth = 1.8 * cm
Dim moduleHeight As Double: moduleHeight = 3.1 * mm
Dim shieldLength As Double: shieldLength = 1.8 * cm
Dim shieldWidth As Double: shieldWidth = 1.6 * cm
Dim shieldHeight As Double: shieldHeight = 2.0 * mm
Dim usbWidth As Double: usbWidth = 7.5 * mm
Dim usbLength As Double: usbLength = 5.5 * mm
Dim usbHeight As Double: usbHeight = 2.6 * mm
Dim buttonSize As Double: buttonSize = 3.0 * mm
Dim buttonHeight As Double: buttonHeight = 1.5 * mm
Dim pinLength As Double: pinLength = 1.15 * cm
Dim pinWidth As Double: pinWidth = 0.64 * mm
Dim pinSpacing As Double: pinSpacing = 2.54 * mm
Dim numPinsPerSide As Integer: numPinsPerSide = 19
' ===== 1. PCB 보드 생성 =====
Dim oSketch1 As PlanarSketch
Set oSketch1 = oCompDef.Sketches.Add(oCompDef.WorkPlanes.Item(3)) ' XY 평면
' PCB 사각형 그리기 (oRect 변수 제거)
Call oSketch1.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(0, 0), _
oTG.CreatePoint2d(boardLength, boardWidth))
' PCB 돌출
Dim oProfile1 As Profile
Set oProfile1 = oSketch1.Profiles.AddForSolid
Dim oExtrude1 As ExtrudeFeature
Set oExtrude1 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfile1, boardThickness, kPositiveExtentDirection, kNewBodyOperation)
' PCB 색상 설정 (초록색)
On Error Resume Next
oExtrude1.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Green - Matte")
If Err.Number <> 0 Then
oExtrude1.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Green")
End If
On Error GoTo 0
' ===== 2. ESP32-WROOM-32D 모듈 =====
Dim oSketch2 As PlanarSketch
Dim oWorkPlane1 As WorkPlane
Set oWorkPlane1 = oCompDef.WorkPlanes.AddByPlaneAndOffset( _
oCompDef.WorkPlanes.Item(3), boardThickness)
Set oSketch2 = oCompDef.Sketches.Add(oWorkPlane1)
Dim moduleX As Double: moduleX = 1.5 * cm
Dim moduleY As Double: moduleY = (boardWidth - moduleWidth) / 2
Call oSketch2.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(moduleX, moduleY), _
oTG.CreatePoint2d(moduleX + moduleLength, moduleY + moduleWidth))
Dim oProfile2 As Profile
Set oProfile2 = oSketch2.Profiles.AddForSolid
Dim oExtrude2 As ExtrudeFeature
Set oExtrude2 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfile2, moduleHeight, kPositiveExtentDirection, kJoinOperation)
' 모듈 색상 (은색)
On Error Resume Next
oExtrude2.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Aluminum - Satin")
If Err.Number <> 0 Then
oExtrude2.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Aluminum")
End If
On Error GoTo 0
' ===== 3. 금속 실드 캔 =====
Dim oSketch3 As PlanarSketch
Dim oWorkPlane2 As WorkPlane
Set oWorkPlane2 = oCompDef.WorkPlanes.AddByPlaneAndOffset( _
oWorkPlane1, moduleHeight)
Set oSketch3 = oCompDef.Sketches.Add(oWorkPlane2)
Dim shieldX As Double: shieldX = 1.75 * cm
Dim shieldY As Double: shieldY = (boardWidth - shieldWidth) / 2
Call oSketch3.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(shieldX, shieldY), _
oTG.CreatePoint2d(shieldX + shieldLength, shieldY + shieldWidth))
Dim oProfile3 As Profile
Set oProfile3 = oSketch3.Profiles.AddForSolid
Dim oExtrude3 As ExtrudeFeature
Set oExtrude3 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfile3, shieldHeight, kPositiveExtentDirection, kJoinOperation)
' 실드 색상 (회색 금속)
On Error Resume Next
oExtrude3.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Steel - Satin")
If Err.Number <> 0 Then
oExtrude3.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Steel")
End If
On Error GoTo 0
' ===== 4. PCB 안테나 =====
Dim oSketch4 As PlanarSketch
Set oSketch4 = oCompDef.Sketches.Add(oWorkPlane1)
Dim antennaX As Double: antennaX = 4.05 * cm
Dim antennaY As Double: antennaY = (boardWidth - 1.2 * cm) / 2
Call oSketch4.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(antennaX, antennaY), _
oTG.CreatePoint2d(antennaX + 1.3 * cm, antennaY + 1.2 * cm))
Dim oProfile4 As Profile
Set oProfile4 = oSketch4.Profiles.AddForSolid
Dim oExtrude4 As ExtrudeFeature
Set oExtrude4 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfile4, moduleHeight, kPositiveExtentDirection, kJoinOperation)
' ===== 5. USB 커넥터 =====
Dim oSketch5 As PlanarSketch
Set oSketch5 = oCompDef.Sketches.Add(oWorkPlane1)
Dim usbY As Double: usbY = (boardWidth - usbWidth) / 2
Call oSketch5.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(-0.2 * mm, usbY), _
oTG.CreatePoint2d(usbLength - 0.2 * mm, usbY + usbWidth))
Dim oProfile5 As Profile
Set oProfile5 = oSketch5.Profiles.AddForSolid
Dim oExtrude5 As ExtrudeFeature
Set oExtrude5 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfile5, usbHeight, kPositiveExtentDirection, kJoinOperation)
' USB 색상 (은색)
On Error Resume Next
oExtrude5.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Chrome")
If Err.Number <> 0 Then
oExtrude5.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Steel")
End If
On Error GoTo 0
' ===== 6. BOOT 버튼 =====
Dim oSketch6 As PlanarSketch
Set oSketch6 = oCompDef.Sketches.Add(oWorkPlane1)
Call oSketch6.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(0.5 * cm, 0.35 * cm), _
oTG.CreatePoint2d(0.5 * cm + buttonSize, 0.35 * cm + buttonSize))
Dim oProfile6 As Profile
Set oProfile6 = oSketch6.Profiles.AddForSolid
Dim oExtrude6 As ExtrudeFeature
Set oExtrude6 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfile6, buttonHeight, kPositiveExtentDirection, kJoinOperation)
' 버튼 색상 (검정)
On Error Resume Next
oExtrude6.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Black")
On Error GoTo 0
' ===== 7. EN 버튼 =====
Dim oSketch7 As PlanarSketch
Set oSketch7 = oCompDef.Sketches.Add(oWorkPlane1)
Call oSketch7.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(0.5 * cm, boardWidth - 0.65 * cm), _
oTG.CreatePoint2d(0.5 * cm + buttonSize, boardWidth - 0.65 * cm + buttonSize))
Dim oProfile7 As Profile
Set oProfile7 = oSketch7.Profiles.AddForSolid
Dim oExtrude7 As ExtrudeFeature
Set oExtrude7 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfile7, buttonHeight, kPositiveExtentDirection, kJoinOperation)
On Error Resume Next
oExtrude7.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Black")
On Error GoTo 0
' ===== 8. 왼쪽 핀 헤더 (19개) =====
Dim i As Integer
For i = 0 To numPinsPerSide - 1
Dim oSketchPin1 As PlanarSketch
Set oSketchPin1 = oCompDef.Sketches.Add(oCompDef.WorkPlanes.Item(3))
Dim pinX As Double
pinX = boardLength - 0.3 * cm - (i * pinSpacing)
Call oSketchPin1.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(pinX, 0.254 * cm), _
oTG.CreatePoint2d(pinX + pinWidth, 0.254 * cm + pinWidth))
Dim oProfilePin1 As Profile
Set oProfilePin1 = oSketchPin1.Profiles.AddForSolid
Dim oExtrudePin1 As ExtrudeFeature
Set oExtrudePin1 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfilePin1, pinLength, kNegativeExtentDirection, kJoinOperation)
' 핀 색상 (금색)
On Error Resume Next
oExtrudePin1.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Gold - Polished")
If Err.Number <> 0 Then
oExtrudePin1.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Brass - Polished")
End If
On Error GoTo 0
Next i
' ===== 9. 오른쪽 핀 헤더 (19개) =====
For i = 0 To numPinsPerSide - 1
Dim oSketchPin2 As PlanarSketch
Set oSketchPin2 = oCompDef.Sketches.Add(oCompDef.WorkPlanes.Item(3))
pinX = boardLength - 0.3 * cm - (i * pinSpacing)
Call oSketchPin2.SketchLines.AddAsTwoPointRectangle( _
oTG.CreatePoint2d(pinX, boardWidth - 0.254 * cm - pinWidth), _
oTG.CreatePoint2d(pinX + pinWidth, boardWidth - 0.254 * cm))
Dim oProfilePin2 As Profile
Set oProfilePin2 = oSketchPin2.Profiles.AddForSolid
Dim oExtrudePin2 As ExtrudeFeature
Set oExtrudePin2 = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfilePin2, pinLength, kNegativeExtentDirection, kJoinOperation)
' 핀 색상 (금색)
On Error Resume Next
oExtrudePin2.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Gold - Polished")
If Err.Number <> 0 Then
oExtrudePin2.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Brass - Polished")
End If
On Error GoTo 0
Next i
' ===== 10. LED =====
Dim oSketchLED As PlanarSketch
Set oSketchLED = oCompDef.Sketches.Add(oWorkPlane1)
Dim oCircle As SketchCircle
Set oCircle = oSketchLED.SketchCircles.AddByCenterRadius( _
oTG.CreatePoint2d(1.0 * cm, 0.15 * cm), 1.0 * mm)
Dim oProfileLED As Profile
Set oProfileLED = oSketchLED.Profiles.AddForSolid
Dim oExtrudeLED As ExtrudeFeature
Set oExtrudeLED = oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent( _
oProfileLED, 1.0 * mm, kPositiveExtentDirection, kJoinOperation)
' LED 색상 (빨강)
On Error Resume Next
oExtrudeLED.SurfaceBodies.Item(1).Appearance = oPartDoc.AppearanceAssets.Item("Red")
On Error GoTo 0
' 뷰 업데이트
oApp.ActiveView.Fit
MsgBox "ESP32-WROOM-32D DevKitC V4 모델이 생성되었습니다!" & vbCrLf & _
"총 피처: PCB + 모듈 + 실드 + 안테나 + USB + 버튼 2개 + 핀 38개 + LED", vbInformation
End Sub