ds-blue-logo
Preview  |  SOLIDWORKS USER FORUM
Use your SOLIDWORKS ID or 3DEXPERIENCE ID to log in.
NWNicholas Wilde13/02/2016

I'm trying to loop through existing concentric mates and rotation locking only certain ones. For some reason EditMate3​​ doesn't want to enable the Lock rotation. I can get the same macro to uncheck the Lock Rotation by setting LockRotation to false, but when I set it to true it does nothing. Any help is appreciated.

I'm using the Edit Mate Example as a base.

I find it ironic that the SolidWorks Jive forum doesn't support VBA .

Option Explicit

Sub main()

    Dim swApp               As SldWorks.SldWorks

    Dim swModel             As SldWorks.ModelDoc2

    Dim swFeat              As SldWorks.Feature

    Dim swBomFeat           As SldWorks.BomFeature

    Dim swSubFeat           As SldWorks.Feature

    Dim swBOMAnnotation     As SldWorks.BomTableAnnotation

    Dim swBOMFeature        As SldWorks.BomFeature

    Dim swTableAnn          As SldWorks.TableAnnotation

    Dim blnRtn As Boolean

    Dim swMateEnt()             As SldWorks.MateEntity2

    Dim i As Integer

    Dim swMate                  As SldWorks.Mate2

    Dim nRetVal As Long

   

    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

    Set swFeat = swModel.FirstFeature

   

    Do While Not swFeat Is Nothing

        If swFeat.GetTypeName2 = "MateGroup" Then

            Set swSubFeat = swFeat.GetFirstSubFeature                           ' Get the features of the drawing

            Do While Not swSubFeat Is Nothing

                ' If swSubFeat.GetTypeName2 = "MateConcentric" Then

                If swSubFeat.Name = "Concentric165" Then

                    Debug.Print "  Feature Name : " & swSubFeat.Name

                    Debug.Print "  Feature Type Name : " & swSubFeat.GetTypeName

                    Set swMate = swSubFeat.GetSpecificFeature2

                    For i = 0 To swMate.GetMateEntityCount - 1

                        blnRtn = SelectMateEntity(swApp, swModel, swMate.MateEntity(i), 1)

                    Next i

                    blnRtn = swSubFeat.Select2(True, 0)

                    swModel.EditMate3 _

                        swMate.Type, _

                        swMate.Alignment, _

                        swMate.Flipped, _

                        0#, _

                        swMate.MaximumVariation, _

                        swMate.MinimumVariation, _

                        0#, _

                        0#, _

                        0#, _

                        swMate.MaximumVariation, _

                        swMate.MinimumVariation, _

                        False, _

                        True, _

                        0, _

                        nRetVal

                    Debug.Print "nRetVal: " & nRetVal

                    blnRtn = swModel.EditRebuild3

                    Exit Sub

                End If

                Set swSubFeat = swSubFeat.GetNextSubFeature

            Loop

        End If

        Set swFeat = swFeat.GetNextFeature

    Loop

End Sub

Function SelectMateEntity(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swMateEnt As SldWorks.MateEntity2, nMark As Long) As Boolean

    Dim swEnt                   As SldWorks.Entity

    Dim swSelMgr                As SldWorks.SelectionMgr

    Dim swSelData               As SldWorks.SelectData

    Dim bRet                    As Boolean

    Select Case swMateEnt.ReferenceType

        Case swMateEntity2ReferenceType_Point, _

                swMateEntity2ReferenceType_Line, _

                swMateEntity2ReferenceType_Circle, _

                swMateEntity2ReferenceType_Plane, _

                swMateEntity2ReferenceType_Cylinder, _

                swMateEntity2ReferenceType_Sphere, _

                swMateEntity2ReferenceType_Cone, _

                swMateEntity2ReferenceType_SweptSurface

            Set swSelMgr = swModel.SelectionManager

            Set swSelData = swSelMgr.CreateSelectData

            Set swEnt = swMateEnt.Reference

            swSelData.Mark = nMark

            bRet = swEnt.Select4(True, swSelData)

            SelectMateEntity = bRet

            Exit Function

        Case swMateEntity2ReferenceType_Set, _

                swMateEntity2ReferenceType_MultipleSurface, _

                swMateEntity2ReferenceType_GenSurface, _

                swMateEntity2ReferenceType_Ellipse, _

                swMateEntity2ReferenceType_GeneralCurve, _

                swMateEntity2ReferenceType_UNKNOWN

        Case Else

    End Select

    SelectMateEntity = False

End Function