⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class1.cls

📁 solidworks二次开发
💻 CLS
字号:
VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "Main"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = True
'指定需要包含的接口
Implements SWPublished.SwAddin

'定义SldWorks API对象与SolidWorks应用程序标志
Dim iSldWorks As SldWorks.SldWorks
Dim iCookie As Long
Dim iToolbarID As Long

'入口函数
Private Function SwAddin_ConnectToSW(ByVal ThisSW As Object, ByVal Cookie As Long) As Boolean
    '连接到SolidWorks应用程序后,初始化变量
    Set iSldWorks = ThisSW
    iCookie = Cookie
    iSldWorks.SetAddinCallbackInfo App.hInstance, Me, iCookie
    
    '添加用户界面
    Call AddInterface
    
    '设置连接标志
    SwAddin_ConnectToSW = True
End Function

'出口函数
Private Function SwAddin_DisconnectFromSW() As Boolean
    '卸载用户界面
    Call RemoveInterface
    
    '设置iSldWorks为空
    Set iSldWorks = Nothing
End Function

'添加用户界面
Private Sub AddInterface()
    Call AddMenus
    Call AddToolbars
End Sub

'卸载用户界面
Private Sub RemoveInterface()
    Call RemoveMenus
    Call RemoveToolbars
End Sub

'添加二次开发菜单
Private Sub AddMenus()
    '无文档模式下的VB二次开发菜单
    iSldWorks.AddMenu swDocNONE, "VB二次开发菜单", -1
    iSldWorks.AddMenuItem3 swDocNONE, iCookie, "新建零件文档(&N)@VB二次开发菜单", -1, "OnNewPartDoc", "", "新建一个零件文件", ""
    iSldWorks.AddMenuItem3 swDocNONE, iCookie, "第三级菜单(&New)@第二级菜单@第一级菜单@VB二次开发菜单", -1, "OnNewPartDoc", "", "新建一个零件文件", "E:\SWExample\位图 16X16 256色\365key.bmp"
    
    '零件文档模式下的VB二次开发菜单
    iSldWorks.AddMenu swDocPART, "VB二次开发菜单", -1
    iSldWorks.AddMenuItem3 swDocPART, iCookie, "新建零件文档(&N)@VB二次开发菜单", -1, "OnNewPartDoc", "", "新建一个零件文件", ""
    iSldWorks.AddMenuItem3 swDocPART, iCookie, "插入预定义样条曲线(&S)@VB二次开发菜单", -1, "OnCreateSketch", "", "插入一个预定义的样条曲线到当前选择的基准面", ""
    iSldWorks.AddMenuItem3 swDocPART, iCookie, "生成旋转特征(&R)@VB二次开发菜单", -1, "OnCreateRotateFeat", "", "在已有草图的基础上生成一个旋转特征", ""
    iSldWorks.AddMenuItem3 swDocPART, iCookie, "特征遍历(&T)@VB二次开发菜单", -1, "OnFeatureTraverse", "", "遍历零件中的所有特征并输出特征名称", ""
    iSldWorks.AddMenuItem3 swDocPART, iCookie, "第三级菜单(&New)@第二级菜单@第一级菜单@VB二次开发菜单", -1, "OnNewPartDoc", "", "新建一个零件文件", "E:\SWExample\位图 16X16 256色\365key.bmp"
 
    '装配体文档模式下的VB二次开发菜单
    iSldWorks.AddMenu swDocASSEMBLY, "VB二次开发菜单", -1
    iSldWorks.AddMenuItem3 swDocASSEMBLY, iCookie, "新建零件文档(&N)@VB二次开发菜单", -1, "OnNewPartDoc", "", "新建一个零件文件", ""
    iSldWorks.AddMenuItem3 swDocASSEMBLY, iCookie, "第三级菜单(&New)@第二级菜单@第一级菜单@VB二次开发菜单", -1, "OnNewPartDoc", "", "新建一个零件文件", "E:\SWExample\位图 16X16 256色\365key.bmp"
    
    '工程图文档模式下的VB二次开发菜单
    iSldWorks.AddMenu swDocDRAWING, "VB二次开发菜单", -1
    iSldWorks.AddMenuItem3 swDocDRAWING, iCookie, "新建零件文档(&N)@VB二次开发菜单", -1, "OnNewPartDoc", "", "新建一个零件文件", ""
    iSldWorks.AddMenuItem3 swDocDRAWING, iCookie, "第三级菜单(&New)@第二级菜单@第一级菜单@VB二次开发菜单", -1, "OnNewPartDoc", "", "新建一个零件文件", "E:\SWExample\位图 16X16 256色\365key.bmp"
End Sub

'删除添加的菜单
Private Sub RemoveMenus()
    iSldWorks.RemoveMenu swDocNONE, "VB二次开发菜单", ""
    iSldWorks.RemoveMenu swDocPART, "VB二次开发菜单", ""
    iSldWorks.RemoveMenu swDocASSEMBLY, "VB二次开发菜单", ""
    iSldWorks.RemoveMenu swDocDRAWING, "VB二次开发菜单", ""
End Sub

'添加工具栏
Private Sub AddToolbars()
    '添加工具栏上的大小图标
    Dim ret As Boolean
    iToolbarID = iSldWorks.AddToolbar4(iCookie, "VB二次开发工具栏", "E:\SWExample\位图 16X16 256色\365key.bmp", "E:\SWExample\位图 16X16 256色\365key-24.bmp", 1, swDocTemplateTypeNONE Or swDocTemplateTypePART Or swDocTemplateTypeASSEMBLY Or swDocTemplateTypeDRAWING)
    iToolbarID = iSldWorks.AddToolbar4(iCookie, "VB二次开发工具栏", "E:\SWExample\位图 16X16 256色\baidu.bmp", "E:\SWExample\位图 16X16 256色\baidu-24.bmp", 2, swDocTemplateTypeNONE Or swDocTemplateTypePART Or swDocTemplateTypeASSEMBLY Or swDocTemplateTypeDRAWING)
    iToolbarID = iSldWorks.AddToolbar4(iCookie, "VB二次开发工具栏", "E:\SWExample\位图 16X16 256色\banerzhuan.bmp", "E:\SWExample\位图 16X16 256色\banerzhuan-24.bmp", 3, swDocTemplateTypeNONE Or swDocTemplateTypePART Or swDocTemplateTypeASSEMBLY Or swDocTemplateTypeDRAWING)
    iToolbarID = iSldWorks.AddToolbar4(iCookie, "VB二次开发工具栏", "E:\SWExample\位图 16X16 256色\bokee.bmp", "E:\SWExample\位图 16X16 256色\bokee-24.bmp", 4, swDocTemplateTypeNONE Or swDocTemplateTypePART Or swDocTemplateTypeASSEMBLY Or swDocTemplateTypeDRAWING)
    If iToolbarID = -1 Then
        MsgBox "添加工具栏失败"
        Exit Sub
    End If
    '添加工具栏按钮的响应函数
    ret = iSldWorks.AddToolbarCommand2(iCookie, iToolbarID, 1, "OnNewPartdoc", "", "新建零件", "新建一个零件文档")
    ret = iSldWorks.AddToolbarCommand2(iCookie, iToolbarID, 2, "OnCreateSketch", "", "插入草图", "插入预定义草图")
    ret = iSldWorks.AddToolbarCommand2(iCookie, iToolbarID, 3, "OnCreateRotateFeat", "", "生成旋转特征", "在已有草图的基础上生成一个旋转特征")
    ret = iSldWorks.AddToolbarCommand2(iCookie, iToolbarID, 4, "OnFeatureTraverse", "", "特征遍历", "遍历零件中的所有特征并输出特征名称")
End Sub

'删除工具栏
Private Sub RemoveToolbars()
    Dim ret As Boolean
    ret = iSldWorks.RemoveToolbar2(iCookie, iToolbarID)
End Sub

'菜单“新建零件文档”的响应函数(Main类中的OnNewPartDoc过程要被SldWorks类中的函数调用,所以应设为Public类型)
Public Sub OnNewPartDoc()
    '新建一个零件文档
    Dim Part As PartDoc
    Set Part = iSldWorks.NewPart
    If Part Is Nothing Then
        MsgBox "新建零件文档失败"
    Else
        MsgBox "新建零件文档成功"
    End If
End Sub

'菜单“插入预定义样条曲线”的响应函数(Main类中的OnCreateSketch过程要被SldWorks类中的函数调用,所以应设为Public类型)
Public Sub OnCreateSketch()
    '得到当前活动文档
    Dim modelDoc As ModelDoc2
    Set modelDoc = iSldWorks.ActiveDoc
    If modelDoc Is Nothing Then
        MsgBox "不能得到当前活动文档"
        Exit Sub
    End If
    
    '进入草图模式,True表示生成草图后更新
    modelDoc.InsertSketch2 True
    
    '调用样条曲线命令生成曲线
    modelDoc.SketchSpline 3, 0.008, 0.027, 0
    modelDoc.SketchSpline 2, 0.006, 0, 0
    modelDoc.SketchSpline 1, 0.02, -0.025, 0
    modelDoc.SketchSpline 0, 0.01, -0.045, 0
    
    '调用直线命令生成直线。ConstructionGeometry为True表示中心线
    modelDoc.CreateLine2(0, 0.04, 0, 0, -0.05, 0).ConstructionGeometry = True
End Sub

'菜单“生成旋转特征”的响应函数(Main类中的OnCreateRotateFeat过程要被SldWorks类中的函数调用,所以应设为Public类型)
Public Sub OnCreateRotateFeat()
    '得到当前活动文档
    Dim modelDoc As ModelDoc2
    Set modelDoc = iSldWorks.ActiveDoc
    If modelDoc Is Nothing Then
        MsgBox "不能得到当前活动文档"
        Exit Sub
    End If
    
    '调用旋转特征命令,生成旋转特征(旋转角度为360度,弧度为6.2831853071796)
    Dim angle As Double
    angle = 6.2831853071796
    '得到特征生成的接口函数
    Dim featManager As FeatureManager
    Set featManager = modelDoc.FeatureManager
    If featManager Is Nothing Then
        MsgBox "不能得到特征生成的管理接口"
        Exit Sub
    End If
    
    '调用旋转生成特征的命令
    Dim ret As Boolean
    ret = featManager.FeatureRevolveThin(angle, False, 0, 0, 0.001, 0.001, 0, True, True, True)
    
    '调用直线命令生成直线。ConstructionGeometry为True表示中心线
    modelDoc.CreateLine2(0, 0.04, 0, 0, -0.05, 0).ConstructionGeometry = True
End Sub

'菜单“特征遍历”的响应函数
Public Sub OnFeatureTraverse()
    '得到当前活动文档
    Dim modelDoc As ModelDoc2
    Set modelDoc = iSldWorks.ActiveDoc
    If modelDoc Is Nothing Then
        MsgBox "不能得到当前活动文档"
        Exit Sub
    End If
    
    '判断文档类型
    Dim iDocType As Long
    iDocType = modelDoc.GetType()
    '如果文档类型为零件,进行遍历
    If iDocType = swDocPART Then
        '得到文档中的第一个特征
        Dim iFeature As Feature
        Set iFeature = modelDoc.FirstFeature
        '定义字符串变量用于保存特征的名称
        Dim featNames As String
        '得到文档的名称,vbCrLf为一个换行符
        Dim docName As String
        docName = modelDoc.GetTitle
        featNames = "零件名称:" + docName
        featNames = featNames + vbCrLf + "零件中的特征名称如下:"
        '进入循环,进行特征遍历
        For i = 1 To modelDoc.GetFeatureCount
            '获取特征名称
            Dim ftName As String
            ftName = iFeature.Name
            '将特征名称写入字符串
            featNames = featNames + vbCrLf + ftName
            Debug.Print featNames
            '获取下一个特征
            Dim featTemp As Feature
            Set featTemp = iFeature.GetNextFeature
            Set iFeature = featTemp
        Next i
        '输出特征名称
        MsgBox featNames
    Else
        MsgBox "不是零件文档,本程序只是针对零件文档进行特征遍历"
    End If
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -