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,