Cze wszystkim
Jestem nowy na forum i mam nadzieję, że jestem we właściwym miejscu, aby zadać pytanie. Pracuję w Solidworks 2018 i chciałbym sterować konfiguracjami według zmiennej.
Mam zespół główny, w którym nie chcę mieć więcej niż jedną konfigurację. Ten zespół główny zawiera podzespoły i części, które mają wiele konfiguracji.
Utworzyłem równania w moim zespole głównym, które pozwalają mi sterować wymiarami szkicu należącymi do podzespołów i części zawartych w zespole głównym. Wszystkie równania są napędzane przez 2 właściwości (wysokość i długość), które modyfikuję ręcznie zgodnie z moimi potrzebami.
Oprócz wymiarów szkicu muszę kontrolować konfiguracje zawarte w podzespołach i częściach. Chciałbym to zrobić za pomocą równań, ponieważ nie jestem dobry w makro. Jednak nie znalazłem tego i nie wiem, czy to możliwe.
Przykład: Jeśli wprowadzę wartość mniejszą lub równą 10 dla długości i wartość mniejszą lub równą 2 dla wysokości, chciałbym wyświetlić konfigurację A podzespołu 1 i konfigurację D części 3 w zespole głównym, lub jeśli wprowadzę wartość większą niż 10 dla długości i wartość większą niż 2 dla wysokości, Chcę wyświetlić konfigurację B podzespołu 1 i konfigurację A części 3 w zespole głównym.
Czy ktoś może mi powiedzieć, czy jest to możliwe, a jeśli tak, to w jaki sposób?
Z góry dziękuję
Pozdrowienia
Witam, Możesz użyć tego makra, które poprosi Cię o podanie długości i wysokości, a następnie zmianę wartości i zmianę konfiguracji złożenia1 i części3
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 polubienie
Nie mogę edytować mojej odpowiedzi, ale wiersz: SetEquationValue "Szerokość", mojaWysokość
powinno mieć postać: SetEquationValue "Wysokość", mojaWysokość
Oczywiście i tak będziesz musiał zastąpić tę nazwę nazwą swojej zmiennej wysokości (to samo dotyczy długości)
Oprócz użycia makra, inną możliwością jest użycie rodziny części i zintegrowanie logiki z plikiem Excel. Przykład
Witaj JeromeP,
Dziękuję za odpowiedź. Zamierzam przetestować twoje rozwiązanie.
To będzie dla mnie nowość, używałem już małych makr w Excelu, ale po raz pierwszy w Solidworks.
Pozdrowienia