登录【网站注册】点击左边“微信账号登陆”图标,微信扫描即自动注册并登陆
搜索
查看: 1710|回复: 1

[转载文章] 五金模具设计之AUTOCAD二次开发VBA篇

[复制链接]
发表于 2012-8-19 15:09:18 | 显示全部楼层 |阅读模式
本帖最后由 bsirhell 于 2012-8-19 15:10 编辑

做冲压模具设计的,大部分或多或少会用到一些外挂,比如有名的pressCAD,我想可能还有不少人依然在用,的确,presscad还是一个很不错的设计外挂,其实如果你懂一点LISP或者是VBA,你就可以打造一个属于你自已的外挂,LISP的话,我不是很通,这里我来说说VBA吧.
模具设计时,我们一般会要分层,上夹板一个层,上脱板一个层,我们先来看一下一些图层函数:
Option Explicit
Dim objPreLayer As AcadLayer
‘建新图层并为当前层(OK)
Public Function CreatLayer(ByVal LayerName As String, Optional Color% = acByLayer) As AcadLayer
     On Error GoTo errput
     Dim ObjLayer As AcadLayer
     If LayerExist(LayerName) = False Then
         Set ObjLayer = ThisDrawing.Layers.Add(LayerName)
         ObjLayer.Color = Color
     Else
         Set ObjLayer = ThisDrawing.Layers.Item(LayerName)
         ObjLayer.Color = Color
     End If
     ThisDrawing.ActiveLayer = ObjLayer
     Set CreatLayer = ObjLayer
     Exit Function
errput:
     MsgBox “Layer.CreatLayer发生错误!” & vbCr & Err.Number & Err.Description
     Err.Clear
End Function
‘图层
Public Function LayerExist(ByVal LayerName As String) As Boolean
LayerExist = False
    Dim ObjLayer As AcadLayer
    For Each ObjLayer In ThisDrawing.Layers
        If StrComp(ObjLayer.Name, LayerName, vbBinaryCompare) = 0 Then
            LayerExist = True
            Exit Function
        End If
    Next ObjLayer
End Function
Sub Cmdcloseother()
    Dim STR As String
    STR = ThisDrawing.Utility.GetString(1, “请输入图层名:”)
    If LayerExist(STR) = False Then Exit Sub
    onelayer (UCase(STR))
End Sub
Sub cmdSetCur()
   On Error GoTo ErrHandle
    Dim objDest As AcadEntity
    Dim ptBase As Variant
    ThisDrawing.Utility.GetEntity objDest, ptBase, “选择目标图层中的实体:”
    Set objPreLayer = ThisDrawing.Layers.Item(objDest.LAYER)
    ThisDrawing.ActiveLayer = objPreLayer
    Exit Sub
ErrHandle:
    Err.Clear
End Sub
Sub cmdonly()
   On Error GoTo ErrHandle
    Dim objDest As AcadEntity
    Dim ptBase As Variant
    Dim ObjLayer As AcadLayer
    ThisDrawing.Utility.GetEntity objDest, ptBase, “选择单开图层中的实体:”
    Set objPreLayer = ThisDrawing.Layers.Item(objDest.LAYER)
    For Each ObjLayer In ThisDrawing.Layers
        If ObjLayer.Name <> objPreLayer.Name Then
           ObjLayer.layeron = False
        End If
    Next
    Exit Sub
ErrHandle:
    Err.Clear
End Sub
‘关闭图层
Sub cmdClose()
   On Error GoTo ErrHandle
    Dim objDest As AcadEntity
    Dim ptBase As Variant
    ThisDrawing.Utility.GetEntity objDest, ptBase, “选择所要关闭图层中的实体:”
    Set objPreLayer = ThisDrawing.Layers.Item(objDest.LAYER)
    objPreLayer.layeron = False
    Exit Sub
ErrHandle:
    Err.Clear
End Sub
Sub cmdMerge()
    On Error GoTo ErrHandle
    ‘获得被合并的图层名称
    Dim sourceLayer As String
    Dim objSource As AcadEntity
    Dim ptBase As Variant
    ThisDrawing.Utility.GetEntity objSource, ptBase, “选择被合并的图层中的对象:”
    sourceLayer = objSource.LAYER
    ‘获得合并到的图层名称
    Dim destLayer As String
    Dim objDest As AcadEntity
    ThisDrawing.Utility.GetEntity objDest, ptBase, “选择合并到的图层中的对象:”
    destLayer = objDest.LAYER
    ‘转换所要合并的图层中的实体到目标图层
    Dim objent As AcadEntity
    For Each objent In ThisDrawing.ModelSpace
        If objent.LAYER = sourceLayer Then
            objent.LAYER = destLayer
        End If
    Next objent
   
    ‘删除被合并的图层
    Dim ObjLayer As AcadLayer
    Set ObjLayer = ThisDrawing.Layers.Item(sourceLayer)
    ObjLayer.Delete
   
    Exit Sub
   
ErrHandle:
    Err.Clear
    MsgBox “该图层不能被删除!”, vbCritical
End Sub
Sub cmdOpenPre()
    If objPreLayer Is Nothing Then
        MsgBox “无关闭图层的历史记录!”, vbCritical
    Else
        objPreLayer.layeron = True
        ThisDrawing.Regen acActiveViewport
    End If
End Sub
‘删除图层
Sub deletelayer()
On Error GoTo errput
   Dim PT As Variant
   Dim ent As AcadEntity
   ThisDrawing.Utility.GetEntity ent, PT, “选择要删除图层中的对象:”
   Call DelLayer(ent.LAYER)
Exit Sub

errput:
If Err.Number = -2147352567 Then
      Err.Clear: Exit Sub
   Else
      ThisDrawing.Utility.Prompt “运行过程发生如下错误” & vbCr & Err.Number & Err.Description & vbCrLf
      Err.Clear
      Exit Sub
   End If
End Sub
‘建新图层并为当前层(OK)
Public Function greatlayer(ByVal LayerName As String) As AcadLayer
On Error GoTo errput
Dim ObjLayer As AcadLayer
If LayerExist(LayerName) = False Then
Set ObjLayer = ThisDrawing.Layers.Add(LayerName)
Else
Set ObjLayer = ThisDrawing.Layers.Item(LayerName)
End If
ThisDrawing.ActiveLayer = ObjLayer
Set greatlayer = ObjLayer
Exit Function
errput:
MsgBox “运行过程发生如下错误” & vbCr & Err.Number & Err.Description
Err.Clear
End Function
由以上这些函数我们就可以轻易地创建我们的模板了!
文章字数有限制,请去原网站查看.转载请注明文章转载自:网络资源 [http://www.makehao.com]
本文链接地址:五金模具设计之AUTOCAD二次开发VBA篇
优胜专注教学 技术实力最强 www.ysug.com
 楼主| 发表于 2012-8-22 08:01:04 | 显示全部楼层
自已顶一个!
优胜专注教学 技术实力最强 www.ysug.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


快速回复 返回顶部 返回列表