cad二次开发基础教程和实例档.docx
《cad二次开发基础教程和实例档.docx》由会员分享,可在线阅读,更多相关《cad二次开发基础教程和实例档.docx(22页珍藏版)》请在冰豆网上搜索。
![cad二次开发基础教程和实例档.docx](https://file1.bdocx.com/fileroot1/2023-6/14/181557f9-0879-42b4-80fa-3cabe2939f0d/181557f9-0879-42b4-80fa-3cabe2939f0d1.gif)
cad二次开发基础教程和实例档
大家知道什么是宏吗?
说白它就是VBA过程。
看下面的代码:
PublicSubMacroDemo()
MsgBox"Hello,WelcometoAutoCADVBA!
"
EndSub
这就是宏。
打开CAD输入命令vbaide回车会出现VBA的编辑界面,双击ThisDrawing在右侧的代码区输入上面的代码。
如下图:
然后按F5键会出现宏窗口,如下图:
点击运行,大家看到什么?
这就是一个最简单的一个用VBA对CAD进行二次开发的程序,也就是宏
那什么是VBA呢?
VBA就是VB的一个子集它的全称是VisualBasicForApplication,它具有VB的大部分功能。
既然我们选择了VBA,我们首先要知道VBA能操作CAD里的哪些对象呢?
打开VBAIDE窗口按下F2键会出现对象浏览器。
如下图
库选择AutoCAD,这时下面显示的就是CAD为VBA提供的可操作的对象的类了。
这时有的人因没有基础,所以还是一头雾水,别怕,选中一个类图标后按F1,这时会弹出AutoCADActiveXandVBAReference,选择最上面的一个子项ObjectModel(对象模型),这个就是在CAD里那些对象的关系,如下图:
如果英文不好的话,可以安装CAD2000,它的这个部分是中文的。
为想学好VBA二次开发这个是必需的,而且VBA对Office的二次开发也是这样的。
这个在编程界叫做ActiveX,包括ActiveX控件、ActiveXDLL、和ActiveXEXE
就好比一个程序为其它程序提供的一个后门一样
下面我就给大家讲一下菜单吧。
因为我们用到的其它公司做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:
\DocumentsandSettings\wuyp\LocalSettings\ApplicationData\Autodesk\AutoCAD2004\R16.0\chs\FD04Menu.mns
//
***MENUGROUP=wyp
***POP1
**WYP
ID_COMPUTE[富地2004(&C)]
ID_TongXin[通信...CTRL+SHIFT+A]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/通信.dvb!
Module1.TongXin
ID_WorkAffiliation[工作联系单...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
ModWorkAffiliation.WorkAffiliation
ID_StyleBook[样本查询...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
ModStyleBook.StyleBook
ID_DRAW[->绘图工具]
ID_ZISZERO[多义线各节点Z轴设为零]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/Z轴为0.dvb!
Module1.SetZIs0
ID_LuoXuanXian[三维螺旋线...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/螺旋线.dvb!
Module1.LuoXuanXian
ID_JKX[<-渐开线齿轮...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/渐开线.dvb!
jkx.jkx
ID_DesignTools[->设计工具]
ID_MXB[导出明细表...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
ModMXB.mxb
ID_YGXCKDGS[圆管型材宽度估算...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/圆管型材宽度估算.dvb!
Module1.YGXCKDGS
ID_BKJQJS[圆管型材宽度精算...CTRL+SHIFT+S]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/圆管型材宽度精算.dvb!
Module1.BKJQJS
ID_NDJS[挠度计算...CTRL+SHIFT+C]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/挠度计算.dvb!
Module1.NDJS
ID_BULK1[体积...CTRL+SHIFT+Z]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/体积.dvb!
Module1.bulk
ID_LianLun[链轮参数]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/链轮参数.dvb!
Module1.LianLun
ID_YLGBHJS[压力管壁厚计算...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/压力管壁厚计算.dvb!
Module1.YLGBHJS
ID_GTBHJS[缸筒壁厚计算...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/缸筒壁厚计算.dvb!
Module1.GTBHJS
ID_Bearing[轴承型号大全...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
ModBearing.Bearing
ID_LiuLiang[油缸流量计算]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/流量计算.dvb!
Module1.LiuLiang
ID_YYZHDJGL[液压站电机功率计算]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
modYYZHDJGL.YYZHDJGL
id_GearMatching[<-齿轮幅齿数匹配...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
modGearMatching.GearMatching
ID_CADSysOption[->CAD系统设置]
ID_MButton[->鼠标中键控制]
ID_MButtonPan[鼠标中键平移]^C^C_setvarmbuttonpan1
ID_MButtonMenu[<-鼠标中键菜单]^C^C_setvarmbuttonpan0
ID_ANGDIR[->设置正角度的方向]
ID_anticlockwise[逆时针]^C^C_setvarANGDIR0
ID_deasil[<-顺时针]^C^C_setvarANGDIR1
ID_extendMode[->隐含边延伸模式]
ID_extend[延伸(&E)]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
ModExtendMode.extend
ID_NoExtend[<-不延伸(&N)]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
ModExtendmode.noextend
ID_filedia[->显示文件对话框]
ID_filediaON[显示]^C^C_setvarfiledia1
ID_filediaOFF[<-不显示]^C^C_setvarfiledia0
ID_PROJMODE[->设置修剪和延伸的当前“投影”模式]
ID_PROJMODE0[真三维模式(无投影)]^C^C_setvarPROJMODE0
ID_PROJMODE1[投影到当前UCS的XY平面上]^C^C_setvarPROJMODE1
ID_PROJMODE2[<-投影到当前视图平面]^C^C_setvarPROJMODE2
ID_RASTERPREVIEW[->预览图像是否随图形一起保存]
ID_RASTERPREVIEWOFF[不创建预览图像]^C^C_setvarRASTERPREVIEW0
ID_RASTERPREVIEWON[<-创建预览图像]^C^C_setvarRASTERPREVIEW1
ID_REPORTERROR[->寄出错误报告到]
ID_REPORTERRORON[显示]^C^C_setvarREPORTERROR1
ID_REPORTERROROFF[<-不显示]^C^C_setvarREPORTERROR0
ID_PICKSTYLE[->双击鼠标编辑对象]
ID_PICKSTYLE_OK[使用]^C^C_setvarPICKSTYLE0
ID_PICKSTYLE_NO[<-不使用]^C^C_setvarPICKSTYLE1
ID_ANGBASE[基准角置零,图案为Ansi31]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
modCADSysVariant.AngBaseIs0
ID_ZOOMFACTOR[鼠标辊抡缩放速度...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/鼠标辊抡缩放速度.dvb!
Module1.SFSD
ID_HPNAME[设置默认填充图案为ANSI31]^C^C_setvarHPNAMEansi31
ID_CELTSCALE[设置当前对象的线型比例因子为1]^C^C_setvarCELTSCALE1
ID_QLHCHBC[<-清理、核查、缩放并保存CTRL+ALT+Q]^C^C-purgea*n_audityzoomeqsave
ID_WinOption[->Windows系统工具]
ID_CALC[计算器...CTRL+SHIFT+ALT+Z]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/winsystools.dvb!
Module1.calc
ID_Mspaint[画笔...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/winsystools.dvb!
Module1.mspaint
ID_CALC1[实用计算器...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/winsystools.dvb!
Module1.calc1
ID_ChangeWPaper[<-更换系统桌面...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/WallPaperChanger.dvb!
Module1.WallPaperChanger
ID_Tel[->电话表]
ID_FDTel[公司电话表...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
modTel.FDTel
ID_ZHGTel[<-重工电话表...]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/AcadVBA.dvb!
modTel.ZHGTel
ID_Menu[->菜单]
ID_Update[CAD2002菜单更新]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/UpdateFDMenu.dvb!
Module1.Update02menu
ID_Update04[<-CAD2004菜单更新]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/UpdateFDMenu.dvb!
Module1.Update04menu
***TOOLBARS
**TOOLBARWYP
ID_ToolbarWYP_0[_Toolbar("ToolbarWyp",_Top,_Show,0,2,1)]
ID_OsnapCent[_Button("捕捉到圆心","RCDATA_16_OSNCEN","RCDATA_16_OSNCEN")]_cen
ID_OsnapTang[_Button("捕捉到切点","RCDATA_16_OSNTAN","RCDATA_16_OSNTAN")]_tan
ID_PCCAD_PCZXX_0[_Button("中心线ZX","//Ca.bmp","ZXX.bmp")]^P^C^CPC_zXXT
[--]
ID_Circle2pt_0[_Button("圆两点","RCDATA_16_CIR2PT","RCDATA_16_CIR2PT")]^C^C_circle_2p
ID_3dpoly_0[_Button("三维多段线","RCDATA_16_3DPOLY","RCDATA_16_3DPOLY")]^C^C_3dpoly
ID_Hatchedit_0[_Button("编辑图案填充","RCDATA_16_HATEDI","RCDATA_16_HATEDI")]^C^C_hatchedit
ID_Region_0[_Button("面域","RCDATA_16_REGION","RCDATA_16_REGION")]^C^C_region
[--]
ID_Sphere_0[_Button("球体","RCDATA_16_SPHERE","RCDATA_16_SPHERE")]^C^C_sphere
ID_Extrude_0[_Button("拉伸","RCDATA_16_EXTRUD","RCDATA_16_EXTRUD")]^C^C_extrude
ID_Revolve_0[_Button("旋转","RCDATA_16_REVOLV","RCDATA_16_REVOLV")]^C^C_revolve
ID_Slice_0[_Button("剖切","RCDATA_16_SLICE","RCDATA_16_SLICE")]^C^C_slice
[--]
ID_Union_0[_Button("并集","RCDATA_16_UNION","RCDATA_16_UNION")]^C^C_union
ID_Subtract_0[_Button("差集","RCDATA_16_SUBTRA","RCDATA_16_SUBTRA")]^C^C_subtract
ID_Intersect_0[_Button("交集","RCDATA_16_INTERS","RCDATA_16_INTERS")]^C^C_intersect
ID_FaceExtru_0[_Button("拉伸面","RCDATA_16_EXTRUD","RCDATA_16_EXTRUD")]^C^C_solidedit_face_extrude
ID_Shell_0[_Button("抽壳","RCDATA_16_SHELL","RCDATA_16_SHELL")]^C^C_solidedit_body_shell
[--]
ID_Massprop_0[_Button("面域/质量特性","RCDATA_16_MASSPR","RCDATA_16_MASSPR")]^C^C_massprop
ID_UBBulk_0[_Button("体积","ICON.bmp","ICON_16_BLANK")]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/体积.dvb!
Module1.bulk
[--]
ID_2doptim_0[_Button("二维线框","RCDATA_16_2DOPTIM","RCDATA_16_2DOPTIM")]$M=$(if,$(and,$(eq,$(getvar,tilemode),0),$(eq,$(getvar,cvport),1)),^C^C_shademode,^C^C_shademode_2)
ID_Wireframe_0[_Button("三维线框","RCDATA_16_WIREFRAME","RCDATA_16_WIREFRAME")]$M=$(if,$(and,$(eq,$(getvar,tilemode),0),$(eq,$(getvar,cvport),1)),^C^C_shademode,^C^C_shademode_3)
ID_Hidden_0[_Button("消隐","RCDATA_16_HIDDEN","RCDATA_16_HIDDEN")]$M=$(if,$(and,$(eq,$(getvar,tilemode),0),$(eq,$(getvar,cvport),1)),^C^C_shademode,^C^C_shademode_h)
ID_Gouraud_0[_Button("体着色","RCDATA_16_GOURAUD","RCDATA_16_GOURAUD")]$M=$(if,$(and,$(eq,$(getvar,tilemode),0),$(eq,$(getvar,cvport),1)),^C^C_shademode,^C^C_shademode_g)
ID_UBZIs0[_Button("UserDefinedButton","ICON1286.bmp","ICON_16_BLANK")]^C^C-vbarunF:
/编程/作品/CAD二次开发/二次开发/Vba计算/Z轴为0.dvb!
Module1.SetZIs0
[--]
ID_Dimlinear[_Button("线性标注","RCDATA_16_DIMLIN","RCDATA_16_DIMLIN")]^C^C_dimlinear
ID_DimUpdate[_Button("标注更新","RCDATA_16_DIMUPD","RCDATA_16_DIMUPD")]^C^C_-dimstyle_apply
[--]
ID_TbViewpoi_0[_Flyout("视图",RCDATA_16_DDVIEW,RCDATA_16_DDVIEW,_OtherIcon,ACAD.TB_VIEWPOINT)]
ID_ZoomExten_0[_Button("范围缩放","RCDATA_16_ZOOEXT","RCDATA_16_ZOOEXT")]'_zoom_e
[--]
ID_UserButton_1[_Button("清理、核查、缩放并保存","RCDA0986.bmp","RCDATA_16_BLANK")]^C^C-purgea*n_audityzoomeqsave
[--]
ID_3darray_0[_Button("三维阵列","RCDA9985.bmp","RCDATA_16_BLANK")]^C^C_3darray
ID_Mirror3d_0[_Button("三维镜像","RCDA3513.bmp","RCDATA_16_BLANK")]^C^C_mirror3d
ID_Rotate3d_0[_Button("三维旋转","RCDA5650.bmp","RCDATA_16_BLANK")]^C^C_rotate3d
***ACCELERATORS
ID_BULK1[CONTROL+SHIFT+"Z"]
ID_PCCAD_PCZXX_0[CONTROL+ALT+TOOLBAR+"Z"]
ID_BKJQJS[CONTROL+SHIFT+"S"]
ID_CALC[CONTROL+SHIFT+ALT+"Z"]
ID_UserButton_1[CONTROL+SHIFT+TOOLBAR+"X"]
ID_QLHCHBC[CONTROL+ALT+"Q"]
ID_TongXin[CONTROL+SHIFT+"A"]
***HELPSTRINGS
ID_UPDATE[更新计算菜单]
ID_GTBHJS[缸筒管壁厚计算...]
ID_REVOLVE_0[绕轴旋转二维对象以创建实体:
REVOLVE]
ID_SHELL_0[以指定的厚度在实体对象上创建中空的薄壁:
SOLIDEDIT]
ID_BULK1[计算基本几何体的体积]
ID_SLICE_0[用平面剖切一组实体:
SLICE]
ID_SUBTRACT_0[用差集创建组合面域或实体:
SUBTRACT]
ID_DIMLINEAR[创建线性标注:
DIMLINEAR]
ID_UBZIS0[将多义线各节点Z轴设为零]
ID_SPHERE_0[创建三维实心球体:
SPHERE]
ID_JKX[渐开线...]
ID_HATCHEDIT_0[修改现有的图案填充对象:
HATCHEDIT]
ID_UBBULK_0[计算基本几何体的体积]
ID_FACEEXTRU_0[按指定高度或沿路径拉伸实体对象的选定面:
SOLIDEDIT]
ID_CIRCLE2PT_0[用直径的两个端点创建圆:
CIRCLE]
ID_REGION_0[将包含封闭区域的对象转换为面域对象:
REGION]
ID_ZISZERO[将多义线各节点Z轴设为零]
ID_HIDDEN_0[将视口设置为隐藏线:
SHADEMODE]
ID_INTERSECT_0[从实体或面域的交集创建组合实体或面域:
INTERSECT]
ID_DIMUPDATE[更新标注的样式:
DIMSTYL