擴展實體數據在給排水工程CAD中的應用

論文類別:工學論文 > 水利工程論文
論文作者: 未知
上傳時間:2005/8/13 10:43:00

【摘要】本文從擴展数據在實體中的存貯方式、擴展實體數據的插入和查詢以及應用擴展實體數據实現管配件的插入、圖形的刪除及修改等方面,介紹了應用擴展实體數據庫進行給排水工程CAD繪制的方法和技巧,并給出幾個通過實際工程驗證的實用小程序,提出工程設計人員在工程圖繪制過程中,自行編寫小程序可以擴充商業软件的功能,提高繪圖效率的結論。

1概述

在計算機迅速普及的今天,CAD已不再是新鮮名詞。尤其是在工程設計領域,手工畫圖已逐漸被CAD軟件所代替。在我國應用最廣泛、最普及的CAD工具是AutoCAD軟件包,該軟件包以其界面友好、使用方便、功能強大的特點,被广大工程設計人員所接受。在給水排水工程領域,由於各設計單位的設計標準和設計方法的不同,造成各軟件公司所開發的CAD軟件不能被設計單位所廣泛接受。尤其是軟件公司的软件開發人員,在我國大多是計算機应用比較熟練的非專業人員或實際工作經驗很少的專業技術人員,由於他们專業知識和工作經歷的限制,造成所開發的專業軟件存在這樣或那樣的不足,從而限制了專業軟件的實用性。因此,盡管市場上的商業專用軟件很多,但能夠切實滿足工程設計需要的軟件並不多,甚至許多單位购置的軟件根本就不能发揮其應有的作用。通過多年的CAD軟件開發經驗,作者認為,工程設計人員掌握一定的CAD技術處理技巧,可以在直接應用AutoCAD软件或其它商業軟件進行工程設计的同時,自行編寫一些实用的小程序,不但可以提高工程設計效率,而且還可以通過日積月累,使所編寫的小程序在本單位内應用。

在給水排水工程領域,最常處理的圖形就是管線。管線是连接水源到水廠、水廠到用戶、各構築物間的有向圖,一根管線的變動,必然引起其它设施的改變。同樣,各構築物采用平、立、剖三視圖進行工程圖的表達,一個視圖的改變,也引起其它視圖相應的改變。以前我們都是通過單個圖形分別修改的方法來實現,不但效率低,而且容易產生錯誤。本人通過在WDOC軟件開發中的應用,認為擴展實體數據庫的應用,可以有效地解決這些问題,並且能夠提高繪圖效率。

2擴展實体數據的插入與查詢

2.1擴展數据在實體中的存貯方式

假設一條管線,起点號是8,坐標是(5.05.00.0),終點號是18,坐標是(10.010.00.0),管段號是1,這条管線的圖形數據庫為:

((-1<Entityname:1f92f48>)(0″LINE″)(5.″519″)(100.″AcDbEntity″)(67.0)(8.″0″)(100.″AcDbLine″)(105.05.00.0)(1110.010.00.0)(2100.00.01.0)(-3(″PIPE1″(1002.″{″)(1000.″8,18″)(1002.″}″)))

其中擴展數据為:(-3(″PIPEI″(1002.″{″)(1000.″8,18″)(1002.″}″))),″PIPEI″表示以PIPE为前導的管線,管線號為1;″8,18″表示管線的起點號為8,終點號為18。

擴展實體數據內容在实體數據庫中是以-3碼為前導的一個表項。在一個實體中可以加入擴展實體數据的大小為16383字節。用于描述非圖形數據的擴展實体數據庫有關組碼為:

組碼 意義
1000
1001
1002
1003
1004
1005
1010
1011
1012
1013
1040
1041
1042
1070
1071 ASCII碼字串,長度小於255个字符位 免費論文下載中心 http://www.hi138.com
已登记的應用名,長度小於31個字符位
控制字串
層名
長字節,長度小於127字符
實體索引名
点位
3D地坪空間位置
3D地坪空間位移
3D地坪空間方向
浮点數
距離值
比例系數;
16位整數
32位整數

2.2擴展實體數據的插入

使用擴展实體數據,必須用AutoLISP程序實施對實體數據庫的訪問和修改。首先要自行定義擴展實體數據庫信息表,然後再加入到指定的實體中。此處只是給出擴展實体數據庫插入的AutoLISP程序主要內容,有兴趣的讀者可以自行加入所需要的信息表,以把這一程序的功能進行擴展。

對最後畫的一個實體加入擴展的實體數據表的AutoLISP程序為:

(defunexadd(nametyp/sselnel);name:扩展實體數據登記名,typ:擴展實體數據內容。

(setqss(cons-3(list(consname(cons(cons1002″{″)(cons(cons1000typ)(list(cons1002″}″)))))));定義扩展實體數據庫el(entget(entlast));提取最近畫的一個實体的圖形數據庫

nel(consssel);把擴展實體數據信息加入到實體數據庫中)(regappname)(entmodnel))

如果对上述函數修改一下,可適用於對任意所選擇實體加入扩展實體數據信息:

(defunexaddl(nametyped/sselnel);ed:所選擇实體,把上述程序的el(entget(entlast))改為el(entgeted)即可。)

利用上述二個小程序,就可以實現對所畫的最後一個實體或任一所選擇的圖形實體加入擴展實體數據,其特点是比用屬性建立非圖形信息的速度更快、更靈活、更小的數据體積,而且可以進行圖形索引。

2.3擴展實体數據的查詢

在對圖形實體插入擴展實體數據後,还要對所插入數據信息進行查詢、修改和應用。此處只給出擴展實體數據查詢和数據提取的AutoLISP程序。

查找扩展數據登記名的程序:(defunexname(ed/cxl)(setqcxl(cdr(assoc-3(entgeted`(″*″)))))(ifcxl(car(nth0cxl))))

本程序應用,就可以对任何一個所選擇的实體,找出它的擴展實體數據登記名。如管段號、節點號等。

對任意選择實體,提取擴展實體數據的程序:

(defunexsub(edname/sstypnamecxlcncalctcbl)(setqtyp(cons1"不是所選择實體");如果選擇实體與所指定的擴展數據名不一致,則提示錯誤。

name(strcasename)cxl(cdr(assoc-3(entgeted`(″*″)))))(ifcxl(progn(setqcn0)(while(setqcal(nthcncxl))

(if(=name(carcal))

(progn(setqct0cal(cdrcal))

(while(setqcbl(nthctcal))

(if(=(carcbl)1000)(setqtypcblct10000cn10000))

(setqct(+ct1)))))(setqcn(+cn1)))))(cdrtyp))

上述兩個程序的應用,就可以實現對所繪實体的擴展數據信息進行提取。 免費论文下載中心 http://www.hi138.com

我們知道,AutoLISP是嵌入AutoCAD中的功能擴展程序,如同使用AutoCAD函數一樣,易學易用。应用AutoCAD進行工程設計的技術人員,應該學會用AutoLISP編寫簡單的程序,以方便工程图形的繪制。從上述的程序中也可以看出AutoLISP編寫的完成某一功能的程序,小到一至二句,多到十幾句,即可实現所要完成的工作。

3擴展實体數據在給排水CAD中的應用

3.1管配件插入:

例如一條已經畫好的管線,管徑為DN100,使插入的管配件也具有DN100的特性。假設管配件是閥門,為已經做好的圖塊。我們可以在插入的過程中不需要關心管徑是多少,直接插入閥門信息,從而提高绘圖效率。應用擴展實體數據庫的程序為:

(defunc:inval(/sspededanametypp1p2ang)

setqss(entsel)p(car(cdrss))ed(carss)eda(entgeted)

name(exnameed);提取擴展實體數據的名稱

typ(exsubedname);提取擴展實體數据信息,即管徑信息

p1(cdr(assoc10eda);管線的起點坐標

p2(cdr(assoc11eda);管線的終點坐標

ang(anglep1p2);管線角度



(command″break″p″F″(polarpangBL)(polarp(+piang)BL);斷開线的距離

″insert″″阀門″p(*2BL)″″ang);插入閥門(exaddnametyp);對插入的閥門加入擴展實體數據,即管徑。



這一小程序在加載以后,如同AutoCAD函数一樣,只要在命令狀態下運行inval,系統提示选擇實體時,在插入阀門的位置上點取管线,就會自動把管線先斷開,再插入閥門,並且所插入的閥门具有DN100的特牲。

3.2管线刪除

對於上面所插入閥門的管線,由於阀門的插入而變為二條線,三個實體(二條線加一個閥門),如果由於各種原因需要刪除,按照AutoCAD命令,則需要分別對這三個實體加以刪除。對於工程圖,由於圖形復雜,经常會產生誤操作或漏操作的问題,給工程設計人员帶來許多困難。而擴展實體数據庫的應用,可以為工程图的繪制帶來許多方便。

(defunc:deled()

(setqss(entsel)ed(carss)s(ssget"x")n0name(exnameed)typ(exsubedname))

(while(setqes(ssnamens))(setqname1(exnamees))

(if(=namename1)(progn(setqtyp1

(exsubesname))(if(=typ1typ)(entdeles))))

(setqn(+n1))))

這一小程序在加載後,運行deled,按照提示選擇要刪除的實体,即可刪除與這一實體具有相同擴展數據的所有實體,快速而準確。

3.3擴展實體數据修改

給水管網圖是由管線、節點、水泵、水塔、閥門等組成,所有設施之間並不是相互獨立,而是有機的聯系在一起。某一設施的修改,必然带動其它與之有關聯的設施和變動。例如,對於給水管網水力計算成果图,當節點號修改時,要影響與之相連的所有管線的起止節點號的變動、管線上水流方向擴展實體数據的變動以及節點標註信息的變動。一般情況下,一個節点號的變化,要引起幾個甚至幾十個圖形實體的變化。采用擴展實體數据繪圖,這一變化可以通過程序方便地實現。此處只給出修改一個擴展實體数據的小程序,讀者可以擴充這一小程序,以通過遍歷整個圖形數據庫的方式,分別查找要修改的實體,並加以修改。 轉贴於 免費論文下載中心 http://www.hi138.com

(defunchent(edstyp/sbcxlss);

(setqsb(entgeteds′(″*″))cxl(cdr(assoc-3sb))

ss(cons(cons1002″{″)(cons(cons1000typ)(list(cons1002"}"))))

ss(list(cons(exnameeds)ss)))(netmod(subst(cons-3ss))

(cons-0cxl)sb))(entupdeds))

從上述介紹可以看出,應用扩展實體數據,可以彌補僅以AutoCAD繪圖函数繪圖的不足,從而使所繪的工程圖有速度更快、更準确的特點。

4結论

以上僅是作者在給水管網優化設計計算與非穩定狀態水力模擬軟件-WDOC開發過程中采用的幾個小技巧,在应用中發現有極大的實用價值,不僅提高了繪圖的速度,而且還可使互不相關的實體之间建立相互聯系。在繪圖過程中,可以實現對一個實體的繪制及修改,自動實現與之相關的其它实體的繪制及修改。工程设計人員如果是有心人,可以在完成實際工程的過程中,對一些圖形復雜、關聯性強的實體,自行通過編寫幾句或十幾句AutoLISP程序來加以实現,日積月累,把編寫的小程序集成起來,不但可以解决商業軟件與工程實用化相脫節的矛盾,而且還可以提高制圖效率。

作者在給水排水工程CAD軟件的開發和使用中,通過多年的積累,也編寫了一些小程序,相當實用。有興趣的讀者可以與作者联系,相互交流,擴大實用小程序的應用範圍 .扩展实体数据在给排水工程CAD中的应用 转貼於 免費論文下载中心 http://www.hi138.com
下载论文

論文《擴展實體數據在給排水工程CAD中的應用》其它版本

水利工程論文服務

網站聲明 | 聯系我們 | 網站地圖 | 論文下載地址 | 代寫論文 | 作者搜索 | 英文版 | 手機版 CopyRight@2008 - 2017 免費論文下載中心 京ICP备17062730号