Desarrollo secundario de Python SolidWorks: cuatro formas de atravesar componentes de SolidWorks (3)
Directorio de artículos
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()