AnsweredAssumed Answered

Add component with specific configuration

Question asked by Charles Robin on Apr 29, 2015
Latest reply on May 4, 2015 by 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