hallo, ik ben op zoek naar een macro die in staat is om alle bibliotheekfuncties in een kamer in één keer opnieuw te bewerken om de wijzigingen in deze bibliotheek bij te werken (meestal is het vak "link naar het bibliotheekgedeelte" grijs weergegeven
Het komt vaak voor dat ik bibliotheekfuncties maak om sneller te gaan, maar het probleem is dat er vaak honderd per onderdeel zijn en als ik een wijziging moet aanbrengen, bijvoorbeeld een boordiameter die moet worden versmald of vergroot of een afschuining moet worden toegevoegd, Ik moet alle bibliotheekfuncties één voor één opnieuw afdrukken om deze wijziging in de hele kamer bij te werken, wat uren kan duren
Ik weet helaas niet hoe ik macro moet schrijven, dus ik wend me tot dit forum om een liefdadige ziel te vinden die me zou kunnen uitleggen hoe ik het moet doen of er een moet schrijven
bijvoorbeeld; Ik heb een stuk inclusief kubussen met een cilinder erop met een afschuining aan de rand van de cilinder, ik maak een bibliotheekfunctie waarmee ik deze vorm snel kan maken door op een paar hoekpunten te klikken, dus ik rangschik deze bibliotheek over een deel, later wordt mij gevraagd de afschuining te vervangen door een filet, Dus ik verander het in het SLDLFP-bestand, en om deze wijziging in mijn deel bij te werken, moet ik dubbelklikken op elk van mijn bibli-functies en eenmaal klikken in het configuratiegebied van de bibli en vervolgens op enter drukken, hierdoor kan de bibliotheekfunctie de wijzigingen toepassen die ik in de sldlfp heb aangebracht, Het probleem is dat ik dit moet doen voor elke functie van bibli die in mijn kamer zijn
Als ik honderd zeg is het vaak zo'n 30 per stuk op meerdere onderdelen van een assemblage, maar de zwaarte van het onderdeel is niet zo'n probleem als het te zwaar is, ik verdeel het in meerdere delen
in feite heeft geen van de vierkanten waarop ik de bibliotheek plaats dezelfde afmeting/kromming en stelt de bibliotheek me in staat een vorm te creëren die zich aanpast aan de structuur waarop ik hem plaats , herhaling is geen oplossing, en wat de vergelijkingsvariabelen betreft, ik gebruik ze al, maar het werkt niet als ik een functie aan de bibliotheek toevoeg of verander bijvoorbeeld een afschuining door een filet, bovendien vertraagt een groot aantal vergelijkingen het onderdeel
In ieder geval bedankt voor de snelheid van je antwoorden
Ik voeg een screenshot toe waarmee je beter kunt begrijpen waarom ik geen repetitie kan doen
Je hebt al een kans, het is dat thuis de functie wordt bijgewerkt. Niet thuis, ik moet het opnieuw importeren uit de bibliotheek... Of er ontsnapt iets aan me.
meer precies als ik een bibliotheek wil vernieuwen, klik ik met de rechtermuisknop op de functie bewerken, dan klik ik in het gebied waar normaal gesproken de verschillende configuraties van de bibliotheek zich bevinden, er verschijnt een waarschuwingsvenster, klik op Ja (of ik druk op Enter, het komt terug naar hetzelfde) en daar zijn de wijzigingen van toepassing
In de bijgevoegde video weet ik niet waarom, maar je ziet het waarschuwingsvenster niet wanneer ik in het configuratiegebied klik, dus ik zet het in een screenshot
over de macro die automatisch alles herbouwt dat door @sbadenis Ik ben er niet in geslaagd om het aan de praat te krijgen en de CTRL+Q bouwt alleen de functies van het onderdeel opnieuw, maar houdt geen rekening met de bibliotheekwijziging
Probeer dit, ik heb geen bibliotheekfunctie bij de hand om te testen, het is de vorige macro met misschien de update van de functie als ik het goed heb begrepen:
'-------------------------------------------------------------
' 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
Ik voeg het onderdeel en de bibliotheek toe (kleine verduidelijking is dat ik veel verschillende bibliotheekfuncties gebruik die niet allemaal dezelfde referenties hebben om te plaatsen)
Een idee zou zijn om een bibli-configuratie te koppelen aan een onderdeelconfiguratie, dit zou het mogelijk maken om, door de configuratie te wijzigen, de bibliotheek opnieuw te laden
Een eerste benadering, door het idee van de configuraties van de bibliotheekfunctie op te pakken. Als de wijzigingen binnen deze functie beperkt blijven tot "het aanbrengen van een wijziging, bijvoorbeeld een boordiameter die versmald of vergroot moet worden, of een afschuining die moet worden toegevoegd", is het principe om deze wijzigingen door te voeren in een nieuwe configuratie van dezelfde bibliotheekfunctie.
Vervolgens worden via de bijgevoegde macro (Biblifunction.swp) alle configuraties die bij de wijziging betrokken zijn, vervangen door deze nieuwe configuratie. In zekere zin zoekt een macro naar een configuratie in een bibliotheekfunctie en vervangt deze. De macro dwingt ook de link naar het SLDLFP-bestand van de bibliotheekfunctie af.
Om te gebruiken, moet u 3 tekenreeksen invullen: - de naam van de bibliotheekfunctie (in je voorbeeld "vierkant - A") - De naam van de configuratie die moet worden vervangen. Ik heb er 3 ingesteld voor mijn tests in jouw voorbeeld: "A_défaut", "Filet" en "Afschuining". Een lege tekenreeks verwerkt alle exemplaren van configuraties. - De naam van de vervangende configuratie, met daarin de wijzigingen.
Deze macro werkt alleen volgens dit principe van het vervangen van de configuratie, op een SolidWorks-onderdeel, en staat u niet toe om referenties, afmetingen, enz. te wijzigen. Wees voorzichtig, er zijn weinig (geen) leuningen en geen annulatiefunctie. Het zit allemaal in de bijgevoegde ritssluiting, in SW 2021-versie.