Desarrollo secundario de Python SolidWorks---Cuatro formas de atravesar componentes en SolidWorks (3)

Desarrollo secundario de Python SolidWorks: cuatro formas de atravesar componentes de SolidWorks (3)



Prefacio

El recorrido de componentes es principalmente para facilitar las operaciones posteriores en los componentes, como la modificación de propiedades de los componentes del lote, la modificación de ecuaciones, etc. Aquí se presentan cuatro métodos de recorrido que vienen con SolidWorks. Este artículo presenta el tercer método de recorrido. Los dos primeros tipos de recorrido El método de enlace es el siguiente:
Desarrollo secundario de Python SolidWorks: cuatro formas de SolidWorks para atravesar componentes (1)
Desarrollo secundario de Python SolidWorks: cuatro formas de SolidWorks para atravesar componentes (2)


1. Código transversal del ejemplo oficial.

En el archivo de ayuda API oficial de SolidWorks, busque "Ejemplo de nodos del árbol de diseño de FeatureManager para expandir o contraer" para encontrar un código de muestra específico. El código de muestra contiene muchos elementos de filtro. Aquí solo estamos atravesando los componentes, por lo que modificaremos el código de muestra. El código modificado es el siguiente: el principio de este recorrido es atravesar el Nodo buscando y luego encontrar que el tipo de Nodo es el tipo Componente2 para atravesar:

Option Explicit

Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim myModel As SldWorks.ModelDoc2
    Dim featureMgr As SldWorks.FeatureManager
    Dim rootNode As SldWorks.TreeControlItem
    Set swApp = Application.SldWorks
    Set myModel = swApp.ActiveDoc
    Set featureMgr = myModel.FeatureManager
    Set rootNode = featureMgr.GetFeatureTreeRootItem()
    If Not rootNode Is Nothing Then
        traverse_node rootNode
    End If   
End Sub

Sub traverse_node(node As SldWorks.TreeControlItem)
    Dim childNode As SldWorks.TreeControlItem
    Dim componentNode As SldWorks.Component2
    Dim nodeObject As Object
    Dim refConfigName As String
    Set nodeObject = node.Object
    If Not nodeObject Is Nothing Then
        Set componentNode = nodeObject
        If componentNode.GetSuppression <> SwConst.swComponentSuppressionState_e.swComponentSuppressed Then
            Debug.Print componentNode.Name2
        End If        
    End If    
    Set childNode = node.GetFirstChild()
    While Not childNode Is Nothing
        If childNode.ObjectType = SwConst.swTreeControlItemType_e.swFeatureManagerItem_Component Then
            traverse_node childNode
        End If        
        Set childNode = childNode.GetNext
    Wend    
End Sub

2. Código transversal de Python

Para facilitar la comparación posterior, las funciones del código Python y las funciones del código VBA siguen siendo las mismas y no se eliminarán. El siguiente es un ejemplo del código Python:

import win32com.client
from swconst import constants

def traverse_node(node):
    nodeObject = node.Object
    if nodeObject is not None:
        if nodeObject.GetSuppression!=constants.swComponentSuppressed:
            print(nodeObject.Name2)
    childNode = node.GetFirstChild
    while childNode is not None:
        if childNode.ObjectType==constants.swFeatureManagerItem_Component:
            traverse_node(childNode)
        childNode = childNode.GetNext

def main():
    sldver=2018
    swApp=win32com.client.Dispatch(f'SldWorks.Application.{
      
      sldver-1992}')
    swApp.CommandInProgress =True
    swApp.Visible =True
    myModel = swApp.ActiveDoc
    featureMgr = myModel.FeatureManager
    rootNode = featureMgr.GetFeatureTreeRootItem2(constants.swFeatMgrPaneBottom)
    traverse_node(rootNode)

if __name__ == '__main__':
    main()

Supongo que te gusta

Origin blog.csdn.net/Bluma/article/details/129032702
Recomendado
Clasificación