Hide Table of Contents

Analyze Part Example (VBA)

This example shows how to perform a static analysis of a part and plot nodal strain results.

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 > OK).
'  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. Ensure that the specified part exists.
'  5. Open the Immediate window.
'
' Postconditions:
'  1. Adds a default static study results plot.
'  2. Creates study, 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. Creates a nodal equivalent strain plot of the results.
'  9. Prints plot data to the Immediate window.
' 10. Hides fixture and force symbols. Examine the graphics area
'     to verify.
' 11. Press F5 to continue.
' 12. Shows fixture and force symbols. Examine the graphics area
'     to verify.
' 13. Inspect the plots.
'
' NOTE: Because the model is used elsewhere, do not save any changes.
'-----------------------------------------------------------------------------

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, pointer4 As Object
    Dim CWMat As CosmosWorksLib.CWMaterial
    Dim var1 As Variant, var2 As Variant, var3 As Variant, var4 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 selection4 As String
    Dim longstatus As Long, longwarnings As Long
    Dim errCode As Long
    Dim NSource As Long
    Dim el As Double, tl As Double
    Dim errorCode As Long
    Dim results As Variant
    Dim plot As CosmosWorksLib.CWPlot
    Dim plotName As String
    Dim i As Long
    Dim status As Long
    Dim entity(0) As SldWorks.entity
    Dim nType As Long
    Dim nBase As Long
    Dim nContour As Long
    Dim BFlip As Boolean
    Dim BSpecifyColorLimit As Boolean
    Dim VarColor As Variant
    Dim vDispOptions As Variant
    Dim vPlotPosFormatOptions As Variant
    Dim vPlotSettings As Variant
    Dim Name As Variant
    Dim Color As Variant
    Dim selEntity As Variant
    Dim InputVar1 as Variant
    Dim Var as Variant

    Dim oSelect2 As Object
    Dim boolstatus As Boolean

 

    ' Connect to SOLIDWORKS
    If SwApp Is Nothing Then Set SwApp = Application.SldWorks

    ' Open SOLIDWORKS part document
    Set Part = SwApp.OpenDoc6("C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2017\Simulation Examples\Tutor1.SLDPRT ", swDocPART, swOpenDocOptions_Silent, "", longstatus, longwarnings)
    If Part Is Nothing Then ErrorMsg SwApp, "Failed to open C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2017\Simulation Examples\Tutor1.SLDPRT."
 

    ' Insert a coordinate system
    boolstatus = Part.Extension.SelectByID2("", "FACE", 0.170849242404917, 8.98492424049175E-02, -0.031, False, 1, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.101612421576135, 1.02144219597449E-02, -3.03238444132603E-04, True, 2, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.16010192941178, 1.63935978611676E-02, -3.91019294117427E-02, True, 4, Nothing, 0)
    boolstatus = Part.Extension.SelectByID2("", "EDGE", 0.160121414911089, 9.91414669255164E-03, -2.84339843419161E-02, True, 8, Nothing, 0)
    boolstatus = Part.InsertCoordinateSystem(False, False, False)
 

    selection1 = "233,35,0,0,1,0,0,0,255,254,255,0,0,0,0,0,131,0,0,0"
    selection1 = selection1 & ",Type=1"

    StringtoArray selection1, var2
    Set oSelect2 = Part.Extension.GetObjectByPersistReference3((var2), status)

    'Get SOLIDWORKS Simulation object
    Set CWObject = SwApp.GetAddInObject("SldWorks.Simulation")
    If CWObject Is Nothing Then ErrorMsg SwApp, "No CwAddincallback object"
    Set COSMOSWORKS = CWObject.COSMOSWORKS
    If COSMOSWORKS Is Nothing Then ErrorMsg SwApp, "No CosmosWorks object"

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

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

    ' Set default plot boundary color
    errCode = ActDoc.SetSimulationOptionDefaultPlotsBoundaryColorInRGB(swsSimulationOptionDefaultPlotsBoundaryColorInRGBBoundaryOption_ModelOrMesh, 0, 0, 255)
    errCode = ActDoc.SetSimulationOptionDefaultPlotsBoundaryColorInRGB(swsSimulationOptionDefaultPlotsBoundaryColorInRGBBoundaryOption_TranslucentSingleColor, 255, 0, 0)

    ' Get default plot model or mesh boundary color
    Dim colorObj As Variant
    colorObj = ActDoc.GetSimulationOptionDefaultPlotsBoundaryColorInRGB(swsSimulationOptionDefaultPlotsBoundaryColorInRGBBoundaryOption_ModelOrMesh, errCode)
    Debug.Print "RGB values for model or mesh:"
    For i = 0 To UBound(colorObj)
        Debug.Print colorObj(i)
    Next

    ' Create new static study
    Set StudyMngr = ActDoc.StudyManager()
    If StudyMngr Is Nothing Then ErrorMsg SwApp, "No CWStudyManager object"
    Set Study = StudyMngr.CreateNewStudy3("Static_solid", swsAnalysisStudyTypeStatic, swsMeshTypeSolid, errCode)
    If Study Is Nothing Then ErrorMsg SwApp, "No CWStudy object"

    ' Set material from the SOLIDWORKS material library
    Set SolidMgr = Study.SolidManager
    If SolidMgr Is Nothing Then ErrorMsg SwApp, "No CWSolidManager object"
    Set SolidComponent = SolidMgr.GetComponentAt(0, errCode)
    If errCode <> 0 Then ErrorMsg SwApp, "No solid component"
    Set SolidBody = SolidComponent.GetSolidBodyAt(0, errCode)
    If errCode <> 0 Then ErrorMsg SwApp, "No solid body"
    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"
    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
    ' Fourth selection is the direction reference face
    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)

    selection4 = "189,35,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,10,0,0,0,0,2,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,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,77,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,79,0,76,0,73,0,68,0,87,0,79,0,82,0,75,0,83,0,32,0,67,0,111,0,114,0,112,0,92,0,83,0,79,0,76,0,73,0,68,0,87,0,79,0,82,0,75,0,83,0,92,0,83,0,105,0,109,0,117,0,108,0,97,0,116,0,105,0,111,0,110,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,92,0,116,0,117,0,116,0,111,0,114,0,49,0,46,0,115,0,108,0,100,0,112,0,114,0,116,0,9,128,255,254,255,6,116,0,117,0,116,0,111,0,114,0,49,0,2,0,0,123,228,186,50,255"
    selection4 = selection4 & ",254,255,0,0,97,23,28,65,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,97,23,28,65,6,0,0,0,211,228,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,13,0,0,0,1,231,186,50,1,0,0,0,3,128,0,0,5,128,8,0,8,0,0,0,218,229,186,50,1,0,0,0,255,255,255,255,12,128,0,0,5,128,8,0,6,0,0,0,211,228,186,50,2,0,0,0,12,128,0,0,5,128,8,0,6,0,0,0,211,228,186,50,3,0,0,0,12,128,0,0,5,128,8,0,6,0,0,0,211,228,186,50,4,0,0,0,12,128,0,0,5,128,8,0,6,0,0,0,211,228,186,50,5,0,0,0,12,128,0,0,5,128,8,0,6,0,0,0,211,228,186,50,6,0,0,0,12,128,0,0,5,128,8,0,13,0,0,0,1,231,186,50,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
    selection4 = selection4 & ",Type=1"
    StringtoArray selection4, var4
    Set pointer4 = Part.Extension.GetObjectByPersistReference3((var4), longstatus)

    varArray1 = Array(pointer1, pointer2)
    varArray2 = Array(pointer3)

    ' Add a restraint that uses reference geometry
    Set LBCMgr = Study.LoadsAndRestraintsManager
    If LBCMgr Is Nothing Then ErrorMsg SwApp, "No CWLoadsAndRestraintsManager object"
    Set CWRes1 = LBCMgr.AddRestraint(5, (varArray1), pointer4, errCode)
    If errCode <> 0 Then ErrorMsg SwApp, "No restraint created"
   

    CWRes1.RestraintBeginEdit
    CWRes1.SetTranslationComponentsValues 1, 1, 1, 1, 1, 1
    errCode = CWRes1.RestraintEndEdit
   

    Debug.Print "Coordinate system type as defined in swsCoordinateType_e: " & CWRes1.GetCoordinateType
    Debug.Print "Restraint type as defined in swsRestraintType_e: " & CWRes1.RestraintType
    Debug.Print "Units of translation as defined in swsLinearUnit_e: " & CWRes1.Unit
   

    Dim bval1 As Long, bval2 As Long, bval3 As Long
    Dim brev1 As Long, brev2 As Long, brev3 As Long, brev4 As Long, brev5 As Long, brev6 As Long
    Dim dval1 As Double, dval2 As Double, dval3 As Double
   

    CWRes1.GetReverseDirections brev1, brev2, brev3, brev4, brev5, brev6

    CWRes1.GetTranslationComponentsValues bval1, bval2, bval3, dval1, dval2, dval3

    If bval1 = 1 Then
        Debug.Print " Translation along plane direction 1: " & dval1
        Debug.Print "      Reverse? (1=yes, 0=no): " & brev4
    End If
    If bval2 = 1 Then
        Debug.Print " Translation along plane direction 2: " & dval2
        Debug.Print "      Reverse? (1=yes, 0=no): " & brev5
    End If
    If bval3 = 1 Then
        Debug.Print " Translation along direction normal to the plane: " & dval3
        Debug.Print "      Reverse? (1=yes, 0=no): " & brev6
    End If
 

    ' Apply a nonuniform pressure normal to the selected face
    Set CWPressure = LBCMgr.AddPressure(0, (varArray2), Nothing, errCode)
    If errCode <> 0 Then ErrorMsg SwApp, "No CWPressure object"
    Call CWPressure.PressureBeginEdit
    CWPressure.Unit = 1
    CWPressure.Value = 1000
    CWPressure.IncludeNonUniformDistribution = 1
    CWPressure.SetCoordinateSystem oSelect2
    CWPressure.CoordSystemType = swsCoordinateTypeCartesian
    CWPressure.Equation = ".4*""x"" + .8* ""y"" + .6* ""z"""
    errCode = CWPressure.PressureEndEdit
    If errCode <> 0 Then ErrorMsg SwApp, "Pressure not set with error code as defined in swsPressureEndEditError_e: " & errCode

    Debug.Print "Pressure type as defined in swsPressureType_e: " & CWPressure.PressureType
    Debug.Print "Pressure: " & CWPressure.Value
    Debug.Print "  Reverse direction? (1=yes, 0=no) " & CWPressure.ReverseDirection
    Debug.Print "  Include nonuniform distribution of pressure? (1=yes, 0=no) " & CWPressure.IncludeNonUniformDistribution
   

    If CWPressure.IncludeNonUniformDistribution = 1 Then
        Debug.Print "  Equation: " & CWPressure.Equation
        Debug.Print "  Coordinate system type as defined in swsCoordinateType_e: " & CWPressure.CoordSystemType
        If CWPressure.CoordSystemType = 1 Then
            Debug.Print "  Equation linear units as defined in swsLinearUnit_e: " & CWPressure.EquationLinearUnit
        End If
        If CWPressure.CoordSystemType = 2 Or CWPressure.CoordSystemType = 3 Then
            Debug.Print "  Equation angular units as defined in " & CWPressure.EquationAngularUnit
        End If
    End If

   ' Mesh
    Set CwMesh = Study.Mesh
    If CwMesh Is Nothing Then ErrorMsg SwApp, "No CWMesh object"
    CwMesh.Quality = 1
    Call CwMesh.GetDefaultElementSizeAndTolerance(0, el, tl)
    errCode = Study.CreateMesh(0, el, tl)
    If errCode <> 0 Then ErrorMsg SwApp, "Mesh failed"

    ' Run analysis
    errCode = Study.RunAnalysis
    If errCode <> 0 Then ErrorMsg SwApp, "Analysis failed with error code as defined in swsRunAnalysisError_e: " & errCode
    Set CWResult = Study.Results
    If CWResult Is Nothing Then ErrorMsg SwApp, "No CWResults object"
    stress = CWResult.GetMinMaxStress(0, 0, 1, Nothing, 0, errCode)

    ' Get strain and stress results for
    ' 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  

    ' Create a nodal equivalent strain plot
    Set plot = CWResult.CreatePlot(3, swsStaticNodalStrain_ESTRN, swsUnitSI, False, errorCode)

    errorCode = plot.ActivatePlot
    errorCode = plot.GetPlotName(plotName)
    errorCode = plot.ApplyNameViewOrientation("*Front")
    results = plot.GetMinMaxResultValues(errorCode)
    errorCode = plot.SetPlotTitle("Nodal Equivalent Strain")
    plot.SetFOSPlot (False)
    plot.Set2DPlanarRevolveAngle (0#)
    plot.SetNormalizeModeShape (False)
    plot.ShowAs3DPlot (True)
    plot.ShowTensorOrVector (False)
    plot.ShowShellin3D (False)
    plot.ShowNormalizeValuesFrom0To1 (True)
    errorCode = plot.ShowDeformedPlot(True, swsAutomatic, 0, True)
    plot.ShowBeamProfile (False)
    plot.ShowAvgResultsAcrossBoundaryForParts (False)

    Debug.Print "Result plot created: " & plotName
    Debug.Print "Node " & results(0) & " " & "has minimum strain value: " & results(1)
    Debug.Print "Node " & results(2) & " " & "has maximum strain value: " & results(3)
    Debug.Print "Number of plots for these results: " & CWResult.GetPlotCount

    For Each Name In CWResult.GetPlotNames
        Debug.Print ""
        Debug.Print "Plot: " & Name
        errorCode = CWResult.GetPlotColorOptions(Name, nType, nBase, nContour, BFlip, BSpecifyColorLimit, VarColor)
        Debug.Print "Plot color options:"
        Debug.Print "  Color map as defined in swsColorChartOptionLegendTypeValue_e: " & nType
        Debug.Print "  Number of base colors in color map: " & nBase
        Debug.Print "  Number of gradient colors in color map: " & nContour
        Debug.Print "  Reverse the color mapping? " & BFlip
        Debug.Print "  Specify a color for values above the yield limit? " & BSpecifyColorLimit
        Debug.Print "  Color for values above the yield limit and user-defined colors (RGB): "
        Dim rgb As String
        rgb = "{"
        Dim rgbInd As Long
        rgbInd = 1
        Dim size As Long
        size = UBound(VarColor)
        Dim ind As Long
        ind = 1
        ' Create RGB triplet for each color
        For Each Color In VarColor
            If rgbInd < 3 Then
                rgb = rgb & Color & ","
                rgbInd = rgbInd + 1
            Else
                rgb = rgb & Color & "}"
                rgbInd = 1
                If Not ind = size + 1 Then
                    rgb = rgb & "{"
                End If
            End If
            ind = ind + 1
        Next
        Debug.Print "  " & rgb
       

        errorCode = CWResult.GetLegendContourColors(Name, VarColor)
 

        Debug.Print ""
        Debug.Print "Legend colors {R,G,B}: "
       
        rgb = "{"
        rgbInd = 1
        size = UBound(VarColor)
        ind = 1
       
        ' Create RGB triplet for each color
        For Each Color In VarColor
            If rgbInd < 3 Then
                rgb = rgb & Color & ","
                rgbInd = rgbInd + 1
            Else
                rgb = rgb & Color & "}"
                rgbInd = 1
                If Not ind = size + 1 Then
                  rgb = rgb & "{"
                End If
            End If
            ind = ind + 1
        Next
        Debug.Print rgb

        vDispOptions = CWResult.GetPlotDisplayOptions(Name, errorCode)
        Debug.Print ""
        Debug.Print "Plot display options:"
        Debug.Print "  Display the minimum value? " & vDispOptions(0)
        Debug.Print "  Display the maximum value? " & vDispOptions(1)
        Debug.Print "  Display the plot details? " & vDispOptions(2)
        Debug.Print "  Display the legend? " & vDispOptions(3)
        Debug.Print "  Display the minimum/maximum range only for parts? " & vDispOptions(4)
        Debug.Print "  Allow a user-defined minimum/maximum? " & vDispOptions(5)
        Debug.Print "    User-defined minimum: " & vDispOptions(6)
        Debug.Print "    User-defined maximum: " & vDispOptions(7)

        vPlotPosFormatOptions = CWResult.GetPlotPositionFormatOptions(Name, errorCode)
        Debug.Print ""
        Debug.Print "Plot position/format options:"
        Debug.Print "  Percentage of the window width: " & vPlotPosFormatOptions(0)
        Debug.Print "  Percentage of the window height: " & vPlotPosFormatOptions(1)
        Debug.Print "  Chart thickness option as defined in swsColorChartWidthOptionValue_e: " & vPlotPosFormatOptions(2)
        Debug.Print "  Chart number format as defined in swsColorChartNumberFormatOptionValue_e: " & vPlotPosFormatOptions(3)
        Debug.Print "  Number of decimal places to display: " & vPlotPosFormatOptions(4)
        Debug.Print "  Display chart numbers with a 1000 comma separator? " & vPlotPosFormatOptions(5)
        Debug.Print "  Use different number format for small numbers? " & vPlotPosFormatOptions(6)
        Debug.Print "    Number format for small numbers as defined in swsColorNumberFormatUseDiffNumberFormatOptionValue_e: " & vPlotPosFormatOptions(7)

        vPlotSettings = CWResult.GetPlotSettings(Name, errorCode)
        Debug.Print ""
        Debug.Print "Plot settings:"
        Debug.Print "  Display option for active fringe plot as defined in swsPlotFringeSettingsOptionValue_e: " & vPlotSettings(0)
        Debug.Print "  Display option for model boundary as defined in swsPlotBoundarySettingsOptionValue_e: " & vPlotSettings(1)
        Debug.Print "  R value for model/mesh color: " & vPlotSettings(2)
        Debug.Print "  G value for model/mesh color: " & vPlotSettings(3)
        Debug.Print "  B value for model/mesh color: " & vPlotSettings(4)
        Debug.Print "  Superimpose the un-deformed model on the deformed model? " & vPlotSettings(5)
        Debug.Print "    Deformed plot translucent option as defined in swsPlotDeformedShapeOptionSuperImposeValue_e: " & vPlotSettings(6)
        Debug.Print "  R value for single translucent color: " & vPlotSettings(7)
        Debug.Print "  G value for single translucent color: " & vPlotSettings(8)
        Debug.Print "  B value for single translucent color: " & vPlotSettings(9)
        Debug.Print "  Color intensity [0,1]: " & vPlotSettings(10)
       

        InputVar1 = Array(True, 0, 255, 0, 0, 0.75, True, 0, 0, 0, 255, 0.2)
        errorCode = CWResult.SetPlotSettingsOptionForHiddenAndExcludedBody(Name, InputVar1)

        Var = CWResult.GetPlotSettingsOptionForHiddenAndExcludedBody(Name, errorCode)
        Debug.Print ""
        Debug.Print "  Show hidden bodies? (1 = true, 0 = false) " & Var(0)
        Debug.Print "    Translucent color option as defined in swsPlotShowHiddenBodiesOptionValue_e: " & Var(1)
        Debug.Print "    R value for single translucent color: " & Var(2)
        Debug.Print "    G value for single translucent color: " & Var(3)
        Debug.Print "    B value for single translucent color: " & Var(4)
        Debug.Print "    Color intensity [0, 1]: " & Var(5)
        Debug.Print "  Show excluded bodies? (1 = true, 0 = false) " & Var(6)
        Debug.Print "    Translucent color option as defined in swsPlotShowExcludedBodiesOptionValue_e: " & Var(7)
        Debug.Print "    R value for single translucent color: " & Var(8)
        Debug.Print "    G value for single translucent color: " & Var(9)
        Debug.Print "    B value for single translucent color: " & Var(10)
        Debug.Print "    Color intensity [0, 1]: " & Var(11)


    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

Sub ErrorMsg(SwApp As SldWorks.SldWorks, Message As String)


    SwApp.SendMsgToUser2 Message, 0, 0
    SwApp.RecordLine "'*** WARNING - General"
    SwApp.RecordLine "'*** " & Message
    SwApp.RecordLine ""


End Sub

Sub 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 Sub



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) 2017 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.