This example shows how to apply the total force, or load, along the length of
a beam in various types of distributions.
'---------------------------------------------------------------------------
' 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. Ensure the specified part exists.
' 4. Open the Immediate window.
'
' Postconditions:
' 1. Loads are applied to the part, and their
' distribution types are shown in the Immediate
' window.
' 2. To verify, examine the External Loads folder
' in Study 3 in the Simulation tree.
'
' NOTE: Because this part document is used elsewhere, do not save changes.
'----------------------------------------------------------------------------
Imports
SolidWorks.Interop.sldworks
Imports
SolidWorks.Interop.swconst
Imports
System
Imports
System.Diagnostics
Imports
SolidWorks.Interop.cosworks
Partial
Class
SolidWorksMacro
Public
Sub Main()
Dim
swModel As
ModelDoc2
Dim
swModelDocExt As
ModelDocExtension
Dim
swSelMgr As
SelectionMgr
Dim
COSMOSWORKS As
Object
Dim
COSMOSObject As
CwAddincallback
Dim
swsActDoc As
CWModelDoc
Dim
swsStudyMngr As
CWStudyManager
Dim
swsStudy As
CWStudy
Dim
swsLBCMgr As
CWLoadsAndRestraintsManager
Dim
swsCWForce As
CWForce
Dim
selBeam As
Object
Dim
selFace As
Object
Dim
data(5) As
Double
Dim
rowNum As
Integer
Dim
distValue(2) As
Double
Dim
forceValue(2) As
Double
Dim
errors As
Integer
Dim
warnings As
Integer
Dim
errCode As
Integer
Dim
forceType As
String
Const
fileName As
String =
"C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\api\Loop.sldprt"
'
Open document
swModel = swApp.OpenDoc6(fileName,
swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_Silent,
"",
errors, warnings)
swModelDocExt = swModel.Extension
' Get the SOLIDWORKS Simulation
object
COSMOSObject = swApp.GetAddInObject("SldWorks.Simulation")
If
COSMOSObject Is
Nothing
Then
ErrorMsg(swApp, "No CwAddincallback
object")
COSMOSWORKS = COSMOSObject.COSMOSWORKS
If
COSMOSWORKS Is
Nothing
Then
ErrorMsg(swApp, "No COSMOSWORKS
object")
' Open and get active document
swsActDoc = COSMOSWORKS.ActiveDoc()
If
swsActDoc Is
Nothing
Then
ErrorMsg(swApp, "No active document")
' Create new static study
swsStudyMngr = swsActDoc.StudyManager()
If
swsStudyMngr Is
Nothing
Then
ErrorMsg(swApp, "No CWStudyManager
object")
swsStudy = swsStudyMngr.GetStudy(2)
If
swsStudy Is
Nothing
Then
ErrorMsg(swApp, "No CWStudy object")
swsLBCMgr = swsStudy.LoadsAndRestraintsManager
swSelMgr = swModel.SelectionManager
' Select the beam and the face to
which apply the force
Call
swModel.Extension.SelectByID2("Structural
Member1[3]",
"SOLIDBODY",
0.2669983091512, -0.4441139265177, -0.05999999999995,
True, 0,
Nothing, 0)
selBeam = swSelMgr.GetSelectedObject6(1, -1)
Call
swModel.Extension.SelectByID2("",
"FACE",
-0.4332349164914, -0.1431037474702, -0.05999999999989,
True, 0,
Nothing, 0)
selFace = swSelMgr.GetSelectedObject6(2, -1)
Dim
beamArray As
Object() =
{selBeam}
' Create the force
data(0) = 100.0#
data(1) = 100.0#
data(2) = 100.0#
data(3) = 100.0#
data(4) = 100.0#
data(5) = 100.0#
Dim
forceArray As
Object() =
{data(0), data(1), data(2), data(3), data(4), data(5)}
rowNum = 3
distValue(0) = 10.0#
distValue(1) = 50.0#
distValue(2) = 100.0#
forceValue(0) = 100.0#
forceValue(1) = 0.0#
forceValue(2) = 50.0#
' Add force: Total Load -
Triangular
swsCWForce = swsLBCMgr.AddForce3(swsForceType_e.swsForceTypeForceOrMoment,
swsSelectionType_e.swsSelectionBeams, 2,
swsTableDrivenInterpolationType_e.swsLinear,
swsTableDrivenDistOption_e.swsPercentage, rowNum, distValue, forceValue,
True,
True,
swsBeamNonUniformLoadDef_e.swsTotalLoad,
swsBeamNonUniformLoadType_e.swsTriangularLoad, 4, 100, (forceArray),
False,
False, (beamArray),
selFace, True,
errCode)
forceType = "Total Load -
Triangular"
LoadError(swApp, forceType, errCode)
' Add force: Total Load -
Elliptical
swsCWForce = swsLBCMgr.AddForce3(swsForceType_e.swsForceTypeForceOrMoment,
swsSelectionType_e.swsSelectionBeams, 2,
swsTableDrivenInterpolationType_e.swsLinear,
swsTableDrivenDistOption_e.swsPercentage, rowNum, distValue, forceValue,
True,
True,
swsBeamNonUniformLoadDef_e.swsTotalLoad,
swsBeamNonUniformLoadType_e.swsEllipticalLoad, 4, 100, (forceArray),
False,
False, (beamArray),
selFace, True,
errCode)
forceType = "Total Load -
Elliptical"
LoadError(swApp, forceType, errCode)
' Add force: Total Load - Parabolic
swsCWForce = swsLBCMgr.AddForce3(swsForceType_e.swsForceTypeForceOrMoment,
swsSelectionType_e.swsSelectionBeams, 2,
swsTableDrivenInterpolationType_e.swsLinear,
swsTableDrivenDistOption_e.swsPercentage, rowNum, distValue, forceValue,
True,
True,
swsBeamNonUniformLoadDef_e.swsTotalLoad,
swsBeamNonUniformLoadType_e.swsParabolicLoad, 4, 100, (forceArray),
False,
False, (beamArray),
selFace, True,
errCode)
forceType = "Total Load -
Parabolic"
LoadError(swApp, forceType, errCode)
' Add force: Centered Load -
Triangular
swsCWForce = swsLBCMgr.AddForce3(swsForceType_e.swsForceTypeForceOrMoment,
swsSelectionType_e.swsSelectionBeams, 2,
swsTableDrivenInterpolationType_e.swsLinear,
swsTableDrivenDistOption_e.swsPercentage, rowNum, distValue, forceValue,
True,
True,
swsBeamNonUniformLoadDef_e.swsCentralLoad,
swsBeamNonUniformLoadType_e.swsTriangularLoad, 4, 100, (forceArray),
False,
False, (beamArray),
selFace, True,
errCode)
forceType = "Centered Load -
Triangular"
LoadError(swApp, forceType, errCode)
' Add force: Centered Load -
Elliptical
swsCWForce = swsLBCMgr.AddForce3(swsForceType_e.swsForceTypeForceOrMoment,
swsSelectionType_e.swsSelectionBeams, 2,
swsTableDrivenInterpolationType_e.swsLinear,
swsTableDrivenDistOption_e.swsPercentage, rowNum, distValue, forceValue,
True,
True,
swsBeamNonUniformLoadDef_e.swsCentralLoad,
swsBeamNonUniformLoadType_e.swsEllipticalLoad, 4, 100, (forceArray),
False,
False, (beamArray),
selFace, True,
errCode)
forceType = "Centered Load -
Elliptical"
LoadError(swApp, forceType, errCode)
' Add force: Centered Load -
Parabolic
swsCWForce = swsLBCMgr.AddForce3(swsForceType_e.swsForceTypeForceOrMoment,
swsSelectionType_e.swsSelectionBeams, 2,
swsTableDrivenInterpolationType_e.swsLinear,
swsTableDrivenDistOption_e.swsPercentage, rowNum, distValue, forceValue,
True,
True,
swsBeamNonUniformLoadDef_e.swsCentralLoad,
swsBeamNonUniformLoadType_e.swsParabolicLoad, 4, 100, (forceArray),
False,
False, (beamArray),
selFace, True,
errCode)
forceType = "Centered Load -
Parabolic"
LoadError(swApp, forceType, errCode)
End
Sub
Sub
LoadError(ByVal
swApp As
Object,
ByVal force
As
String,
ByVal errorCode
As
Long)
Select
Case
errorCode
Case
18
ErrorMsg(swApp, "You
cannot apply triangular and centered load distribution on multiple beams")
Case
19
ErrorMsg(swApp, "You
cannot apply a zero intensity load")
Case
20
ErrorMsg(swApp, "Invalid
selection")
Case
21
ErrorMsg(swApp, "The
table-driven data is invalid")
Case
22
ErrorMsg(swApp, "In the
table-driven distance data, the distance value from the previous row cannot
be greater than the distance value in the next row")
Case
Is <> 0
ErrorMsg(swApp, "No
forces applied")
Case
0
Debug.Print(force)
End
Select
End
Sub
Sub
ErrorMsg(ByVal
swApp As
Object,
ByVal
Message As
String)
swApp.SendMsgToUser2(Message, 0, 0)
swApp.RecordLine("'***
WARNING - General")
swApp.RecordLine("'*** "
& Message)
swApp.RecordLine("")
End
Sub
'''
<summary>
'''
The SldWorks swApp variable is pre-assigned for you.
'''
</summary>
Public
swApp As
SldWorks
End
Class