Get Normal Contact/Friction Force (VB.NET)
This example shows how to get the normal contact/friction x, y, z, and
resultant force for the selected entities.
'--------------------------------------------
'
' Preconditions:
' 1. Add the SolidWorks Simulation as an add-in
' (in SolidWorks, click Tools > Add-ins > SolidWorks Simulation).
' 2. Add the SolidWorks Simulation primary interop assembly as
' a reference (in the IDE's Project Explorer, right-click
' the project name, select Add Reference, click the Browse tab,
' navigate to the <SolidWorks_install_dir>\api\redist folder and
' select SolidWorks.Interop.cosworks.dll).
' 3. Open <SolidWorks_install_dir>\Simulation\Examples\Contact\slider_locker_mechanism.sldasm.
' 4. Open the Immediate window.
' 5. Select the Ready Simulation study tab.
' 6. Right-click Ready in the Simulation study tree and
' select Run. The study may take several minutes to solve.
' Click Yes if the message box informing you
' of excessive displacements is displayed.
' 7. Run the macro.
'
'
' Postconditions: The x, y, z, and resultant
' force are printed to the Immediate window.
'
'
' NOTE: Because this assembly document is used by
' SolidWorks Simulation tutorial, do not save any
' changes when closing the document.
'
'-------------------------------
Imports
SolidWorks.Interop.sldworks
Imports
SolidWorks.Interop.swconst
Imports
SolidWorks.Interop.cosworks
Imports System
Imports System.Diagnostics
Imports System.Collections
Partial
Class SolidWorksMacro
Public
Sub Main()
Dim swModel
As ModelDoc2
Dim swModelDocExt
As ModelDocExtension
Dim COSMOSObject
As CwAddincallback
Dim COSMOSWORKS
As
Object
Dim
ActDoc As CWModelDoc
Dim StudyMngr
As CWStudyManager
Dim Study
As CWStudy
Dim Results
As CWResults
Dim errors
As
Integer
Dim
sel1 As
Object =
Nothing
Dim
sel2 As
Object =
Nothing
Dim
selObject1 As
Object =
Nothing
Dim
selObject2 As
Object =
Nothing
Dim
state As
Integer
Dim
Forces As
Object
Dim
i As
Integer
Dim
PIDCollection As
New Collection
' Initialize PIDs
PIDCollection = PIDInitializer()
' Connect to SolidWorks
swModel = swApp.ActiveDoc
swModelDocExt = swModel.Extension
' Get the SolidWorks Simulation object
COSMOSObject = swApp.GetAddInObject("CosmosWorks.CosmosWorks")
If COSMOSObject
Is
Nothing
Then ErrorMsg(swApp, "COSMOSObject
object not found.", True)
COSMOSWORKS = COSMOSObject.COSMOSWORKS
If COSMOSWORKS
Is
Nothing
Then ErrorMsg(swApp, "COSMOSWORKS
object not found.", True)
' Get the active document
ActDoc = COSMOSWORKS.ActiveDoc()
If ActDoc
Is
Nothing Then
ErrorMsg(swApp, "No active document.",
True)
' Get the Ready study
StudyMngr = ActDoc.StudyManager()
If StudyMngr
Is
Nothing Then
ErrorMsg(swApp, "StudyMngr object not there.",
True)
StudyMngr.ActiveStudy = 0
Study = StudyMngr.GetStudy(0)
If Study
Is
Nothing Then
ErrorMsg(swApp, "Study not created.",
True)
' Get the results
Debug.Print("Active
study: " & Study.Name)
Results = Study.Results
If Results
Is
Nothing Then
ErrorMsg(swApp, "No Results object.",
True)
' Get PIDs for selection
SelectByPID("selection1",
PIDCollection, sel1)
SelectByPID("selection2",
PIDCollection, sel2)
selObject1 = swModelDocExt.GetObjectByPersistReference3((sel1), state)
selObject2 = swModelDocExt.GetObjectByPersistReference3((sel2), state)
Dim arraySelections
As
Object() = {selObject1,
selObject2}
' Get the normal contact/friction force for
the selected entities
Forces =
Results.GetContactForcesAndFriction(0, Nothing,
(arraySelections), 0, swsUnit_e.swsUnitSI, errors)
Debug.Print(" FX, FY, FZ, and FRes:")
For i = 0
To UBound(Forces)
Debug.Print(" "
& Forces(i))
Next
End
Sub
' Error function
Private
Sub ErrorMsg(ByVal
SwApp As
Object,
ByVal Message As
String,
ByVal EndTest
As
Boolean)
SwApp.SendMsgToUser2(Message, 0, 0)
SwApp.RecordLine("'*** WARNING - General")
SwApp.RecordLine("'*** "
& Message)
SwApp.RecordLine("")
If EndTest
Then
End
If
End
Sub
Public
Function PIDInitializer()
As Collection
' Initialize PIDs
Dim
PIDCollection As
New Collection
Dim selection1
As
String
Dim
selection2 As
String
' Get the PIDs of
the faces to select
selection1 =
"48,17,0,0,3,0,0,0,255,254,255,32,76,0,111,0,99,0,107,0,101,0,114,0,45,0,49,0,64,0,115,0,108,0,105,0,100,0,101,0,114,0,95,0,108,0,111,0,99,0,107,0,101,0,114,0,95,0,109,0,101,0,99,0,104,0,97,0,110,0,105,0,115,0,109,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,11,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,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,67,0,111,0,110,0,116,0,97,0,99,0,116,0,92,0,76,0,111,0,99,0,107,0,101,0,11"
selection1 = selection1 &
"4,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,9,128,255,254,255,6,76,0,111,0,99,0,107,0,101,0,114,0,2,0,0,9,255,26,58,0,166,20,28,65,1,0,0,0,0,0,0,0,3,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,166,20,28,65,33,0,0,0,63,0,27,58,12,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,33,0,0,0,63,0,27,58,0,0,0,0,255,255,255,255,3,128,0,0,5,128,8,0,33,0,0,0,63,0,27,58,19,0,0,0,12,128,0,0,5,128,8,0,33,0,0,0,63,0,27,58,1,0,0,0,255,255,255,255,3,128,0,0,5,128,8,0,33,0,0,0,63,0,27,58,13,0,0,0,0,0,0,0,0,0,0,0,0,0"
selection2 =
"48,17,0,0,3,0,0,0,255,254,255,32,83,0,108,0,105,0,100,0,101,0,114,0,45,0,49,0,64,0,115,0,108,0,105,0,100,0,101,0,114,0,95,0,108,0,111,0,99,0,107,0,101,0,114,0,95,0,109,0,101,0,99,0,104,0,97,0,110,0,105,0,115,0,109,0,4,0,0,0,16,0,0,0,1,0,0,0,1,0,0,0,16,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,57,67,0,58,0,92,0,67,0,79,0,83,0,77,0,79,0,83,0,68,0,111,0,99,0,115,0,92,0,69,0,120,0,97,0,109,0,112,0,108,0,101,0,115,0,95,0,102,0,111,0,114,0,67,0,117,0,115,0,116,0,111,0,109,0,101,0,114,0,115,0,92,0,67,0,111,0,110,0,116,0,97,0,99,0,116,0,92,0,83,0,108,0,105,0,100,0,101,0,"
selection2 = selection2 &
"114,0,46,0,83,0,76,0,68,0,80,0,82,0,84,0,9,128,255,254,255,6,83,0,108,0,105,0,100,0,101,0,114,0,2,0,0,90,0,27,58,0,9,21,28,65,1,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,9,21,28,65,16,0,0,0,131,0,27,58,2,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,16,0,0,0,131,0,27,58,0,0,0,0,255,255,255,255,3,128,0,0,5,128,8,0,16,0,0,0,131,0,27,58,9,0,0,0,12,128,0,0,5,128,8,0,16,0,0,0,131,0,27,58,1,0,0,0,255,255,255,255,3,128,0,0,5,128,8,0,16,0,0,0,131,0,27,58,3,0,0,0,0,0,0,0,0,0,0,0,0,0"
' Store constant
in a collection
PIDCollection.Add(selection1,
"selection1")
PIDCollection.Add(selection2, "selection2")
' Pass this back
PIDInitializer = PIDCollection
End
Function
Private
Sub SelectByPID(ByVal
PIDName As
String,
ByVal 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