Est-il possible d'activer une configuration sous condition d'une valeur?

Bonjour à tous,

Je suis nouveau sur le forum et j'espère être au bon endroit pour poser ma question. Je travaille sous Solidworks 2018 et je voudrais piloté des configurations selon une variable.

Je possède un assemblage principal dans lequel je ne souhaite pas avoir plus d'une configuration. Cet assemblage principal contient des sous-assemblages et des pièces qui ont plusieurs configurations.

J'ai créé dans mon assemblage principal des équations qui me permette de piloter des cotes d'esquisses appartenant au sous-assemblages et aux pièces contenus dans l'assemblage principal. Toutes les équations sont pilotées par 2 propriétés (Hauteur et Longueur) que je modifie manuellement selon mon besoin.

En plus des cotes d'esquisses, j'ai besoin de piloter les configurations contenues dans les sous-assemblages et les pièces. Je voudrais le faire par les équations, car je ne suis pas bon en macro. Cependant, je n'ai pas trouvé et je ne sais pas si cela est possible.

Ex : Si je rentre une valeur inférieure ou égale à 10 pour la longueur et une valeur inférieure ou égale à 2 pour la hauteur, je voudrais afficher la configuration A du sous-assemblage 1 et le configuration D de la pièce 3 dans l'assemblage principal, ou si je rentre une valeur supérieure à 10 pour la longueur et une valeur supérieure à 2 pour la hauteur, je voudrais afficher la configuration B du sous-assemblage 1 et le configuration A de la pièce 3 dans l'assemblage principal.

Quelqu'un peut-il me dire si cela est possible et si oui comment ?

Merci d'avance

Cordialement,

Bonjour, Tu peux utiliser cette macro qui demandera d'entrer la longueur et la hauteur, puis changera les valeurs et changera les configurations de l'assemblage1 et de la pièce3

Option Explicit
Dim swModel As SldWorks.ModelDoc2
Sub main()
   Dim swApp As SldWorks.SldWorks
   Dim maLongueur As Double
   Dim maHauteur As Double

   Set swApp = Application.SldWorks
   Set swModel = swApp.ActiveDoc

   maLongueur = InputBox("Entrer la longueur")
   maHauteur = InputBox("Entrer la hauteur")

   ' change les variables de longueur et largeur
   SetEquationValue "Longueur", maLongueur
   SetEquationValue "Largeur", maHauteur

   If maLongueur <= 10 And maHauteur <= 2 Then
       ' change la configuration de l'assemblage Assemblage1 à ConfigA
       ChangeConfig "Assemblage1", "ConfigA"
       ' change la configuration de la pièce piece3 à ConfigD
       ChangeConfig "piece3", "ConfigD"
   Else
       ' change la configuration de l'assemblage Assemblage1 à ConfigB
       ChangeConfig "Assemblage1", "ConfigB"
       ' change la configuration de la pièce piece3 à ConfigA
       ChangeConfig "piece3", "ConfigA"
   End If

   swModel.ForceRebuild3 True
End Sub


Sub SetEquationValue(eqName As String, eqValue As Double)
    Dim swEqMgr As SldWorks.EquationMgr
    Set swEqMgr = swModel.GetEquationMgr
    Dim i As Integer
    For i = 0 To swEqMgr.GetCount - 1
        Debug.Print swEqMgr.Equation(i)
        Dim Name As String
        Name = Split(swEqMgr.Equation(i), """")(1)
        Debug.Print Name
        If UCase(eqName) = UCase(Name) Then
            swEqMgr.Equation(i) = """" & eqName & """=" & eqValue
            Exit Sub
        End If
    Next
End Sub

Sub ChangeConfig(CompName As String, ConfigName As String)
   Dim swConf As SldWorks.Configuration
   Set swConf = swModel.GetActiveConfiguration
   TraverseComponent swConf.GetRootComponent3(True), CompName, ConfigName
End Sub

Sub TraverseComponent(swParentComp As SldWorks.Component2, CompName As String, ConfigName As String)
    Dim vChildComp As Variant
    Dim swChildComp As SldWorks.Component2
    Dim i As Long
    vChildComp = swParentComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        If InStr(swChildComp.Name2, CompName) > 0 Then
            'Debug.Print swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"
            swChildComp.ReferencedConfiguration = ConfigName
            Exit Sub
        End If
        TraverseComponent swChildComp, CompName, ConfigName
    Next
End Sub

 

1 « J'aime »

Je n'arrive pas à éditer ma réponse mais la ligne: SetEquationValue "Largeur", maHauteur
devrait être : SetEquationValue "Hauteur", maHauteur
Bien sur, il te faudra de toute facon remplacer ce nom par le nom de ta variable de hauteur (pareil pour la longueur)

A part l'utilisation d'une macro, l'autre possibilité est d'utiliser une famille de pièce est d'intégrer la logique dans le fichier Excel. Exemple

Bonjour JeromeP,

Merci pour ta réponse. Je vais tester ta solution.

Ca va être nouveau pour moi, j'ai déjà utiliser des petite macro dans Excel, mais une première dans Solidworks.

Cordialement,