内容发布更新时间 : 2024/9/8 10:36:28星期一 下面是文章的全部内容请认真阅读。
大家知道什么是宏吗? 说白它就是VBA过程。 看下面的代码:
Public Sub MacroDemo()
MsgBox \End Sub 这就是宏。
打开CAD输入命令vbaide回车会出现VBA的编辑界面,双击ThisDrawing在右侧的代码区输入上面的代码。如下图:
然后按F5键会出现宏窗口,如下图:
点击运行,大家看到什么?
这就是一个最简单的一个用VBA对CAD进行二次开发的程序,也就是宏
那什么是VBA呢?VBA就是VB的一个子集它的全称是Visual Basic For Application,它具有VB的大部分功能。
既然我们选择了VBA,我们首先要知道VBA能操作CAD里的哪些对象呢? 打开VBAIDE窗口按下F2键会出现对象浏览器。如下图
库选择AutoCAD,这时下面显示的就是CAD为VBA提供的可操作的对象的类了。
这时有的人因没有基础,所以还是一头雾水,别怕,选中一个类图标后按F1,这时会弹出AutoCAD ActiveX and VBA Reference,选择最上面的一个子项Object Model(对象模型),这个就是在CAD里那些对象的关系,如下图:
如果英文不好的话,可以安装CAD2000,它的这个部分是中文的。为想学好VBA二次开发这个是必需的,而且VBA对Office的二次开发也是这样的。
这个在编程界叫做Active X,包括Active X控件、Active X DLL、和Active X EXE 就好比一个程序为其它程序提供的一个后门一样 下面我就给大家讲一下菜单吧。
因为我们用到的其它公司做CAD二次开发的插件,从直观上首先接触的就是它的菜单,刚开始用的时候就是从它的菜单开始接触的。
我经常用到的做菜单的方法有两种,一种是用CAD的菜单文件,另一种就是用VBA代码直接长成菜单。
我先介绍第一种,CAD的菜单文件
它是文本文件,我们用记事本就可打开并编辑它,或者再重新创建一个 说到这里有的人可能要问了,我应该从何处开始入手呢,要怎样做呢? 别急,CAD本身就有现成的供我们参考,就放在CAD的安装文件夹下的Support文件夹内,或者其它插件的文件夹内,找不到可以按F3搜一下,扩展名分别为.mnu .mns ,mnc
默认的菜单文件是 acad.mnu。原始 ASCII 菜单文件,即用户通常编辑或创建的文件。该文件以查看完整菜单文件的外表特征。
.mnc已编译的菜单文件;一种二进制文件,包含用于定义菜单或其他界面元素的功能及外观的命令字符串和菜单语法。首次加载 MNU 文件时,AutoCAD 将编译此文件。
.mns源菜单文件;一种与 MNU 文件相同的 ASCII 文件,但是不包含注释或特殊格式。每次菜单文件的内容被更改时,AutoCAD 将修改源菜单文件。 .mnr菜单资源文件;一种二进制文件,包含由菜单或其他界面元素使用的位图。AutoCAD 每次编译 MNC 文件时,均生成菜单资源文件。
.mnt菜单资源文件。仅在 MNR 文件无效(例如,只读)时生成该文件。
.mnl菜单 LISP 文件;包含菜单文件使用的 AutoLISP 表达式。当加载与菜单 LISP 文件具有相同文件名的菜单文件时,AutoCAD 会将菜单 LISP 文件加载至内存。
自己做的.mns的文件内容如下 //
// AutoCAD 菜单文件 - C:\\Documents and Settings\\wuyp\\Local Settings\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\chs\\FD04Menu.mns //
***MENUGROUP=wyp
***POP1 **WYP
ID_COMPUTE [富地2004(&C)]
ID_TongXin [通信... CTRL+SHIFT+A]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/通信.dvb!Module1.TongXin
ID_WorkAffiliation [工作联系单...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!ModWorkAffiliation.WorkAffiliation
ID_StyleBook [样本查询...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!ModStyleBook.StyleBook ID_DRAW [->绘图工具]
ID_ZISZERO [多义线各节点Z轴设为零]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/Z轴为0.dvb!Module1.SetZIs0
ID_LuoXuanXian [三维螺旋线...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/螺旋线.dvb!Module1.LuoXuanXian
ID_JKX [<-渐开线齿轮...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/渐开线.dvb!jkx.jkx ID_DesignTools [->设计工具]
ID_MXB [导出明细表...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!ModMXB.mxb
ID_YGXCKDGS [圆管型材宽度估算...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/圆管型材宽度估算.dvb!Module1.YGXCKDGS
ID_BKJQJS [圆管型材宽度精算... CTRL+SHIFT+S]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/圆管型材宽度精算.dvb!Module1.BKJQJS
ID_NDJS [挠度计算... CTRL+SHIFT+C]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/挠度计算.dvb!Module1.NDJS
ID_BULK1 [体积... CTRL+SHIFT+Z]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/体积.dvb!Module1.bulk
ID_LianLun [链轮参数]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/链轮参数.dvb!Module1.LianLun
ID_YLGBHJS [压力管壁厚计算...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/压力管壁厚计算.dvb!Module1.YLGBHJS
ID_GTBHJS [缸筒壁厚计算...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/缸筒壁厚计算.dvb!Module1.GTBHJS
ID_Bearing [轴承型号大全...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!ModBearing.Bearing
ID_LiuLiang [油缸流量计算]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/流量计算.dvb!Module1.LiuLiang
ID_YYZHDJGL [液压站电机功率计算]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!modYYZHDJGL.YYZHDJGL
id_GearMatching [<-齿轮幅齿数匹配...]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!modGearMatching.GearMatching ID_CADSysOption [->CAD系统设置] ID_MButton [->鼠标中键控制]
ID_MButtonPan [鼠标中键平移]^C^C_setvar mbuttonpan 1 ID_MButtonMenu [<-鼠标中键菜单]^C^C_setvar mbuttonpan 0 ID_ANGDIR [->设置正角度的方向]
ID_anticlockwise [逆时针]^C^C_setvar ANGDIR 0 ID_deasil [<-顺时针]^C^C_setvar ANGDIR 1 ID_extendMode [->隐含边延伸模式]
ID_extend [延伸(&E)]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!ModExtendMode.extend
ID_NoExtend [<-不延伸(&N)]^C^C-vbarun F:/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!ModExtendmode.noextend ID_filedia [->显示文件对话框]
ID_filediaON [显示]^C^C_setvar filedia 1
ID_filediaOFF [<-不显示]^C^C_setvar filedia 0 ID_PROJMODE [->设置修剪和延伸的当前“投影”模式]
ID_PROJMODE0 [真三维模式(无投影)]^C^C_setvar PROJMODE 0
ID_PROJMODE1 [投影到当前UCS的XY平面上]^C^C_setvar PROJMODE 1
ID_PROJMODE2 [<-投影到当前视图平面]^C^C_setvar PROJMODE 2 ID_RASTERPREVIEW [->预览图像是否随图形一起保存]
ID_RASTERPREVIEWOFF [不创建预览图像]^C^C_setvar RASTERPREVIEW 0