Jak zmienić wyświetlanie drzewa za pomocą makra

Cze wszystkim.

Obecnie mamy nasze pliki solidworks z drzewem złożenia lub części, które nie jest zbyt czytelne, ponieważ nazwa konfiguracji jest widoczna.
image

Znalazłem, jak poprawić to ręcznie na każdym pliku, ale jest to bardzo długie, ponieważ jest zapisane w opcjach pliku, a nie w opcjach SW, więc należy to zrobić dla każdego pliku
Chciałbym więc zrobić makro, które robi to na składaniu, który otwieram, a także na wszystkich jego komponentach. To pozwoliłoby mi być znacznie bardziej wydajnym.

Czy ktoś ma pomysł lub podpowiedź, aby to makro przychodziło po makrze do tych opcji niezależnie od opcji zaznaczonych lub nie w pliku bazowym (bo nie wszystkie pliki koniecznie mają zaznaczone te same opcje.
image

Oto przykład, który zaznacza opis:

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

Dla opcji, które są dla nas sprawdzane:
image
I przykład SW:
https://help.solidworks.com/2021/english/api/sldworksapi/Show_Components_and_Component_Configurations_Names_and_Descriptions_Example_VB.htm
Dzięki temu powinieneś być w stanie iść naprzód.

5 polubień

Ok, dziękuję, skonfiguruję to i wrócę, aby zamknąć, jeśli mam wszystko, czego potrzebuję.
Ale już wielkie dzięki!

Cóż, właściwie mogę prawie zrobić, co chcę, lekko dostosowując twoje makro
(Mogę się schować i pokazać to, co chcę.

Chodzi o to, że chciałbym, aby to działało na wszystkich plikach zawartych w zestawie, który otwieram.

Pozwól, że wyjaśnię:

Otwieram zestaw i uruchamiam to makro, daje mi to:
image

Ale jeśli otworzę podświetlony plik, otrzymasz następujące informacje:
image

natomiast ja bym chciał mieć taki sam wyświetlacz jak do montażu.

W związku z tym makro musiałoby zostać uruchomione dla każdego pliku podrzędnego w zestawie.

Masz jakiś pomysł, jak przejść przez te wszystkie dzieci?
przepraszam, mam pomysły, ale bez wiedzy lub prawie...

Aby przeglądać każdy podzespół i część zespołu, należy użyć komponentów ciągu poligonowego i wstawić kod tam, gdzie jest to potrzebne (sprawdź, czy musisz otworzyć część, czy nie):
https://help.solidworks.com/2020/English/api/sldworksapi/Traverse_Assembly_at_Component_Level_Example_VB.htm

lub znowu:

Zawsze ten sam typ kodu:

Lub innym rozwiązaniem jest makro, które wykonuje przetwarzanie wsadowe, takie jak Integracja:

3 polubienia

Cóż, z twoją pomocą udało mi się zrobić coś, co prawdopodobnie nie jest optymalne, ale wydaje się, że działa. Otwartość dzieci jest rzeczywiście konieczna.

jeśli to może pomóc

'**********************
"Prawa autorskie(C) 2023 Xarial Pty Limited
'Odniesienie: Przechodzenie przez drzewo komponentów za pomocą API SOLIDWORKS
'Licencja: Licencja
'**********************
Opcja jawna
Dim swApp jako SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Przyciemnij część jako SldWorks.ModelDoc2
Sun SelMgr jako SldWorks.SelectionMgr
Dim swFeatMgr As SldWorks.FeatureManager
Dim path_complete As String' Pełna Droga Utworu
Dim myError tak długo
Przyciemnij myWarning tak długo

Przyciemniony cudzysłów Jako ciąg
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Dim ext As Ciąg
Const INDENT_SYMBOL As String = " "

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

Koniec subwoofera

Sub TraverseComponent(comp As SldWorks.Component2, wcięcie jako ciąg)

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
' Ustaw swFeatMgr = Part.FeatureManager

' Otwiera plik pętli

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

– Jeśli to jest część
Jeśli ext = "sldprt" Wtedy

Ustaw część = swApp.OpenDoc6(swChildComp.GetPathName(), 1, 0, "", longstatus, longwarnings)
Inaczej
"To nie jest pożyczka"
Jeśli ext = "sldasm" Wtedy

'////aSM
Ustaw część = swApp.OpenDoc6(swChildComp.GetPathName(), 2, 0, "", longstatus, longwarnings)

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

Zakończ jeżeli:

''Modyfikuje wyświetlanie drzewa oprogramowania

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 ' przed zamknięciem pliku

''ferme le fichier de la boucle

swApp.CloseDoc Nazwa_części.GetPathName

Ustaw część = Nic

Next

Koniec subwoofera

1 polubienie