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.
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:(
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)
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
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)
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?
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.