Is het mogelijk om een configuratie te activeren die afhankelijk is van een waarde?

Hoi allemaal

Ik ben nieuw op het forum en ik hoop dat ik op de juiste plek ben om mijn vraag te stellen. Ik werk onder Solidworks 2018 en ik wil graag configuraties aansturen volgens een variabele.

Ik heb een hoofdassemblage waarin ik niet meer dan één configuratie wil hebben. Deze hoofdassemblage bevat subassemblages en onderdelen die meerdere configuraties hebben.

Ik heb vergelijkingen gemaakt in mijn hoofdassemblage waarmee ik schetsdimensies kan maken die behoren tot de subassemblages en onderdelen in de hoofdassemblage. Alle vergelijkingen worden aangestuurd door 2 eigenschappen (hoogte en lengte) die ik handmatig aanpas volgens mijn behoeften.

Naast schetsafmetingen moet ik de configuraties in de subassemblages en onderdelen controleren . Ik zou dit graag willen doen door middel van vergelijkingen, omdat ik niet goed ben in macro. Ik heb het echter niet gevonden en ik weet niet of het mogelijk is.

Voorbeeld: Als ik een waarde kleiner dan of gelijk aan 10 invoert voor de lengte en een waarde kleiner dan of gelijk aan 2 voor de hoogte, wil ik configuratie A van deelmerk 1 en configuratie D van deel 3 weergeven in het hoofdmerk, of als ik een waarde groter dan 10 invoert voor lengte en een waarde groter dan 2 voor hoogte,  Ik wil graag configuratie B van subassemblage 1 en configuratie A van deel 3 weergeven in de hoofdassemblage.

Kan iemand mij vertellen of dit mogelijk is en zo ja, hoe?

Bij voorbaat dank

Vriendelijke groeten

Hallo, U kunt deze macro gebruiken die u zal vragen om de lengte en hoogte in te voeren, vervolgens de waarden te wijzigen en de configuraties van assemblage1 en deel3 te wijzigen

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 like

Ik kan mijn antwoord niet bewerken, maar de regel: SetEquationValue "Width", myHeight
moet zijn: SetEquationValue "Height", myHeight
Natuurlijk moet je deze naam toch vervangen door de naam van je lengtevariabele (hetzelfde geldt voor de lengte)

Naast het gebruik van een macro is de andere mogelijkheid om een deelfamilie te gebruiken en de logica in het Excel-bestand te integreren. Voorbeeld

Hallo JeromeP,

Dank u voor uw antwoord. Ik ga je oplossing testen.

Het wordt nieuw voor mij, ik heb al kleine macro's gebruikt in Excel, maar een primeur in Solidworks.

Vriendelijke groeten