Hide Table of Contents

Analyze Part Example (VBA)

This example shows how to create a static analysis of a part.

NOTE: To get persistent reference identifiers (PIDs) for model selections, you can use pidcollector.exe or IModelDocExtension::GetPersistReference3.

'---------------------------------------------------------------------------
' Preconditions:
' 1. Add the SolidWorks Simulation as an add-in
'    (in SolidWorks, click Tools > Add-ins > SolidWorks Simulation).
' 2. Add the SolidWorks Simulation type library as a reference
'    (in the IDE, click Tools > References > SolidWorks
'    Simulation version type library).
' 3. Modify the path to solidworks materials.sldmat as needed.
' 4. Open the Immediate window.
' 5. Run the macro.
'
' Postconditions:
' 1.  Adds a default static study results plot.
' 2.  Creates a study called Static-solid.
' 3.  Applies material to the model.
' 4.  Applies restraints and pressure to the selected faces.
' 5.  Creates a mesh.
' 6.  Runs the analysis.
' 7.  Prints strain and stress results to the Immediate window.
' 8.  Hides fixture and force symbols. Examine the graphics area
'     to verify.
' 9.  Press F5 to continue.
' 10. Shows fixture and force symbols. Examine the graphics area
'     to verify.
' 11. Inspect the static study results plot.
'
' NOTE: Because the part document is used elsewhere, do not
' save any changes when closing it.
'-----------------------------------------------------------------------------

Option Explicit
Sub main()
   Dim SwApp As SldWorks.SldWorks
   Dim COSMOSWORKS As Object
   Dim CWObject As CosmosWorksLib.CwAddincallback
   Dim ActDoc As CosmosWorksLib.CWModelDoc
   Dim StudyMngr As CosmosWorksLib.CWStudyManager
   Dim Study As CosmosWorksLib.CWStudy
   Dim SolidMgr As CosmosWorksLib.CWSolidManager
   Dim SolidComponent As CosmosWorksLib.CWSolidComponent
   Dim SolidBody As CosmosWorksLib.CWSolidBody
   Dim CwMesh As CosmosWorksLib.CwMesh
   Dim CWResult As CosmosWorksLib.CWResults
   Dim Part As SldWorks.ModelDoc2
   Dim LBCMgr As CosmosWorksLib.CWLoadsAndRestraintsManager
   Dim CWPressure As CosmosWorksLib.CWPressure
   Dim CWRes1 As CosmosWorksLib.CWRestraint
   Dim pointer1 As Object, pointer2 As Object, pointer3 As Object
   Dim CWMat As CosmosWorksLib.CWMaterial
   Dim var1 As Variant, var2 As Variant, var3 As Variant
   Dim varArray1 As Variant
   Dim varArray2 As Variant
   Dim stress As Variant
   Dim bApp As Boolean
   Dim selection1 As String
   Dim selection2 As String
   Dim selection3 As String
   Dim longstatus As Long, longwarnings As Long
   Dim errCode As Long
   Dim NSource As Long
   Dim el As Double, tl As Double
    ' Connect to SolidWorks
    If SwApp Is Nothing Then Set SwApp = Application.SldWorks
    ' Open SolidWorks part document
    Set Part = SwApp.OpenDoc6("C:\Program Files\SolidWorks Corp\SolidWorks\Simulation\Examples\Tutor1.SLDPRT ", swDocPART, 1, "", longstatus, longwarnings)
    If Part Is Nothing Then ErrorMsg SwApp, "Failed to open C:\Program Files\SolidWorks Corp\SolidWorks\Simulation\Examples\Tutor1.SLDPRT.", True
    'Get SolidWorks Simulation object
    Set CWObject = SwApp.GetAddInObject("SldWorks.Simulation")
    If CWObject Is Nothing Then ErrorMsg SwApp, "CWObject object not found.", True
    Set COSMOSWORKS = CWObject.COSMOSWORKS
    If COSMOSWORKS Is Nothing Then ErrorMsg SwApp, "CWObject not found.", True

    ' Get active document
    Set ActDoc = COSMOSWORKS.ActiveDoc()
    If ActDoc Is Nothing Then ErrorMsg SwApp, "No active document.", True

    ' Add default static study results plot
    errCode = ActDoc.AddDefaultStaticStudyPlot(swsStaticResultElementalStrain, swsStaticElementalStrain_ENERGY)

    ' Create new static study
    Set StudyMngr = ActDoc.StudyManager()
    If StudyMngr Is Nothing Then ErrorMsg SwApp, "StudyMngr object not there.", True
    Set Study = StudyMngr.CreateNewStudy3("Static_solid", swsAnalysisStudyTypeStatic, swsMeshTypeSolid, errCode)
    If Study Is Nothing Then ErrorMsg SwApp, "Study not created.", True
    ' Set material from the SolidWorks material library
    Set SolidMgr = Study.SolidManager
    If SolidMgr Is Nothing Then ErrorMsg SwApp, "SolidMgr object not there.", True
    Set SolidComponent = SolidMgr.GetComponentAt(0, errCode)
    If errCode <> 0 Then ErrorMsg SwApp, "No solid component.", True
    Set SolidBody = SolidComponent.GetSolidBodyAt(0, errCode)
    If errCode <> 0 Then ErrorMsg SwApp, "No solid body.", True
    bApp = SolidBody.SetLibraryMaterial("c:\Program Files\SolidWorks Corp\SolidWorks\lang\english\sldmaterials\solidworks materials.sldmat", "Ductile Iron (SN)")
    If bApp = False Then ErrorMsg SwApp, "No material applied.", True
    Set CWMat = SolidBody.GetDefaultMaterial
    NSource = CWMat.Source
   ' Get the PIDs of the faces
   ' First two selections are the faces for restraints
   ' Third selection is the face where pressure is applied
    selection1 = "216,14,0,0,3,0,0,0,255,254,255,0,0,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,21,0,109,111,76,80,97,116,116,101,114,110,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,6,84,0,117,0,116,0,111,0,114,0,49,0,123,228,186,50,11,128,255,254,255,62,67,0,58,0,92,0,80,0,114,0,111,0,103,0,114,0,97,0,109,0,32,0,70,0,105,0,108,0,101,0,115,0,92,0,83,0,111,0,108,0,105,0,100,0,87,0,111,0,114,0,107,0,115,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,87,0,111,0,114,0,107,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,92,0,84,0,117,0,116,0,111,0,114,0,49,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,97,23,28,65,0,0,0,0"
    selection1 = selection1 & ",2,0,1,0,0,0,0,0,0,0,1,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,17,0,0,0,156,231,186,50,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,14,0,0,0,88,231,186,50,3,0,0,0,1,0,0,0,0,0,0,0,255,255,1,0,20,0,109,111,69,110,100,70,97,99,101,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,6,0,0,0,211,228,186,50,1,0,0,0,255,255,255,255,0,0,17,128,0,0,5,128,8,0,6,0,0,0,211,228,186,50,0,0,0,0,255,255,255,255,0,0,0,0,0,0"
    selection1 = selection1 & ",Type=1"
    StringtoArray selection1, var1
    Set pointer1 = Part.Extension.GetObjectByPersistReference3((var1), longstatus)
    
    selection2 = "216,14,0,0,3,0,0,0,255,254,255,0,0,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,5,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,6,84,0,117,0,116,0,111,0,114,0,49,0,123,228,186,50,11,128,255,254,255,62,67,0,58,0,92,0,80,0,114,0,111,0,103,0,114,0,97,0,109,0,32,0,70,0,105,0,108,0,101,0,115,0,92,0,83,0,111,0,108,0,105,0,100,0,87,0,111,0,114,0,107,0,115,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,87,0,111,0,114,0,107,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,92,0,84,0,117,0,116,0,111,0,114,0,49,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,97,23,28,"
    selection2 = selection2 & "65,0,0,0,0,2,0,1,0,0,0,0,0,0,0,1,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,14,0,0,0,88,231,186,50,3,0,0,0,255,255,1,0,20,0,109,111,69,110,100,70,97,99,101,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,6,0,0,0,211,228,186,50,1,0,0,0,255,255,255,255,0,0,14,128,0,0,5,128,8,0,6,0,0,0,211,228,186,50,0,0,0,0,255,255,255,255,0,0,0,0,0,0"
    selection2 = selection2 & ",Type=1"
    StringtoArray selection2, var2
    Set pointer2 = Part.Extension.GetObjectByPersistReference3((var2), longstatus)
    selection3 = "216,14,0,0,3,0,0,0,255,254,255,0,0,0,0,0,255,255,1,0,11,0,109,111,70,97,99,101,82,101,102,95,99,1,0,0,0,0,0,0,0,8,0,0,0,0,3,0,0,0,0,0,0,125,195,148,37,173,73,178,84,125,195,148,37,173,73,178,84,0,0,255,255,1,0,20,0,109,111,69,110,100,70,97,99,101,83,117,114,102,73,100,82,101,112,95,99,0,0,255,255,1,0,6,0,109,111,70,82,95,99,255,255,1,0,13,0,109,111,69,120,116,79,98,106,101,99,116,95,99,255,255,1,0,14,0,109,111,79,98,106,70,105,108,101,68,101,102,95,99,255,255,1,0,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,6,84,0,117,0,116,0,111,0,114,0,49,0,123,228,186,50,11,128,255,254,255,62,67,0,58,0,92,0,80,0,114,0,111,0,103,0,114,0,97,0,109,0,32,0,70,0,105,0,108,0,101,0,115,0,92,0,83,0,111,0,108,0,105,0,100,0,87,0,111,0,114,0,107,0,115,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,87,0,111,0,114,0,107,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,92,0,84,0,117,0,116,0,111,0,114,0,49,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,97,23,28,65,0,0,0,0,2,0,"
    selection3 = selection3 & "1,0,0,0,0,0,0,0,1,0,0,0,255,254,255,7,68,0,101,0,102,0,97,0,117,0,108,0,116,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,51,230,186,50,1,0,0,0,255,255,255,255,255,255,1,0,23,0,109,111,70,114,111,109,83,107,116,69,110,116,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,8,0,0,0,218,229,186,50,4,0,0,0,0,0,255,255,1,0,18,0,109,111,80,76,105,110,101,83,117,114,102,73,100,82,101,112,95,99,0,0,5,128,8,0,31,0,0,0,210,195,223,50,17,128,0,0,5,128,8,0,23,0,0,0,160,192,223,50,14,128,0,0,5,128,8,0,19,0,0,0,181,233,186,50,1,0,0,0,1,0,0,0,2,0,0,0,17,128,0,0,5,128,8,0,31,0,0,0,210,195,223,50,17,128,0,0,5,128,8,0,23,0,0,0,160,192,223,50,14,128,0,0,5,128,8,0,19,0,0,0,181,233,186,50,1,0,0,0,1,0,0,0,1,0,0,0,17,128,0,0,5,128,8,0,31,0,0,0,210,195,223,50,17,128,0,0,5,128,8,0,23,0,0,0,160,192,223,50,14,128,0,0,5,128,8,0,19,0,0,0,181,233,186,50,1,0,0,0,2,0,0,0,3,0,0,0,17,128,0,0,5,128,8,0,31,0,0,0,210,195,223,50,17,128,0,0,5,128,8,0,23,0,0,0,160,192,223,50,14,"
    selection3 = selection3 & "128,0,0,5,128,8,0,19,0,0,0,181,233,186,50,1,0,0,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0"
    selection3 = selection3 & ",Type=1"
    StringtoArray selection3, var3
    Set pointer3 = Part.Extension.GetObjectByPersistReference3((var3), longstatus)
   ' Create VARIANT arrays
    varArray1 = Array(pointer1, pointer2)
    varArray2 = Array(pointer3)
   ' Add fixed restraint
    Set LBCMgr = Study.LoadsAndRestraintsManager
    If LBCMgr Is Nothing Then ErrorMsg SwApp, "No loads and restraints manager.", False
    Set CWRes1 = LBCMgr.AddRestraint(0, (varArray1), Nothing, errCode)
    If errCode <> 0 Then ErrorMsg SwApp, "No fixed restraint created.", True
   ' Apply pressure normal to selected face
    Set CWPressure = LBCMgr.AddPressure(0, (varArray2), Nothing, errCode)
    If errCode <> 0 Then ErrorMsg SwApp, "No normal pressure created.", True
    Call CWPressure.PressureBeginEdit
    CWPressure.Unit = 1
    CWPressure.Value = 1000
    errCode = CWPressure.PressureEndEdit
    If errCode <> 0 Then ErrorMsg SwApp, "Nonuniform pressure distribution not set.", True
   ' Create mesh
    Set CwMesh = Study.Mesh
    If CwMesh Is Nothing Then ErrorMsg SwApp, "No mesh object.", False
    CwMesh.Quality = 1
    Call CwMesh.GetDefaultElementSizeAndTolerance(0, el, tl)
    errCode = Study.CreateMesh(0, el, tl)
    If errCode <> 0 Then ErrorMsg SwApp, "Mesh failed.", True
    'Run analysis
    errCode = Study.RunAnalysis
    If errCode <> 0 Then ErrorMsg SwApp, "Analysis failed.", True
    Set CWResult = Study.Results
    If CWResult Is Nothing Then ErrorMsg SwApp, "No result object.", False
    stress = CWResult.GetMinMaxStress(0, 0, 1, Nothing, 0, errCode)
    
    ' Get strain and stress results for
    ' first face selected for restraint
    Dim i As Long
    Dim selEntity As Variant
    Dim status As Long
    Dim entity(0) As SldWorks.entity
    ' First face selected for restraint
    Set entity(0) = pointer1
    i = 0
    Debug.Print "  Strain value by node:"
    For Each selEntity In CWResult.GetStrainForEntities3(True, swsStrainComponent_e.swsStrainComponentESTRN, 1, Nothing, (entity), status, 0, False, errCode)
        Debug.Print "     " & selEntity
    Next
    Debug.Print " "
    Debug.Print "  Stress value by node:"
    For Each selEntity In CWResult.GetStressForEntities3(True, swsStressComponent_e.swsStressComponentVON, 1, Nothing, (entity), swsStrengthUnitPascal, status, 0, False, errCode)
        Debug.Print "     " & selEntity
    Next    
    'Hide fixture and force symbols
    Study.ShowOrHideFixtures = False
    Study.ShowOrHideForce = False    
    Stop    
    'Show fixture and force symbols
    Study.ShowOrHideFixtures = True
    Study.ShowOrHideForce = True
End Sub
 
Function ErrorMsg(SwApp As Object, Message As String, EndTest As Boolean)
    SwApp.SendMsgToUser2 Message, 0, 0
    SwApp.RecordLine "'*** WARNING - General"
    SwApp.RecordLine "'*** " & Message
    SwApp.RecordLine ""
    If EndTest Then
    End If
End Function
' Parse string into an array
Function StringtoArray(inputSTR As String, varEntity As Variant)
    Dim PID() As Byte
    Dim i As Integer
    varEntity = Split(inputSTR, ",")
    ReDim PID(UBound(varEntity))
    For i = 0 To (UBound(varEntity) - 1)
    PID(i) = varEntity(i)
    Next i
    varEntity = PID
End Function


Provide feedback on this topic

SOLIDWORKS welcomes your feedback concerning the presentation, accuracy, and thoroughness of the documentation. Use the form below to send your comments and suggestions about this topic directly to our documentation team. The documentation team cannot answer technical support questions. Click here for information about technical support.

* Required

 
*Email:  
Subject:   Feedback on Help Topics
Page:   Analyze Part Example (VBA)
*Comment:  
*   I acknowledge I have read and I hereby accept the privacy policy under which my Personal Data will be used by Dassault Systèmes

Print Topic

Select the scope of content to print:

x

We have detected you are using a browser version older than Internet Explorer 7. For optimized display, we suggest upgrading your browser to Internet Explorer 7 or newer.

 Never show this message again
x

Web Help Content Version: API Help (English only) 2014 SP05

To disable Web help from within SOLIDWORKS and use local help instead, click Help > Use SOLIDWORKS Web Help.

To report problems encountered with the Web help interface and search, contact your local support representative. To provide feedback on individual help topics, use the “Feedback on this topic” link on the individual topic page.