畢亞東
(安徽國防科技職業學院機械工程系,安徽 六安 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,已知圓弧和聯接圓弧在AutoCAD中都能找到相應的繪圖命令,中間圓弧卻沒有直接繪制命令.

圖1 AutoCAD中的繪圓命令
中間圓弧的特點是半徑已知,圓心未知,尋找圓心是解決這個問題的關鍵點.依照目前常見的該圓繪制的方法,確定的編程思路為:使用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 程序框圖
中間圓弧命令主要有三部分組成.其中第一部分是編制一個共用函數“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 創建中間圓弧窗體
通過以下實例(圖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 繪圖實例
文章利用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