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"

 

 

 

    swModel.ViewZoomtofit2

 

 

 

End Sub

Outcomes