Ik ben op zoek naar een macro die alle bibliotheekfuncties in een deel in één keer opnieuw kan bewerken om de wijzigingen in die bibliotheek in SOLIDWORKS te vernieuwen

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

Een paar screenshots van een voorbeeld zouden het zeker gemakkelijker maken om uw onderwerp te begrijpen.

Omdat ik niet alles begreep.

Aan de andere kant kunnen honderd bibliotheekfuncties naar mijn mening de ruimte alleen maar verzwaren.

moeilijk uit te leggen met screenshots, 

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  

 


cature_1_.png
capture_2.png

Hallo

Om een gemeenschappelijke dimensie te wijzigen, zijn er variabelen/vergelijkingen.

Maar in het geval van het voorbeeld, waarom zou u de functie dan niet toepassen op een enkel element en het resulterende veld herhalen?

1 like

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


capture_3.png

Feitelijk...

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.

1 like

Wat ik niet echt begrijp, is hoe ik moet updaten.

Is een CTRL+Q niet genoeg? U moet elke bibliotheekfunctie bewerken en valideren? (klik met de rechtermuisknop op de Bibli-functie + Enter)

Anders heb je deze macro die alles automatisch opnieuw opbouwt.

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

Misschien om te testen of anderszins voor bibliotheekfuncties, het is een bibliotheekfunctie.

 

 

Enkele voorbeelden van macro's met bibliotheekfuncties:

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

 

Nog een voorbeeld voor het lezen van informatie uit een bibliotheekfunctie:

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

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

 


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

sorry @sbadenis, maar ik begrijp het nut van deze macro niet:

'' Nog een voorbeeld om de informatie van een bibliotheekfunctie te lezen:

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

 

Ik heb een onderwerp gevonden dat mijn probleem oproept, maar helaas is er geen echte oplossing in de antwoorden 

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

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 krijg het niet aan de praat 

 

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


Deel 1.SLDPRT
carre_-__a.sldlfp

Hallo @josé2fois,

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.

Vriendelijke groeten.


fonctionbibli.zip
2 likes

@m.blt   DANK U DANK U DANK U !!

Het werkt als God!

 Het is fantastisch, ik zal eindelijk echt kunnen genieten van de voordelen van de bibliotheekfuncties