Solidworks VBA Macro - Add Symmetric Mate
If you are following my articles then will not be an issue for you.
In this article we did not use 🚀 UserForm for taking inputs, instead we use 🚀 Input Box for value input and 🚀 Message Box to notify user.
I hope you will also like this type of tutorials.
Thank you for reading.
Objective
In this article we create and understand VBA macro of adding Symmetric Mate in Assembly document.
This method is most updated method, so use this method if you want to add Symmetric Mate.
Results We Can Get
After running our macro, we successfully add Symmetric Mate as a result.
Below image shows the result we get.
We add Symmetric Mate in following steps.
- loop through each component in current assembly.
- Loop through each face.
- Get desired face.
- Add Symmetric Mate.
- Final Work
To get the correct result, please follow the steps correctly.
Macro Video
Below 🎬 video shows Adding Symmetric Mate from SOLIDWORKS VBA Macros.
Above video is just for visualization and there is no explanation.
I have explained every line in this article.
It is advisable to watch video, since it helps you to better understand the process.
VBA Macro
Below is the VBA macro for Symmetric Mate.
Option Explicit
' Variable for Solidworks Application
Dim swApp As SldWorks.SldWorks
' Variable for Solidworks document
Dim swDoc As SldWorks.ModelDoc2
' Variable for Solidworks Assembly
Dim swAssembly As SldWorks.AssemblyDoc
' Variable for Solidworks Component
Dim swComponent As SldWorks.Component2
' Variable for Solidworks Body
Dim swBody As SldWorks.Body2
' Variable for Solidworks Mate Feature
Dim swMateFeature As SldWorks.Feature
' Variable for Solidworks Face
Dim swFace As SldWorks.Face2
' Variable for Solidworks Face List
Dim vFaces(1 To 2) As SldWorks.Face2
' Variable for Solidworks Mate Feature Data
Dim swMateData As SldWorks.MateFeatureData
' Variable for Solidworks Symmetric Mate Feature Data
Dim swSymmetricMateData As SldWorks.SymmetricMateFeatureData
' Program to add Symmetric Mate
Sub main()
' Set Solidworks Application variable to current application
Set swApp = Application.SldWorks
' Set Solidworks document variable to currently opened document
Set swDoc = swApp.ActiveDoc
' Check if Solidworks document is opened or not
If swDoc Is Nothing Then
MsgBox "Solidworks document is not opened."
Exit Sub
End If
' Set Solidworks Assembly document
Set swAssembly = swDoc
' Variable for List of elements
Dim vArray As Variant
' Get Components list in opened assembly
vArray = swAssembly.GetComponents(True)
' Variable for component Index
Dim componentIndex As Integer
' Loop Components List
For componentIndex = 0 To UBound(vArray)
' Set Solidworks Component variable
Set swComponent = vArray(componentIndex)
' Calling this function
GetFaces swComponent, componentIndex
' If we already seleted our faces
If Not vFaces(2) Is Nothing Then
Exit For ' Break the loop
End If
Next
' Create Assembly Mate Data
Set swMateData = swAssembly.CreateMateData(swMateType_e.swMateSYMMETRIC)
' Set Symmetric Mate data to Assembly Mate Data
Set swSymmetricMateData = swMateData
' Set Entities to Mate
swSymmetricMateData.EntitiesToMate = vFaces
' Set Symmetric Mate faces
swSymmetricMateData.SymmetryPlane = swAssembly.FeatureByName("SYMMETRY PLANE")
' Add Symmetric Mate
Set swMateFeature = swAssembly.CreateMate(swSymmetricMateData)
' Check if Mate is added or not
If swMateFeature Is Nothing Then
MsgBox "Failed to Add Mate."
swDoc.ClearSelection2 True
Exit Sub
End If
' Empty Face Array
Set vFaces(1) = Nothing
Set vFaces(2) = Nothing
' Clear all selection
swDoc.ClearSelection2 True
' Zoom view to fit
swDoc.ViewZoomtofit2
' Rebuild assembly
swDoc.ForceRebuild3 True
End Sub
' Function to get required face for Symmetric mate
Function GetFaces(component As SldWorks.Component2, componentIndex As Integer)
' Get body of current component
Set swBody = component.GetBody
' Get First face
Set swFace = swBody.GetFirstFace
' Variable to store Message Box result
Dim resp As VbMsgBoxResult
' Variable to count added faces
Dim faceNumber As Integer: faceNumber = 0
' Loop through all Faces
Do While Not swFace Is Nothing
' Clear selection
swDoc.ClearSelection2 True
' Select current face
swFace.Select True
' Ask user to confirm this selection
resp = MsgBox("Is this correct Face?", vbYesNo, "Select Face")
' Check if user response if Yes
If resp = vbYes Then
' Add current face to List of Faces
Set vFaces(faceNumber + 1) = swFace
' Increment face count
faceNumber = faceNumber + 1
End If
' When both faces are added
If faceNumber = 2 Then
Exit Function
End If
' Get next face
Set swFace = swFace.GetNextFace
Loop
End Function
Prerequisite
There are some prerequisites for this article.
-
Knowledge of VBA programming language is ❗required.
-
We use existing parts in Assembly document.
-
One component is fully constraint and other component is Float as shown in below image.
We will apply checks in this article, so the code we write, should be error free.
Steps To Follow
This VBA macro can be divided into following sections:
- Create and initialize required variables
- Get components and Loop through them
- Get desired faces
- Add Symmetric Mate
- Final Work
Every section with each line is explained below.
I also give some links (see icon 🚀) so that you can go through them if there are anything I explained in previous articles.
Create and Initialize required variables
Option Explicit
- Purpose: Above line forces us to define every variable we are going to use.
- Reference: 🚀 SOLIDWORKS Macros - Open new Part document article.
' Variable for Solidworks application
Dim swApp As SldWorks.SldWorks
- Purpose: In above line, we create a variable for Solidworks application.
- Variable Name:
swApp - Type:
SldWorks.SldWorks - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Variable for Solidworks document
Dim swDoc As SldWorks.ModelDoc2
- Purpose: In above line, we create a variable for Solidworks document.
- Variable Name:
swDoc - Type:
SldWorks.ModelDoc2 - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Variable for Solidworks Assembly
Dim swAssembly As SldWorks.AssemblyDoc
- Purpose: In above line, we create a variable for Solidworks Assembly.
- Variable Name:
swAssembly - Type:
SldWorks.AssemblyDoc - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Variable for Solidworks Component
Dim swComponent As SldWorks.Component2
- Purpose: In above line, we create a variable for Solidworks Component.
- Variable Name:
swComponent - Type:
SldWorks.Component2. - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Variable for Solidworks Body
Dim swBody As SldWorks.Body2
- Purpose: In above line, we create a variable for Solidworks Component.
- Variable Name:
swBody - Type:
SldWorks.Body2. - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Variable for Solidworks Mate Feature
Dim swMateFeature As SldWorks.Feature
- Purpose: In above line, we create a variable for Solidworks Mate Feature.
- Variable Name:
swMateFeature - Type:
SldWorks.Feature. - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Variable for Solidworks Face
Dim swFace As SldWorks.Face2
- Purpose: In above line, we create a variable for Solidworks Face.
- Variable Name:
swFace - Type:
SldWorks.Face2. - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Variable for Solidworks Face List
Dim vFaces(1 To 2) As SldWorks.Face2
- Purpose: Define 🚀 Array of Face2.
- Variable Name:
vFaces - Type:
Face2 - Length of Array: (1 To 2)
- Reference: Please visit
- For Arrays in VBA : 🚀 Array on this website.
' Variable for Solidworks Mate Feature Data
Dim swMateData As SldWorks.MateFeatureData
- Purpose: In above line, we create a variable for Solidworks Mate Feature Data.
- Variable Name:
swMateData - Type:
SldWorks.MateFeatureData. - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Variable for Solidworks Symmetric Mate Feature Data
Dim swSymmetricMateData As SldWorks.SymmetricMateFeatureData
- Purpose: In above line, we create a variable for Solidworks Symmetric Mate Feature Data.
- Variable Name:
swAngleMateData - Type:
SldWorks.AngleMateFeatureData. - Reference: Please visit 🚀 online SOLIDWORKS API Help.
These all are our global variables.
They are SOLIDWORKS API Objects.
' Program to add Symmetric Mate
Sub main()
End Sub
- In above line, we create main Program to add Symmetric Mate in assembly.
- This is a
Subprocedure which has name ofmain. - This procedure hold all the statements (instructions) we give to computer.
- Reference: Detailed information 🚀 VBA Sub and Function Procedures article of this website.
' Set Solidworks Application variable to current application
Set swApp = Application.SldWorks
- In above line, we set value of
swAppvariable. - This value is currently opened Solidworks application.
' Set Solidworks document variable to currently opened document
Set swDoc = swApp.ActiveDoc
- In above line, we set value of
swDocvariable. - This value is currently opened part document.
' Check if Solidworks document is opened or not
If swDoc Is Nothing Then
MsgBox ("Solidworks document is not opened.")
Exit Sub
End If
- In above code block, we check if we successfully set the value of
swDocvariable. - We use 🚀 IF statement for checking.
- Condition:
swDoc Is Nothing - When this condition is
True,- We show and 🚀 message window to user.
- Message: SOLIDWORKS document is not opened.
- Then we stop our macro here.
' Set Solidworks Assembly document
Set swAssembly = swDoc
- In above line, we set value of
swAssemblyvariable. - This value is
swDocvariable.
Get Components and Loop through them
In this section, we Get Components and Loop through them.
' Variable for List of elements
Dim vArray As Variant
- Purpose: In above line, we create a variable for List of elements.
- Variable Name:
vArray - Type:
Variant
' Get Components list in opened assembly
vArray = swAssembly.GetComponents(True)
- In above line, we set the value of
vArrayvariable. - We set value by
GetComponentsmethod ofswAssemblyvariable.
' Variable for component Index
Dim componentIndex As Integer
- In above line, we create a variable for component Index as a counter.
- Variable Name:
componentIndex - Type:
Integer
' Loop Components List
For componentIndex = 0 To UBound(vArray)
Next
- In above line, we create a
Forloop. - This loops start from
i = 0to maximum number of items invArraywe select.
' Set Solidworks Component variable
Set swComponent = vArray(componentIndex)
- In above line, we set value of
swComponentvariable. - This value is current value of array
vArray.
Get desired face
In this section we get desired face for Symmetric mate.
' Calling this function
GetFaces swComponent, componentIndex
- In above line, we call a function.
- Function Name:
GetFaces - Function Parameters: They are
swComponentcomponentIndex
' Function to select required face for Symmetric mate
Function GetFaces(component As SldWorks.Component2, componentIndex As Integer)
End Function
- In above line, we create a Function to select required face for Symmetric mate.
- This is a
Functionprocedure which has name ofGetFaces. - This procedure hold all the statements (instructions) for select required face for Symmetric mate.
- Reference: Detailed information 🚀 VBA Sub and Function Procedures article of this website.
This function has 2 parameters as follows:
component As SldWorks.Component2componentIndex As Integer
' Get body of current component
Set swBody = component.GetBody
- In above line, we set value of
swBodyvariable. - Value of
swBodyvariable is set byGetBodymethod ofcomponentvariable.
' Get First face
Set swFace = swBody.GetFirstFace
- In above line, we set value of
swFacevariable. - Value of
swFacevariable is set byGetFirstFace, which is part ofswBodyvariable.
' Variable to store Message Box result
Dim resp As VbMsgBoxResult
- Purpose: In above line, we create a variable to store Message Box result.
- Variable Name:
resp - Type:
VbMsgBoxResult
' Variable to count added faces
Dim faceNumber As Integer: faceNumber = 0
- Purpose: In above line, we create a variable to count number of faces added.
- At the same time we set the value of this variable
faceNumberto0i.e.faceNumber = 0
- At the same time we set the value of this variable
- Variable Name:
faceNumber - Type:
Integer
' Loop through all Faces
Do While Not swFace Is Nothing
Loop
- In above line, we loop through all Faces.
' Clear all selection
swDoc.ClearSelection2 True
- In above line, we clear all selection.
- For this we use
ClearSelection2method which is part of SOLIDWORKS Document variable i.eswDocvariable.
' Select current face
swFace.Select True
- In above line, we select current face.
This function is not available in 🚀 Solidworks Face object.
Since 🚀 Solidworks Face object is also an 🚀 Solidworks Entity object, we can use methods from 🚀 Solidworks Entity object.
' Ask user to confirm this selection
resp = MsgBox("Is this correct Face?", vbYesNo, "Select Face")
- In above line, we ask user to confirm this selection.
- We do this in following steps.
- Show a Message Box to user as shown below.
- Store user response in
respvariable.
' Check if user response if Yes
If resp = vbYes Then
End If
- In above code block, we check if user response if Yes.
- We use 🚀 IF statement for checking.
- Condition:
resp = vbYes
' Add current face to List of Faces
Set vFaces(componentIndex + 1) = swFace
- When user response if Yes, then above code execute.
- In above line, we add current face to List of Faces.
' Increment face count
faceNumber = faceNumber + 1
- In above line, we Increment face count variable i.e.
faceNumberby 1.
' When both faces are added
If faceNumber = 2 Then
Exit Function
End If
- In above code block, we check if
faceNumberis 2. - We use 🚀 IF statement for checking.
- Condition:
faceNumber = 2- When this condition is True, then we exit
GetFacesfunction.
- When this condition is True, then we exit
' Get next face
Set swFace = swFace.GetNextFace
- In above line, we set the value of
swFacevariable. - This is done by
GetNextFacemethod ofswFacevariable.
Add Symmetric Mate
In this section, we add Symmetric Mate.
' Create Assembly Mate Data
Set swMateData = swAssembly.CreateMateData(swMateType_e.swMateSYMMETRIC)
- In above line, we set the value of
swMateDatavariable. - We set value by
CreateMateData()method. - This
CreateMateData()method is part ofswAssemblyvariable. - This
CreateMateData()method takes following parameter.-
Type: Type of mate to create as defined in
swMateType_ein below table.Member Description swMateANGLE6 swMateCAMFOLLOWER9 swMateCOINCIDENT0 swMateCONCENTRIC1 swMateCOORDINATE20 swMateDISTANCE5 swMateGEAR10 swMateHINGE22 swMateLINEARCOUPLER18 swMateLOCK16 swMateLOCKTOSKETCH12 swMateMAGNETIC25 swMateMAXMATES14 swMatePARALLEL3 swMatePATH15 swMatePERPENDICULAR2 swMatePROFILECENTER24 swMateRACKPINION13 swMateSCREW17 swMateSLIDER23 swMateSLOT21 swMateSYMMETRIC8 swMateTANGENT4 swMateUNIVERSALJOINT19 swMateUNKNOWN7 swMateWIDTH11
-
- Since we want to add Symmetric mate, hence we use value
swMateSYMMETRICas type. - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Set Symmetric Mate data to Assembly Mate Data
Set swSymmetricMateData = swMateData
- In above line, we set Symmetric Mate data to previously created Assembly Mate data.
- We set value of variable
swSymmetricMateDatato variableswMateData. - Reference: Please visit 🚀 online SOLIDWORKS API Help.
' Set Entities to Mate
swSymmetricMateData.EntitiesToMate = vFaces
- In above line, we set Enitites in this Symmetric mate.
- In our case, we want faces in
vFacesvariable to mate.
' Set Symmetric Mate faces
swSymmetricMateData.SymmetryPlane = swAssembly.FeatureByName("SYMMETRY PLANE")
- In above line, we set the Symmetry plane of this Symmetry mate.
- For this we select a plane we created in assembly.
- Plane name:
SYMMETRY PLANE
- Plane name:
- We use
FeatureByName()method to select the plane.- This method is part of
swAssemblyvariable. - This method takes one parameter i.e. Name of the feature.
- This method return selected object.
- This method is part of
' Add Symmetric Mate
Set swMateFeature = swAssembly.CreateMate(swSymmetricMateData)
-
In above line, we set the value of variable
swMateFeaturebyCreateMate()method. -
This
CreateMate()method takes following parameters as explained:-
MateData - Mate-specific object:
Mate-specific object IAngleMateFeatureDataICamFollowerMateFeatureDataICoincidentMateFeatureDataIConcentricMateFeatureDataIDistanceMateFeatureDataIGearMateFeatureDataIHingeMateFeatureDataILinearCouplerMateFeatureDataILockMateFeatureDataIParallelMateFeatureDataIPerpendicularMateFeatureDataIProfileCenterMateFeatureDataIRackPinionMateFeatureDataIScrewMateFeatureDataISlotMateFeatureDataISymmetricMateFeatureDataITangentMateFeatureDataIUniversalJointMateFeatureDataIWidthMateFeatureData
-
-
Return Value : This
CreateMate()method return 👉 Mate2 data object. -
In our code, I have used following values:
Parameter Name Value Used MateData swSymmetricMateData
Reference: For more details about
- Solidworks AssemblyDoc details: 🚀 online Solidworks API Help for Solidworks Feature Manager.
- CreateMate Method: 🚀 online Solidworks API Help for
CreateMateMethod.
' Check if Mate is added or not
If swMateFeature Is Nothing Then
MsgBox "Failed to Add Mate."
swDoc.ClearSelection2 True
Exit Sub
End If
- In above code block, we check if we successfully added Symmetric Mate or not.
- We use 🚀 IF statement for checking.
- Condition:
swMateFeature Is Nothing - When this condition is
True,- We show and 🚀 message window to user.
- Message: *Failed to Add Mate.
- After that we clear the selection.
- Then we stop our macro here.
Now we run the macro and after running macro we get Symmetric Mate as shown in below image.
Final work
In this section, after adding Symmetric Mate, we have to do some cleaning work so that we can use this macro frequently.
' Empty Face Array
Set vFaces(1) = Nothing
Set vFaces(2) = Nothing
- In above line, we empty our face array i.e.
vFacesvariable. - We set value of every instance to
Nothing.
' Clear all selection
swDoc.ClearSelection2 True
- In above line, we clear all selection.
- For this we use
ClearSelection2method which is part of SOLIDWORKS Document variable i.eswDocvariable.
' View zoom to fit
swDoc.ViewZoomtofit2
- In above line, we make our view zoom to fit the model.
- For this we use
ViewZoomtofit2method which is part of SOLIDWORKS Document variable i.eswDocvariable.
' Rebuild assembly
swDoc.ForceRebuild3 True
- In above line, we Rebuild assembly.
- For this we use
ForceRebuild3method which is part of SOLIDWORKS Document variable i.eswDocvariable.
This is it !!!
I hope my efforts will helpful to someone!
If you found anything to add or update, please let me know on my e-mail.
Hope this post helps you to Symmetric Mate with SOLIDWORKS VBA Macros.
For more such tutorials on SOLIDWORKS VBA Macro, do come to this website after sometime.
If you like the post then please share it with your friends also.
Do let me know by you like this post or not!
Till then, Happy learning!!!


