Ich bin auf der Suche nach einem Makro, mit dem alle Bibliotheksfunktionen in einem Teil auf einmal erneut bearbeitet werden können, um die Änderungen in dieser Bibliothek in SOLIDWORKS zu aktualisieren

Hallo, ich bin auf der Suche nach einem Makro, das in der Lage ist, alle Bibliotheksfunktionen in einem Raum auf einmal neu zu bearbeiten, um die Änderungen in dieser Bibliothek zu aktualisieren (meistens ist das Feld "Link zum Bibliotheksteil" ausgegraut 

 Es kommt oft vor, dass ich Bibliotheksfunktionen erstelle , um schneller zu gehen, aber das Problem ist, dass es oft hundert pro Teil sind und wenn ich eine Änderung vornehmen muss, z. B. einen Bohrdurchmesser, der verengt oder vergrößert  werden muss, oder eine Fase, die hinzugefügt werden soll, Ich muss alle Funktionen der Bibliothek nacheinander neu drucken, um diese Änderung auf den gesamten Raum  zu übertragen, was Stunden dauern kann

Ich weiß leider nicht, wie man Makros schreibt, also wende ich mich an dieses Forum, um eine wohltätige Seele zu finden, die mir erklären könnte, wie man es macht oder eines schreibt

Ein paar Screenshots eines Beispiels würden es sicherlich leichter machen, Ihr Thema zu verstehen.

Weil ich nicht alles verstanden habe.

Auf der anderen Seite können hundert Bibliotheksfunktionen meiner Meinung nach den Raum nur belasten.

mit Screenshots schwer zu erklären, 

Zum Beispiel;   Ich habe ein Stück mit Würfeln mit einem Zylinder darauf und einer Fase am Rand des Zylinders, ich erstelle eine Bibliotheksfunktion, die es ermöglicht, diese Form schnell zu erstellen, indem ich auf ein paar Eckpunkte klicke, also ordne ich diese Bibliothek über ein Teil an, später werde ich gebeten, die Fase durch eine Verrundung zu ersetzen, Also ändere ich es in der SLDLFP-Datei, dann, um diese Änderung in meinem Teil zu aktualisieren, muss ich auf jede meiner Bibli-Funktionen doppelklicken und einmal in den Konfigurationsbereich des Bibli klicken und dann die Eingabetaste drücken, dies ermöglicht es der Bibliotheksfunktion, die Änderungen zu übernehmen, die ich im sldlfp vorgenommen habe, Das Problem ist, dass ich dies für jede Funktion von Bibli tun muss, die sich in  meinem Zimmer  befindet

 

Wenn ich hundert sage, sind es oft etwa 30  pro Stück bei mehreren Teilen einer Baugruppe, aber die Schwere des Teils ist nicht so ein Problem , wenn es zu schwer ist, teile ich es in mehrere Teile  auf

 


cature_1_.png
capture_2.png

Hallo

Um eine gemeinsame Dimension zu ändern, gibt es Variablen/Gleichungen.

Aber warum nicht im Fall des Beispiels die Funktion stattdessen auf ein einzelnes Element anwenden und das resultierende Feld wiederholen?

1 „Gefällt mir“

Tatsächlich hat keines der Quadrate, auf denen ich die Bibliothek platziere, die gleiche Dimension/Krümmung , und die Bibliothek ermöglicht es mir, eine Form zu erstellen, die sich an die Struktur anpasst, auf der ich sie platziere . Wiederholung ist keine Lösung, und was die Gleichungsvariablen betrifft, so verwende ich sie bereits, aber es funktioniert nicht, wenn ich der Bibliothek eine Funktion hinzufüge oder ändere z.B. eine Fase durch eine Verrundung, außerdem verlangsamt eine große Anzahl von Gleichungen das Bauteil 

 

Auf jeden Fall vielen Dank für die Schnelligkeit Ihrer Antworten 

Ich füge einen Screenshot hinzu, der es Ihnen vielleicht ermöglicht, besser zu verstehen, warum ich eine Probe nicht machen kann


capture_3.png

Tatsächlich...

Sie haben bereits die Chance, dass zu Hause die Funktion aktualisiert wird. Nicht zu Hause, ich muss es aus der Bibliothek wieder importieren... Oder mir entgeht etwas.

1 „Gefällt mir“

Was ich nicht wirklich verstehe, ist, wie man aktualisiert.

Ein STRG+Q reicht nicht aus? Sie müssen jede Bibliotheksfunktion bearbeiten und validieren? (Rechtsklick auf die Bibli-Funktion + Enter)

Andernfalls haben Sie dieses Makro, das alles automatisch neu erstellt.

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

Vielleicht zum Testen oder anderweitig für Bibliotheksfunktionen ist es die Bibliotheksfunktion.

 

 

Einige Beispiele für Makros mit Bibliotheksfunktionen:

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

 

Ein weiteres Beispiel für das Auslesen von Informationen aus einer Bibliotheksfunktion:

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

genauer gesagt, wenn ich eine Bibliothek aktualisieren möchte klicke ich mit der rechten Maustaste auf Bearbeiten der Funktion, dann klicke ich in den Bereich, in dem sich normalerweise die verschiedenen Konfigurationen der Bibliothek befinden, ein Warnfenster erscheint, klicke auf Ja (oder ich drücke die Eingabetaste, es kommt wieder auf das gleiche zurück) und dort werden die Änderungen übernommen

 

Im beigefügten Video weiß ich nicht warum, aber Sie sehen das Warnfenster nicht, wenn ich in den Konfigurationsbereich  klicke, also habe ich es in einen Screenshot eingefügt

über das Makro, das automatisch alles neu erstellt, was von @sbadenis gegeben wurde,  habe ich es nicht geschafft, es zum Laufen zu bringen, und STRG+Q baut nur die Funktionen des Teils wieder auf, berücksichtigt aber nicht die Änderung der Bibliothek

 


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

Tut mir leid@sbadenis aber ich verstehe die Nützlichkeit dieses Makros nicht:

'' Ein weiteres Beispiel zum Auslesen der Informationen einer Bibliotheksfunktion:

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

 

Ich habe ein Thema gefunden, das mein Problem hervorruft, aber leider gibt es keine wirkliche Lösung in den Antworten 

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

Versuchen Sie dies, ich habe keine Bibliotheksfunktion zum Testen zur Hand, es ist das vorherige Makro mit vielleicht dem Update der Funktion,  wenn ich es richtig verstanden habe:

'-------------------------------------------------------------
' 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

 

Ich bekomme es nicht zum Laufen 

 

Ich hänge das Teil und die Bibliothek an (kleine Klarstellung ist, dass ich viele verschiedene Bibliotheksfunktionen verwende, die nicht alle die gleichen Referenzen haben, die platziert werden sollen) 

 

Eine Idee wäre, eine Bibli-Konfiguration mit einer Teilekonfiguration zu verknüpfen, dies würde es ermöglichen, durch Ändern der Konfiguration die Bibliothek neu zu laden


Teil1.SLDPRT
carre_-__a.sldlfp

Hallo @josé2fois,

Ein erster Ansatz, indem er die Idee der Konfigurationen der Bibliotheksfunktion aufgreift.
Wenn sich die Änderungen innerhalb dieser Funktion darauf beschränken, "eine Änderung vorzunehmen, z. B. einen Bohrdurchmesser, der verengt oder vergrößert werden muss, oder eine Fase, die hinzugefügt werden muss", besteht das Prinzip darin, diese Änderungen in einer neuen Konfiguration derselben Bibliotheksfunktion vorzunehmen.

Anschließend werden über das angehängte Makro (Biblifunction.swp) alle von der Änderung betroffenen Konfigurationen durch diese neue Konfiguration ersetzt. In gewisser Weise sucht ein Makro nach einer Konfiguration in einer Bibliotheksfunktion und ersetzt diese.
Das Makro erzwingt auch die Verknüpfung mit der SLDLFP-Datei der Bibliotheksfunktion.

Um es zu verwenden, müssen Sie 3 Zeichenfolgen eingeben:
- den Namen der Bibliotheksfunktion (in Ihrem Beispiel "Quadrat -  A")
- Der Name der Konfiguration, die ersetzt werden soll. Ich habe 3 davon für meine Tests in Ihrem Beispiel festgelegt: "A_défaut", "Verrundung" und "Fase". Ein leerer String verarbeitet alle Vorkommen von Konfigurationen.
- Der Name der Ersatzkonfiguration, die die Änderungen enthält.

Dieses Makro funktioniert nur nach diesem Prinzip des Ersetzens der Konfiguration für ein SolidWorks Teil und erlaubt es Ihnen nicht, Referenzen, Bemaßungen usw. zu ändern.
Mit Vorsicht verwenden, es gibt nur wenige (keine) Leitplanken und keine Abbruchfunktion.
Es ist alles in der beiliegenden Zip-Datei, in der Version SW 2021.

Herzliche Grüße.


fonctionbibli.zip
2 „Gefällt mir“

@m.blt   DANKE DANKE DANKE DANKE !!

Es funktioniert wie Gott!

Es ist fantastisch, ich werde endlich in der Lage sein, die Vorteile der Bibliotheksfunktionen wirklich zu genießen