基于VBA的AutoCAD中间圆弧命令开发
2015-05-05毕亚东
毕亚东
(安徽国防科技职业学院机械工程系,安徽 六安 237011)
基于VBA的AutoCAD中间圆弧命令开发
毕亚东
(安徽国防科技职业学院机械工程系,安徽 六安 237011)
利用AutoCAD软件强大的二次开发功能,对在工程制图中常见的中间圆弧绘制问题进行研究,推导出解决绘制该圆问题的数学模型.并设计了程序框图,使用VBA编程语言,编写出命令程序和用户界面.通过实例验证,得出该命令使用方便,并能快捷地绘制中间圆弧.与常规辅助线绘制方法相比,绘图效率大大提高,减轻绘图人员的工作负担,提高了工作效率.该命令也扩充了AutoCAD绘圆功能.
VBA;中间圆弧;二次开发
作为通用型、开放式设计绘图软件AutoCAD,凭借其功能强大、操作简单和绘图精度高的特色,在工程界得到广泛应用.版本也从R1.0升级现在的2014版,在多方面功能上有了巨大的提升和完善.遗憾的是在使用最为广泛工程制图领域,尤其在机械制图中,“中间圆弧”的绘制命令始终没有出现.
目前,绘制此类圆弧的方法是利用几何作图原理,采用辅助直线和辅助圆弧求得圆心,之后再用基本画圆命令绘制.此过程操作繁琐,计算多,工程技术人员绘图效率低,计算错误率较高.
AutoCAD 作为开放性制图软件,为用户提供了良好的二次开发环境,可以用 Visual Lisp、ActiveX 和VBA、 ObjectARX 等工具进行二次开发.VBA 采用先进的面向对象的编程原理,使用户能开发出高效、简洁的AutoCAD 应用程序[1-3].
1 问题提出
根据机械制图技术标准,按照已知定形、定位尺寸的数目将平面图形的线段分为三类,见表1.
表1 圆弧分类
对照图1,已知圆弧和联接圆弧在AutoCAD中都能找到相应的绘图命令,中间圆弧却没有直接绘制命令.
图1 AutoCAD中的绘圆命令
2 关键问题研究
中间圆弧的特点是半径已知,圆心未知,寻找圆心是解决这个问题的关键点.依照目前常见的该圆绘制的方法,确定的编程思路为:使用VBA编程语言调用AutoCAD相关绘图函数,利用几何作图的原理,分别画出辅助直线和辅助圆,在用AutoCAD函数查询二者的交点,即为圆心.通过实践发现这种编程思路开发的命令,绘图精度受系统精度变量设置的影响,求得圆心的精度不高,在精确绘图应用场合有一定的局限性;再者由于命令运行中需多次调用AutoCAD函数,完成辅助线的绘制、隐藏和删除,辅助线交点的查询等操作,延长了命令的响应速度.为了提高命令响应速度和绘图精度,本文改变编程思路,首先通过VBA编程语言建立辅助直线和辅助圆的数学表达式,将二者联立,建立求取圆心数学计算模型,通过对数学模型的求解得到圆心,再调用AutoCAD基本画圆函数绘圆.
从表1中可以看出,中间圆弧会给定水平或者垂直中一个方向的定位尺寸,以下分别进行讨论建立求取圆心的数学模型.
2.1 给定水平方向定位
图2 给定水平方向定位尺寸
2.1.1 求辅助直线方程
得定位基准直线方程为:
y=Ay
(1)
偏移后辅助直线方程为:
y=Ay+D
(2)
2.1.2 求辅助圆方程
辅助圆半径设为R,其值与中间圆弧和已知圆弧的相切关系有关.
内切时:
R=Rc-Ro
(3)
外切时:
R=Rc+Ro
(4)
辅助圆的方程为:
(5)
2.1.3 建立圆心求解模型
(2)代入(5)得中间圆弧圆心方程:
(6)
2.1.4 求解圆心坐标
由式(6)可得方程判别式为:
Δ=R2-(Ay+D-Oy)2
当Δ<0时,方程无实数解,表明输入条件有误.
当Δ≥0时,圆心1坐标为:
圆心2坐标为:
其中,在Δ=0圆心1、2为同一点.
2.2 给定垂直方向定位
此情况下,中间圆弧圆心求取的数学模型建立与求解方法与水平方向类似,不再赘述,直接给出判别式和圆心坐标.
方程判别式为:
Δ=R2-(Ax+D+Ox)2
当Δ<0时,方程无实数解,表明输入条件有误.
当Δ≥0时,圆心1坐标为:
圆心2坐标为:
其中,在Δ=0圆心1、2为同一点.
2.3 程序框图[4,5]
该命令的编程顺序是,给定已知圆弧、定位基准线、偏距、中间弧半径和相切类型,程序自动判断水平或垂直情况,建立相应数学模型,并求解圆心坐标,程序再调用AutoCAD中“circle”命令,以“圆心、半径”方式,使用圆心坐标1画圆,并提示是否接受此圆,接受(Y)结束命令,否则使用圆心坐标2画圆,结束命令.程序框图见图3.
图3 程序框图
3 命令程序设计[6,7]
中间圆弧命令主要有三部分组成.其中第一部分是编制一个共用函数“qjd”,用于判断相切关系和计算圆心坐标;第二部分是主程序,用于调用“qjd”函数和完成画圆动作;第三部分是命令输入窗体,用于接受条件输入并传递给主程序.
3.1 创建共用函数“qjd”
//声明两个数组变量用于存储连接圆圆心坐标.
Dimj_pt1(0To2)AsDouble
Dimj_pt2(0To2)AsDouble
//创建一个共用函数“qjd”.
PublicSubqjd(ByRefAAsDouble,ByRefBAsDouble,ByRefCAsDouble,ByRefcentre_xAsDouble,ByRefcentre_yAsDouble,ByRefrAsDouble)
DimdeltaAsDouble
DimA_fAsDouble
DimB_fAsDouble
DimC_fAsDouble
//判断出水平方向定位,计算判别式Δ值及圆心坐标,并赋值给圆心坐标数组.
IfA= 0AndB<> 0Then
delta=r^2 - (C/B+centre_y)^2
Ifdelta>= 0Then
j_pt1(0) =centre_x+Sqr(delta)
j_pt2(0) =centre_x-Sqr(delta)
j_pt1(1) = -C/B
j_pt2(1) = -C/B
j_pt1(2) = 0
j_pt2(2) = 0
EndIf
EndIf
//判断出垂直方向定位,计算判别式Δ值及圆心坐标,并赋值给圆心坐标数组.
IfA<> 0AndB= 0Then
delta=r^2 - (C/A+centre_x)^2
Ifdelta>= 0Then
j_pt1(0) = -C/A
j_pt2(0) = -C/A
j_pt1(1) =centre_y+Sqr(delta)
j_pt2(1) =centre_y-Sqr(delta)
j_pt1(2) = 0
j_pt2(2) = 0
EndIf
EndIf
EndSub
3.2 主程序
PublicSubzj_centre()
//调用函数“qjd”计算圆心坐标
IfD= 0Then
Callqjd(A_1,B_1,C_1,X,Y,rx)
Else
C1 =C+D*Sqr(A_1^2 +B_1^2)
C2 =C-D*Sqr(A_1^2 +B_1^2)
Callqjd(A_1,B_1,C1,X,Y,rx)
Callqjd(A_1,B_1,C2,X,Y,rx)
//调用AutoCAD函数画圆
SetCen1 =ThisDrawing.ModelSpace.AddCircle(j_pt1,r)
pd1 =ThisDrawing.Utility.GetString(0,vbCrLf& "[接受(Y)/不接受(N)]
//判别坐标1画出的圆是否是需要的圆
Ifpd1 =NullThenpd1 = "Y"
Ifpd1 = "Y"Then
Else
Cen1.Delete
SetCen2 =ThisDrawing.ModelSpace.AddCircle(j_pt2,r)
EndIf
EndIf
3.3 命令窗体设计
中间圆绘制命令需要输入的条件较多,参考AutoCAD其他命令使用习惯,为命令设计了对话框式窗体(图4),在窗体中添加输入条件含义提示图,便于用户掌握、使用.
图4 创建中间圆弧窗体
4 绘图实例
通过以下实例(图5),对命令的正确性和可靠性进行验证[8].在图5中R15和R30两个圆弧是中间联接线段,绘制R15圆时,在图4“创建中间圆”对话框中,输入圆心偏距D为-12,中间圆半径R为15,内切,选择相切圆为R86圆弧,选择基准线为水平点画线,单击“确定”按钮,即可绘制出R15整圆,之后在绘制出与R15相切夹角为120°直线,再用“修剪”命令,去除多余圆弧,完成绘制.绘制R30圆弧时,D为-15,R为30,内切,选择相切圆为R99圆弧,其余操作与R15相似.中间圆绘制命令快速、准确地绘制了图5中R15和R30圆,验证了命令的性能.
图5 绘图实例
5 结束语
文章利用AutoCAD丰富的二次开发功能,选用VBA语言,开发了一条实用的绘制中间圆命令.该命令具有使用方便、绘图效率高和界面简洁的特点,为广大工程设计人员提供了绘制中间圆的便利方法,减少了绘圆操作,提高了绘图效率.文章完整地给出了命令开发的思路、程序设计的框图和主要程序,对AutoCAD二次开发者有一定的参考作用.
[1]翟震,张涛.AutoCAD的二次开发技术[J].郑州工业大学学报,1998,(1):76-80.
[2]武妍. 基于VBA的AutoCAD二次开发系统的研究与应用[D].太原: 太原理工大学硕士学位论文,2008.
[3]刘祖萍. 基于VBA的AutoCAD图形数据库管理技术研究[D].成都:西南交通大学硕士学位论文,2004.
[4]黄巍,马咏梅,谢梅英. 基于AutoCADVBA与VisualLisp的传动零件设计[J]. 机械传动,2008,(6):72-74,132.
[5]苏艳萍,王鸿钧. 基于VisualLisp机械零件图形尺寸参数化标注设计[J]. 机械传动,2008,(4):107-109,120.
[6]陈冬青,袁晓梅.AutoCAD二次开发技术在带传动设计中的应用[J].江苏大学学报(自然科学版),2006,(S1):41-44.
[7]魏瑞涛.用VisualBasic进行AutoCAD二次开发方法介绍[J].制造业自动化,2011,(6):29-30.
[8]赵卫东,柳先辉,卫刚.CAD软件二次开发平台实现技术[J].计算机辅助设计与图形学学报,2003,(4):512-516.
(责任编校:晴川)
Development of AutoCAD Intermediate Circular Arc Command Based on VBA
BI Yadong
(Department of Mechanical Engineering, Anhui Vocational College of Defense Technology, Liu’an Anhui 237011, China)
The paper uses the strong secondary development function of AutoCAD software to study the common issue of drawing intermediate circular arc in engineering drawing, and deduces a mathematical model to solve the problem. It designs the process diagram using VBA programming language, and writes command procedures and user interface. Based on examples, it is indicated that the command is easy to use and could draw intermediate arc conveniently. Compared with the conventional method using auxiliary lines, drawing efficiency is greatly improved, the workload of drawing staff is reduced and their work efficiency is improved. The order also extends the function of AutoCAD drawing circles.
VBA; intermediate circular arc; secondary development
2015-08-03
安徽省2015年高校自然科学研究重点项目“颗粒流润滑的多尺度动力学与承载机制的研究”(批准号:KJ2015A342);安徽省2014年高等学校质量工程项目“产教融合、校企合作数控技术专业人才培养模式创新与实践”(批准号:2014jyxm598).
毕亚东(1981— ),男,陕西宝鸡人,安徽国防科技职业学院机械工程系讲师,硕士.研究方向:机械设计及其理论.
TP311
A
1008-4681(2015)05-0036-04