畢亞東
(安徽國防科技職業(yè)學(xué)院機(jī)械工程系,安徽 六安 237011)
基于VBA的AutoCAD中間圓弧命令開發(fā)
畢亞東
(安徽國防科技職業(yè)學(xué)院機(jī)械工程系,安徽 六安 237011)
利用AutoCAD軟件強(qiáng)大的二次開發(fā)功能,對在工程制圖中常見的中間圓弧繪制問題進(jìn)行研究,推導(dǎo)出解決繪制該圓問題的數(shù)學(xué)模型.并設(shè)計(jì)了程序框圖,使用VBA編程語言,編寫出命令程序和用戶界面.通過實(shí)例驗(yàn)證,得出該命令使用方便,并能快捷地繪制中間圓弧.與常規(guī)輔助線繪制方法相比,繪圖效率大大提高,減輕繪圖人員的工作負(fù)擔(dān),提高了工作效率.該命令也擴(kuò)充了AutoCAD繪圓功能.
VBA;中間圓?。欢伍_發(fā)
作為通用型、開放式設(shè)計(jì)繪圖軟件AutoCAD,憑借其功能強(qiáng)大、操作簡單和繪圖精度高的特色,在工程界得到廣泛應(yīng)用.版本也從R1.0升級現(xiàn)在的2014版,在多方面功能上有了巨大的提升和完善.遺憾的是在使用最為廣泛工程制圖領(lǐng)域,尤其在機(jī)械制圖中,“中間圓弧”的繪制命令始終沒有出現(xiàn).
目前,繪制此類圓弧的方法是利用幾何作圖原理,采用輔助直線和輔助圓弧求得圓心,之后再用基本畫圓命令繪制.此過程操作繁瑣,計(jì)算多,工程技術(shù)人員繪圖效率低,計(jì)算錯誤率較高.
AutoCAD 作為開放性制圖軟件,為用戶提供了良好的二次開發(fā)環(huán)境,可以用 Visual Lisp、ActiveX 和VBA、 ObjectARX 等工具進(jìn)行二次開發(fā).VBA 采用先進(jìn)的面向?qū)ο蟮木幊淘?使用戶能開發(fā)出高效、簡潔的AutoCAD 應(yīng)用程序[1-3].
根據(jù)機(jī)械制圖技術(shù)標(biāo)準(zhǔn),按照已知定形、定位尺寸的數(shù)目將平面圖形的線段分為三類,見表1.
表1 圓弧分類
對照圖1,已知圓弧和聯(lián)接圓弧在AutoCAD中都能找到相應(yīng)的繪圖命令,中間圓弧卻沒有直接繪制命令.
圖1 AutoCAD中的繪圓命令
中間圓弧的特點(diǎn)是半徑已知,圓心未知,尋找圓心是解決這個問題的關(guān)鍵點(diǎn).依照目前常見的該圓繪制的方法,確定的編程思路為:使用VBA編程語言調(diào)用AutoCAD相關(guān)繪圖函數(shù),利用幾何作圖的原理,分別畫出輔助直線和輔助圓,在用AutoCAD函數(shù)查詢二者的交點(diǎn),即為圓心.通過實(shí)踐發(fā)現(xiàn)這種編程思路開發(fā)的命令,繪圖精度受系統(tǒng)精度變量設(shè)置的影響,求得圓心的精度不高,在精確繪圖應(yīng)用場合有一定的局限性;再者由于命令運(yùn)行中需多次調(diào)用AutoCAD函數(shù),完成輔助線的繪制、隱藏和刪除,輔助線交點(diǎn)的查詢等操作,延長了命令的響應(yīng)速度.為了提高命令響應(yīng)速度和繪圖精度,本文改變編程思路,首先通過VBA編程語言建立輔助直線和輔助圓的數(shù)學(xué)表達(dá)式,將二者聯(lián)立,建立求取圓心數(shù)學(xué)計(jì)算模型,通過對數(shù)學(xué)模型的求解得到圓心,再調(diào)用AutoCAD基本畫圓函數(shù)繪圓.
從表1中可以看出,中間圓弧會給定水平或者垂直中一個方向的定位尺寸,以下分別進(jìn)行討論建立求取圓心的數(shù)學(xué)模型.
2.1 給定水平方向定位
圖2 給定水平方向定位尺寸
2.1.1 求輔助直線方程
得定位基準(zhǔn)直線方程為:
y=Ay
(1)
偏移后輔助直線方程為:
y=Ay+D
(2)
2.1.2 求輔助圓方程
輔助圓半徑設(shè)為R,其值與中間圓弧和已知圓弧的相切關(guān)系有關(guān).
內(nèi)切時(shí):
R=Rc-Ro
(3)
外切時(shí):
R=Rc+Ro
(4)
輔助圓的方程為:
(5)
2.1.3 建立圓心求解模型
(2)代入(5)得中間圓弧圓心方程:
(6)
2.1.4 求解圓心坐標(biāo)
由式(6)可得方程判別式為:
Δ=R2-(Ay+D-Oy)2
當(dāng)Δ<0時(shí),方程無實(shí)數(shù)解,表明輸入條件有誤.
當(dāng)Δ≥0時(shí),圓心1坐標(biāo)為:
圓心2坐標(biāo)為:
其中,在Δ=0圓心1、2為同一點(diǎn).
2.2 給定垂直方向定位
此情況下,中間圓弧圓心求取的數(shù)學(xué)模型建立與求解方法與水平方向類似,不再贅述,直接給出判別式和圓心坐標(biāo).
方程判別式為:
Δ=R2-(Ax+D+Ox)2
當(dāng)Δ<0時(shí),方程無實(shí)數(shù)解,表明輸入條件有誤.
當(dāng)Δ≥0時(shí),圓心1坐標(biāo)為:
圓心2坐標(biāo)為:
其中,在Δ=0圓心1、2為同一點(diǎn).
2.3 程序框圖[4,5]
該命令的編程順序是,給定已知圓弧、定位基準(zhǔn)線、偏距、中間弧半徑和相切類型,程序自動判斷水平或垂直情況,建立相應(yīng)數(shù)學(xué)模型,并求解圓心坐標(biāo),程序再調(diào)用AutoCAD中“circle”命令,以“圓心、半徑”方式,使用圓心坐標(biāo)1畫圓,并提示是否接受此圓,接受(Y)結(jié)束命令,否則使用圓心坐標(biāo)2畫圓,結(jié)束命令.程序框圖見圖3.
圖3 程序框圖
中間圓弧命令主要有三部分組成.其中第一部分是編制一個共用函數(shù)“qjd”,用于判斷相切關(guān)系和計(jì)算圓心坐標(biāo);第二部分是主程序,用于調(diào)用“qjd”函數(shù)和完成畫圓動作;第三部分是命令輸入窗體,用于接受條件輸入并傳遞給主程序.
3.1 創(chuàng)建共用函數(shù)“qjd”
//聲明兩個數(shù)組變量用于存儲連接圓圓心坐標(biāo).
Dimj_pt1(0To2)AsDouble
Dimj_pt2(0To2)AsDouble
//創(chuàng)建一個共用函數(shù)“qjd”.
PublicSubqjd(ByRefAAsDouble,ByRefBAsDouble,ByRefCAsDouble,ByRefcentre_xAsDouble,ByRefcentre_yAsDouble,ByRefrAsDouble)
DimdeltaAsDouble
DimA_fAsDouble
DimB_fAsDouble
DimC_fAsDouble
//判斷出水平方向定位,計(jì)算判別式Δ值及圓心坐標(biāo),并賦值給圓心坐標(biāo)數(shù)組.
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
//判斷出垂直方向定位,計(jì)算判別式Δ值及圓心坐標(biāo),并賦值給圓心坐標(biāo)數(shù)組.
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()
//調(diào)用函數(shù)“qjd”計(jì)算圓心坐標(biāo)
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)
//調(diào)用AutoCAD函數(shù)畫圓
SetCen1 =ThisDrawing.ModelSpace.AddCircle(j_pt1,r)
pd1 =ThisDrawing.Utility.GetString(0,vbCrLf& "[接受(Y)/不接受(N)]
//判別坐標(biāo)1畫出的圓是否是需要的圓
Ifpd1 =NullThenpd1 = "Y"
Ifpd1 = "Y"Then
Else
Cen1.Delete
SetCen2 =ThisDrawing.ModelSpace.AddCircle(j_pt2,r)
EndIf
EndIf
3.3 命令窗體設(shè)計(jì)
中間圓繪制命令需要輸入的條件較多,參考AutoCAD其他命令使用習(xí)慣,為命令設(shè)計(jì)了對話框式窗體(圖4),在窗體中添加輸入條件含義提示圖,便于用戶掌握、使用.
圖4 創(chuàng)建中間圓弧窗體
通過以下實(shí)例(圖5),對命令的正確性和可靠性進(jìn)行驗(yàn)證[8].在圖5中R15和R30兩個圓弧是中間聯(lián)接線段,繪制R15圓時(shí),在圖4“創(chuàng)建中間圓”對話框中,輸入圓心偏距D為-12,中間圓半徑R為15,內(nèi)切,選擇相切圓為R86圓弧,選擇基準(zhǔn)線為水平點(diǎn)畫線,單擊“確定”按鈕,即可繪制出R15整圓,之后在繪制出與R15相切夾角為120°直線,再用“修剪”命令,去除多余圓弧,完成繪制.繪制R30圓弧時(shí),D為-15,R為30,內(nèi)切,選擇相切圓為R99圓弧,其余操作與R15相似.中間圓繪制命令快速、準(zhǔn)確地繪制了圖5中R15和R30圓,驗(yàn)證了命令的性能.
圖5 繪圖實(shí)例
文章利用AutoCAD豐富的二次開發(fā)功能,選用VBA語言,開發(fā)了一條實(shí)用的繪制中間圓命令.該命令具有使用方便、繪圖效率高和界面簡潔的特點(diǎn),為廣大工程設(shè)計(jì)人員提供了繪制中間圓的便利方法,減少了繪圓操作,提高了繪圖效率.文章完整地給出了命令開發(fā)的思路、程序設(shè)計(jì)的框圖和主要程序,對AutoCAD二次開發(fā)者有一定的參考作用.
[1]翟震,張濤.AutoCAD的二次開發(fā)技術(shù)[J].鄭州工業(yè)大學(xué)學(xué)報(bào),1998,(1):76-80.
[2]武妍. 基于VBA的AutoCAD二次開發(fā)系統(tǒng)的研究與應(yīng)用[D].太原: 太原理工大學(xué)碩士學(xué)位論文,2008.
[3]劉祖萍. 基于VBA的AutoCAD圖形數(shù)據(jù)庫管理技術(shù)研究[D].成都:西南交通大學(xué)碩士學(xué)位論文,2004.
[4]黃巍,馬詠梅,謝梅英. 基于AutoCADVBA與VisualLisp的傳動零件設(shè)計(jì)[J]. 機(jī)械傳動,2008,(6):72-74,132.
[5]蘇艷萍,王鴻鈞. 基于VisualLisp機(jī)械零件圖形尺寸參數(shù)化標(biāo)注設(shè)計(jì)[J]. 機(jī)械傳動,2008,(4):107-109,120.
[6]陳冬青,袁曉梅.AutoCAD二次開發(fā)技術(shù)在帶傳動設(shè)計(jì)中的應(yīng)用[J].江蘇大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,(S1):41-44.
[7]魏瑞濤.用VisualBasic進(jìn)行AutoCAD二次開發(fā)方法介紹[J].制造業(yè)自動化,2011,(6):29-30.
[8]趙衛(wèi)東,柳先輝,衛(wèi)剛.CAD軟件二次開發(fā)平臺實(shí)現(xiàn)技術(shù)[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2003,(4):512-516.
(責(zé)任編校:晴川)
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年高校自然科學(xué)研究重點(diǎn)項(xiàng)目“顆粒流潤滑的多尺度動力學(xué)與承載機(jī)制的研究”(批準(zhǔn)號:KJ2015A342);安徽省2014年高等學(xué)校質(zhì)量工程項(xiàng)目“產(chǎn)教融合、校企合作數(shù)控技術(shù)專業(yè)人才培養(yǎng)模式創(chuàng)新與實(shí)踐”(批準(zhǔn)號:2014jyxm598).
畢亞東(1981— ),男,陜西寶雞人,安徽國防科技職業(yè)學(xué)院機(jī)械工程系講師,碩士.研究方向:機(jī)械設(shè)計(jì)及其理論.
TP311
A
1008-4681(2015)05-0036-04