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"

       

       

       

          swModel.ViewZoomtofit2

       

       

       

      End Sub