Ich arbeite regelmäßig mit Mischungen, die viele Entwicklungen durchlaufen haben. Wenn ich die Explosionsansicht überarbeite, stelle ich fest, dass einige Stadien der Explosion immer noch vorhanden sind, aber nicht mehr mit irgendeinem Element der Montage verbunden sind (Vermächtnis der Vergangenheit...) Das erschwert das Verständnis der Explosionszeichnung erheblich und es nervt mich, jeden Schritt zu öffnen, um zu sehen, ob er noch Sinn macht...
Kennen Sie eine Möglichkeit, den Explosionszeichnungsbaum zu bereinigen (entweder automatisch oder durch ein Makro)?
Nach einer schnellen Suche finden wir im Makro nicht viel zum Thema Explosionen. Das einzige Thema, das in jeder Hinsicht geeignet war, erhielt nie die geringste Antwort:
Wenn nicht einer unserer Makro-Experten fündig wird, ist es nicht ganz einfach.
Es ist durchaus möglich, die Konfigurationen aufzulisten, nach jeder einzelnen Konfigurationen zu suchen, wenn es eine oder mehrere aufgelöste Ansichten gibt, jeden Explosionsschritt und die Anzahl der darin enthaltenen Komponenten aufzulisten und dann den Schritt zu löschen, wenn er keine Komponenten enthält.
Frage: Wie bekomme ich eine Konfiguration mit einer Explosion, bei der mindestens ein Schritt keine Komponenten enthält? Ich kann es nicht bekommen, weder bei der Schöpfung, noch durch das Wechseln der Bühne... Es scheint, als würde SolidWorks sein eigenes Chaos aufräumen. Können Sie ein Beispiel für eine Baugruppe mit einer Explosionsstufe ohne Komponenten nennen?
Vielen Dank für Ihre Antwort. In der Tat, wenn ich eine neue Datei teste, scheint SW aufzuräumen, wenn Sie eine Komponente entfernen. Ich denke, mein Problem betrifft mehr alte Baugruppen, die in einer alten Version erstellt wurden und viele Entwicklungen durchlaufen haben. Leider werde ich hier aus Datenschutzgründen kein konkretes Beispiel posten können.
Der Makroanhang ist eine Möglichkeit, Ihre Frage zu beantworten. In Ermangelung eines praktikablen Beispiels ist es unmöglich, über diesen Entwurf hinauszugehen, indem umfangreiche Tests durchgeführt und verschiedene mögliche Situationen in Betracht gezogen werden. Herzliche Grüße. MacroEclate.swp (60.5 KB)
Es fehlt an Fehlerbehandlung. Wenn ich auf der Standardkonfiguration bin, kein Problem, weil eine explodierte Ansicht vorhanden ist. Auf der anderen Seite ist die gleiche Meldung inkompatibel, weil es meiner Meinung nach unmöglich ist, eine explodierte Ansicht zu finden, daher denke ich die Fehlermeldung.
Das habe ich gesagt, als ich zuvor überprüft habe, ob eine explodierte Ansicht vorhanden ist, es funktioniert nur, es fehlte nur diese Fehlerbehandlung:
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
Ich habe diesen Fehler nicht, aber versuche es stattdessen (wenn in der folgenden config->-Konfiguration keine explodierte Ansicht vorhanden ist):
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
Ich habe gerade das Ende verschoben, um den Rest des Codes einzuschließen, wenn keine explodierte Ansicht in der Konfiguration enthalten ist
Ich reproduziere das Problem tatsächlich unter SW2020 Wenn ich eine Komponente aus meiner Kette 2 lösche, findet sie sie für mich im Kettenschritt 2 bei Nr. 1 In 2 kann er es nicht mehr finden. Und in 3 befindet sich das Teil nicht mehr in der Baumansicht, da es nach der Erstellung des Schritts gelöscht wurde.
Auf der anderen Seite handelt es sich nicht um ein Codeproblem, sondern um ein Solidworks-Problem, da wir den im Schritt sichtbaren Teilefehler manuell reproduzieren... Ich bin mir nicht sicher, ob ich noch etwas tun könnte.
Beim Testen habe ich festgestellt, dass "GetComponentName" den Wert "–NA–" zurückgibt, wenn keine Komponente angehängt ist.
Also habe ich diese Bedingung in den Test aufgenommen:
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
Zu testen, aber es könnte vielleicht die Aufgabe erfüllen
Redigieren: Ich habe die Zeile geändert
Comp = explStep.GetComponentName(0)
Weil der Wert (1) die 2. Komponente zurückgegeben hat und wir die Schritte mit nur einer angehängten Komponente gelöscht haben. Ich teste mit verschiedenen Baugruppen, aber im Moment sieht es gut aus.