AutoCAD二次开发
AutoCAD 二次开发
黄亚平 ,周一飞
() 浙江工业大学 职业技术学院 ,浙江 杭州 310014
摘 要 :在论述 AutoCAD 二次开发重要性的基础上 ,通过实例分析了 VBA 进行 AutoCAD 二次开发的编程原理 。使用 Au2
toCAD 二次开发工具进行计算机辅助
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
,可制作专业化模块 ,提高自动化程度 ,从而提高工作效率 。
关键词 :二次开发 ;AutoCAD ; 视觉化 Basic 语言应用 ;编程原理
( ) 中图分类号 : TP391文献标识码 :A文章编号 :1005 - 3751 200303 - 0084 - 04
of AutoCAD Re2expl oitat ion
HUAN G Ya2ping ZHOU Yi2fei
( )Professio nal and Technological College of Zhejiang U niversit y of Technology , Hangzhou ZJ 310014 ,China
Abstract :Have analysed t he p rogramming p rinciple of using VBA to re2exploitatio n of Auto CAD o n fo undatio n of discussio n t he impo rtance
of re2exploitatio n of Auto CAD t hro ugh an example . U sing Auto CAD re2exploitatio n tool to make CAD can get specializatio n mo del ,imp rove
auto matio n level ,and raise wo r king efficiency.
Key words :re2exploitatio n ; Auto CAD ; VBA ; p rogramming p rinciple
AutoCAD 对象模型对象模型用来显示对象间的关系 。在 1 引 言
中定义了 AutoCAD 用于 VBA 对象的所有层次结构 ,如图AutoCAD 是目前在 Windows95/ 98/ 2000/ N T 环境下
(1 所示 图中圆角形状
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
示为单个对象 ,方角表示为对象 应用最广泛 、使用人数最多的 CAD 软件 , 但 AutoCAD 提
) 集。 供给我们的只是一般的通用 CAD 功能 ,如绘图 、编辑 、标
注等 。在进行某一具体项目的设计时 ,如果不使用 Auto2
CAD 的开发工具 , 则在设计完成后要更改一些数据必须
重新绘图 。如果使用 AutoCAD 二次开发工具 , 则用户可
将项目中的计算和绘图过程通过高级语言编制相应的程
序 ,运行该程序则上述计算和设计绘图过程自动完成 ,不
仅大大提高了设计效率 ,而且通过开发工具可定制出满足
行业需要的专业化模块 ,如国内建筑行业的天正 CAD 软
件 、机械行业的大恒 CAD 系统等都是用 AutoCAD 开发工 1 具实现的。因此为了使 AutoCAD 真正适用于某一具体
领域 ,或让其经常完成一些重复性的工作 , 最好利用 Au2
toCAD 的开发工具对其进行二次开发 。
2 用 VBA 进行 AutoCAD 二次开发的编程原理
AutoCAD 开发工具较多 ,现采用从 AutoCAD R14 . 01 图 1 AutoCAD 对象模型( 版开 始 内 置 、能 共 享 AutoCAD 地 址 空 间 的 VBA Visual 2 创建图形对象的常用方法是在图形对象的名称前添 ) Basic for Applications开发工具。VBA 是一个面向对象
加 Add 前缀 ,下面的语句创建 Circle 对象 。 的环境 ,包含不同的对象类 。每一对象类都有自己的一组
属性 ,用来定义对象的形状 ,对象类还有自己的方法 ,用来 () Application. Document s. Item 0. Modelspace . Addcircle 操作该类对象 。任何具有 VBA 功能的应用程序都有一个 Center , Radius
由图 1 可知 ,AutoCAD 的 Application 对象位于对象模 型层级的顶部 ,表示它为当前的 AutoCAD 应用程序的对
象 ,它可以直接或间接地访问模型中的所有对象 。由于每 收稿日期 :2002 - 09 - 16
’并把它们保存在变量 newblip 和 newcmde 中 一层级只允许是 AutoCAD Application 对象 , 当访问它所)(newblip = ThisDrawing. Get Variable ″blip mode″ 包含的对象时 ,就隐含该应用程序 ,故前面语句中的 Ap2 ()newcmde = ThisDrawin g. Get Variable ″cmdecho″ plication 可以省略 。’将系统变量 blip mode 和 cmdecho 设为 0 , 从而使 blips 和命 Document 集是 Application 对 象 的 下 一 层 级 , 用 于 获 令回显失效 取 AutoCAD 应用程序中当前打开的任何文档 。使用带有 ThisDrawing. Set Variable ″blip mode″, 0 索引值的 Item 方法可以指示 Document 对象在集中的位 ThisDrawing. Set Variable″cmdecho″, 0 ( ) 置 。AutoCAD 提供了两种获取激活 当前文档的方法 : drawground ’调用绘制地面轮廓子程序 通过 Application 对象的 ActiveDocument 属性 ,或使用关键
词 ThisDrawing ,这两条语句是等价的 ,如下所示 。 drawtiles ’调用绘制瓷砖子程序ActiveDocument . ModelSpace . Addcircle Center , Radius ’将系统变量 blip mode 和 cmdecho 设回初始值ThisDrawing. ModelSpace . Addcircle Center , Radius ThisDrawing. Set Variable ″blip mode″, newblip Document 集包含 了 由 AutoCAD 窗 口 模 型 选 项 卡 的 ThisDrawing. Set Variable ″cmdecho″, newcmde 所有对象 组 成 的 ModelSpace 集 , ModelSpace 集 可 以 访 问 Zoo mAll AutoCAD 窗口模型空间中的任何图形对象 , 如直线 、圆 、 End Sub 文本等 。 312 输入用户信息子程序 userinf ormation
作为 Document 对象下层的 Utilit y 对象 ,定义了用户
3 输入方法。用户输入方法在 AutoCAD 命令行中显示提
示并要求输入各种类型的值 。因该应用程序需要输入的
3 用 VBA 设计瓷砖地面值较多 ,故使用 Get Point 方法输入地面的起点 、终点坐标 ;
用 VBA 开发 AutoCAD 应用程序 ,一般先编制解决实 用 GetDistance 方法输入地面的半宽度 ; 用对话框选择瓷 际问题的子程序 ,然后把所有的子程序组合成宏 ,最后运 砖的形状并输入瓷砖的半径 、间距 、边数 , 使输入形式多
() 行宏 。宏是公用 可执行的子程序 ,每一工程通常至少一 样 、方便 。其中 Get Point 方法在命令行中提示用户指定一 个宏 。用 VBA 设计瓷砖地面的目的是为 AutoCAD 开发 个点 ,该方法接受两个参数 ———可选用的参考点和提示字 一个名为 ground 的宏 , 运行该宏时 , 在 AutoCAD 的命令 符串 。
行中输入地面的起点 、终点 、地面的半宽度 ;在弹出的对话 ( )Private Sub userinfor mation ’输入用户信息子程序为瓷砖地 框中选择铺设的瓷砖形状并输入瓷砖的半径 、间距 、边数 ,面获取信息 如图 2 所示 ,程序自动绘出铺满瓷砖的地面 。当需要改变 Di m point3D As Variant Get Point 方法返回’定义存放 瓷砖的形状或瓷砖的半径 、间距等数据时 ,只要再运行一 的坐标的变量为变体变量 次宏即可 ,大大提高了设计效率 。
( point3D = ThisDrawing. Utilit y. Get Point , ″输入地面的起)点 :″
( ) ( ) ( ) ( ) startpoint 0= point3D 0: startpoint 1= point3D 1 :
( ) ( )startpoint 2= point3D 2 ( point3D = ThisDrawing. Utilit y. Get Point , ″输入地面的终
)点 :″
( ) ( ) ( ) ( ) endpoint 0 = point3D 0 : endpoint 1 = point3D 1 :
( ) ( )endpoint 2= point3D 2
( hwidt h = ThisDrawing. Utilit y. GetDistance startpoint , ″输入
)地面的半宽度 :″
Load f r m- Dialo g
图 2 用户输入对话框( f r m- Dialo g. Show ’显示输入信息的 f r m- Dialo g 窗体 见311 宏的内容 )图 2 单击 AutoCAD‚工具?菜单中的‚宏?———‚Visual Basic ( angle = ThisDrawing. Utilit y. Angle Fro mXAxis startpoint , 编辑器?, 打开 VBA 交互式开发环境 , 在 ThisDrawing 的 ) ’获得地面角度 endpoint 代码窗口中输入名为 ground 的宏代码 ,程序如下 :
totalwidt h = 2 3 hwidt h ’计算地面宽度( )Sub ground ( )lengt h = distance startpoint , endpoint distance’调 用 Di m newblip As Variant 函数计算地面长度 Di m newcmde As Variant ( )angp90 = angle + dt r 90 ’调用 dt r 函数计算地面的拐角 userinfor mation ’调用输入用户信息子程序
( ) angm90 = angle - dt r 90 ’用 Get Variable 方法获 得 系 统 变 量 blip mode 和 cmdecho 的
当前值 End Sub
Di m new Point As Variant ’distance 函数计算两点之间的距离
’用 Polar Point 方法找到从一个基点以给定角度和距离给出 ( ) Function distance startpoint As Variant , endpoint As Variant 的一个点 Di m x As Double , y As Double , z As Double
( ( )( )ThisDrawin g. Utilit y. Polar Point startpoint , x = startpoint 0 endpoint 0 - new Point =
( )( ))y = startpoint 1 - endpoint 1 angm90 , hwidt h
( )( )( )( )z = startpoint 2 - endpoint 2 = new Point 0 polyArray 0 ’地面第一个拐角点 A 的^^ ^ ^ 横坐标 ( ( ( ( ) ( ) ) )() )distance = Sqr Sqr x 2+ y22 z2 +
( )polyArray 1 End Function ( )= new Point 1 ’地面第一个拐角点 A 的纵坐标 ’t dr 函数把角从度转化为弧度 ( )polyArray 8 ( ) ( )Function dt r a As DoubleAs Double = new Point 0 ’多义线的起点 A 和终点
( ) dt r = a / 180 3 pi 重合形成封闭矩形A ’pi 已在变量声明中用 const pi =
3 . 14159 声明 ( ) ( )polyArray 9= new Point 1
End Function ( new Point = ThisDrawin g. Utilit y. Polar Point new Point , an2
)gle , lengt h 313 绘制地面轮廓子程序 dra wground
( )( )polyArray 2 = new Point 0 ’地面第二个拐角点 B 的 绘制 地 面 的 外 形 轮 廓 可 以 调 用 Add LightWeight 横坐标 Polyline 方 法 , 该 方 法 接 收 一 个 参 数 : 一 个 组 成 多 义 线( )polyArray 3 ( )() = new Point 1 polyline点的数组 。为此必须找出所有组成多义线对象
new Point = 的点 ,并把它们以绘制顺序放入数组中 。该应用程序用到 ( ThisDrawin g. Utilit y. Polar Point new Point ,
的多义线所需要的点即为地面的拐角点 。可以使用 Po2 )angp90 , totalwidt h lar Point 方法找到地面的拐角点 ,该方法找到从一个基点 ( ) ( )polyArray 4= new Point 0 ’地面第三个拐角点 C 的2 ( 以给 定 角 度 和 距 离 给 出 的 一 个 点。从 起 始 点 start2 横坐标
) point开始 ,以逆时针方向找到地面的第一个拐角点 A ,该 ( ) ( )polyArray 5= new Point 1 ( ) 拐角点离起始点距离为一半地面宽度 hwidt h,角度为小 ( new Point = ThisDrawin g. Utilit y. Polar Point new Point , angle () 路角度 angle加 - 90 度 , 即 angm90 弧度的位置 , 如图 3 ( ) )+ dt r 180, lengt h 所示 。
( ) ( )polyArray 6= new Point 0 ’地面第四个拐角点 D 的横坐标
( ) ( )polyArray 7= new Point 1
’调用 AddLight Weight Polyline 方法画出地面轮廓
Set pline = ThisDrawin g. ModelSpace . Ad2
()dLight Weight Polyline polyArray
End Sub
314 绘制瓷砖子程序 dra wtiles
用指定形状瓷砖填充地面的 draw 子程序 ,以一给定
距离沿它的第一个参数确定的地面绘制一行瓷砖 ,并把这
行瓷砖以第二个参数确定的距离垂直于该地面作平行移
动 ,应交错地偏移瓷砖以覆盖更多的地方并获得更好的排
列方式 。draw 子程序通过使用 Polar Point 方法沿着地面
移动在第一个参数中确定的距离 , 找到第一行瓷砖的位
置 。然后 ,子程序再次使用 Polar Point 方法垂直于地面作 偏移 。子程序使用 While 语句连续绘制指定形状瓷砖直 图 3 绘制瓷砖地面原理图到碰到地面的边界为止 。在第一个 While 语句中的 Polar2 假设地面为封闭的矩形 ,则该点为数组 polyArray 中
( ) 的第一点和最后一点 。用同样的方法可以确定地面的其 Point 方 法 以 两 个 瓷 砖 半 径 t radius 加 一 个 瓷 砖 间 距
余拐角点坐标 , 每调用一次 Polar Point 方法 , 将返回的坐 () t space的距离移动到下一个瓷砖位置 。第二个 While 循 标值存放到 polyArray 数组中 ,当所有的拐角点坐标确定 环接着在该行中以另一个方向绘制瓷砖直到碰上另一边 后 ,调用 AddLight Weight Polyline 画出地面轮廓线 ,其代码 为止 。 如下 : drawtiles 子程序重复调用 draw 子程序以绘制所有的 ( )Private Sub drawground 瓷砖行列 。子程序中的 While 循环沿着地面为每一行调
用 draw 子程序 。相邻两行的瓷砖形成等边三角形 ,如图( ) Di m polyArray 0 To 9As Double ’定义存放拐角点坐标 4 所示 。三角形的边长等于两倍瓷砖半径加一个瓷砖间的数组
Di m pline As AcadL WPol yline
draw dist , off set ’调 用 以 指 定 形 状 瓷 砖 填 充 地 面 的 距 。因此 ,运用三角函数知识可知 ,沿地面方向 ,两行之间. draw 子程序 的距离为 AB 乘以 sin60; 奇数行之间的偏移量为 AB 乘 . ( ( ) ( dist = dist + t space + t radius + t radius3 Sin dt r 以 cos60。IF 语句用于每隔一行进行偏移 。如果偏移量 . ( ) ) )60 等于 0 ,则设置为两瓷砖中心距乘以 cos60;如果偏移量不
等于 0 ,则设置为 0 ,因限于篇幅 ,下面只给出 drawtiles 子 If off set = 0 Then 程序代码 。 ( ) ( off set = t space + t radius + t radius 3 Cos dt r
( ) )60
Else
off set = 0
End If
Loop
End Sub
4 结 论
用 VBA 进行 AutoCAD 二次开发可以极大地发挥用
户的编程技巧 , 定制出个性化的 、满足行业需要的 Auto2 CAD 应用程序 。图 4绘制瓷砖原理图 ’绘制瓷砖行列子程序 ( ) Private Sub drawtiles
Di m dist As Double 参考文献 :
Di m off set As Double 1 王福军 1AutoCAD 2000 环境下 C/ Visual C + + 应用程序开
发教程M 1 北京 :希望电子工业出版社 ,2000 . dist = t radius + t space ’t radius 为瓷砖半径 , t space 为胡 荣 1AutoCAD 2000 开发工具 ———VBA 及 Active X 开 瓷砖间距 2 发
指南
验证指南下载验证指南下载验证指南下载星度指南下载审查指南PDF
M 1 北京 :人民邮电出版社 ,1999 . off set = 0 Marion Cot tingham1AutoCAD VBA 从入门到精通M 1 孔 ( )lengt h t radius Do While dist < = - ’lengt h 为地面长度3 祥丰译 1 北京 :电子工业出版社 ,2001 . ( )见图 3
() 上接第 44 页参考文献 :
1 Horst mann C S ,Cornell G. J ava 2 核心技术 ,卷 ?:基础知识
M . 北京 :机械工业出版社 ,20001 4 结束语
2 王克宏 ,董 丽. J ava 技术及其应用M .: 高等教育北京 在 J AVA 虚拟机中 ,一个非顶层内部类的对象存在着 出版社 ,19991 对其外部类的对象的一个引用 ,以致于内部类可以存取外 3 薛 刚 ,刘 禹 ,刘 尧 ,等. J ava 语言及类库详解M .南 部类的成员变量和调用其成员方法 。巧妙地利用这一点 ,京 :南京大学出版社 ,19991 可以大大简化 J AVA 程序的编写 。4 阳 光 ,晓 文 ,鸿 套. J ava 编程实用指南M . 北京 : 国防工业出版社 ,19981
() 上接第 83 页 实现 。除此之外 ,代码也简洁了许多 ,因为第一个方案需(Text : =‘ < content > ’, Replace Wit h : = query1 . fieldbyname ‘con2 要用程序写出一个完整的 Word 文档 ,而第二个方案只是 ) ) tent ’. asst ring; 去调用 Word 服务器作一系列的替换工作而已 。同时效
率也有很大的提高 。
4 结束语
从上可以看出第二个解决方案是极具灵活性的 ,在写 参考文献 :
程序前需要和用户去商定合同中需要程序处理的参数 ,然 Pet rout sos E. Visual Basic 6 从入门到精通M 1 邱仲潘译 1 1
北京 :电子工业出版社 ,1999 . 后 ,将这些参数定义成模板文件中的 TA G , 这样 , 打印程 Miller T , Powell D. Delp hi 3 开发使用
手册
华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载
M . 林君工作室 2 序在用户看来就像是一个接口 ,一个可以替换他所定义的 译 1 北京 :机械工业出版社 ,1998 . TA G 的接口 ,只要接口不变 ,也就是说合同所需的这些参
数不变 ,合同形式的变化可以由用户任意修改模板文件来