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