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