Je travaille actuellement dans un assemblage dans lequel les dimensions des pièces sont gérées par le bloc note.
C'est très pratique car ça permet de modifier une seule cote et le logiciel se charge d'aller mettre à jour les éléments liés.
Cependant, j"aimerai qu'il mettre en surbrillance les pièces qui vont être modifiées avant d'effectuer la mise à jour car j'ai beaucoup de pièces liées les une aux autres et j'aimerai ne pas en oublier dans la mise à jour des plans.
Est-ce que quelqu'un sait si c'est possible dans Solidworks?
On remarque que si je modifie l'un des paramètres dans mon bloc note, ça va avoir une influence sur les deux pièces dans mon assemblage dès que je vais cliquer sur reconstruire
Dans le cas d'un assemblage avec plusieurs pièces, ça peut être intéressant que solidworks mette en rouge les pièces qui sont impactées par cette modification avant de reconstruire.
J'ai beau chercher je ne trouve pas comment faire. Je commence à me dire que ce n'est pas possible avec Solidworks :(
Je n'ai pas pu ouvrir tes fichiers pour cause de versions de SW différentes mais je pense que tes deux pièces sont modifiables par le même fichier bloc-note. Une piste serait peut être de controler sur ton assemblage toutes les pièces dont une des équations fait appel à ce fichier bloc-note.
Voici déjà un début de code d'une macro permettant de lister les éléments fils si un assemblage est chargé ou permettant de voir à quel fichier fait appel une équation si c'est une pièce qui est chargée :
Option Explicit
Dim swApp As Object
Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim swEqnMgr As SldWorks.EquationMgr Dim eqnLinked As Boolean Dim i As Long Dim nCount As Long
Sub main()
Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc
TraverseAssemly
Set swEqnMgr = Part.GetEquationMgr nCount = swEqnMgr.GetCount For i = 0 To nCount - 1 eqnLinked = swEqnMgr.LinkToFile If eqnLinked Then swEqnMgr.UpdateValuesFromExternalEquationFile
MsgBox "Chemin du fichier equation : " & swEqnMgr.FilePath End If Next i
End Sub
Sub TraverseComponent(swComp As SldWorks.Component2) Dim vChildComp As Variant Dim swChildComp As SldWorks.Component2 Dim i As Long
vChildComp = swComp.GetChildren
For i = 0 To UBound(vChildComp) Set swChildComp = vChildComp(i) MsgBox "Fils : " & swChildComp.Name Next i End Sub
Public Function TraverseAssemly() Dim swConfMgr As SldWorks.ConfigurationManager Dim swConf As SldWorks.Configuration Dim swRootComp As SldWorks.Component2
Set Part = swApp.ActiveDoc If Part Is Nothing Then Exit Function If Part.GetType() <> swDocASSEMBLY Then Exit Function
Set swConfMgr = Part.ConfigurationManager Set swConf = swConfMgr.ActiveConfiguration Set swRootComp = swConf.GetRootComponent3(True)
d.roger, merci pour le bout de macro. Je vais tester ça.
Si j'ai bien compris son fonctionnement, elle risque de me lister tous les composants de mon assemblage car ils font tous appel au même fichier bloc note.
Dans tous le cas, c'est un début :) Je vais essayer de m'améliorer un peu en macro pour voir si je peux lui demander de lister uniquement les éléments faisant appel à une équation donnée
La macro suivante permet à partir d'un assemblage chargé dans SW de lister toutes les équations de toutes les pièces de premier niveau, reste à comparer ces équations avec celle recherchée pour ne garder que les pièces voulues. Si l'analyse des pièces doit se faire sur du multi-niveaux il faut alors modifier la fonction TraverseComponent pour la passer en version récursive.
Option Explicit
Dim swApp As Object
Dim Part As Object Dim SwModel As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Dim swEqnMgr As SldWorks.EquationMgr Dim eqnLinked As Boolean Dim i As Long Dim j As Long Dim nCount As Long Dim fils As String
Sub main()
Set swApp = Application.SldWorks Set Part = swApp.ActiveDoc
TraverseAssemly 1
End Sub
Sub TraverseComponent(swComp As SldWorks.Component2) Dim vChildComp As Variant Dim swChildComp As SldWorks.Component2 Dim i As Long
vChildComp = swComp.GetChildren
For i = 0 To UBound(vChildComp) Set swChildComp = vChildComp(i) fils = swChildComp.GetPathName If UCase(fils) Like "*.SLDPRT*" Then Set SwModel = swApp.OpenDoc(fils, 1) Set swEqnMgr = SwModel.GetEquationMgr nCount = swEqnMgr.GetCount For j = 0 To nCount - 1 MsgBox swChildComp.Name2 & " - Equation : " & swEqnMgr.Equation(j) Next j End If Next i End Sub
Public Function TraverseAssemly(trie As Long) Dim swConfMgr As SldWorks.ConfigurationManager Dim swConf As SldWorks.Configuration Dim swRootComp As SldWorks.Component2
Set Part = swApp.ActiveDoc If Part Is Nothing Then Exit Function If Part.GetType() <> swDocASSEMBLY Then Exit Function
Set swConfMgr = Part.ConfigurationManager Set swConf = swConfMgr.ActiveConfiguration Set swRootComp = swConf.GetRootComponent3(True)
Désolé pour la disgression mais vous faites comment pour créer le lien entre le fichier txt et la cote ? ça marche aussi pour activer/supprimer un composant dans un asm ?
Si je ne me trompe pas il suffit de faire ton equation puis exporter , là il te créer le chichier texte avec l'équation puis dans une nouvelle pièce ou assemblage importer.