• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      AutoLISP語言在地下管線測量中的應(yīng)用

      2014-06-28 06:27:46陳培龍
      城市勘測 2014年6期
      關(guān)鍵詞:圖塊箭頭流向

      陳培龍

      (漳州市測繪設(shè)計(jì)研究院,福建 漳州 363000)

      1 引 言

      隨著國民經(jīng)濟(jì)的發(fā)展,我國的城市建設(shè)也取得了巨大的成就。近年來城市測量工作在城市發(fā)展中的作用越來越突出,而城市地下管線測量作為城市測量工作的重要組成部分,越來越受到相關(guān)部門的重視。城市建設(shè)的飛速發(fā)展,原有城市地下管線資料欠缺的矛盾越來越突出。因此查明地下管線,并確定其分布、埋深及走向等管點(diǎn)特征信息,建立一個有效的、簡潔的管線信息測量錄入系統(tǒng),就顯得更加迫切[1]。筆者所在單位進(jìn)行的管線測量成果一般以Excel 電子表格的形式輸出,而日常測量成圖又是在AutoCAD 平臺下,故筆者利用AutoLISP 編制程序?qū)崿F(xiàn)AutoCAD 到Excel 的管線點(diǎn)、線表自動輸出,從而提高工作效率。

      AutoLISP 是內(nèi)含于AutoCAD 軟件中的開發(fā)語言,是強(qiáng)化AutoCAD 最好、最直接的程序語言。它最大的特點(diǎn)就是不挑剔編輯環(huán)境,幾乎在所有的文本編輯器中都可以編寫,而且不需要特殊的編譯過程。它的語法結(jié)構(gòu)簡單易懂,變量定義方便、簡潔非常富有彈性。Dcl 是內(nèi)嵌于AutoCAD 平臺的一款對話框語言,該語言和LISP 一樣,語法結(jié)構(gòu)簡單,不需經(jīng)過編譯,可以在AutoCAD 平臺下直接調(diào)用[2]。使用LISP+Dcl 能夠輕松實(shí)現(xiàn)基于AutoCAD 平臺的交互輸入與輸出,功能強(qiáng)大、通俗易用。本系統(tǒng)主要利用AutoCAD 圖元可以擴(kuò)展數(shù)據(jù)的功能,對管點(diǎn)圖塊的AutoCAD 屬性進(jìn)行擴(kuò)展,從而實(shí)現(xiàn)管線點(diǎn)、線表自動輸出[3]。

      2 工作流程

      管線測量一般先外業(yè)采集管點(diǎn)的坐標(biāo)及高程信息,然后再對各個管點(diǎn)的特征數(shù)據(jù)進(jìn)行采集,該系統(tǒng)主要模擬外業(yè)生產(chǎn)流程,根據(jù)外業(yè)采集的各特征點(diǎn)信息的流程進(jìn)行錄入,通過管線的流向方向,實(shí)現(xiàn)管線點(diǎn)、線表從CAD 到Excel 的輸出[4]。圖1 為地下管線探測工作流程。

      圖1 地下管線探測工作流程圖

      3 程序的功能設(shè)計(jì)

      3.1 程序擴(kuò)展數(shù)據(jù)結(jié)構(gòu)及Dcl 主鍵定義

      AutoCAD 擴(kuò)展數(shù)據(jù)是軟件自帶的一種擴(kuò)展方式,其主要結(jié)構(gòu)方式為:(-3(應(yīng)用名(1000 .文本型屬性)(1040.浮點(diǎn)型屬性)(1070 .整數(shù)型屬性))),應(yīng)用名可以通過“Regapp”函數(shù)直接注冊,如果注冊成功,該應(yīng)用名會被加入到Appid 符號表中,該表保留了該圖形中所有使用擴(kuò)展數(shù)據(jù)的應(yīng)用名[5]。對話框是現(xiàn)今最流行的人機(jī)互動界面,在早期的AutoCAD 版本中已經(jīng)使用,對話框的描述定義在一純文本文檔(后綴名為.dcl)內(nèi),無須特別的開發(fā)環(huán)境,稱之為Dcl 語言。在AutoLISP 中內(nèi)嵌可以直接控制Dcl 對話框的函數(shù),對話框中的每一個對象均有一個唯一的標(biāo)示符即Dcl 主鍵名稱,通過主鍵名稱,就可以準(zhǔn)確的控制對話框的各個部件。對于擴(kuò)展數(shù)據(jù)結(jié)構(gòu)及主鍵的定義如表1 所示。

      擴(kuò)展數(shù)據(jù)結(jié)構(gòu)及Dcl 主鍵一覽表 表1

      3.2 自動展繪管點(diǎn)圖塊

      管線外業(yè)采集一般使用全站儀或者GPS 進(jìn)行采集,采集數(shù)據(jù)包含測點(diǎn)點(diǎn)名,編碼,北坐標(biāo)X,東坐標(biāo)Y,高程值H。外業(yè)采集的同時需要根據(jù)管井的井蓋等信息判斷出管井的類型,例如污水、雨水、電力、電信、燃?xì)獾?,然后再對管井進(jìn)行探測以便采集管點(diǎn)的屬性信息如管徑、埋深、井深、電纜根數(shù)、電纜孔數(shù)等[6],依據(jù)這些采集的數(shù)據(jù),通過使用自動展繪模塊快速成圖。對于使用該模塊,首先每一種管點(diǎn)類型都先約定一個字母代碼,如污水管點(diǎn)為W,雨水管點(diǎn)為Y,電力管點(diǎn)為L 等。在內(nèi)業(yè)處理時首先編輯對照文件,文件為文本格式,當(dāng)文本中出現(xiàn)管點(diǎn)字母代碼時,表示該代碼后的所有測點(diǎn)點(diǎn)名都是該類型管點(diǎn),每一行表示一個點(diǎn)名,直到出現(xiàn)其他管點(diǎn)字母代碼。

      例如:Y

      表示點(diǎn)名為100、101 的測點(diǎn)為雨水管點(diǎn),103、104為污水管點(diǎn)。完成點(diǎn)、線表對照文件編輯后,就可以通過自動展繪管點(diǎn)圖塊程序,完成管點(diǎn)圖塊的CAD 成圖,同時錄入該點(diǎn)的高程值和外業(yè)點(diǎn)名。模塊界面如圖2 所示:

      圖2 自動畫管線的界面

      管點(diǎn)展繪后效果如圖3 所示:

      圖3 管點(diǎn)展繪效果圖

      3.3 管線流向與箭頭的繪制

      完成管點(diǎn)圖塊繪制后,需要根據(jù)管線實(shí)地的連接方向進(jìn)行連線。AutoCAD 的二維多段線會根據(jù)每個端點(diǎn)繪制的順序形成一個方向,在管點(diǎn)流向繪制時,需保證管點(diǎn)流向的方向與二維多段線的方向保持一致,例如:雨水管線從上游往下游方向繪制,并保證二維多段線每個端點(diǎn)均與管點(diǎn)圖塊的中心點(diǎn)一致,這樣就在繪制流向的同時也就完成了原來互相獨(dú)立的管點(diǎn)之間拓?fù)潢P(guān)系的連接。

      如果管線的類型是雨水或者污水,那么在完成流向繪制后,還需要在每兩個管點(diǎn)之間繪制一個表示流向的箭頭。為了保證箭頭的一致性和美觀性,程序還提供了自動畫流向箭頭功能,同時約定在兩個管點(diǎn)距離大于等于5 m的情況下,箭頭長度為1.6,距離小于5 m時,箭頭長度縮小為0.6,并保證箭頭的頂端位于兩管點(diǎn)流向線的中點(diǎn)上,與流向線兩側(cè)的夾角均為20°。由于AutoCAD 二維多段線的方向沒有直觀地顯示,故在實(shí)際操作中會出現(xiàn)二維多段線的方向與流向的方向相反的情況,為了防止這種情況的出現(xiàn),在流向箭頭繪制程序運(yùn)行的最后會在命令行提示用戶判斷繪制箭頭的方向是否正確,若用戶選擇為否(N),則程序會對該流向線進(jìn)行反向處理,并重新繪制正確的箭頭。同時還提供SCJT(刪除箭頭)命令,可以刪除最后繪制的一組箭頭,最大限度減少誤操作帶來的重復(fù)勞動。

      3.4 管點(diǎn)的快速編號

      管點(diǎn)在圖形中主要靠管點(diǎn)的編號來識別,因此管點(diǎn)編號的條理性及準(zhǔn)確性就顯得特別重要。在將管線數(shù)據(jù)以Excel 表格方式輸出后,如何快速將文本數(shù)據(jù)與AutoCAD 圖形聯(lián)系起來,跟管點(diǎn)編號的方式有很大的關(guān)系。為了能更快速、準(zhǔn)確、對管點(diǎn)進(jìn)行編號,程序提供了自動編號模塊。運(yùn)行命令時,首先提示用戶選擇需要編號的流向線,然后根據(jù)用戶輸入的起始編號,程序會按照流向線方向?qū)€上每個管點(diǎn)進(jìn)行遞增編號。例如:用戶輸入雨水管點(diǎn)起始編號為Y10D100,程序會對接下去的管點(diǎn)編號為Y10D101、Y10D102……,如圖4 所示。

      圖4 自動畫流向箭頭效果圖

      3.5 管點(diǎn)屬性錄入

      完成上述工作后,就需要對外業(yè)采集的管點(diǎn)屬性信息進(jìn)行錄入。管點(diǎn)的屬性錄入界面如圖5 所示。一般管線測量只有電力和電信需要錄入共有孔數(shù)、已用孔數(shù)、電纜根數(shù)這三個屬性信息,在程序的運(yùn)行中,會根據(jù)管點(diǎn)的圖塊名稱自動判斷出管線類型,如果是電力或電信,則共有孔數(shù)、已用孔數(shù)、電纜根數(shù)三項(xiàng)可以錄入信息;如果是雨水或者污水等其他類別的管線則錄入框會以灰色不可編輯框的形式出現(xiàn)。預(yù)留擴(kuò)展在程序執(zhí)行中會以不可編輯框的形式出現(xiàn),預(yù)留擴(kuò)展是為預(yù)防后期管線錄入屬性增多而準(zhǔn)備的,需要使用時必須修改后臺程序后才能錄入信息,應(yīng)用本文所提的方法,可以根據(jù)需要任意擴(kuò)展。

      圖5 管點(diǎn)屬性信息錄入界面

      3.6 點(diǎn)、線表的輸出及查錯

      完成所有的屬性錄入工作后,就可以輸出點(diǎn)線表了。程序約定輸入的點(diǎn)、線表自動存放于當(dāng)前活動圖形的同級目錄下,并命名為輸出點(diǎn)表.csv 和輸出線表.csv。用戶可以連續(xù)選擇需要輸出的流向線,右鍵結(jié)束選擇后,程序?qū)⒏鶕?jù)選擇的流向線,自動輸出該線上所有管點(diǎn)的屬性信息[7]。

      當(dāng)輸出的管線類型為雨水或者污水時,程序會對各點(diǎn)井底高程就行復(fù)查,當(dāng)管點(diǎn)的井底高程大于上一管點(diǎn)井底高程的數(shù)值超過某一閾值時(默認(rèn)設(shè)置設(shè)為10 cm),會在該行線表的備注欄標(biāo)注“流不出”,提示用戶進(jìn)行人工再確認(rèn),防止出現(xiàn)粗差。由于在連線時已經(jīng)將流向與二維多段線的方向保持一致,故每次雨、污的流向均為正向。輸出效果如圖6 所示:

      圖6 線表輸出效果圖

      4 程序部分源代碼

      4.1 自動畫流向箭頭模塊部分代碼

      (setq ssjiantou(ssadd));創(chuàng)建一個集合,將所有箭頭放在這個集合內(nèi)

      (setq a(car(entsel)));選擇需要畫箭頭的流向線

      (setq leixing(cdr(assoc 0(entget a))));判斷對象是否為多段線

      (if(=leixing "POLYLINE")(progn

      (setq tuceng(cdr(assoc 8(entget a))));判斷所在圖層

      (panduan);判斷模塊,如果不是雨水或者污水,則程序不再執(zhí)行

      (setq en(entnext a));讀取下一圖元,用于接下去獲取多段線端點(diǎn)坐標(biāo)

      (setq ed(assoc 10(entget en)))

      (setq xs(cadr ed));分離出X 值(setq ys(caddr ed));分離出Y 值

      (setq pts(list xs ys));構(gòu)造起始點(diǎn)坐標(biāo)(setq en(entnext en))

      (setq long 1.6);設(shè)定每個箭頭長度為1.6

      (while(/=over "SEQEND")

      (setq ed(assoc 10(entget en)))

      (setq x(cadr ed));分離出X 值(setq y(caddr ed));分離出Y 值

      (setq xzz x)(setq yzz y)(setq pt(list x y));構(gòu)造點(diǎn)坐標(biāo)

      (setq x(/(+ x xs)2))(setq y(/(+ y ys)2))

      (setq ptmid(list x y));構(gòu)造中點(diǎn)坐標(biāo)

      (if(<(distance pt pts)5)(setq long 0.6));根據(jù)端點(diǎn)距離調(diào)整箭頭長度為0.6

      (setq ptmidon(polar ptmid(+(angle pts ptmid)2.792)long));箭頭第一個點(diǎn)

      (setq ptmiddown(polar ptmid(+(angle pts ptmid)3.4906)long));第二個點(diǎn)

      (command "layer" "s" tuceng "");設(shè)置流向線所在圖層為當(dāng)前圖層

      (setvar "thickness" 5441200);設(shè)置箭頭厚度值

      (command "pline" ptmidon ptmid ptmiddown "");繪制箭頭

      (ssadd(entlast)ssjiantou);將繪制的箭頭加入選擇集ssjiantou

      (setq long 1.6)(setq xs xzz)(setq ys yzz)(setq pts(list xs ys))

      (setq en(entnext en));訪問下一個子圖元,繼續(xù)繪制箭頭

      (setq over(cdr(assoc 0(entget en)))));判斷子圖元是否結(jié)束

      (initget 0 "Yes No")

      (setq keyw(getkword " 流向方向是否正確[是(Y)/否(N)]:")));用戶確定方向

      (alert "您選擇的不是多段線");如果選擇的不是多段線則提醒

      )

      (if(=keyw "No")(chongxinhua));如果用戶選擇流向方向?yàn)椴徽_,則反向重畫

      4.2 快速編號模塊部分代碼

      (regapp "gxbh");將gxbh 注冊到Appid 符號表中

      (if name(progn

      (setq arealist(list-3(list "gxbh"(cons 1000 bianh))));構(gòu)建擴(kuò)展組

      (setq endata(entget name '("gxbh")));檢查原圖塊是否已經(jīng)編號

      (if(=(cdr(assoc 1000(cdr(cadr(assoc-3 endata)))))"")

      (progn

      (setq oldlist(assoc-3 endata));獲取原圖元已有的擴(kuò)展屬性

      (setq endata(subst arealist oldlist endata));用新的屬性替換舊屬性

      (entmod endata);更新圖元

      (command "text" pt2 "1.5" "0" bianh);在圖上繪制管點(diǎn)編號

      (setq num(1+(atoi num)))

      (cond

      ((<num 10)(setq num(strcat "00"(itoa num))));如果編號編號是1,就改為001

      ((<num 100)(setq num(strcat "0"(itoa num))));如果編號是10 則改為010

      ((>=num 100)(setq num(itoa num))));如果編號大于100 則不做處理

      (setq bianh(strcat zubie num)))

      (if(not(assoc-3 endata))(prong

      (setq endata(append endata(list arealist)));如果原圖元沒有編號,則增加新編號

      (entmod endata);更新圖元

      (command "text" pt2 "1.5" "0" bianh)

      (setq num(1+(atoi num)))

      (cond

      ((<num 10)(setq num(strcat "00"(itoa num))))

      ((<num 100)(setq num(strcat "0"(itoa num))))

      ((>=num 100)(setq num(itoa num))))

      (setq bianh(strcat zubie num))))))))

      4.3 輸出點(diǎn)、線表模塊部分代碼

      (while(<=(+ 1 i)(sslength sszhaodao));遍歷流向線上的管點(diǎn)組成的選擇集

      (if(setq en(ssname sszhaodao i))(progn(setq edsdb(assoc 10(entget en)))

      (setq x(rtos(-(+ xyd(/(Caddr edsdb)2))50)2 3));獲取圖塊的北坐標(biāo)X

      (setq y(rtos(-(+ yyd(/(Cadr edsdb)2))50)2 3));獲取圖塊的東坐標(biāo)Y

      (setq km(strcase(cdr(assoc 2(entget en)))));獲取圖塊名稱

      (if(setq endatabh(entget en '("gxbh")))

      (progn(setq endatabhsd(cdr(Cadr(assoc-3 endatabh))))

      (if(assoc 1000 endatabhsd)(setq bgdbh(cdr(assoc 1000 endatabhsd))));獲取管點(diǎn)編號

      (if(assoc 1040 endatabhsd)(setq bgdms(cdr(assoc 1040 endatabhsd))));獲取管點(diǎn)名稱

      (if(assoc 1070 endatabhsd)(setq bgyks(cdr(assoc 1070 endatabhsd))))));獲取共有孔數(shù)

      (if(setq endatakz(entget en '("gxkz")))(progn(setq endatakzsd(cdr(Cadr(assoc-3 endatakz))))

      (if(assoc 1000 endatakzsd)(setq bgdgj(cdr(assoc 1000 endatakzsd))));獲取上點(diǎn)管徑

      (if(assoc 1040 endatakzsd)(setq bdmgc(cdr(assoc 1040 endatakzsd))));獲取地面高程

      (if(assoc 1070 endatakzsd)(setq byyks(cdr(assoc 1070 endatakzsd))))));獲取已用孔數(shù)…………

      完成各變量的獲取后則輸出點(diǎn)、線表:

      (if(and(=tuceng "J")(=km "GC041"))

      (setq fushuwu "篦子")(setq fushuwu "檢修井"))

      (if(=km "GC133")(setq fushuwu "消火栓"))

      (if(=km "GC134")(setq fushuwu "閥門"))

      (if(=km "GC170")(setq fushuwu "化糞池"));根據(jù)圖塊名稱判斷出對應(yīng)的附屬物,然后開始輸出點(diǎn)表

      (princ bwydh f1);輸出外業(yè)點(diǎn)號(princ "," f1);輸出逗號(princ bgdbh f1);輸出管點(diǎn)編號(princ "," f1)(princ leixingdb f1);輸出管線類型(princ "," f1)

      (princ x f1);輸出北坐標(biāo)X(princ "," f1)

      (princ y f1);輸出東坐標(biāo)Y(princ "," f1);

      (princ bdmgc f1);輸出地面高程(princ "," f1)

      (if bgdjs(princ bgdjs f1)(princ bgdms f1));如果井深與埋深不一致則輸出井深(princ "," f1)(princ fushuwu f1);輸出附屬物類型(princ " " f1)

      輸出點(diǎn)表結(jié)束后以同樣的方式輸出線表,鑒于篇幅所限不再贅述。在輸出結(jié)束后,程序會提醒用戶是否直接打開輸出的點(diǎn)、線表文件。

      (setq kword(getkword " 是否打開文件 是(Y) 否(N):"))(if(=kword "Y")

      (progn(startapp " C:/Program Files/Microsoft Office/OFFICE11/Excel.exe" filedb);提示用戶打開點(diǎn)表

      (startapp"C:/Program Files/Microsoft Office/OFFICE11/Excel.exe" filexb )));提示用戶打開線表

      5 結(jié) 語

      通過該程序?qū)崿F(xiàn)了基于AutoCAD 平臺下管線點(diǎn)、線表的自動輸出,改變了傳統(tǒng)模式需要在AutoCAD 平臺完成圖形編輯后需要在Excel 中再次進(jìn)行管點(diǎn)特征信息錄入的生產(chǎn)模式。程序利用AutoCAD 擴(kuò)展數(shù)據(jù),使管點(diǎn)信息附著于圖塊中,可通用于所有的AutoCAD平臺。輸入、輸出信息可以根據(jù)需要定義,輸出格式可以多樣化,能夠很方便的移植和擴(kuò)展,在本單位的地下管線測量實(shí)際生產(chǎn)中不僅提高了工作效率,而且提高了準(zhǔn)確性,大大節(jié)約了工作時間。

      當(dāng)然由于缺乏數(shù)據(jù)庫的支持,本系統(tǒng)對于后期的管線數(shù)據(jù)管理方面還是要依賴于人工導(dǎo)入到數(shù)據(jù)庫中,在今后的工作中,如何通過屬性信息自動生成管線信息扯旗,如何解決同一平面內(nèi)管點(diǎn)重復(fù)編輯等方面應(yīng)加予探索,通過對程序繼續(xù)改進(jìn),實(shí)現(xiàn)更高程度的人工智能化。

      [1]馬雪萍.地下管線竣工測量中交叉問題的探討[J].城市勘測,2013(5):143~145.

      [2]任航科.LISP 語言在測繪作業(yè)中的應(yīng)用[J].城市勘測,2011(1):110~112.

      [3]朱虹.淺談AutoCAD 與一些常用軟件的結(jié)合運(yùn)用[J].科技轉(zhuǎn)讓集錦,2010(2).

      [4]CJJ61-2003/J271-2003.城市地下管線探測技術(shù)規(guī)程[S].

      [5]浮懷鵬,譚盧師,吳元碩.CAD 圖元擴(kuò)展數(shù)據(jù)[J].華北水利水電學(xué)院學(xué)報(bào),2010,31(3):74~75.

      [6]劉軍,湯永凈.城市地下管線探測中遺留問題的分析與處理[J].城市勘測,2013(3).

      [7]李潔,秦巖賓,解益辰等.CAD 環(huán)境下基于AutoLISP 語言的程序開發(fā)[J].測繪與空間地理信息,2013(9).

      猜你喜歡
      圖塊箭頭流向
      小溪?。×飨蜻h(yuǎn)方
      井岡教育(2020年6期)2020-12-14 03:04:42
      AutoCAD中圖塊命令的應(yīng)用分析
      優(yōu)化A算法搜索連連看圖塊配對和消除次序
      十大漲幅、換手、振副、資金流向
      流向逆轉(zhuǎn)的啟示
      箭頭指向何方
      茶壺難題
      秋天的流向(組詩)
      鴨綠江(2013年11期)2013-03-11 19:42:04
      基于AutoCAD的圖塊的查找/替換器的開發(fā)
      尋寶歷險(xiǎn)記(6)
      曲周县| 朝阳市| 蓬莱市| 敦化市| 晋城| 清原| 平山县| 柏乡县| 乌兰县| 静安区| 九龙坡区| 新化县| 鄯善县| 泰和县| 斗六市| 绿春县| 新源县| 平定县| 东阳市| 木里| 治县。| 灵川县| 大洼县| 双柏县| 陵川县| 米易县| 双柏县| 平阳县| 永和县| 石台县| 化德县| 涞源县| 永平县| 四会市| 惠安县| 湘乡市| 策勒县| 佛学| 太仓市| 石狮市| 杭州市|