Python SolidWorks 二次开发---SolidWorks四种遍历零部件的方式(一)

Python SolidWorks 二次开发—SolidWorks四种遍历零部件的方式(一)



前言

零部件的遍历主要是为了方便对零部件的后续操作,例如批量零部件的属性修改,方程式修改等,这里介绍四种SolidWorks自带的遍历方法,本文介绍第一种遍历方式


一、官方示例的遍历代码

在SolidWorks官方API帮助文件中,搜索“Traverse Assembly at Component Level Example ”,可找到具体的示例代码,详细示例代码如下:

Option Explicit
Sub TraverseComponent _
(swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp As Variant
    Dim swChildComp As SldWorks.Component2
    Dim swCompConfig As SldWorks.Configuration
    Dim sPadStr As String
    Dim i As Long
    For i = 0 To nLevel - 1
        sPadStr = sPadStr + "  "
    Next i
    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        TraverseComponent swChildComp, nLevel + 1
        Debug.Print sPadStr & swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"
    Next i
End Sub
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swAssy As SldWorks.AssemblyDoc
    Dim swConf As SldWorks.Configuration
    Dim swRootComp As SldWorks.Component2
    Dim bRet As Boolean
    Dim fileName As String
    Dim errors As Long
    Dim warnings As Long
    Set swApp = CreateObject("SldWorks.Application")   
    Set swModel = swApp.ActiveDoc
    Set swConf = swModel.GetActiveConfiguration
    Set swRootComp = swConf.GetRootComponent3(True)
    Debug.Print "File = " & swModel.GetPathName
    ' Traverse components
    TraverseComponent swRootComp, 1
End Sub

二、Python遍历代码

此处为方便后续比较,Python代码功能和VBA代码功能保持一致,不进行删减,以下为Python代码示例:

import win32com.client
import pythoncom
from swconst import constants

def TraverseComponent(swComp, nLevel):
    sPadStr=''
    for i in range(nLevel-1):
        sPadStr = sPadStr + "  "

    vChildComp = swComp.GetChildren
    for i in range(len(vChildComp)):
        swChildComp = vChildComp[i]
        TraverseComponent(swChildComp, nLevel + 1)
        print(f'{
      
      sPadStr}{
      
      swChildComp.Name2} " <" {
      
      swChildComp.ReferencedConfiguration} ">"')

def main():
    sldver=2018
    swApp=win32com.client.Dispatch(f'SldWorks.Application.{
      
      sldver-1992}')
    swApp.CommandInProgress =True
    swApp.Visible =True
    swModel = swApp.ActiveDoc
    swConf = swModel.GetActiveConfiguration
    swRootComp = swConf.GetRootComponent3(True)
    print(f"File = {
      
      swModel.GetPathName}" )
    # ' Traverse components
    TraverseComponent(swRootComp, 1)

if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/Bluma/article/details/129028078