Hoe de boomweergave via een macro te wijzigen

Hoi allemaal.

We hebben momenteel onze solidworks-bestanden met een assemblage- of onderdelenboom die niet erg leesbaar is omdat de naam van de configuratie zichtbaar is.
image

Ik heb gevonden hoe ik dit met de hand kan corrigeren op elk bestand, maar het is super lang omdat het is opgeslagen in de bestandsopties en niet die van SW, dus om voor elk bestand te doen
Dus ik zou graag een macro willen maken die dit doet op de assemblage die ik open, evenals al zijn componenten. Dit zou me in staat stellen om veel efficiënter te zijn.

Heeft iemand een idee of aanwijzing voor deze macro om na de macro aan te komen bij deze opties, ongeacht de opties die al dan niet in het basisbestand zijn geselecteerd (omdat niet alle bestanden noodzakelijkerwijs dezelfde opties hebben geselecteerd.
image

Hier is een voorbeeld dat de beschrijving aanvinkt:

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

Voor de opties die voor ons worden gecontroleerd:
image
En het voorbeeld van SW:
https://help.solidworks.com/2021/english/api/sldworksapi/Show_Components_and_Component_Configurations_Names_and_Descriptions_Example_VB.htm
Hiermee moet je vooruit kunnen.

5 likes

Ok dank je, ik zal dit opzetten en terugkomen om te sluiten als ik alles heb wat ik nodig heb.
Maar nu al een grote dankjewel!

Nou, ik kan eigenlijk bijna doen wat ik wil door je macro iets aan te passen
(Ik kan me verstoppen en laten zien wat ik wil.

Het punt is dat ik graag zou willen dat dit werkt op alle bestanden in de assembly die ik open.

Laat het me uitleggen:

Ik open een assembly en voer deze macro uit, het geeft me dit:
image

Maar als ik het gemarkeerde bestand open, krijg ik het volgende:
image

terwijl ik graag hetzelfde display zou willen hebben als voor de montage.

De macro zou dus voor elk onderliggend bestand in de assembly moeten worden uitgevoerd.

Enig idee hoe je door al deze kinderen heen moet gaan?
sorry dat ik ideeën heb maar geen kennis of bijna...

Om door elke subassemblage en elk onderdeel van uw assemblage te bladeren, moet u Traverse-componenten gebruiken en uw code invoegen waar u dat nodig hebt (kijk of u het onderdeel moet openen of niet):
https://help.solidworks.com/2020/English/api/sldworksapi/Traverse_Assembly_at_Component_Level_Example_VB.htm

of opnieuw:

Altijd hetzelfde type code:

Of een andere oplossing neemt een macro die batchverwerking uitvoert, zoals integratie:

3 likes

Nou, met jouw hulp ben ik erin geslaagd om iets te doen dat waarschijnlijk niet optimaal is, maar lijkt te werken. De openheid van kinderen is inderdaad noodzakelijk.

als het kan helpen

'**********************
'Auteursrecht(C) 2023 Xarial Pty Limited
'Referentie: De componentenboom doorkruisen met behulp van de SOLIDWORKS API
"Licentie: Licentie
'**********************
Optie Expliciete
Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim deel als SldWorks.ModelDoc2
Zon SelMgr Als SldWorks.SelectionMgr
Dim swFeatMgr als SldWorks.FeatureManager
Dim path_complete als String' volledige manier van het stuk
Dim myError zo lang mogelijk
Dim myWarning zo lang

Dim aanhalingsteken als tekenreeks
Dim boolstatus als Booleaanse
Dim longstatus As Long, longwarnings As Long

Dim ext als snaar
Const INDENT_SYMBOL As String = " "

Sub hoofd()

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

Einde Sub

Sub TraverseComponent(comp als SldWorks.Component2, inspringen als tekenreeks)

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
' Stel swFeatMgr = Deel.FeatureManager in

' Opent het lusbestand

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

'Als het een onderdeel is
Als ext = "sldprt" Dan

Deel instellen = swApp.OpenDoc6(swChildComp.GetPathName(), 1, 0, "", longstatus, longwarnings)
Anders
'Het is geen lening'
Als ext = "sldasm" Dan

"////aSM
Deel instellen = swApp.OpenDoc6(swChildComp.GetPathName(), 2, 0, "", longstatus, longwarnings)

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

Einde als

''Wijzigt de weergave van de SW-boom

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' voor het sluiten van het dossier

''ferme le fichier de la boucle

swApp.CloseDoc Part.GetPathName

Set Deel = Niets

Next

Einde Sub

1 like