Ik werk regelmatig met blends die al heel wat evoluties hebben ondergaan. Wanneer ik de exploded view herbewerk, realiseer ik me dat sommige stadia van de explosie nog steeds aanwezig zijn, maar niet langer verbonden zijn met enig element van de assemblage (erfenis van het verleden...) Dit bemoeilijkt het begrip van de exploded view aanzienlijk en het irriteert me om elke stap te openen om te zien of het nog steeds zinvol is...
Weet u een manier om de exploded view boom op te schonen (automatisch of door een macro)?
Na een snelle zoektocht vinden we niet veel in macro over het onderwerp explodes. Het enige onderwerp dat in alle opzichten geschikt was, kreeg nooit het minste antwoord:
Tenzij een van onze macro-experts iets vindt, is het niet echt gemakkelijk.
Het is heel goed mogelijk om de configuraties op te sommen, naar elke configuratie te zoeken als er een of meer exploded views zijn, elke explodeerstap en het aantal componenten dat deze bevat op te sommen, en vervolgens de stap te verwijderen als deze geen componenten bevat.
Vraag: hoe krijg je een configuratie met een geëxplodeerd waarbij ten minste één stap geen componenten bevat. Ik kan het niet krijgen, noch bij de creatie, noch door het podium te veranderen... Het lijkt erop dat SolidWorks zijn eigen rotzooi aan het opruimen is. Kun je een voorbeeld geven van een assemblage met een geëxplodeerde trede leeg van componenten?
Dank u voor uw antwoord. Inderdaad, wanneer ik een nieuw bestand test, lijkt SW op te ruimen wanneer je een onderdeel verwijdert. Ik denk dat mijn probleem meer oude assemblages betreft, gemaakt in een oude versie en die vele evoluties hebben ondergaan. Helaas kan ik hier om privacyredenen geen concreet voorbeeld plaatsen.
De macrobijlage is een manier om je vraag te beantwoorden. Bij gebrek aan een werkbaar voorbeeld is het onmogelijk om verder te gaan dan dit ontwerp, met uitgebreide tests en het overwegen van verschillende mogelijke situaties. Vriendelijke groeten. MacroEclate.swp (60,5 kB)
Er is een gebrek aan foutafhandeling. Als ik op de Default config geen probleem omdat er een exploded view aanwezig is. Aan de andere kant op de symmetrie config hetzelfde bericht incompatibiliteit, omdat onmogelijk om een geëxplodeerde View te vinden naar mijn mening, vandaar de foutmelding denk ik.
Dat is wat ik zei toen ik eerder controleerde of er een exploded view aanwezig is, het werkt, het ontbrak alleen aan deze foutafhandeling:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssemb As SldWorks.AssemblyDoc
Dim swConfig As SldWorks.Configuration
Dim cfgNames() As String
Dim viewNames() As String
Dim noCfg As Long
Dim explStep As SldWorks.ExplodeStep
Dim nbSteps As Long
Dim noStep As Long
Dim noView As Long
Dim nbComps As Long
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swAssemb = swModel
cfgNames = swModel.GetConfigurationNames
For noCfg = 0 To UBound(cfgNames) 'Boucle sur toutes les configurations
swModel.ShowConfiguration2 (cfgNames(noCfg)) 'Sélection de la configuration
swModel.ForceRebuild3 False
Set swConfig = swModel.ConfigurationManager.ActiveConfiguration
If swAssemb.GetExplodedViewCount2(swConfig.Name) > 0 Then 'On vérifie le nb de vue éclaté
viewNames = swAssemb.GetExplodedViewNames2(swConfig.Name) 'Vues éclatées de la config
End If
For noView = 0 To UBound(viewNames) 'Boucle sur les vues éclatées
swAssemb.ShowExploded2 True, viewNames(noView) 'Activation de la vue éclatée
nbSteps = swConfig.GetNumberOfExplodeSteps 'Nombre d'étapes d'éclatement
noStep = 1
While noStep <= nbSteps 'Boucle sur les étapes d'éclatement
Set explStep = swConfig.GetExplodeStep(noStep - 1) 'Sélection de l'étape
If Not (explStep Is Nothing) Then
nbComps = explStep.GetNumOfComponents 'Nbre de composants dans l'étape
If nbComps = 0 Then 'si le nbre de composants dans l'étape est nul
swConfig.DeleteExplodeStep (explStep.Name) 'Suppression de l'étape
nbSteps = swConfig.GetNumberOfExplodeSteps 'Mise à jour du nombre d'étapes
Else
noStep = noStep + 1 'étape suivante
End If
End If
Wend
Next noView 'Vue suivante
Next noCfg 'Configuration suivante
End Sub
Ik heb deze fout niet, maar probeer in plaats daarvan dit (als er geen exploded view is in de volgende config-> config):
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssemb As SldWorks.AssemblyDoc
Dim swConfig As SldWorks.Configuration
Dim cfgNames() As String
Dim viewNames() As String
Dim noCfg As Long
Dim explStep As SldWorks.ExplodeStep
Dim nbSteps As Long
Dim noStep As Long
Dim noView As Long
Dim nbComps As Long
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swAssemb = swModel
cfgNames = swModel.GetConfigurationNames
For noCfg = 0 To UBound(cfgNames) 'Boucle sur toutes les configurations
swModel.ShowConfiguration2 (cfgNames(noCfg)) 'Sélection de la configuration
swModel.ForceRebuild3 False
Set swConfig = swModel.ConfigurationManager.ActiveConfiguration
If swAssemb.GetExplodedViewCount2(swConfig.Name) > 0 Then 'Si une vue éclaté est trouvée
viewNames = swAssemb.GetExplodedViewNames2(swConfig.Name) 'Vues éclatées de la config
For noView = 0 To UBound(viewNames) 'Boucle sur les vues éclatées
swAssemb.ShowExploded2 True, viewNames(noView) 'Activation de la vue éclatée
nbSteps = swConfig.GetNumberOfExplodeSteps 'Nombre d'étapes d'éclatement
noStep = 1
While noStep <= nbSteps 'Boucle sur les étapes d'éclatement
Set explStep = swConfig.GetExplodeStep(noStep - 1) 'Sélection de l'étape
If Not (explStep Is Nothing) Then
nbComps = explStep.GetNumOfComponents 'Nbre de composants dans l'étape
If nbComps = 0 Then 'si le nbre de composants dans l'étape est nul
swConfig.DeleteExplodeStep (explStep.Name) 'Suppression de l'étape
nbSteps = swConfig.GetNumberOfExplodeSteps 'Mise à jour du nombre d'étapes
Else
noStep = noStep + 1 'étape suivante
End If
End If
Wend
Next noView 'Vue suivante
End If
Next noCfg 'Configuration suivante
End Sub
Ik heb net het einde verplaatst als om de rest van de code op te nemen als er geen exploded view in de configuratie is
Ik reproduceer inderdaad het probleem onder SW2020 Als ik een onderdeel uit mijn keten 2 schrap, vindt hij het voor mij in de keten stap 2 bij nr. 1 Terwijl hij het in 2 niet meer kan vinden. En in 3 staat het onderdeel niet meer in de boomstructuur omdat het is verwijderd na het maken van de stap.
Aan de andere kant is het geen codeprobleem, maar een solidworks-probleem, aangezien we handmatig de onderdeelbug reproduceren die zichtbaar is in de stap... Ik weet niet zeker of ik nog iets meer zou kunnen doen.
Tijdens het testen realiseerde ik me dat "GetComponentName" de waarde "–NA–" retourneert als er geen onderdeel is gekoppeld.
Dus heb ik deze voorwaarde aan de test toegevoegd:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swAssemb As SldWorks.AssemblyDoc
Dim swConfig As SldWorks.Configuration
Dim cfgNames() As String
Dim viewNames() As String
Dim noCfg As Long
Dim explStep As SldWorks.ExplodeStep
Dim nbSteps As Long
Dim noStep As Long
Dim noView As Long
Dim nbComps As Long
Dim NbSup As Integer
Dim Comp As Variant
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swAssemb = swModel
NbSup = 0
cfgNames = swModel.GetConfigurationNames
For noCfg = 0 To UBound(cfgNames) 'Boucle sur toutes les configurations
swModel.ShowConfiguration2 (cfgNames(noCfg)) 'Sélection de la configuration
swModel.ForceRebuild3 False
Set swConfig = swModel.ConfigurationManager.ActiveConfiguration
If swAssemb.GetExplodedViewCount2(swConfig.Name) > 0 Then 'On vérifie le nb de vue éclaté
viewNames = swAssemb.GetExplodedViewNames2(swConfig.Name) 'Vues éclatées de la config
For noView = 0 To UBound(viewNames) 'Boucle sur les vues éclatées
swAssemb.ShowExploded2 True, viewNames(noView) 'Activation de la vue éclatée
nbSteps = swConfig.GetNumberOfExplodeSteps 'Nombre d'étapes d'éclatement
noStep = 1
While noStep <= nbSteps 'Boucle sur les étapes d'éclatement
Set explStep = swConfig.GetExplodeStep(noStep - 1) 'Sélection de l'étape
If Not (explStep Is Nothing) Then
nbComps = explStep.GetNumOfComponents 'Nbre de composants dans l'étape
Comp = explStep.GetComponentName(0)
If nbComps = 0 Or Comp = "--NA--" Then 'si le nbre de composants dans l'étape est nul
swConfig.DeleteExplodeStep (explStep.Name) 'Suppression de l'étape
nbSteps = swConfig.GetNumberOfExplodeSteps 'Mise à jour du nombre d'étapes
NbSup = NbSup + 1 'Incrémente le compteur
Else
noStep = noStep + 1 'étape suivante
End If
End If
Wend
Next noView 'Vue suivante
End If
Next noCfg 'Configuration suivante
MsgBox NbSup & " étapes supprimées" 'Affiche le nombre d'étapes supprimées
End Sub
Om getest te worden, maar het zou misschien zijn werk kunnen doen
Bewerken: Ik heb de regel veranderd
Comp = explStep.GetComponentName(0)
Omdat de waarde (1) de 2e component retourneerde en we de stappen verwijderden met slechts één component eraan. Ik ben aan het testen met verschillende assemblages, maar op dit moment ziet het er goed uit.