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

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



前言

前面已经介绍四种SolidWorks自带的遍历方法,分别用VBA和Python两种代码实现的,这里就对这四种方法的实际使用效果进行总结,以下为四种遍历的链接
Python SolidWorks 二次开发—SolidWorks四种遍历零部件的方式(一)
Python SolidWorks 二次开发—SolidWorks四种遍历零部件的方式(二)
Python SolidWorks 二次开发—SolidWorks四种遍历零部件的方式(三)
Python SolidWorks 二次开发—SolidWorks四种遍历零部件的方式(四)


一、四种遍历代码的原理实现

1 第一种遍历

第一种遍历零部件的形式是通过先找到跟组件对象,然后对跟组件进行零部件遍历,当遍历到的是零件时,将零件的模型树名称显示出来,当遍历到的是装配体时,将装配体的模型树名称显示出来,同时递归子零部件,直到所有遍历完成,输出模型树名称;

2 第二种遍历

加粗样式第二种遍历零部件的形式是通过先找到跟组件对象,然后对跟组件的特征进行遍历,判断特征类型是否为“Reference”或者“ReferencePattern”,表示特征为零部件特征,然后将特征转换为组件,输出模型树显示名称,继续判断组件类型是否为装配体,是装配体时递归上面的步骤,直到所有遍历完成,输出模型树名称;

3 第三种遍历

第三种遍历零部件的形式和第二种有点类似,不同点是通过遍历零部件的node进行遍历的,其余过程和第二种遍历方式类似,只是判断条件有所区别;

4 第四种遍历

第四种遍历零部件的形式有别于以上几种,是通过SolidWorks提供的API直接获取到已经打开的所有文件的全路径名元组,然后将他们再循环显示出来即可

二、通过Python运行VBA宏

1 函数定义

Function RunMacro2( _
   ByVal FilePathName As System.String, _
   ByVal ModuleName As System.String, _
   ByVal ProcedureName As System.String, _
   ByVal Options As System.Integer, _
   ByRef Error As System.Integer _
) As System.Boolean

2 函数参数说明

FilePathName : 宏全路径名
ModuleName 宏模块的名称
ProcedureName 宏模块中运行函数或过程的名称
Options 运行宏的选项
Error 运行宏后回产生的错误

3 Python调用此函数示例

import win32com.client
from swconst import constants
import pythoncom

def main():
    sldver=2018
    swApp=win32com.client.Dispatch(f'SldWorks.Application.{
      
      sldver-1992}')
    swApp.CommandInProgress =True
    swApp.Visible =True
    runMacroError=win32com.client.VARIANT(pythoncom.VT_BYREF | pythoncom.VT_I4, -1)
    boolstatus = swApp.RunMacro2("c:\test\RunMacroSub.swp", "RunMacroSub1", "main",   
                                 constants.swRunMacroUnloadAfterRun, runMacroError)

if __name__ == '__main__':
    main()

3 调用此函数目的

调用此函数主要是为了比较各种递归遍历所用的时间

三、四种遍历方法的比较

为了测试四种方法所用时间,统一遍历有864个零部件的装配体,并都打印出来名称,所用时间如下表所示,所用时间是计算8次的平均值:

调用形式 所用时间(s) 优点 缺点
VBA宏第一种方式 2.461551 耗时少,可直接操作组件名或配置名 无法保证模型树序列
VBA宏第二种方式 6.010254 可保持模型树序列 耗时稍长
VBA宏第三种方式 9.043458 可保持模型树序列,可直接操作node 耗时最长
VBA宏第四种方式 0.88086 耗时最少 只能获取到零部件路径名,无法按模型树排序
Python调用 VBA宏第一种方式 1.00662 无法获得返回值到Python
Python调用 VBA宏第二种方式 2.29611 无法获得返回值到Python
Python调用 VBA宏第三种方式 8.887979 无法获得返回值到Python
Python调用 VBA宏第四种方式 0.302731 无法获得返回值到Python
Python第一种方式 3.902943 耗时少,可直接操作组件名或配置名 无法保证模型树序列
Python第二种方式 14.73471 保持模型树序列 耗时稍长
Python第三种方式 80 保持模型树序列 耗时最长
Python第四种方式 0.491186 耗时最少,可直接操作node 只能获取到零部件路径名,无法按模型树排序

时间总结:

  • Python的耗时普遍偏长,第四个除外,这也符合Python语言的特性;
  • Python调用VBA宏用时最短是因为不需要打印零部件名称
  • 所有调用方式第四种时间上是最优的,第三种都是比较耗时的

使用场景总结:

  • 对于追求效率的遍历可才采用第四种方式
  • 对于有模型树排序要求的可采用第二种方式
  • 对于有node操作的可采用第三种方式,但此种效率很低,不是必须不建议用
  • 第一种方式虽然耗时相对较少,但不能按模型树排序,有修改配置选项的可采用此种排序
  • 对于批量改名,改属性的操作可直接用第四种方法实现,效率最高
  • 对于需要按模型树序号形式导出BOM的第二种方法最实用
  • Python调用 VBA宏的方式不适合有返回值的交互操作
  • 具体如何使用,可根据实际使用需求选择,这里只是简单的做了耗时和功能说明

猜你喜欢

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