Add Force Example (VBA)
This example shows how to add force 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).
' 2. Add the SolidWorks Simulation type library as a reference
' (in
the IDE, click Tools > References
> SolidWorks
' Simulation
version type
library).
' 3. Run the macro.
'
' Postconditions:
' 1.
Assembly document opened.
' 2.
Static study created.
' 3.
Force added.
' 4.
To verify, examine the External Loads folder
' in
the Static study in the Simulation tree.
'
' NOTE: Because this assembly document is used by a SolidWorks
' Simulation
online tutorial, do not save any changes when
' closing
the document.
'
'-------------------------------------------------------------
Option Explicit
Sub main()
Dim
SwApp As SldWorks.SldWorks
Dim
COSMOSWORKS As Object
Dim
COSMOSObject As CosmosWorksLib.CwAddincallback
Dim
ActDoc As CosmosWorksLib.CWModelDoc
Dim
StudyMngr As CosmosWorksLib.CWStudyManager
Dim
Study As CosmosWorksLib.CWStudy
Dim
swModel As SldWorks.ModelDoc2
Dim
swModelDocExt As SldWorks.ModelDocExtension
Dim
LBCMgr As CosmosWorksLib.CWLoadsAndRestraintsManager
Dim
CWForce As CosmosWorksLib.CWForce
Dim
selection1 As String
Dim
var1 As Variant
Dim
varArray1 As Variant
Dim
oSelect1 As Object
Dim
status As Long, warnings As Long
Dim
errCode As Long
'
Open document
Set
SwApp = Application.SldWorks
SwApp.OpenDoc6 "C:\Program Files\SolidWorks
Corp\SolidWorks\Simulation\Examples\mixedmesh-1.sldasm", swDocASSEMBLY,
swOpenDocOptions_Silent, "", status, warnings
Set
swModel = SwApp.ActiveDoc()
Set
swModelDocExt = swModel.Extension
'
Get the SolidWorks Simulation object
Set
COSMOSObject = SwApp.GetAddInObject("SldWorks.Simulation")
If
COSMOSObject Is Nothing Then ErrorMsg SwApp, "COSMOSObject object
not found.", True
Set
COSMOSWORKS = COSMOSObject.COSMOSWORKS
If
COSMOSWORKS Is Nothing Then ErrorMsg SwApp, "COSMOSWORKS object not
found.", True
'
Open and get active document
Set
ActDoc = COSMOSWORKS.ActiveDoc()
If
ActDoc Is Nothing Then ErrorMsg SwApp, "No active document.",
True
'
Create new static study
Set
StudyMngr = ActDoc.StudyManager()
If
StudyMngr Is Nothing Then ErrorMsg SwApp, "StudyMngr object not there.",
True
Set
Study = StudyMngr.CreateNewStudy2("Static",
swsAnalysisStudyTypeStatic, errCode)
If
Study Is Nothing Then ErrorMsg SwApp, "Study not created.",
True
'
Select face of solid
Set
LBCMgr = Study.LoadsAndRestraintsManager
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"
StringtoArray
selection1, var1
Set
oSelect1 = swModelDocExt.GetObjectByPersistReference3((var1),
status)
varArray1
= Array(oSelect1)
'
Add force
Set
CWForce = LBCMgr.AddForce2(swsForceTypeNormal,
0, (varArray1), Nothing, errCode)
If
errCode <> 0 Then ErrorMsg SwApp, "No force applied.",
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
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