This example shows how to get and set beams and joints, create a mesh, and
apply a mesh control.
'----------------------------------------------------------------------------
' Preconditions:
' 1. Add the SOLIDWORKS Simulation as an add-in
' (in SOLIDWORKS, click Tools > Add-ins > SOLIDWORKS Simulation).
' 2. Add a reference to the SOLIDWORKS Simulation primary interop assembly
' (in the IDE, right-click the name of the project, select
' Add Reference, click the Browse tab, navigate to
' <SOLIDWORKS_install_dir>\api\redist\CLR2 and select
' SolidWorks.Interop.cosworks.dll).
' 3. Modify the path to the part document and solidworks materials.sldmat
' as needed.
' 4. Open the Immediate window.
'
' Postconditions:
' 1. A static study, frame, is created.
' 2. Beam information is shown in the Immediate window.
' 3. Plain Carbon Steel material is applied to all beams.
' 4. Joints are calculated for all beams, and
' a neutral axis is shown for each beam. The pinball tolerance
' value and unit are shown in the Immediate window.
' 5. A mixed mesh is created, and its type and state are shown
' in the Immediate window.
'
' NOTE: Step 5 can take several minutes to complete.
'
' 6. A mesh control is applied, and its various values are shown
' in the Immediate window.
'
' NOTES:
' * Beam elements are created by default for parts with
' structural members.
' * Because the part document is used elsewhere,
' do not save any changes when closing it.
'-------------------------------
Imports
SolidWorks.Interop.sldworks
Imports
SolidWorks.Interop.swconst
Imports
SolidWorks.Interop.cosworks
Imports
System
Imports
System.Diagnostics
Partial
Class
SolidWorksMacro
Public
Sub main()
Dim
swModel As
ModelDoc2
Dim
swModelDocExt As
ModelDocExtension
Dim
swSelMgr As
SelectionMgr
Dim
COSMOSWORKS As
CosmosWorks
Dim
COSMOSObject As
CwAddincallback
Dim
ActDoc As
CWModelDoc
Dim
StudyMngr As
CWStudyManager
Dim
Study As
CWStudy
Dim
BeamMgr As
CWBeamManager
Dim
BeamBody As
CWBeamBody
Dim
Joints As
CWJoints
Dim
Mesh As
CWMesh
Dim
MeshControl As
CWMeshControl
Dim
nbrBeamBodies As
Integer
Dim
beamBodyType As
Integer
Dim
ElementSize As
Double
Dim
Tolerance As
Double
Dim
errors As
Integer
Dim
warnings As
Integer
Dim
errCode As
Integer
Dim
j As
Integer
Dim
bApp As
Boolean
Dim
keepJointUpdates As
Boolean
Dim
status As
Boolean
Dim
selEntity1 As
Object
Dim
selEntity2 As
Object
Dim
selEntity3 As
Object
Dim
selEntity4 As
Object
Dim
selEntity5 As
Object
Dim
selEntity6 As
Object
Dim
selEntity7 As
Object
Dim
selEntity8 As
Object
Dim
selEntity9 As
Object
'
Get the SOLIDWORKS Simulation object
COSMOSObject = swApp.GetAddInObject("SldWorks.Simulation")
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)
'Open and get the active document
swModel = swApp.OpenDoc6("c:\Program
Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\weldments\weldment_box2.sldprt",
swDocumentTypes_e.swDocPART, swOpenDocOptions_e.swOpenDocOptions_Silent,
"",
errors, warnings)
swModelDocExt = swModel.Extension
swSelMgr = swModel.SelectionManager
ActDoc = COSMOSWORKS.ActiveDoc
If
ActDoc Is
Nothing
Then
ErrorMsg(swApp, "No active document.",
True)
'Create new static study named
frame
StudyMngr = ActDoc.StudyManager()
If
StudyMngr Is
Nothing
Then
ErrorMsg(swApp, "StudyMngr object not
there.",
True)
Study = StudyMngr.CreateNewStudy("frame",
swsAnalysisStudyType_e.swsAnalysisStudyTypeStatic,
swsMeshType_e.swsMeshTypeMixed, errCode)
If
Study Is
Nothing
Then
ErrorMsg(swApp, "Study not created.",
True)
' Get and set beam info
BeamMgr = Study.BeamManager
nbrBeamBodies = BeamMgr.BeamCount
Debug.Print("Beams...")
Debug.Print(" Number of beams: "
& nbrBeamBodies)
BeamBody = Nothing
For
j = 0 To (nbrBeamBodies
- 1)
BeamBody = BeamMgr.GetBeamBodyAt(j, errCode)
If
errCode <> 0 Then
ErrorMsg(swApp, "No beam body.",
True)
Debug.Print(" Name of beam
body: " & BeamBody.BeamBodyName)
beamBodyType = BeamBody.BeamType
If
beamBodyType = 0 Then
Debug.Print(" Type
of beam body: beam")
Else
Debug.Print(" Type
of beam body: truss")
End
If
bApp = BeamBody.SetLibraryMaterial("C:\Program
Files\SOLIDWORKS Corp\SOLIDWORKS\lang\english\sldmaterials\solidworks
materials.sldmat",
"Plain Carbon Steel")
If
bApp = False
Then
ErrorMsg(swApp, "No material applied.",
True)
BeamBody = Nothing
Next
j
' Calculate joints
Joints = BeamMgr.GetJointGroup(errCode)
Debug.Print(" ")
Debug.Print("Joints...")
If
errCode <> 0 Then
ErrorMsg(swApp, "No joint group.",
True)
Joints.JointsBeginEdit()
Joints.IncludeAllSelectedBeam =
True
Joints.IncludeDisplayNeutralAxis
= True
Joints.CalculateJoints()
Joints.JointsEndEdit()
keepJointUpdates = Joints.IncludeKeepModifiedJointOnUpdate
If
(keepJointUpdates = True)
Then
Debug.Print(" Keep
joint updates: yes")
Else
Debug.Print(" Keep
joint updates: no")
End
If
Debug.Print(" Overwrite
pinball value: " & Joints.IncludeTreatAsJointForClearanceLessThan)
Debug.Print(" Pinball radius: "
& Joints.PinBallRadius * 0.001)
Select
Case
Joints.PinBallRadiusUnit
Case
0
Debug.Print(" Pinball
radius unit: mm")
Case
1
Debug.Print(" Pinball
radius unit: cm")
Case
2
Debug.Print(" Pinball
radius unit: m")
Case
3
Debug.Print(" Pinball
radius unit: in")
Case
4
Debug.Print(" Pinball
radius unit: ft")
Case
5
Debug.Print(" Pinball
radius unit: ft-in")
Case
6
Debug.Print(" Pinball
radius unit: am")
Case
7
Debug.Print(" Pinball
radius unit: nm")
Case
8
Debug.Print(" Pinball
radius unit: micron")
Case
9
Debug.Print(" Pinball
radius unit: mil")
Case
10
Debug.Print(" Pinball
radius unit: microin")
End
Select
'
Mesh the part
Debug.Print("
")
Debug.Print("*** Creating a mesh
next, which can take several minutes. Please wait. ***")
Mesh = Study.Mesh
If
Mesh Is
Nothing
Then
ErrorMsg(swApp, "No mesh object.",
False)
Mesh.Quality = swsMeshQuality_e.swsMeshQualityHigh
Mesh.GetDefaultElementSizeAndTolerance(swsLinearUnit_e.swsLinearUnitMillimeters,
ElementSize, Tolerance)
errCode = Study.CreateMesh(swsLinearUnit_e.swsLinearUnitMillimeters,
ElementSize, Tolerance)
If
errCode <> 0 Then
ErrorMsg(swApp, "Mesh failed.",
True)
Debug.Print(" ")
Debug.Print("Mesh...")
Debug.Print(" Time to create
mesh (hh:mm:ss): " & Mesh.TimeToCompleteMesh)
Select
Case
Mesh.MeshType
Case
0
Debug.Print(" Mesh type:
solid")
Case
1
Debug.Print(" Mesh type:
midsurface")
Case
2
Debug.Print(" Mesh type:
surface")
Case
3
Debug.Print(" Mesh type:
mixed")
Case
4
Debug.Print(" Mesh type:
beam")
End
Select
Debug.Print(" Number
of mesh controls: " & Mesh.MeshControlCount)
Select
Case
Mesh.MeshState
Case
0
Debug.Print(" Mesh
state: no mesh")
Case
1
Debug.Print(" Mesh
state: exists and is current")
Case
2
Debug.Print(" Mesh
state: exists and is not current")
Case
3
Debug.Print(" Mesh
state: failed")
Case
4
Debug.Print(" Mesh
state: interrupted")
End
Select
'
Select structural members for mesh control
Debug.Print("")
Debug.Print("Mesh control...")
status = swModelDocExt.SelectByID2("Structural
Member1[4]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity1 = swSelMgr.GetSelectedObject6(2, -1)
status = swModelDocExt.SelectByID2("Structural
Member3[2]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity2 = swSelMgr.GetSelectedObject6(3, -1)
status = swModelDocExt.SelectByID2("Structural
Member3[3]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity3 = swSelMgr.GetSelectedObject6(4, -1)
status = swModelDocExt.SelectByID2("Structural
Member3[4]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity4 = swSelMgr.GetSelectedObject6(6, -1)
status = swModelDocExt.SelectByID2("Structural
Member3[1]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity5 = swSelMgr.GetSelectedObject6(8, -1)
status = swModelDocExt.SelectByID2("Structural
Member1[1]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity6 = swSelMgr.GetSelectedObject6(12, -1)
status = swModelDocExt.SelectByID2("Structural
Member5[1]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity7 = swSelMgr.GetSelectedObject6(14, -1)
status = swModelDocExt.SelectByID2("Structural
Member5[2]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity8 = swSelMgr.GetSelectedObject6(15, -1)
status = swModelDocExt.SelectByID2("Structural
Member1[3]",
"SOLIDBODY", 0,
0, 0, False,
0, Nothing,
0)
selEntity9 = swSelMgr.GetSelectedObject6(16, -1)
Dim
selEntities As
Object() =
{selEntity1, selEntity2, selEntity3, selEntity4, selEntity5, selEntity6,
selEntity7, selEntity8, selEntity9}
MeshControl = Mesh.ApplyMeshControl(selEntities, errCode)
Debug.Print(" Name of mesh
control: " & MeshControl.Name)
Debug.Print(" Element size for
mesh control: " & MeshControl.ElementSize)
Debug.Print(" Number of entities
in mesh control: " & MeshControl.EntityCount)
Debug.Print(" Number of elements
on a beam: " & MeshControl.NumofElementsforBeams)
Debug.Print(" State of mesh
control (0 = suppressed; 1 = not suppressed): "
& MeshControl.State)
End
Sub
'Error
routine
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
'''
<summary>
'''
The SldWorks swApp variable is pre-assigned for you.
'''
</summary>
Public
swApp As
SldWorks
End
Class