Je recherche une macro capable de rééditer toutes les fonctions de bibliothèque dans une pièce d'un seul coup afin d'actualiser les changements dans cette bibliothèque dans SOLIDWORKS

bonjour , je recherche une macro capable de rééditer toutes les fonctions de bibliothèque dans une pièce d'un seul coup afin d'actualiser les changements dans cette bibliothèque ,(la plupart du temps la case ''lier a la pièce de bibliothèque'' est grisée 

 Il m'arrive souvent de créer des fonctions de bibliothèques pour aller plus vite , mais le problème c'est que souvent il y en a une centaine par pièce et quand je dois faire un changement par exemple un diamètre de perçage qui doit être rétréci ou agrandi  ou bien un chanfrein a ajouter , je dois me taper de rééditer une par une toutes les fonctions de bibliothèque afin d'actualiser ce changement sur toute la pièce  ce qui peut prendre des heures 

je ne sais malheureusement pas écrire de macro alors je me tourne vers ce forum pour trouver une ame charitable qui pourrais m'expliquer comment faire ou bien en écrire une 

Quelques aperçus d'écrans d'un exemple, faciliterais sûrement la compréhension de ton sujet.

Parce que là j'ai pas tout compris.

Par contre une centaine de fonction de bibliothèque à mon avis ne peut effectivement qu’alourdir la pièce.

difficile d 'expliquer avec des screenshot , 

pour exemple ;  jai une piece comprenant des cubes avec un cylindre dessus avec un chanfrein sur l'arete du cylindre , je creer une fonction de bibliotheque permettant de creer rapidemet cette forme en cliquant sur quelques sommets , je dispose donc cette bibliotheque un peu partout dans un part , plus tard on me demande de remplacer le chanfrein par un congé , je le change donc dans le fichier sldlfp, puis, afin d'actualiser ce changement dans mon part je dois doublecliquer sur chaqune de mes fonctions de bibli et cliquer une fois dans la zone de config de la bibli puis de faire touche entree , cela permet a la fonction de bibliotheque d'appliquer les changements que j ai fait dans le sldlfp , le probleme c est que je dois faire cette manip pour chaque fonction de bibli qui sont dans  ma piece  

 

quand je dis une centaine c est souvent une 30taine  par pieces sur plusieurs pieces d'un assemblage , mais la lourdeur de la piece nést pas tellement un probleme si c'est trop lourd je la divise en plusieur pieces  

 


cature_1_.png
capture_2.png

Bonjour

Pour changer une cotation commune il y a les variables/equations.

Mais dans le cas de l'exemple, pourquoi ne pas plutôt appliquer la fonction sur un seul élément et répéter le corps obtenu ?

1 « J'aime »

enfait aucun des carre sur lequel je dispose la bibliotheque n' a la meme dimention / courbure  et la bibliotheque me permet de creer une forme qui s adapte a la structure sur laquelle je la dispose  la repetition n est pas une solution , et en ce qui concerne les variables equations , je les utilises deja mais cela ne fonctionne pas si je rajoute une fonction a la bibliotheque ou que je change par exemple un chanfrein par un congé , de plus un grand nombre d equations ralentisse la piece 

 

en tout cas merci pour la rapidité de vos reponses 

je joint un screenshot qui permet peut etre de mieux comprendre pourquoi je ne peut pas faire de repetition


capture_3.png

Effectivement...

Vous avez déjà une chance, c'est que chez vous la fonction se met à jour. Pas chez moi, je dois la réimporter de la bibliothèque... ou alors un truc m'échappe.

1 « J'aime »

Ce que je ne comprends pas bien c'est la façon de mettre à jour.

Un CTRL+Q ne suffit pas? Tu est obligé d'éditer chaque fonction de bibliothèque et de valider? (clique droit sur la fonction de bibli + entrée)

Sinon tu as cette macro qui reconstruit tout automatiquement.

https://www.codestack.net/solidworks-api/document/macro-feature/run-macro-on-rebuild/

Peut-être à tester ou sinon pour les fonctions de bibliothèque c'est library feature.

 

 

Quelques exemples de macros avec library features:

https://help.solidworks.com/2018/English/api/sldworksapi/Create_Library_Feature_With_References_Example_VB.htm

 

Un autre exemple pour lire les information d'une fonction de bibliothèque:

https://help.solidworks.com/2016/English/api/sldworksapi/Get_Library_Feature_Data_Example_VB.htm

plus precisement quand je veu actualiser une bibliotheque je fait clic droit editer la fonction , ensuite je clique dans la zone ou normalement se trouvent les differentes config de la bibliotheque , une fenetre d avertissement apparait , clique sur oui (ou alors je fait touche entree ca reviens au meme) et la, les modif s'appliquent

 

dans la video jointe , je ne sais pas pourquoi mais on ne vois pas la fenetre d avertissement quand je clique dans la zone de config  alors je l ai mis dans une capture d ecran 

au sujet de la macro qui reconstruit tout automatiquement donnée par @sbadenis  je n ai pas reussi a la faire fonctionner et le CTRL+Q ne reconstruit que les fonctions de la piece mais ne prend pas en compte la modif de bibliotheque

 


piece1.sldprt_2022-05-24_14-25-02.mp4
capture_4.png

pardon @sbadenis mais je ne comprend pas l'utilite de cette macro :

'' Un autre exemple pour lire les information d'une fonction de bibliothèque:

https://help.solidworks.com/2016/English/api/sldworksapi/Get_Library_Fea... ''

 

j ai trouve un sujet évoquant mon probleme mais malheureusement il n y a pas de solution réelle dans les reponses 

https://forum.solidworks.com/thread/68443

Essaye ça je n'ai pas de fonction bibliothèque sous la main pour tester,  c'est la macro précédente avec peut être la mise à jour de la fonction si j'ai bien compris:

'-------------------------------------------------------------
' Preconditions:
' 1. Open a model document that contains at least one
'    library feature.
' 2. Open the Immediate window.
'
' Postconditions:
' 1. Traverses the FeatureManager design tree searching for
'    library features.
' 2. Gets each library feature's data.
' 3. Inspect the Immediate window.
'-------------------------------------------------------------
Option Explicit

Dim boolstatus As Boolean
Dim swApp As SldWorks.SldWorks
Dim ModelDoc2 As SldWorks.ModelDoc2
Dim Feature As SldWorks.Feature
Dim NextFeature As SldWorks.Feature
Dim LibraryFeatureData As LibraryFeatureData
Dim placementPlaneType As Long
Dim placementPlane As Object
Dim ConfigurationName As String
Dim vConfigs As Variant
Dim vConfigName As Variant
Dim x As Long
Dim LinkToLibraryPart As Boolean
Dim LocatingDimensionsCount As Long
Dim vLocDimName As Variant
Dim vLocDimVal As Variant
Dim i As Long
Dim bOverrideDimVal As Boolean
Dim SizeDimensionsCount As Long
Dim vSizDimName As Variant
Dim vSizDimVal As Variant
Dim ReferencesCount As Long
Dim vRefType As Variant
Dim vRefName As Variant
Dim vRefs As Variant
Dim status As Boolean


Sub main()

Set swApp = Application.SldWorks
Set ModelDoc2 = swApp.ActiveDoc

' Traverse the FeatureManager design tree searching for library features
Set Feature = ModelDoc2.FirstFeature

While Not Feature Is Nothing

    Debug.Print Feature.Name, Feature.GetTypeName

    ' If feature is a library feature, then get its data; otherwise,
    ' move onto the next feature in the FeatureManager design tree

    If Feature.GetTypeName = "LibraryFeature" Then
        Debug.Print ""
        Debug.Print Feature.Name, Feature.GetTypeName
        Set LibraryFeatureData = Feature.GetDefinition
        boolstatus = LibraryFeatureData.AccessSelections(ModelDoc2, Nothing)

        ' Access the selections of the library feature that define it
        Debug.Print "LibraryFeatureData.AccessSelections = " & boolstatus

        ' Get its placement type
        Set placementPlane = LibraryFeatureData.GetPlacementPlane2(swLibFeatureData_e.swLibFeatureData_PartRespect, placementPlaneType)
        Debug.Print "PlacementPlaneType = " & placementPlaneType
        placementPlane.Select False

        ' Get the name of the active library feature configuration
        ConfigurationName = LibraryFeatureData.ConfigurationName
        Debug.Print "ConfigurationName = " & ConfigurationName
                        

        ' Determine if the library feature is linked to
        ' the library feature part
        LinkToLibraryPart = LibraryFeatureData.LinkToLibraryPart
        Debug.Print "LinkToLibraryPart = " & LinkToLibraryPart
        

        ' If the library feature part document is open or
        ' if the library feature is linked to the library feature
        ' part document, then get the names of all of the
        ' library feature configurations; if neither,
        ' then only the name of the active library configuration
        ' is returned
        'vConfigs = LibraryFeatureData.GetAllConfigurationNames
        'Debug.Print "Configuration names :"

        'If Not IsEmpty(vConfigs) Then
            'For x = LBound(vConfigs) To UBound(vConfigs)
                'Debug.Print "  " & vConfigs(x)
            'Next x
        'End If

        ' Get the number of locating dimensions
        'LocatingDimensionsCount = LibraryFeatureData.GetDimensionsCount(0)
        'Debug.Print "LocatingDimensionsCount = " & LocatingDimensionsCount

        ' Get the locating dimensions
        'vLocDimVal = LibraryFeatureData.GetDimensions(0, vLocDimName)
        'Debug.Print "Locating dimensions :"

        'If Not IsEmpty(vLocDimName) Then
            'For i = LBound(vLocDimName) To UBound(vLocDimName)
                'Debug.Print "  " & vLocDimName(i), vLocDimVal(i)
            'Next i
        'End If

        ' Determine if existing dimension values of the library
        ' feature can be overridden
        'bOverrideDimVal = LibraryFeatureData.OverrideDimension
        'Debug.Print "OverrideDimension = " & bOverrideDimVal

        ' Get the number of feature dimensions
        'SizeDimensionsCount = LibraryFeatureData.GetDimensionsCount(1)
        'Debug.Print "SizeDimensionsCount = " & SizeDimensionsCount

        ' Get the feature dimensions
        'vSizDimVal = LibraryFeatureData.GetDimensions(1, vSizDimName)
        'Debug.Print "Size dimensions :"
        'If Not IsEmpty(vSizDimName) Then
            'For i = LBound(vSizDimName) To UBound(vSizDimName)

                'Debug.Print "  " & vSizDimName(i), vSizDimVal(i)
            'Next i
        'End If

        ' Get the number of references
        'ReferencesCount = LibraryFeatureData.GetReferencesCount
        'Debug.Print "GetReferencesCount = " & ReferencesCount

        ' Get the references
        'vRefs = LibraryFeatureData.GetReferences3(swLibFeatureData_e.swLibFeatureData_PartRespect, vRefType, vRefName)
        'If Not IsEmpty(vRefType) Then
            'Debug.Print "Reference types and names: "
            'For i = LBound(vRefType) To UBound(vRefType)
                'Debug.Print "  " & vRefType(i) & ", " & vRefName(i)
                'vRefs(i).Select False
            'Next i
        'End If

        'Release the selections that define the library feature
        LibraryFeatureData.ReleaseSelectionAccess

        ' Update the definition of the library feature
        status = Feature.ModifyDefinition(LibraryFeatureData, ModelDoc2, Nothing)
    
    
    End If

    ' Get the next feature until there are no more
    Set NextFeature = Feature.GetNextFeature
    Set Feature = Nothing
    Set Feature = NextFeature
    Set NextFeature = Nothing

Wend

End Sub

 

je ne parviens pas a la faire fonctionner 

 

je vous joint la piece et la bibli ( petite precision c'est que je me sert de beaucoup de fonctions de bibliotheques differentes qui n ont pas toutes les memes references pour etre posée) 

 

une idee serai d'arriver a lier une configuration de bibli a une configuration de piece , cela permettrai , en changeant de config de recharger la bibliotheque 


piece1.sldprt
carre_-__a.sldlfp

Bonjour @josé2fois ,

Une première approche, en reprenant l'idée des configurations de la fonction de bibliothèque.
Si les modifications au sein de cette fonction se limitent à "faire un changement, par exemple un diamètre de perçage qui doit être rétréci ou agrandi, ou bien un chanfrein a ajouter", le principe consiste à faire ces changements dans une nouvelle configuration de la même fonction de bibliothèque.

Il suffit ensuite, via la macro jointe (FonctionBibli.swp), de remplacer toutes les configurations concernées par la modification par cette nouvelle configuration. En quelque sorte, une macro recherche et remplace une configuration dans une fonction de bibliothèque.
La macro force également la liaison avec le fichier SLDLFP de la fonction de bibliothèque.

Pour utiliser, il faut renseigner 3 chaînes de caractères :
- le nom de la fonction de bibliothèque (dans votre exemple "carré -  A")
- le nom de la configuration à remplacer. J'en ai défini 3 pour mes tests dans votre exemple: "A_défaut", "Congé" et "Chanfrein". Une chaîne vide traite toutes les occurrences des configurations.
- le nom de la configuration de remplacement, contenant les modifications.

Cette macro ne fonctionne que sur ce principe de remplacement de config, sur une pièce SolidWorks, et ne permet pas de changer les références, les dimensions, etc...
A utiliser avec prudence, il y a peu (pas) de garde-fous et pas de fonction annuler.
Tout est dans le zip joint, en version SW 2021.

Cordialement.


fonctionbibli.zip
2 « J'aime »

@m.blt   MERCI MERCI MERCI !!!

ca marche du feu de dieu!

c'est fantastique je vais enfin pouvoir vraiment profiter des avantages des fonctions de bibliotheques