国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

AutoCAD VBA在大沙河河道斷面繪制中的應(yīng)用

2016-09-01 09:45蔣云杰張麗萍陸文君
治淮 2016年2期
關(guān)鍵詞:大沙河線型數(shù)組

蔣云杰 董 雷 張麗萍 張 磊 楊 寧 陸文君

AutoCAD VBA在大沙河河道斷面繪制中的應(yīng)用

蔣云杰董雷張麗萍張磊楊寧陸文君

大沙河是古黃河進(jìn)入江蘇省境內(nèi)的第一條分洪道,大沙河兩岸均為黃河沖積的粉砂土,地勢(shì)高亢,河道寬淺彎曲,汛期行洪不暢,經(jīng)常決口,灌溉期又嚴(yán)重缺水,干旱和洪澇災(zāi)害頻發(fā)。根據(jù)《全國(guó)重點(diǎn)中小河流治理實(shí)施方案》(2013-2015年),豐縣大沙河治理總長(zhǎng)度8.47km。根據(jù)河道規(guī)劃方案,河底寬從50~250m不等,邊坡為1∶4。結(jié)合大沙河的工程實(shí)際,利用VBA對(duì)AutoCAD進(jìn)行二次開(kāi)發(fā),繪制大沙河河道設(shè)計(jì)斷面。

一、啟動(dòng)VBA程序

AutoCAD VBA程序代碼的集合叫做宏。該宏不能直接獨(dú)立運(yùn)行,需要借助于其他應(yīng)用程序的調(diào)用。點(diǎn)擊AutoCAD軟件菜單欄中的“工具”選項(xiàng),在下拉列表框中選擇“宏”。然后點(diǎn)擊“加載工程”可以加載已經(jīng)編譯好的VBA工程,也可以點(diǎn)擊“Visual Basic編輯器”進(jìn)行新工程的編譯。

二、與Excel程序的交互接口

Excel軟件是微軟辦公軟件中的重要組成部分,可以進(jìn)行各種數(shù)據(jù)的處理、統(tǒng)計(jì)分析和輔助決策等,廣泛應(yīng)用于各個(gè)領(lǐng)域。AutoCAD可以通過(guò)ActiveX訪問(wèn)Excel數(shù)據(jù)表,并實(shí)現(xiàn)數(shù)據(jù)資源的共享。將規(guī)劃設(shè)計(jì)好的各河道斷面數(shù)據(jù)按照表1的順序依次列入Excel數(shù)據(jù)表中。

表1  河道斷面數(shù)據(jù)數(shù)據(jù)表樣表

首先聲明某個(gè)量為Excel.Applica -tion,其次聲明某個(gè)量為工作表,然后獲取需要調(diào)用的Excel的路徑。在該程序中,Excel的路徑和編譯好的VBA工程放在同一個(gè)文件夾中,并且將文件命名為Excel.xls。調(diào)用Excel程序的命令如下:

Dimxlapp As Excel.Application

Dimxlbook As Excel.Workbook'定義工作簿

DimxlsheetAsExcel.Worksheet'定義工作表

'獲得當(dāng)前工程的路徑

DimstrFile As String

strFile=ThisDrawing.Application. VBE.ActiveVBProject.FileName

'創(chuàng)建Excel應(yīng)用程序?qū)嵗?/p>

Set xlapp=CreateObject("Excel. Application")

xlapp.Visible=True

'指定打開(kāi)Excel的位置

(strFile,Len(strFile)-Len("Excel to line.dvb"))&"Excel.xls"

'指定Excel文件為當(dāng)前活動(dòng)的文件

三、調(diào)用Excel數(shù)據(jù)表中的數(shù)據(jù)

應(yīng)用VBA程序查詢Excel數(shù)據(jù)表中所具有的數(shù)據(jù)的組數(shù),并賦值給循環(huán)變量“i”,以便為相應(yīng)的數(shù)組申請(qǐng)空間。由于Excel數(shù)據(jù)表中的數(shù)據(jù)已按照一定的格式列于數(shù)據(jù)表中,故可以將Excel數(shù)據(jù)表中的數(shù)據(jù)直接分配給申請(qǐng)好空間的數(shù)組??捎萌缦鲁绦虼a實(shí)現(xiàn):

ReDim L(i+10)As Double'導(dǎo)線到中心線距離數(shù)組

ReDim px(i+10)As Double'基點(diǎn)x坐標(biāo)數(shù)組

ReDim py(i+10)As Double'基點(diǎn)y坐標(biāo)數(shù)組

ReDim JG(i+10)As Double'基點(diǎn)高程數(shù)組

ReDimDG(i+10)As Double'河底高程數(shù)組

ReDim DB(i+10)As Double'斷面的寬度數(shù)組

ReDim m(i+10)As Double'邊坡系數(shù)數(shù)組

ReDim TG(i+10)As Double'灘面高程數(shù)組

ReDim TB(i+10)As Double'灘面寬度數(shù)組

ReDimZBD(i+10)As Double'坐標(biāo)圖最高點(diǎn)坐標(biāo)數(shù)組

四、繪制河道斷面圖

將河道中心線設(shè)置為點(diǎn)劃線,河道邊線設(shè)置為實(shí)線。因此在VBA中聲明objLayer1和objLayer2為AutoCAD的圖層屬性,分別表示河道中心線層和河道邊線層,并根據(jù)繪圖習(xí)慣設(shè)置線寬,本文中設(shè)置河道中心線線寬為0.3mm,河道邊線線寬為0.7mm。由于中心線是點(diǎn)劃線,初始AutoCAD中是沒(méi)有點(diǎn)劃線的,需要自己手動(dòng)加載才可以。本文首先采用判斷語(yǔ)句判斷打開(kāi)的AutoCAD文件中是否已經(jīng)加載了點(diǎn)劃線的樣式,如果已加載則直接使用,否則通過(guò)VBA語(yǔ)句加載。在本文中應(yīng)用以下語(yǔ)句自動(dòng)加載點(diǎn)劃線,并設(shè)置點(diǎn)劃線為紅色:

Dim T As AcadLineType'CAD線型,用于遍歷已加載的線型

Dim BB As Boolean'用于標(biāo)記檢查已加載線型的結(jié)果

DimobjLayer1 As AcadLayer

DimobjLayer2 As AcadLayer

Set objLayer1=ThisDrawing.Layers. Add("中心線")

Set objLayer2=ThisDrawing.Layers. Add("邊線")

For Each TIn ThisDrawing.Linetyp -es'檢查是否已加載中心線的線型

If BB=False Then ThisDrawing. Linetypes.Load"ACAD_ISO10W100","acad.lin"'在要求的線型未找到時(shí)加載該線型

objLayer1.Linetype="ACAD_ISO 10W100"'按要求定義中心線線型

objLayer1.color=acRed

objLayer1.Lineweight=acLnWt030

objLayer2.Lineweight=acLnWt070

在圖層及線型設(shè)置完成之后,根據(jù)Excel數(shù)據(jù)表中的數(shù)據(jù),按照幾何關(guān)系列出計(jì)算河道斷面幾個(gè)特征點(diǎn)坐標(biāo)的表達(dá)式,調(diào)用AutoCADVBA程序中的畫直線命令,根據(jù)兩點(diǎn)連線命令繪制河道斷面,并設(shè)置中心線的線型比例為0.2。由于各斷面河道現(xiàn)狀灘面線形狀各不相同,因此在本文中將河道灘面以上的邊線按照邊坡比例繪制到坐標(biāo)網(wǎng)格的最頂端,然后利用河道現(xiàn)狀灘面線,手動(dòng)將河道線截?cái)?,就可以形成設(shè)計(jì)的河道斷面圖。通過(guò)以下語(yǔ)句完成以上目的:

Call ThisDrawing.ModelSpace. AddLine(p1,p2)'調(diào)用劃直線命令繪制中心線左側(cè)河底線

Call ThisDrawing.ModelSpace. AddLine(p2,p3)'調(diào)用劃直線命令繪制中心線左側(cè)邊坡線

CallThisDrawing.ModelSpace. AddLine(p3,p4)'調(diào)用劃直線命令繪制中心線左側(cè)灘面線

CallThisDrawing.ModelSpace. AddLine(p4,p5)'調(diào)用劃直線命令繪制中心線左側(cè)邊坡線

CallThisDrawing.ModelSpace. AddLine(p1,p6)'調(diào)用劃直線命令繪制中心線右側(cè)河底線

CallThisDrawing.ModelSpace. AddLine(p6,p7)'調(diào)用劃直線命令繪制中心線右側(cè)邊坡線

CallThisDrawing.ModelSpace. AddLine(p7,p8)'調(diào)用劃直線命令繪制中心線右側(cè)灘面線

CallThisDrawing.ModelSpace. AddLine(p8,p9)'調(diào)用劃直線命令繪制中心線右側(cè)邊坡線

Set ML=ThisDrawing.Model Space.AddLine(p10,p11)'調(diào)用劃直線命令繪制中心線

圖1  繪制完成的大沙河某兩個(gè)河道斷面圖

五、實(shí)例應(yīng)用

以大沙河河道斷面繪制為例,在平面圖上繪制河道中心線,并采集每個(gè)斷面導(dǎo)線至中心線的距離,存入河道數(shù)據(jù)表中,記為A列(基點(diǎn)距中心線距離),采用另外的程序在斷面圖中采集導(dǎo)線基點(diǎn)坐標(biāo)存入河道數(shù)據(jù)表中,記為B列(基點(diǎn)x坐標(biāo))、C列(基點(diǎn)y坐標(biāo))。利用VBA打開(kāi)河道數(shù)據(jù)表,根據(jù)B列和C列數(shù)據(jù)找到河道斷面基點(diǎn),再結(jié)合A列數(shù)據(jù)可以得到河底中線位置坐標(biāo),根據(jù)Excel數(shù)據(jù)表中的數(shù)據(jù)按照計(jì)算式計(jì)算各特征點(diǎn)的坐標(biāo),繪制河道邊線和中心線。繪制完成的河道斷面如圖1所示。

六、結(jié)語(yǔ)

通過(guò)AutoCAD的VBA編譯技術(shù),調(diào)用Excel數(shù)據(jù)表中的河道斷面數(shù)據(jù)自動(dòng)繪制河道斷面,大大減少了設(shè)計(jì)人員的工作量,提高了繪圖效率。尤其是在河道參數(shù)有變動(dòng)的時(shí)候,可以重新生成改動(dòng)后的河道斷面圖,減少了設(shè)計(jì)人員逐個(gè)斷面修改的工作量■

(作者單位:江蘇省徐州市水利建筑設(shè)計(jì)研究院221100)

猜你喜歡
大沙河線型數(shù)組
變化環(huán)境下考慮線型不確定性的水文設(shè)計(jì)值估算分析
湘潭高月塘大橋施工線型監(jiān)控與合攏策略研究
JAVA稀疏矩陣算法
單縣大沙河水庫(kù)工程建設(shè)可行性分析
JAVA玩轉(zhuǎn)數(shù)學(xué)之二維數(shù)組排序
張掖大沙河
我愛(ài)我的家鄉(xiāng)
我愛(ài)我的家鄉(xiāng)
微流控法低溫保護(hù)劑添加及去除線型優(yōu)化研究
AutoCAD中線型的開(kāi)發(fā)定制技術(shù)