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()