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宏的方式不适合有返回值的交互操作
  • 具体如何使用,可根据实际使用需求选择,这里只是简单的做了耗时和功能说明
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SolidWorks可以通过Python编程语言进行二次开发Python是一种简单易学的脚本语言,拥有丰富的库和模块,可以很好地与Solidworks集成。 首先,为了进行SolidWorks二次开发,我们需要安装SolidWorks API以及Python的相关库。SolidWorks API是一组可用于对SolidWorks进行编程访问的库和接口。Python的相关库包括pywin32和comtypes,用于与SolidWorks的COM接口进行交互。 使用Python进行SolidWorks二次开发可以实现许多功能,如自动化生成零件、装配件和工程图。我们可以使用Python脚本读取和修改SolidWorks文件、创建和操作零件和装配件,以及生成和管理工程图。Python也可以帮助我们进行CAD数据的处理和分析,如提取尺寸信息、计算质量和重心等。 在二次开发中,我们可以编写Python脚本来快速完成重复性的任务,提高工作效率。Python的易学性和代码的简洁性使得二次开发变得更加容易,无需编写繁琐的代码,可以快速实现想要的功能。 除了使用已有的库和模块,我们还可以使用SolidWorks的API文档和示例代码来学习和开发自己的功能。SolidWorks提供了详细的API文档,其中包含各种对象和方法的说明,以及示例代码和教程来帮助我们开始二次开发。 总之,通过使用Python进行SolidWorks二次开发,我们可以实现自动化、快速和高效的CAD任务处理,并且具有灵活性和可扩展性。这极大地促进了CAD工程师在实际工作中的效率和创造力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值