7 Replies Latest reply on May 4, 2015 5:15 AM by Charles Robin

    Add component with specific configuration

    Charles Robin

      Hi i would like to add a component with a specifique congiration (the string is "configpart" in the code)


      But the added part is ever with the last used configiguration.


      Anyone know what is wrong in the code?


      thank you







      ' Preconditions: Open



      ' install_dir\Program Files\SolidWorks\samples\tutorial\toolbox\lens_mount.sldasm






      ' Postconditions:

      ' 1. The specified component, camtest.sldprt, and a mate,

      '    top_coinc_camtest-1, are added to the assembly.

      ' 2. Examine the FeatureManager design tree to verify the mate.


      ' NOTE: Because the models are used elsewhere, do not

      ' save any changes when closing them.






      Option Explicit




      Dim swApp As New SldWorks.SldWorks



      Dim swModel As ModelDoc2



      Dim swDocExt As ModelDocExtension



      Dim swAssy As AssemblyDoc



      Dim tmpPath As String



      Dim tmpObj As SldWorks.ModelDoc2



      Dim boolstat As Boolean



      Dim strings As Variant



      Dim swcomponent As SldWorks.Component2



      Dim matefeature As SldWorks.Feature



      Dim MateName As String



      Dim FirstSelection As String



      Dim SecondSelection As String



      Dim Alignment As swMateAlign_e



      Dim strCompName As String



      Dim AssemblyTitle As String



      Dim AssemblyName As String



      Dim errors As Long



      Dim warnings As Long



      Dim mateError As Long



      Dim Configpart As String






      Sub Main()




          Set swApp = CreateObject("SldWorks.Application")



          Set swModel = swApp.ActiveDoc



          ' Get title of assembly document



          AssemblyTitle = swModel.GetTitle



          ' Split the title into two strings using the period (.) as the delimiter



          strings = Split(AssemblyTitle, ".")



          ' You'll use AssemblyName when mating the component with the assembly



          AssemblyName = strings(0)



          'Debug.Print AssemblyName




          boolstat = True



          Dim strCompModelname As String



          strCompModelname = "Vis Tête cylindrique à 6 Pans Creux.SLDPRT"




          ' Because the component resides in the same folder as the assembly, get



          ' the assembly's path and use it when opening the component



          'tmpPath = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, "\"))

          tmpPath = "Z:\Redilec\PLANS\SW\Accessoires\Visserie\"



          ' Open the component


          Configpart = "Vis Tête cylindrique à 6 Pans Creux M5x30"



          Set tmpObj = swApp.OpenDoc6(tmpPath + strCompModelname, swDocPART, 0, Configpart, errors, warnings)



          ' Check to see if the file is read-only or cannot be found; display error



          ' messages if either



          If warnings = swFileLoadWarning_ReadOnly Then



              MsgBox "This file is read-only."



              boolstat = False



          End If



          If tmpObj Is Nothing Then



              MsgBox "Cannot locate the file."



              boolstat = False



          End If




          'Re-activate the assembly so that you can add the component to it



          Set swModel = swApp.ActivateDoc2(AssemblyTitle, True, errors)






          Set swAssy = swModel




          ' Add the camtest part to the assembly document.



          ' Currently only one option, swAddComponentConfigOptions_e.swAddComponentConfigOptions_CurrentSelectedConfig,



          ' works for adding a part using AddComponent5. The other options, swAddComponentConfigOptions_e.swAddComponentConfigOptions_NewConfigWithAllReferenceModels and



          ' swAddComponentConfigOptions_e.swAddComponentConfigOptions_NewConfigWithAsmStructure, work only for adding assemblies using AddComponent5.



         Set swcomponent = swAssy.AddComponent5(strCompModelname, swAddComponentConfigOptions_CurrentSelectedConfig, "", True, Configpart, -1, -1, -1)




          ' Get the name of the component for the mate



          strCompName = swcomponent.Name2()



          ' Create the name of the mate and the names of the planes to use for the mate



          MateName = "top_coinc_" + strCompName



          FirstSelection = "Plan1@" + strCompName & "@" + AssemblyName



          SecondSelection = "Plan de face@" + AssemblyName






          Set swDocExt = swModel.Extension




          swModel.ClearSelection2 (True)




          ' Select the planes for the mate



          boolstat = swDocExt.SelectByID2(FirstSelection, "PLANE", 0, 0, 0, True, 1, Nothing, swSelectOptionDefault)



          boolstat = swDocExt.SelectByID2(SecondSelection, "PLANE", 0, 0, 0, True, 1, Nothing, swSelectOptionDefault)




          ' Add the mate

          Set matefeature = swAssy.AddMate3(swMateCOINCIDENT, swMateAlignALIGNED, False, 0, 0, 0, 0, 0, 0, 0, 0, False, mateError)




          matefeature.Name = "mate"








      End Sub