康忠元,陳羅鳳
(重慶市農(nóng)業(yè)機(jī)械化學(xué)校,重慶 402160)
客運(yùn)索道作為景區(qū)必備人力輔助機(jī)械系統(tǒng),其設(shè)計(jì)過(guò)程的周期影響景區(qū)的高效運(yùn)行,而客運(yùn)索道的立柱作為索道關(guān)鍵承載部件,其外形較為復(fù)雜,繪制二維圖紙時(shí),因尺寸參數(shù)繁多,所以需要大量的尺寸標(biāo)注和形位公差。此外,立柱與基座相連部分的加強(qiáng)筋、螺栓眾多,且需要根據(jù)地勢(shì)變化分段設(shè)計(jì),各分段連接處也存在大量的加強(qiáng)筋、螺栓。由于加強(qiáng)筋、螺栓尺寸較小,傳統(tǒng)的依據(jù)坐標(biāo)點(diǎn)連成線的繪圖方式,不僅使設(shè)計(jì)繪圖變得異常繁瑣,而且不便于修改,設(shè)計(jì)過(guò)程的冗余致使后期生產(chǎn)、安裝工期加長(zhǎng),因此,客運(yùn)索道立柱參數(shù)化繪圖系統(tǒng)旨在減少設(shè)計(jì)人員較多的機(jī)械、重復(fù)操作,有效降低立柱前期設(shè)計(jì)工時(shí),促使設(shè)計(jì)人員將主要的精力投入到立柱結(jié)構(gòu)設(shè)計(jì)上。采用該系統(tǒng)后,用戶只需給定立柱特征尺寸參數(shù),系統(tǒng)就可以自動(dòng)完成立柱二維計(jì)算機(jī)輔助設(shè)計(jì) (Computer Aided Design,CAD)圖紙的繪制,從而達(dá)到高效、準(zhǔn)確繪圖的目的,該系統(tǒng)將大量、復(fù)雜的操作進(jìn)行有效的封裝,設(shè)計(jì)人員只需根據(jù)設(shè)計(jì)意圖調(diào)用即可。
該系統(tǒng)基于Visual Studio 2012(最流行的Windows平臺(tái)應(yīng)用程序開(kāi)發(fā)環(huán)境),根據(jù)客運(yùn)索道立柱的尺寸以及尺寸要素之間的關(guān)聯(lián),提取出特征參數(shù),把大量、復(fù)雜、重復(fù)的繪圖操作進(jìn)行有效的封裝,將其中標(biāo)準(zhǔn)螺栓制作成塊,封裝在系統(tǒng)內(nèi),用戶只需設(shè)計(jì)原始尺寸參數(shù),根據(jù)設(shè)計(jì)需要進(jìn)入不同視圖繪制功能界面,輸入相應(yīng)的特征參數(shù),點(diǎn)擊繪圖、填充、標(biāo)注按鈕,即可獲得索道立柱二維CAD圖紙,所獲圖紙無(wú)需做任何補(bǔ)充或更改,可直接交于生產(chǎn)車間加工。該系統(tǒng)主要功能包括視圖繪制、填充、標(biāo)注、標(biāo)題欄四大板塊,系統(tǒng)結(jié)構(gòu)流程簡(jiǎn)圖見(jiàn)第53頁(yè)圖1。
繪圖系統(tǒng)的成功建立關(guān)鍵在于C#語(yǔ)言與Auto-CAD的有效連接[1-2],通過(guò)一系列C#編程驅(qū)動(dòng)AutoCAD作出繪圖動(dòng)作,為了確保高效率的繪圖操作,在此通過(guò)一系列函數(shù)將繪圖命令封裝于設(shè)計(jì)類庫(kù)中,設(shè)計(jì)人員只需引用相關(guān)函數(shù)命令,即可快速繪制圖形。該繪圖系統(tǒng)的建立可實(shí)現(xiàn)基本圖形的繪制、標(biāo)注,包括線型圖層的設(shè)置、各種實(shí)體對(duì)象的繪制、各種對(duì)象的標(biāo)注等,由于基本的繪圖命令函數(shù) (直線、圓弧、倒角等)封裝在同一類下,用戶可直接調(diào)用相應(yīng)函數(shù)名,輸入構(gòu)造參數(shù)進(jìn)行相關(guān)圖形的繪制。為了在同一地址空間運(yùn)行并能直接利用AutoCAD核心數(shù)據(jù)庫(kù)以及類庫(kù),首先需要引用相應(yīng)的AutoCAD命名空間,引用如下。
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Interop;
數(shù)據(jù)庫(kù)可以通過(guò)定義如下代碼獲得:
Document acDoc=Application.DocumentManager.MdiActiveDocument;
Database acCurDb=acDoc.Database;
圖1 索道立柱參數(shù)化繪圖系統(tǒng)流程結(jié)構(gòu)圖
在模型空間中需要?jiǎng)?chuàng)建AutoCAD各種實(shí)體對(duì)象,從簡(jiǎn)單的直線和圓到樣條曲線、橢圓和關(guān)聯(lián)填充區(qū)域等等。通常引用AppendEntity()函數(shù)將相應(yīng)的對(duì)象添加到BlockTableRecord(塊表記錄)對(duì)象。在創(chuàng)建一個(gè)對(duì)象后,可通過(guò)修改其相應(yīng)的系統(tǒng)變量來(lái)改變對(duì)象的圖層、顏色和線型等屬性,而各種對(duì)象的線型、顏色、線寬等屬性,可通過(guò)指定相應(yīng)的命名圖層來(lái)實(shí)現(xiàn)。以下列舉繪制直線對(duì)象的具體代碼。
acCurDb.Clayer=acLyrTbl[sLayerName1];//設(shè)置當(dāng)前圖層
Point3d P0=new Point3d(x1,y1,0);//直線端點(diǎn)
Point3d P1=new Point3d(x2,y2,0);//直線端點(diǎn)
lins.Add(new Line(P0,P1));//調(diào)用直線函數(shù),連接P0,P1點(diǎn)構(gòu)成直線
foreach(Line line in lins)//依次循環(huán)每一個(gè),遍歷CAD塊表中的所有對(duì)象
{btr.AppendEntity(line);//加載直線
acTrans.AddNewlyCreatedDBObject(line,true);//添加對(duì)象到數(shù)據(jù)庫(kù)中
}
幾何尺寸所表示的是對(duì)象的幾何測(cè)量、對(duì)象間距離或角度,亦或是一個(gè)功能屬性的具體平面坐標(biāo)等。AutoCAD提供了3種基本尺寸標(biāo)注類型:線性標(biāo)注linear、徑向標(biāo)注radial和角度標(biāo)注angular,線性標(biāo)注又分對(duì)齊標(biāo)注aligned、旋轉(zhuǎn)標(biāo)注rotated和坐標(biāo)標(biāo)注ordinate 3種。以線性尺寸的標(biāo)注實(shí)現(xiàn)為例,演示具體功能代碼創(chuàng)建過(guò)程如下。
RotatedDimension acRotDim=new RotatedDimension();//新建標(biāo)注對(duì)象
acRotDim.XLine1Point=new Point3d(0,0,0);//指定標(biāo)注起點(diǎn)
acRotDim.XLine2Point=new Point3d(7,4,0);//指定標(biāo)注端點(diǎn)
acRotDim.Rotation=0.707;//指定角度
acRotDim.DimLinePoint=new Point3d(0,5,0);//指定尺寸數(shù)字位置
acRotDim.DimensionStyle=acCurDb.Dimstyle;
通過(guò)創(chuàng)建Aligned Dimension對(duì)象和Rotated Dimension對(duì)象的實(shí)例來(lái)創(chuàng)建線性標(biāo)注。創(chuàng)建線性標(biāo)注實(shí)例后,可以修改文字、文字傾斜角度、尺寸線的角度。也可以通過(guò)屬性選項(xiàng)來(lái)設(shè)定尺寸界線原點(diǎn)、尺寸線位置、標(biāo)注文字以及應(yīng)用的標(biāo)注樣式等屬性。倘若沒(méi)有給Aligned Dimension對(duì)象和Rotated Dimension對(duì)象的構(gòu)造函數(shù)傳遞任何參數(shù),那么對(duì)象就會(huì)使用默認(rèn)屬性值。
形位公差所顯示的是一個(gè)功能特征的形式、輪廓、方向、位置和跳動(dòng)等偏差。在AutoCAD中使用的是FeatureControlFrame對(duì)象實(shí)例來(lái)創(chuàng)建形位公差。FeatureControlFrame對(duì)象的構(gòu)造函數(shù)需要輸入:公差符號(hào)的文本串 (Text)、插入點(diǎn) (Location)、法向矢量 (Normal)、方向矢量 (Direction)4個(gè)屬性。具體功能代碼創(chuàng)建過(guò)程如下。
FeatureControlFrame acFcf=new FeatureControl-Frame();//新建形位公差標(biāo)注
acFcf.Text="{\Fgdt;j}%%v{\Fgdt;n}0.001%%v%%v%%v%%v";//指定文字
acFcf.Location=new Point3d(5,7,0);//指定插入點(diǎn)
當(dāng)然也可以通過(guò)更改形位公差的系統(tǒng)變量和屬性來(lái)控制標(biāo)注的質(zhì)量,形位公差的系統(tǒng)變量主要包含DIMCLRD(控制特征控制框的顏色)、DIMCLRT(控制公差文字的顏色)、DIMGAP(控制特征控制框與文本之間的間距)、DIMTXT(控制公差文字的字號(hào)大?。IMTXTSTY(控制公差文字的文字樣式)5個(gè),通過(guò)引用相應(yīng)屬性參數(shù),即可完成參數(shù)設(shè)定。
各種表達(dá)視圖繪制、標(biāo)注、填充完畢以后,需向圖形中添加各種類型文字,文字對(duì)象可以用于標(biāo)題欄、標(biāo)注圖形部件、技術(shù)要求或者注釋等。AutoCAD提供了兩種文字創(chuàng)建方式:?jiǎn)涡形淖趾投嘈形淖?,前者適用于短小簡(jiǎn)單的實(shí)體的描述,后者則多用于內(nèi)部格式較長(zhǎng)的實(shí)體。在AutoCAD中創(chuàng)建各種文字樣式的流程主要包括:首先,新建TextStyleTableRecord對(duì)象的一個(gè)實(shí)例,用Name屬性給新文字樣式命名;其次,以寫(xiě)方式打開(kāi)TextStyleTable對(duì)象,用Add方法將新創(chuàng)建文字樣式添加到文字樣式表中;最后,編輯文字屬性,包括字高、角度、內(nèi)容以及文字位置等。具體屬性編輯功能代碼如下。
DBText acText=new DBText();//創(chuàng)建單行文字
acText.Position=new Point3d(1,2,0);//創(chuàng)建文字插入位置
acText.Height=0.7;//指定字高
acText.TextString="";//指定文字內(nèi)容
acText.Oblique=0.707;//指定文字傾斜角度
基于前述實(shí)體對(duì)象、標(biāo)注的創(chuàng)建方法,提取索道立柱特征參數(shù)。針對(duì)立柱尺寸參數(shù)之間的特征關(guān)系,提取立柱直徑、立柱長(zhǎng)、基座直徑、基座變截面長(zhǎng)度以及柱壁厚度作為特征參數(shù),根據(jù)實(shí)際使用工況計(jì)算出相應(yīng)立柱承載參數(shù)后,即可利用繪圖系統(tǒng)繪制出立柱二維CAD圖紙 (見(jiàn)圖2),其中基座加強(qiáng)筋個(gè)數(shù)由系統(tǒng)根據(jù)基座直徑自動(dòng)分配布置。
圖2 立柱示意圖
基于Visual Studio 2012,采用面向?qū)ο箝_(kāi)發(fā)的方法,利用C#與AutoCAD核心數(shù)據(jù)庫(kù)的無(wú)縫對(duì)接,將各類繪圖函數(shù)進(jìn)行封裝[3],根據(jù)設(shè)計(jì)參數(shù)調(diào)用不同函數(shù)即可完成設(shè)計(jì)出圖,有效地縮短了設(shè)計(jì)周期。但本系統(tǒng)僅局限于二維圖紙的繪制,并未涉及立柱三維參數(shù)化造型與立柱結(jié)構(gòu)的參數(shù)化優(yōu)化,這也是筆者今后重點(diǎn)研究的領(lǐng)域。