MACRO LIBRARY

Lesson 7.3 - create spike

Free public access. No account or subscription required.

Files

Lesson 7.3 - create spike

Code

Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swModeler As SldWorks.Modeler
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swModeler = swApp.GetModeler
    
    'Define cylinder
    Dim dblCylData(7) As Double
    dblCylData(0) = 0
    dblCylData(1) = 0
    dblCylData(2) = 0
    dblCylData(3) = 1
    dblCylData(4) = 0
    dblCylData(5) = 0
    dblCylData(6) = 0.005   'radius
    dblCylData(7) = 0.01    'extrude length
    
    'Create cylindrical temporary body
    Dim swCylBody As SldWorks.Body2
    Set swCylBody = swModeler.CreateBodyFromCyl(dblCylData)
    
    'Check body for faults
    Call CheckBody(swCylBody)
    
    'Display body
    swCylBody.Display3 swModel, RGB(255, 0, 0), swTempBodySelectOptionNone
    
    'Repeat steps for conical temporary body
    Dim dblConeData(8) As Double
    dblConeData(0) = dblCylData(7)
    dblConeData(1) = 0
    dblConeData(2) = 0
    dblConeData(3) = 1
    dblConeData(4) = 0
    dblConeData(5) = 0
    dblConeData(6) = dblCylData(6)  'base radius
    dblConeData(7) = 0              'top radius
    dblConeData(8) = 0.01           'extrude length
    
    Dim swConeBody As SldWorks.Body2
    Set swConeBody = swModeler.CreateBodyFromCone(dblConeData)
    Call CheckBody(swConeBody)
    swConeBody.Display3 swModel, RGB(255, 0, 0), swTempBodySelectOptionNone
    
    'Add bodies
    Dim vBodies As Variant
    Dim lngErrors As Long
    vBodies = swConeBody.Operations2(SWBODYADD, swCylBody, lngErrors)
    If lngErrors <> 0 Then
        Debug.Print "Boolean operation error: " & lngErrors & vbCrLf & "Ending."
        End
    End If
    
    'Turn into feature
    Dim swPart As SldWorks.PartDoc
    Set swPart = swModel
    swPart.CreateFeatureFromBody3 vBodies(0), False, 0
    
End Sub
    
Sub CheckBody(body As SldWorks.Body2)
    Dim swFaultEnt As SldWorks.FaultEntity
    Dim i As Integer
    Set swFaultEnt = body.Check3
    If swFaultEnt.Count <> 0 Then
        Debug.Print "Faults detected."
        For i = 0 To swFaultEnt.Count - 1
            Debug.Print "Error code: " & swFaultEnt.ErrorCode(i)
        Next i
        Debug.Print "Ending."
        End
    End If
End Sub