Assembly Shift Toon gewijzigde onderdelen

Hoi allemaal

Ik werk momenteel in een assemblage waarbij de afmetingen van de onderdelen worden beheerd door het notitieblok.

Dit is erg praktisch omdat u hiermee een enkele dimensie kunt wijzigen en de software zorgt voor het bijwerken van de gekoppelde elementen.

Ik zou echter graag willen dat de onderdelen worden gemarkeerd die zullen worden gewijzigd voordat de update wordt uitgevoerd, omdat ik veel onderdelen aan elkaar gerelateerd heb en ik er geen wil vergeten in de planupdate.

Weet iemand of dit mogelijk is in Solidworks?

 

1 like

Hoe is jullie link tussen notepad en solidworks tot stand gekomen? Direct of macro? 

De koppeling wordt live gemaakt via het menu Vergelijkingen

Helaas weet ik het niet, ik ga kijken hoe het werkt

 

EDIT: Ok, ik heb net iets geleerd:) toch zie ik niet hoe ik een waarschuwing of iets dergelijks moet plaatsen :/

 

 

Hallo

Ik weet het niet, kun je een voorbeeld plaatsen?

Moge de kracht met je zijn

Ik heb het gegenereerd om te ontdekken


maj_dassemblage_montrer_ieces_modifiees.zip

Hier is een voorbeeld.

Merk op dat als ik een van de parameters in mijn kladblok verander, dit invloed zal hebben op de twee delen in mijn assemblage zodra ik op herbouwen klik

In het geval van een assemblage met meerdere onderdelen kan het voor solidworks interessant zijn om de onderdelen die door deze wijziging worden beïnvloed in het rood te zetten alvorens opnieuw op te bouwen.

Hoe hard ik ook zoek, ik kan niet vinden hoe ik het moet doen. Ik begin te denken dat dit niet mogelijk is met Solidworks:(


exemple.zip

Hallo

Ik kon je bestanden niet openen vanwege verschillende SW-versies, maar ik denk dat je twee stukken kunnen worden bewerkt door hetzelfde kladblokbestand. Een manier zou zijn om op uw assemblage alle onderdelen te controleren waarvan een van de vergelijkingen dit kladblokbestand vereist.

Hier is al het begin van de code van een macro die het mogelijk maakt om de onderliggende elementen op te sommen als een assembly wordt geladen, of om te zien welk bestand een vergelijking aanroept als het een onderdeel is dat wordt geladen:

Optie Expliciete

Dim swApp als object

Deel dimmen als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long
Dim swEqnMgr Als SldWorks.EquationMgr
Dim eqnGekoppeld als Booleaans
Zon i Zo lang
Dim nCount zo lang

Sub hoofd()

Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc

Dwars door elkaar

Stel swEqnMgr in = Deel.GetEquationMgr
nCount = swEqnMgr.GetCount
Voor i = 0 To nCount - 1
    eqnLinked = swEqnMgr.LinkToFile
    Als eqnLinked dan
         swEqnMgr.UpdateValuesFromExternalEquationFile

        MsgBox "Vergelijking File Path: " & swEqnMgr.FilePath
    Einde als
volgende i

Einde Sub

Sub TraverseComponent(swComp als SldWorks.Component2)
    Dim vChildComp als variant
    Dim swChildComp als SldWorks.Component2
    Zon i Zo lang
    
    vChildComp = swComp.GetChildren
    
    Voor i = 0 TB UBound(vChildComp)
        Stel swChildComp in = vChildComp(i)
        MsgBox "Zonen:" & swChildComp.Name
    volgende i
Einde Sub

Openbare Functie TraverseAssemly()
    Dim swConfMgr als SldWorks.ConfigurationManager
    Dim swConf als SldWorks.Configuration
    Dim swRootComp als SldWorks.Component2
    
    Deel instellen = swApp.ActiveDoc
    Als een onderdeel niets is, dan is het de exit-functie
    Als Part.GetType() swDocASSEMBLY <>, sluit dan de functie af

    Stel swConfMgr = Part.ConfigurationManager in
    Stel swConf = swConfMgr.ActiveConfiguration in
    Stel swRootComp in = swConf.GetRootComponent3(True)
    
    Aanroepen TraverseComponent(swRootComp)
Functie beëindigen

Vriendelijke groeten

1 like

Bedankt voor de demo's, ik kom er later op terug  (geen tijd).

Moge de Kracht met je zijn

2 likes

D.Roger, bedankt voor het macro-stukje. Dat ga ik testen.

Als ik heb begrepen hoe het werkt, kan het alle componenten van mijn assembly opsommen omdat ze allemaal hetzelfde kladblokbestand gebruiken.

Het is in ieder geval een begin :) Ik zal proberen om een beetje te verbeteren in de macro om te zien of ik kan vragen om alleen de elementen op te sommen die een bepaalde vergelijking gebruiken

 

 

Hallo

De volgende macro maakt het mogelijk om vanuit een assemblage die in SW is geladen alle vergelijkingen van alle onderdelen van het eerste niveau op te sommen, maar u moet deze vergelijkingen vergelijken met degene die u zoekt om alleen de gewenste onderdelen te behouden. Als het parseren van de onderdelen op meerdere niveaus moet worden uitgevoerd, moet de functie TraverseComponent worden gewijzigd om deze te wijzigen in een recursieve versie.

Optie Expliciete

Dim swApp als object

Deel dimmen als object
Dim SwModel als object
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long
Dim swEqnMgr Als SldWorks.EquationMgr
Dim eqnGekoppeld als Booleaans
Zon i Zo lang
Zon j Zo lang
Dim nCount zo lang
Dim Zoon Als Snaar

Sub hoofd()

    Stel swApp = Toepassing.SldWorks in
    Deel instellen = swApp.ActiveDoc

    Dwars door elkaar 1

Einde Sub

Sub TraverseComponent(swComp als SldWorks.Component2)
    Dim vChildComp als variant
    Dim swChildComp als SldWorks.Component2
    Zon i Zo lang
    
    vChildComp = swComp.GetChildren
    
    Voor i = 0 TB UBound(vChildComp)
        Stel swChildComp in = vChildComp(i)
        sons = swChildComp.GetPathName
        Als UCase(Sons) Like "*. SLDPRT*" Dan
            Stel SwModel in = swApp.OpenDoc(Threads, 1)
            Stel swEqnMgr in = SwModel.GetEquationMgr
            nCount = swEqnMgr.GetCount
            Voor j = 0 Naar nCount - 1
                MsgBox swChildComp.Name2 & " - Vergelijking: " & swEqnMgr.Equation(j)
            Volgende j
        Einde als
    volgende i
Einde Sub

Openbare Functie TraverseAssemly (trie zo lang)
    Dim swConfMgr als SldWorks.ConfigurationManager
    Dim swConf als SldWorks.Configuration
    Dim swRootComp als SldWorks.Component2
    
    Deel instellen = swApp.ActiveDoc
    Als een onderdeel niets is, dan is het de exit-functie
    Als Part.GetType() swDocASSEMBLY <>, sluit dan de functie af

    Stel swConfMgr = Part.ConfigurationManager in
    Stel swConf = swConfMgr.ActiveConfiguration in
    Stel swRootComp in = swConf.GetRootComponent3(True)
    
    Aanroepen TraverseComponent(swRootComp)
Functie beëindigen

Vriendelijke groeten

1 like

Sorry voor de uitweiding, maar hoe maak je de link tussen het txt-bestand en de kansen?
Werkt het ook om een component in een ASM te activeren/verwijderen?

Stefbeno

Als ik me niet vergis, maak dan gewoon je vergelijking en exporteer dan, daar zal het de chiquere tekst maken met de vergelijking en vervolgens in een nieuw onderdeel of assemblage-import.

1 like

Eenvoudigweg.

Bedankt dat je me dit hebt laten ontdekken.

Hallo

 

Sorry dat ik de tijd heb genomen om te antwoorden, ik was :) op vakantie gegaan.

@d.roger: Ik heb geprobeerd de macro te starten, maar er gebeurt niets.

Wanneer ik het start via de debugger, vertelt het me een syntaxisfout op de regel: Set swApp = Application.SldWorks

 

 

Hallo

Heeft u de regel Dim swApp As Object aan het begin van de macro?

Bekijk ook de referenties in Tools/Referenties!

Vriendelijke groeten