Hide Table of Contents

Add Nonuniform Force Distribution Example (VB.NET)

This example shows how to add a force of nonuniform distribution to a study.

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 primary interop assembly as a reference
'    (in the IDE, click Project > Add Reference > .NET > 
'    SolidWorks.Interop.cosworks > OK).

' 3. Verify that the assembly exists.
' 4. Open the Immediate window.

' Postconditions:
' 1. Opens the assembly.
' 2. Inserts a coordinate system.
' 3. Gets the Ready study.
' 4. Adds a force of nonuniform distribution to Ready.
' 5. Inspect the Immediate window.
' NOTE: Because this assembly is used elsewhere, do not save changes.
Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
Imports System
Imports SolidWorks.Interop.cosworks
Imports System.Diagnostics
Imports System.Collections
Partial Class SolidWorksMacro
    Public Sub main()
        Dim COSMOSWORKS As CosmosWorks
        Dim COSMOSObject As CwAddincallback
        Dim ActDoc As CWModelDoc
        Dim StudyMngr As CWStudyManager
        Dim Study As CWStudy
        Dim swModel As ModelDoc2
        Dim swModelDocExt As ModelDocExtension
        Dim LBCMgr As CWLoadsAndRestraintsManager
        Dim CWForce As CWForce
        Dim var1 As Object = Nothing
        Dim var2 As Object = Nothing
        Dim oSelect1 As Object, oSelect2 As Object
        Dim status As Integer, warnings As Integer
        Dim errCode As Integer
        Dim PIDCollection As New Collection
        Dim boolstatus As Boolean

        Dim DistanceValues As Object = Nothing
        Dim ForceValues As Object = Nothing
        Dim ComponentValues As Object
        Dim data(6) As Double
        ' Initialize PIDs
        PIDCollection = PIDInitializer()
        swApp.OpenDoc6("C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2017\Simulation Examples\mixedmesh-1.sldasm", swDocumentTypes_e.swDocASSEMBLY, swOpenDocOptions_e.swOpenDocOptions_Silent, "", status, warnings)
        swModel = swApp.ActiveDoc()
        swModelDocExt = swModel.Extension
        ' Insert a coordinate system
        boolstatus = swModelDocExt.SelectByID2("""EDGE", 0.019197250673983, 0.167840898512935, -0.0353306093604147, False, 1, Nothing, 0)
        boolstatus = swModelDocExt.SelectByID2("""EDGE", 0.0180650048999951, 0.166100889103177, 0.123043418741133, True, 2, Nothing, 0)
        boolstatus = swModelDocExt.SelectByID2("""EDGE", 0.0476117249541517, 0.243477752733071, -0.0418878531492055, True, 4, Nothing, 0)
        boolstatus = swModelDocExt.SelectByID2("""EDGE", -0.0821419006116457, 0.165357357368464, -0.0411028452107871, True, 8, Nothing, 0)
        boolstatus = swModel.InsertCoordinateSystem(FalseFalseFalse)
        ' Get the coordinate system object
        SelectByPID("selection2", PIDCollection, var2)
        oSelect2 = swModelDocExt.GetObjectByPersistReference3((var2), status)
        COSMOSObject = swApp.GetAddInObject("SldWorks.Simulation")
        If COSMOSObject Is Nothing Then ErrorMsg(swApp, "COSMOSObject object not found")
        COSMOSWORKS = COSMOSObject.CosmosWorks
        If COSMOSWORKS Is Nothing Then ErrorMsg(swApp, "COSMOSWORKS object not found")
        ActDoc = COSMOSWORKS.ActiveDoc()
        If ActDoc Is Nothing Then ErrorMsg(swApp, "No active document")
        StudyMngr = ActDoc.StudyManager()
        If StudyMngr Is Nothing Then ErrorMsg(swApp, "No CWStudyManager object")
        ' Get the Ready study
        Study = StudyMngr.GetStudy(0)
        If Study Is Nothing Then ErrorMsg(swApp, "No study found")

        ' Get the face to which to apply the force
        SelectByPID("selection1", PIDCollection, var1)
        oSelect1 = swModelDocExt.GetObjectByPersistReference3((var1), status)
        Dim DispArray1 As Object() = {oSelect1}
        LBCMgr = Study.LoadsAndRestraintsManager

        Data(0) = 2.0#
        Data(1) = 3.0#
        Data(2) = 1.0#
        Data(3) = 1.5
        Data(4) = 1.0#
        Data(5) = 1.0#
        ComponentValues = data
        ' Add force
        CWForce = LBCMgr.AddForce3(swsForceType_e.swsForceTypeNormal, 0, -1, 0, 0, 0, (DistanceValues), (ForceValues), TrueFalse, 0, 0, 0, 1.0#, (ComponentValues), FalseFalse, (DispArray1), NothingFalse, errCode)
        If errCode <> 0 Then ErrorMsg(swApp, "No force applied")

        ' Edit the force to be of nonuniform distribution
        CWForce.IncludeNonUniformDistribution = 1
        CWForce.EquationCoordinateSystemType = 1
        CWForce.EquationLinearUnit = 0
        CWForce.Equation = """x"" + ""y"" + ""z"""
        Debug.Print("  Type as defined in swsForceType_e: " & CWForce.ForceType)
        Debug.Print("  Units as defined in swsForceUnit_e: " & CWForce.Unit)
        Debug.Print("  Value: " & CWForce.NormalForceOrTorqueValue)
        Debug.Print("  Nonuniform distribution? (1=yes, 0=no) " & CWForce.IncludeNonUniformDistribution)
        If CWForce.IncludeNonUniformDistribution = 1 Then
            Debug.Print("  Coordinate system type as defined in swsCoordinateType_e: " & CWForce.EquationCoordinateSystemType)
            Debug.Print("  Equation linear units as defined in swsLinearUnit_e: " & CWForce.EquationLinearUnit)
            If CWForce.EquationCoordinateSystemType = 2 Or CWForce.EquationCoordinateSystemType = 3 Then
                Debug.Print("  Equation angular units as defined in " & CWForce.EquationAngularUnit)
            End If
            If CWForce.Equation = "" Then
                Debug.Print("  Nonuniform force distribution equation not set.")
                Debug.Print("  Nonuniform force distribution equation: " & CWForce.Equation)
            End If
        End If
    End Sub
    Private Sub ErrorMsg(ByVal SwApp As SldWorksByVal Message As String)
        SwApp.SendMsgToUser2(Message, 0, 0)
        SwApp.RecordLine("'*** WARNING - General")
        SwApp.RecordLine("'*** " & Message)
    End Sub
    Public Function PIDInitializer() As Collection
        ' Initialize PIDs
        Dim PIDCollection As New Collection
        Dim selection1 As String, selection2 As String
        ' Face
        selection1 = "13,17,0,0,3,0,0,0,255,254,255,27,77,0,105,0,120,0,101,0,100,0,45,0,49,0,45,0,83,0,111,0,108,0,105,0,100,0,45,0,51,0,64,0,109,0,105,0,120,0,101,0,100,0,109,0,101,0,115,0,104,0,45,0,49,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,17,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,6,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,17,0,109,111,67,83,116,114,105,110,103,72,97,110,100,108,101,95,99,255,254,255,79,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,83,0,111,0,108,0,105,0,100,0,87,0,111,0,114,0,107,0,115,0,32,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,"
        selection1 = selection1 & "0,112,0,108,0,101,0,115,0,92,0,77,0,105,0,120,0,101,0,100,0,45,0,49,0,45,0,83,0,111,0,108,0,105,0,100,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,9,128,255,254,255,13,77,0,105,0,120,0,101,0,100,0,45,0,49,0,45,0,83,0,111,0,108,0,105,0,100,0,2,0,0,124,49,104,66,0,0,0,48,0,0,0,0,0,0,0,0,0,2,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,48,0,24,0,0,0,26,50,104,66,4,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,24,0,0,0,26,50,104,66,0,0,0,0,0,0,0,0,3,128,0,0,5,128,8,0,24,0,0,0,26,50,104,66,11,0,0,0,12,128,0,0,5,128,8,0,24,0,0,0,26,50,104,66,1,0,0,0,0,0,0,0,3,128,0,0,5,128,8,0,24,0,0,0,26,50,104,66,1,0,0,0,0,0,0,0,0,0,0,0,0,0"
        ' Coordinate System
        selection2 = "189,35,0,0,1,0,0,0,255,254,255,0,0,0,0,0,124,0,0,0"
        selection2 = selection2 & ",Type=1"
        ' Store constants in a collection
        PIDCollection.Add(selection1, "selection1")
        PIDCollection.Add(selection2, "selection2")
        PIDInitializer = PIDCollection
    End Function
    Private Sub SelectByPID(ByVal PIDName As StringByVal PIDCollection As Collection, ByRef varEntity As Object)
        ' Select by PID
        Dim PID() As Byte
        Dim PIDVariant As Object
        Dim PIDString As String
        Dim i As Integer
        ' Get the string from the collection
        PIDString = ""
        PIDString = PIDCollection.Item(PIDName)
        ' Parse the string into an array
        PIDVariant = Split(PIDString, ",")
        ReDim PID(UBound(PIDVariant))
        ' Change the array to a byte array
        For i = 0 To (UBound(PIDVariant) - 1)
            PID(i) = Convert.ToByte(PIDVariant(i))
        Next i
        varEntity = PID
    End Sub
    ''' <summary>
    ''' The SldWorks swApp variable is pre-assigned for you.
    ''' </summary>
    Public swApp As SldWorks
End Class

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

Subject:   Feedback on Help Topics
Page:   Add Nonuniform Force Distribution Example (VB.NET)
*   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:


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

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.