Python SolidWorks 二次开发---SolidWorks如何判断零件是钣金件还是焊接件(型材件)

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

总结:

以上的示例仅为演示方法的实现,如根装配下还有装配体,以上代码可能会报错,需要递归处理。

无论是钣金件还是焊接件,建议在零件设计时都只单独使用钣金模块或者是焊件模块,不建议混合使用,虽然设计时候省事,后期处理会比较麻烦,而且以上函数在处理混合建模的零件可能会出现误判的情况。

猜你喜欢

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