So ändern Sie die Baumdarstellung über ein Makro

Hallo ihr alle.

Wir haben derzeit unsere Solidworks-Dateien mit einer Baugruppe oder einem Teilebaum, der nicht sehr gut lesbar ist, da der Name der Konfiguration sichtbar ist.
image

Ich habe herausgefunden, wie man dies bei jeder Datei von Hand korrigiert, aber es ist super lang, weil es in den Dateioptionen gespeichert ist und nicht in denen von SW, also für jede Datei zu tun
Daher möchte ich ein Makro erstellen, das dies für die Assembly ausführt, die ich öffne, sowie für alle ihre Komponenten. Dies würde es mir ermöglichen, viel effizienter zu sein.

Hat jemand eine Idee oder einen Anhaltspunkt, wie dieses Makro nach dem Makro bei diesen Optionen ankommen kann, unabhängig davon, welche Optionen in der Basisdatei ausgewählt sind oder nicht (da nicht alle Dateien notwendigerweise die gleichen Optionen ausgewählt haben).
image

Hier ist ein Beispiel, das die Beschreibung ankreuzt:

Option Explicit
Dim swApp As SldWorks.SldWorks
Dim Part As SldWorks.ModelDoc2
Dim SelMgr As SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Sub main()
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    Set SelMgr = Part.SelectionManager
    Set swFeatMgr = Part.FeatureManager
    
    ' Show Component Descriptions is set to true
    swFeatMgr.ShowComponentDescriptions = True
    ' Show Component Configuration Names is set to false
    swFeatMgr.ShowComponentConfigurationNames = True
     ' Show Component Configuration Descriptions is set to false
    swFeatMgr.ShowComponentConfigurationDescriptions = False
    ' Show Component Names
    swFeatMgr.ShowComponentNames = True
     
End Sub

Für die Optionen, die für uns geprüft werden:
image
Und das Beispiel SW:
https://help.solidworks.com/2021/english/api/sldworksapi/Show_Components_and_Component_Configurations_Names_and_Descriptions_Example_VB.htm
Damit sollten Sie in der Lage sein, voranzukommen.

5 „Gefällt mir“

Ok, danke, ich werde das einrichten und zurückkommen, um zu schließen, wenn ich alles habe, was ich brauche.
Aber schon jetzt ein großes Dankeschön!

Nun, ich kann tatsächlich fast tun, was ich will, indem ich Ihr Makro leicht anpasse
(Ich kann verstecken und zeigen, was ich will.

Die Sache ist die, dass ich möchte, dass dies auf alle Dateien angewendet wird, die in der Assembly enthalten sind, die ich öffne.

Lassen Sie mich das erklären:

Ich öffne eine Assembly und führe dieses Makro aus, es gibt mir Folgendes:
image

Aber wenn ich die markierte Datei öffne, erhalte ich Folgendes:
image

wobei ich gerne das gleiche Display wie für die Montage hätte.

Das Makro müsste also für jede untergeordnete Datei in der Assembly ausgeführt werden.

Irgendeine Idee, wie man mit all diesen Kindern umgehen kann?
Tut mir leid, ich habe Ideen, aber kein Wissen oder fast...

Um jede Unterbaugruppe und jedes Teil der Baugruppe zu durchsuchen, müssen Sie Polygonzugkomponenten verwenden und den Code an der gewünschten Stelle einfügen (prüfen Sie, ob Sie das Bauteil öffnen müssen oder nicht):
https://help.solidworks.com/2020/English/api/sldworksapi/Traverse_Assembly_at_Component_Level_Example_VB.htm

oder wieder:

Immer die gleiche Art von Code:

Oder eine andere Lösung verwendet ein Makro, das eine Stapelverarbeitung durchführt, z. B. Integration:

3 „Gefällt mir“

Nun, mit Ihrer Hilfe habe ich es geschafft, etwas zu tun, das wahrscheinlich nicht optimal ist, aber zu funktionieren scheint. Die Offenheit der Kinder ist in der Tat notwendig.

ob es helfen kann

'**********************
"Urheberrecht(C) 2023 Xarial Pty Limited
'Referenz: Durchlaufen des Komponentenbaums mit der SOLIDWORKS API
'Lizenz: Lizenz
'**********************
Option Explizit
Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dimmen des Teils als SldWorks.ModelDoc2
Sun SelMgr As SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Dimmen path_complete As String' volle Länge des Stücks
MyError so lange dimmen
MyWarning so lange dimmen

Anführungszeichen als Zeichenfolge dimmen
Dim boolstatus als boolescher Wert
Dim longstatus As Long, longwarnings As Long

Dim ext als Zeichenfolge
const INDENT_SYMBOL als Zeichenfolge = " "

Sub main()

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc

If Not swModel Is Nothing Then
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Set SelMgr = Part.SelectionManager
Set swFeatMgr = Part.FeatureManager


' Show Component Descriptions is set to true
swFeatMgr.ShowComponentDescriptions = True
' Show Component Configuration Names is set to false
swFeatMgr.ShowComponentConfigurationNames = True
 ' Show Component Configuration Descriptions is set to false
swFeatMgr.ShowComponentConfigurationDescriptions = False
' Show Component Names
swFeatMgr.ShowComponentNames = False

swFeatMgr.ShowDisplayStateNames = False

    Dim swRootComp As SldWorks.Component2

    Set swRootComp = swModel.ConfigurationManager.ActiveConfiguration.GetRootComponent

    TraverseComponent swRootComp, ""
    


Else

    MsgBox "Please open assembly"

End If

Ende Sub

Sub TraverseComponent(comp als SldWorks.Component2, Einzug als Zeichenfolge)

Dim vChildComps As Variant

vChildComps = comp.GetChildren

Dim i As Integer

For i = 0 To UBound(vChildComps)

    Dim swChildComp As SldWorks.Component2
    Set swChildComp = vChildComps(i)
        
    Debug.Print indent & swChildComp.Name2 & " (" & swChildComp.GetPathName() & ")"
    
    TraverseComponent swChildComp, indent & INDENT_SYMBOL
   
   
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc

' Set SelMgr = Part.SelectionManager
' Set swFeatMgr = Part.FeatureManager

' Öffnet die Loop-Datei

ext = Rechts(swChildComp.GetPathName(), 6)

"Wenn es ein Teil ist
Wenn ext = "sldprt" Dann

Set Part = swApp.OpenDoc6(swChildComp.GetPathName(), 1, 0, "", longstatus, longwarnings)
Oder
"Es ist kein Kredit"
Wenn ext = "sldasm" Dann

'////aSM
Set Part = swApp.OpenDoc6(swChildComp.GetPathName(), 2, 0, "", longstatus, longwarnings)

Else
MsgBox "pas d'extension trouvée"
End If

Ende, wenn

''Ändert die Anzeige des SW-Baums

Set SelMgr = Part.SelectionManager
Set swFeatMgr = Part.FeatureManager

' Show Component Descriptions is set to true
swFeatMgr.ShowComponentDescriptions = True
' Show Component Configuration Names is set to false
swFeatMgr.ShowComponentConfigurationNames = True
 ' Show Component Configuration Descriptions is set to false
swFeatMgr.ShowComponentConfigurationDescriptions = False
' Show Component Names
swFeatMgr.ShowComponentNames = False

swFeatMgr.ShowDisplayStateNames = False

' MsgBox ' vor dem Schließen der Datei

''ferme le fichier de la boucle

swApp.CloseDoc Teil.GetPathName

Set Part = Nichts

Next

Ende Sub

1 „Gefällt mir“