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