Hallo ihr alle
Ich bin neu im Forum und hoffe, dass ich am richtigen Ort bin, um meine Frage zu stellen. Ich arbeite unter Solidworks 2018 und möchte Konfigurationen nach einer Variablen steuern.
Ich habe eine Hauptassembly, in der ich nicht mehr als eine Konfiguration haben möchte. Diese Hauptbaugruppe enthält Unterbaugruppen und Teile, die über mehrere Konfigurationen verfügen.
Ich habe Gleichungen in meiner Hauptbaugruppe erstellt, mit denen ich Skizzenbemaßungen steuern kann, die zu den Unterbaugruppen und Teilen gehören, die in der Hauptbaugruppe enthalten sind. Alle Gleichungen werden von 2 Eigenschaften (Höhe und Länge) gesteuert, die ich manuell nach meinen Bedürfnissen ändere.
Zusätzlich zu den Skizzenbemaßungen muss ich die Konfigurationen steuern , die in den Unterbaugruppen und Teilen enthalten sind. Ich würde dies gerne mit Gleichungen tun, weil ich nicht gut in Makros bin. Allerdings habe ich es nicht gefunden und weiß nicht, ob es möglich ist.
Beispiel: Wenn ich für die Länge einen Wert kleiner oder gleich 10 und für die Höhe einen Wert kleiner oder gleich 2 eingebe, möchte ich die Konfiguration A der Unterbaugruppe 1 und die Konfiguration D von Teil 3 in der Hauptbaugruppe anzeigen, oder wenn ich einen Wert größer als 10 für die Länge und einen Wert größer als 2 für die Höhe eingebe, Ich möchte Konfiguration B der Unterbaugruppe 1 und Konfiguration A von Teil 3 in der Hauptbaugruppe anzeigen.
Kann mir jemand sagen, ob das möglich ist und wenn ja, wie?
Vielen Dank im Voraus
Herzliche Grüße
Hallo, Sie können dieses Makro verwenden, das Sie auffordert, die Länge und Höhe einzugeben, dann die Werte zu ändern und die Konfigurationen von Assembly1 und Teil3 zu ändern
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 „Gefällt mir“
Ich kann meine Antwort nicht bearbeiten, aber die Zeile: SetEquationValue "Width", myHeight
sollte sein: SetEquationValue "Höhe", myHeight
Natürlich müssen Sie diesen Namen sowieso durch den Namen Ihrer Höhenvariablen ersetzen (dasselbe gilt für die Länge)
Neben der Verwendung eines Makros besteht die andere Möglichkeit darin, eine Teilefamilie zu verwenden und die Logik in die Excel-Datei zu integrieren. Beispiel
Hallo JeromeP,
Vielen Dank für Ihre Antwort. Ich werde Ihre Lösung testen.
Es wird neu für mich, ich habe bereits kleine Makros in Excel verwendet, aber eine Premiere in Solidworks.
Herzliche Grüße