Python SolidWorks 二次开发—SolidWorks如何判断零件是钣金件还是焊接件(型材件)
前言
通常我们在用SolidWorks 设计产品时,经常会用到钣金件或焊接件(型材件)两个模块,用这两个模块设计出来的东西,后期在整理BOM时要根据不同的零件及加工方式,将钣金件交由钣金车间进行生产加工,焊接件(型材件)交由焊接车间进行生产加工,这里介绍下如何快速提出出以上两种零件类型,进行快速的图纸分类。
一、钣金件的识别
这里介绍2中可以识别是否为钣金零件的方法
1、 用IsSheetMetal方法实现,以下为示例代码,为实现以下示例代码要求根装配下均为零件,如有装配体零件还需递归零件,否则会报错
import win32com.client
vBodyInfo=win32com.client.VARIANT(16396,None)
def main():
sldver=2018
swApp=win32com.client.Dispatch(f'SldWorks.Application.{sldver-1992}')
swApp.CommandInProgress =True
swApp.Visible =True
swModel = swApp.ActiveDoc
# 获取所有comp
vComponents = swModel.GetComponents(True)
for swComp in vComponents:
# 获取实体
vBodies = swComp.GetBodies3(0, vBodyInfo)
if vBodies:
body=vBodies[0]
# 判断实体是否钣金特征生成
boolstatus=body.IsSheetMetal()
if boolstatus:
print('是钣金件')
else:
print('不是钣金件')
if __name__ == '__main__':
main()
2、 用SetBendState方法实现,以下为示例代码,为实现以下示例代码要求根装配下均为零件,如有装配体零件还需递归零件,否则会报错
import win32com.client
def main():
sldver=2018
swApp=win32com.client.Dispatch(f'SldWorks.Application.{sldver-1992}')
swApp.CommandInProgress =True
swApp.Visible =True
swModel = swApp.ActiveDoc
# 获取所有comp
vComponents = swModel.GetComponents(True)
for swComp in vComponents:
# 将comp对象转换为ModelDoc2对象
compMod=swComp.GetModelDoc2
# 获取折弯信息
res = compMod.GetBendState
if res==0:
print('不是钣金件')
else:
print('是钣金件')
if __name__ == '__main__':
main()
3、 两种方法的比较
方法名称 | 优点 | 缺点 | 适用场合 |
---|---|---|---|
IsSheetMetal | 准确率高,可以对所有body对象进行判断 | Body2 对象方法,调用麻烦 | 零件body是由多种方式创建的,如钣金,焊件,实体等 |
SetBendState | ModelDoc2对象方法,调用方便,速度快 | 只能判断单个零件,有可能误判 | 只能使用钣金创建零件,如由其他方法可能误判 |
二、焊接件的识别
用IsWeldment方法实现,以下为示例代码,为实现以下示例代码要求根装配下均为零件,如有装配体零件还需递归零件,否则会报错
import win32com.client
def main():
sldver=2018
swApp=win32com.client.Dispatch(f'SldWorks.Application.{sldver-1992}')
swApp.CommandInProgress =True
swApp.Visible =True
swModel = swApp.ActiveDoc
# 获取所有comp
vComponents = swModel.GetComponents(True)
for swComp in vComponents:
# 将comp对象转换为ModelDoc2对象
compMod=swComp.GetModelDoc2
# 判断是否焊接件
res = compMod.IsWeldment
if res:
print('是焊接件')
else:
print('不是焊接件')
if __name__ == '__main__':
main()