Maj d'assemblage montrer ièces modifiées

Bonjour à tous,

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?

 

1 « J'aime »

Comment est fait ton lien entre bloc note et solidworks ? Direct ou Macro ? 

Le lien est fait en direct via le menu Equations

Malheureusement je ne connais pas je vais regarde comment cela fonctionne

 

EDIT Ok je viens d'apprendre quelque chose :) neamoins je ne voit pas comment mettre une alerte ou quoique ce soit :/

 

 

Bonjour,

je ne connais pas , peux tu poster un exemple?

que la force soit avec toi

Moi j'ai genere sa pour decouvrir


maj_dassemblage_montrer_ieces_modifiees.zip

Voici un exemple.

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 :(


exemple.zip

Bonjour,

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)
    
    Call TraverseComponent(swRootComp)
End Function

Cordialement,

1 « J'aime »

Merci pour les demos j'y redarde  plus tard (pas le temps).

que la force soit avec vous

2 « J'aime »

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

 

 

Bonjour,

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)
    
    Call TraverseComponent(swRootComp)
End Function

Cordialement,

1 « J'aime »

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 ?

stefbeno

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.

1 « J'aime »

tout simplement.

Merci de m'avoir faire découvrir ça.

Bonjour,

 

Désolé d'avoir pris du temps pour répondre, j'étais parti en vacances :).

@d.roger : J'ai essayé de lancer la macro mais rien ne se passe.

Quand je la lance via le débogger, il m'indique une erreur de syntaxe à la ligne : Set swApp = Application.SldWorks

 

 

Bonjour,

Tu as bien la ligne Dim swApp As Object au début de la macro ?

Vérifie aussi les références dans Outils/Références !

Cordialement,