畢業(yè)論文——數(shù)字地圖質(zhì)量管理研究_第1頁(yè)
已閱讀1頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p>  AbstractII</p><p><b>  第一章 緒論1</b></p><p>  1.1論文的研究目的1</p><p&g

2、t;  1.2本文的結(jié)構(gòu)安排1</p><p>  第二章 數(shù)字地圖質(zhì)量管理系統(tǒng)2</p><p>  2.1 數(shù)字地圖的概念和應(yīng)用2</p><p>  2.2 數(shù)字地圖質(zhì)量管理系統(tǒng)3</p><p>  2.2.1數(shù)字地圖數(shù)據(jù)的檢查驗(yàn)收3</p><p>  2.2.2數(shù)字地圖質(zhì)量檢查的主要內(nèi)容4&

3、lt;/p><p>  2.2.3系統(tǒng)設(shè)計(jì)目標(biāo)5</p><p>  2.2.4系統(tǒng)設(shè)計(jì)原則5</p><p>  第三章 VBA FOR AUTOCAD開發(fā)技術(shù)7</p><p>  3.1 CAD的二次開發(fā)環(huán)境7</p><p>  3.2 VBA FOR AUTOCAD 的主要特點(diǎn)和VB的主要區(qū)別8&l

4、t;/p><p>  3.3 VBA的基礎(chǔ)知識(shí)及編程基礎(chǔ)9</p><p>  3.3.1用VBA開發(fā)AutoCAD所涉及的一些概念9</p><p>  3.3.2 VBA編程基礎(chǔ)11</p><p>  第四章 基于VBA FOR AUTOCAD開發(fā)技術(shù)的面交叉檢查功能開發(fā)13</p><p>  4.1算

5、法實(shí)現(xiàn)13</p><p>  4.2程序流程圖14</p><p>  4.3程序原代碼14</p><p>  4.4程序運(yùn)行界面18</p><p><b>  第五章 小結(jié)20</b></p><p><b>  致 謝21</b></p>

6、<p><b>  參考文獻(xiàn)22</b></p><p><b>  附錄23</b></p><p>  附錄一.模塊一(加載菜單程序原代碼)23</p><p>  附錄二.模塊二(窗體顯示程序原代碼)24</p><p><b>  摘 要</b>&

7、lt;/p><p>  本文在對(duì)數(shù)字地圖質(zhì)量管理系統(tǒng)的主要內(nèi)容、設(shè)計(jì)原則和設(shè)計(jì)目的進(jìn)行討論的基礎(chǔ)上,采取利用VBA對(duì)AUTO CAD 進(jìn)行二次開發(fā)的方法進(jìn)行數(shù)字地圖質(zhì)量管理。文章分析了AUTO CAD 的二次開發(fā)環(huán)境,VBA FOR AUTOCAD 的主要特點(diǎn)和VB的主要區(qū)別;重點(diǎn)研究了數(shù)字地圖質(zhì)量管理的一個(gè)模塊即面交叉問題的檢查的實(shí)現(xiàn),并通過例子驗(yàn)證利用該模塊能夠檢查出在同一層中是否有交叉區(qū)域,并且在圖上的相應(yīng)位置

8、以圓的形式顯示出來,以便進(jìn)行修改。</p><p>  關(guān)鍵字:數(shù)字地圖質(zhì)量管理 面交叉 VBA</p><p><b>  Abstract</b></p><p>  This article to the digital map quality control system's primary coverage, the prin

9、ciple of design and the design goal carries on discussion's foundation, adopts carries on the re-development using VBA to AUTO CAD the methods to carry on the digital map quality control. The article has analyzed the

10、 AUTO CAD re-development environment, the VBA FOR AUTOCAD main feature and the VB main difference; Studied a digital map quality control module namely to deliver in person the fork question with emphas</p><p&g

11、t;  Key words Digital map quality control Delivers in person the fork VBA</p><p><b>  第一章 緒論</b></p><p>  1.1論文的研究目的</p><p>  隨著AUTO CAD和GIS 在各行各業(yè)的廣泛應(yīng)用,目前,數(shù)字地圖已成為測(cè)繪保障

12、部門的主要測(cè)繪產(chǎn)品,規(guī)模、體制都在不斷擴(kuò)大。各測(cè)繪單位在大量生產(chǎn)數(shù)字地圖產(chǎn)品的同時(shí),出現(xiàn)了大量生產(chǎn)數(shù)字產(chǎn)品和數(shù)字產(chǎn)品質(zhì)量控制這對(duì)矛盾。數(shù)字地圖看不見、摸不著,這就給模擬地圖查圖的老辦法造成了很大困難,如:單一從繪圖輸出的樣圖上查不出要素的屬性,也看不見拓?fù)鋽?shù)據(jù)是否形成等。所以,如何針對(duì)這一對(duì)矛盾,促進(jìn)數(shù)字地圖生產(chǎn)的發(fā)展,生產(chǎn)出高質(zhì)量、高精度的數(shù)字產(chǎn)品是我們亟待解決的問題。</p><p>  我們感到要解決這一問

13、題,就必須立足現(xiàn)有設(shè)備,研制開發(fā)能夠有一定自動(dòng)化程度的數(shù)字地圖質(zhì)量檢查軟件,用計(jì)算機(jī)代替人工查圖.</p><p>  本文從這一目的出發(fā),分析了數(shù)字地圖質(zhì)量管理的研究現(xiàn)狀,討論了數(shù)字地圖質(zhì)量管理的要求、內(nèi)容等,并開發(fā)了面交叉檢查的模塊。</p><p>  1.2本文的結(jié)構(gòu)安排</p><p>  考慮到目前數(shù)字地圖的迅速發(fā)展和數(shù)字地圖質(zhì)量管理問題層出不窮的情況,

14、論文對(duì)數(shù)字地圖質(zhì)量管理系統(tǒng)進(jìn)行了比較全面的分析和討論。</p><p>  論文的第二章著重討論了數(shù)字地圖質(zhì)量管理系統(tǒng)的主要內(nèi)容、設(shè)計(jì)目標(biāo)和設(shè)計(jì)原則。第三章則詳細(xì)分析了VBA:分析了CAD的二次開發(fā)環(huán)境,并重點(diǎn)陳述了VBA的基礎(chǔ)知識(shí)及編程基礎(chǔ)。第四章是文章的核心部分,部分理論上的構(gòu)思在這一部分得以實(shí)現(xiàn),這一部分詳細(xì)的從程序算法,程序流程,原代碼和運(yùn)行結(jié)果四個(gè)方面展示了程序?qū)崿F(xiàn)的理論基礎(chǔ)和實(shí)際的運(yùn)行效果。</

15、p><p>  第二章 數(shù)字地圖質(zhì)量管理系統(tǒng)</p><p>  2.1 數(shù)字地圖的概念和應(yīng)用</p><p>  長(zhǎng)期以來,地圖作為了解客觀地理環(huán)境的手段,一直是紙質(zhì)地圖的形式廣泛應(yīng)用著.它清晰直觀,易讀易懂,在國(guó)民經(jīng)濟(jì)建設(shè)中發(fā)揮著重要的作用。隨著科學(xué)技術(shù)的發(fā)展,出現(xiàn)了一種新型的地圖,數(shù)字地圖。</p><p>  數(shù)字地圖是用數(shù)字形式表示

16、地圖信息,獨(dú)立于固定的符號(hào)系統(tǒng),以數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)為信息傳遞語(yǔ)言,不強(qiáng)調(diào)信息的符號(hào)化,注重計(jì)算機(jī)對(duì)信息的理解和識(shí)別,主要在計(jì)算機(jī)環(huán)境中使用,在計(jì)算機(jī)中的表示和存儲(chǔ)形式主要是一組數(shù)據(jù),由坐標(biāo)位置,屬性編碼和一定的數(shù)據(jù)值所組成,在計(jì)算機(jī)屏幕上和輸出設(shè)備上表現(xiàn)為色彩鮮艷,符號(hào)化的地圖(如圖1)。</p><p><b>  圖1 數(shù)字地圖</b></p><p>  目前,數(shù)

17、字地圖廣泛應(yīng)用與國(guó)民建設(shè)的各個(gè)方面,在測(cè)繪行業(yè),數(shù)字地圖提供了基礎(chǔ)資料,主要體現(xiàn)在城市基礎(chǔ)地理信息系統(tǒng)建設(shè)上,數(shù)字化測(cè)繪技術(shù)的迅速發(fā)展,使得城市規(guī)劃的測(cè)繪部門獲得了整個(gè)城市的大部分基礎(chǔ)數(shù)字地圖[1]。相對(duì)于紙質(zhì)地圖這些地圖更加易于保存,并且也更具實(shí)效性。</p><p>  2.2 數(shù)字地圖質(zhì)量管理系統(tǒng)</p><p>  系統(tǒng)的作用是為了使數(shù)字地圖質(zhì)量合理性、完備性、可靠性、簡(jiǎn)便性、自動(dòng)

18、性,同時(shí)也使數(shù)據(jù)在精度上得到提高。</p><p><b>  它的主要功能有:</b></p><p>  1)分層與編碼檢查—檢查各層編碼是否正確、有無漏層;各層間是否重復(fù)要素 公共邊是否拷貝到各層中。 2) 圖形質(zhì)量檢查 檢查線劃的光滑、粗細(xì)、清晰情況是否滿足需要;要素間的關(guān)系是否合理,有無地理性矛盾;符號(hào)配置、圖面整飾、注記是否正確無誤。

19、 3) 屬性及拓?fù)潢P(guān)系檢查 逐層檢查每一個(gè)屬性表,檢查屬性項(xiàng)的名稱、類型、長(zhǎng)度、順序是否符合規(guī)定要求,有無遺漏:檢查屬性值是否正確。檢查每個(gè)層是否建立了相應(yīng)的拓樸關(guān)系。 4) 方向問題檢查 檢查有向點(diǎn)、有向線的方向是否正確。 5) 面狀要素檢查</p><p>  2.2.1數(shù)字地圖數(shù)據(jù)的檢查驗(yàn)收</p><p>  數(shù)字地圖檢查驗(yàn)收的內(nèi)容有形式檢查和內(nèi)容檢查[1

20、0];</p><p>  1、形式檢查:就是對(duì)作業(yè)用圖、檢查繪圖、數(shù)字化數(shù)據(jù)以及各種文檔是否完整、齊全,其格式是否正確等的檢查。</p><p>  2、內(nèi)容檢查:就是對(duì)數(shù)據(jù)進(jìn)行深層的檢查。對(duì)于一幅全要素?cái)?shù)字地圖來講要對(duì)以下十三個(gè)要素層進(jìn)行檢查,測(cè)量控制點(diǎn)、獨(dú)立地物、居民地、交通、管線與垣柵、境界與政區(qū)、水系、地貌、等高線、土質(zhì)、植被、地名、圖外信息等,具體內(nèi)容分以下五個(gè)方面。</

21、p><p><b>  (1)位置精度</b></p><p>  ①數(shù)字化的圖廓點(diǎn)、測(cè)量控制點(diǎn)與其相應(yīng)的理論值或?qū)崪y(cè)值的符合程度。</p><p> ?、跀?shù)字化地圖各要素的幾何位置與數(shù)字化底圖上相應(yīng)要素的符合程度。</p><p><b>  (2)屬性精度</b></p><p&

22、gt;  屬性數(shù)據(jù)是否正確表達(dá)了數(shù)字化底圖要素的分類、分級(jí)等質(zhì)量及數(shù)量特征。</p><p><b>  (3)數(shù)據(jù)的完整性</b></p><p>  數(shù)字化地圖的內(nèi)容是否完整、有無遺漏、有無重復(fù)。</p><p>  (4)數(shù)據(jù)邏輯的一致性</p><p>  同一要素層或不同要素層之間、數(shù)字化目標(biāo)的相關(guān)位置關(guān)系是否

23、正確;重疊要素幾何位置是否一致其屬性描述是否正確;相鄰圖幅的接邊目標(biāo),幾何上是否自然連接,屬性描述是否一致。</p><p>  (5)拓?fù)潢P(guān)系正確性</p><p>  拓?fù)潢P(guān)系中的同名結(jié)點(diǎn)是否匹配,弧段無不必要的假結(jié)點(diǎn);面域是否閉合,有無內(nèi)部唯一標(biāo)識(shí);拓?fù)鋽?shù)據(jù)是否正確表達(dá)目標(biāo)之間的鄰接連通、包含關(guān)系。</p><p>  2.2.2數(shù)字地圖質(zhì)量檢查的主要內(nèi)容&l

24、t;/p><p>  (1)各要素層的交互接邊</p><p>  在實(shí)際生產(chǎn)中出現(xiàn)問題最多的就是相鄰圖幅的接邊問題,只能利用檢查繪圖互相接邊來檢查,如存在沒接邊的問題時(shí),就只能用采集軟件打開一幅圖數(shù)據(jù),在屏幕上大致地編輯,而實(shí)際接邊差的數(shù)值,還需要再接邊,編輯、繪圖輸出,對(duì)照接邊反復(fù)多次,既費(fèi)時(shí)又費(fèi)力,同時(shí)也白白消耗了不少紙張。</p><p>  基于此,我們?cè)谘兄?/p>

25、軟件時(shí),應(yīng)重點(diǎn)解決要素接邊問題,并應(yīng)設(shè)法對(duì)交通、水系、境界與政區(qū)、植被、等高線、管線與垣柵、居民地、土質(zhì)、地貌等九個(gè)要素層的接邊工作,利用各要素層的地理坐標(biāo)經(jīng)緯度直接在屏幕上進(jìn)行上、下、左、右四個(gè)方向的自動(dòng)接邊,對(duì)幾何位置不準(zhǔn)、屬性錯(cuò)誤的數(shù)據(jù)利用交互式修改或在文件上標(biāo)注出來。該系統(tǒng)是對(duì)數(shù)據(jù)進(jìn)行直接操作,并提供了方便快捷的檢查和編輯修改功能,對(duì)點(diǎn)誤差為零,避免了過去利用檢查繪圖進(jìn)行接邊誤差較大的現(xiàn)象發(fā)生。</p><p

26、>  (2)拓?fù)浣Y(jié)構(gòu)化檢查</p><p>  數(shù)字地圖的優(yōu)點(diǎn)只有按拓?fù)浣Y(jié)構(gòu)組織起來,才能有效地予以利用。作為地圖各要素的抽象代表的點(diǎn)、線、面具備拓?fù)湫再|(zhì),所以拓?fù)潢P(guān)系就是點(diǎn)、線,面元素之間的關(guān)系。地圖上主要的拓?fù)潢P(guān)系有關(guān)聯(lián)關(guān)系,臨接關(guān)系和包含關(guān)系</p><p>  關(guān)聯(lián)關(guān)系:指存在于空間圖形的不同類元素之間的關(guān)系</p><p>  鄰接關(guān)系:指存在于空間

27、圖形的同類元素之間的關(guān)系。</p><p>  包含關(guān)系:指存在于空間圖形的同類但不同級(jí)的元素之間的關(guān)系。分為簡(jiǎn)單包含、多層包含和等價(jià)包含。</p><p>  數(shù)據(jù)拓?fù)浣Y(jié)構(gòu)的檢查工作是比較復(fù)雜的,本系統(tǒng)對(duì)拓?fù)浣Y(jié)構(gòu)化檢查主要包括面拓?fù)浜途€拓?fù)涞臋z查,我們對(duì)居民地、交通、水系、境界與政區(qū)、地貌、土質(zhì)、植被等七個(gè)要素層中的面、線拓?fù)溥M(jìn)行編程檢查。重點(diǎn)在同名結(jié)點(diǎn)是否匹配,是否有不必要的假結(jié)點(diǎn),面

28、域是否有唯一的標(biāo)識(shí),是否閉合等幾個(gè)方面進(jìn)行檢查[4]。</p><p>  (3)要素屬性的檢查</p><p>  對(duì)要素屬性的檢查是針對(duì)任一要素層的主碼、識(shí)別碼、描述碼和參數(shù)碼等的檢查。同時(shí)對(duì)那些主碼、識(shí)別碼、描述碼之間具有唯一推導(dǎo)關(guān)系的要素,參數(shù)碼和領(lǐng)碼等進(jìn)行自動(dòng)檢查,如果出現(xiàn)其它碼即認(rèn)為非法,在錯(cuò)誤記錄文件中標(biāo)出。比如:在數(shù)字地圖數(shù)據(jù)中有四種參數(shù)碼,寬度參數(shù)、相對(duì)高參數(shù)、長(zhǎng)度參數(shù)、

29、其它參數(shù)。領(lǐng)碼依次為工00, 200, 300, 400,如果在其它參數(shù)中輸入高程值后會(huì)自動(dòng)形成400領(lǐng)碼,如將其輸在相對(duì)高參數(shù)中形成的領(lǐng)碼為300,這就說明高程值的輸入項(xiàng)不正確,應(yīng)在其它參數(shù)中輸入,形成領(lǐng)碼為400的才正確。</p><p>  (4)要素坐標(biāo)位置值域的檢查</p><p>  值域的檢查主要是對(duì)作業(yè)員在采集數(shù)據(jù)時(shí),一是在定位精度不符合要求時(shí),強(qiáng)行進(jìn)入采集軟件中進(jìn)行采集數(shù)

30、據(jù),這時(shí)形成的數(shù)據(jù)不僅位置精度不夠,同時(shí)有數(shù)據(jù)超出范圍之外。二是作業(yè)員在采集數(shù)據(jù)時(shí)將點(diǎn)采在圖幅范圍外。三是在數(shù)據(jù)編輯過程中,將數(shù)據(jù)點(diǎn)位移動(dòng),超出范圍。</p><p>  可以采用入庫(kù)的地理坐標(biāo)數(shù)據(jù)與圖幅范圍的地理坐標(biāo)值作比較,對(duì)超出范圍的數(shù)據(jù)自動(dòng)修改,并將錯(cuò)誤記錄在文件中。如1: 25萬數(shù)字地圖的圖幅范圍:縱坐標(biāo)Ymin=O,Ymax=14400,橫坐Xmin=O,Xmax=21600,以秒為單位,圖幅數(shù)據(jù)和其

31、比較,X<0或X>Xmax和Y<0或Y>Ymax的數(shù)值即為超限[9]。</p><p>  (5)等高線要素層的檢查</p><p>  作業(yè)員在作業(yè)過程中重點(diǎn)是高程值的檢查,出現(xiàn)錯(cuò)誤最多的也是高程值賦錯(cuò)。而且利用繪圖檢查也存在弊病,等高線稀疏的圖幅還可以,如果山勢(shì)比較陡,等高線稠密,繪出圖后的等高線幾乎分不清楚,所以也無法套片查圖。</p><

32、p>  編程解決的辦法可以是將編輯賦值后的等高線圖形文件疊加在原始掃描圖像文件上,檢查是否有變形、移位、丟漏等錯(cuò)誤。</p><p>  2.2.3系統(tǒng)設(shè)計(jì)目標(biāo)</p><p>  主要目標(biāo)是通過該系統(tǒng)使數(shù)字地圖的數(shù)據(jù)更具獨(dú)立性、合理性、完備性、可靠性、簡(jiǎn)便性、自動(dòng)性,同時(shí)也在數(shù)據(jù)精度上得到提高,從以下幾個(gè)方面進(jìn)行:</p><p>  1)交通、水系、境界與

33、政區(qū)、植被、等高線、管線與垣柵、居民地、土質(zhì)、地貌等九個(gè)要素層的接邊情況檢查及交互式修改。</p><p>  2)交通、水系、境界與政區(qū)、植被、居民地、土質(zhì)、地貌、圖外信息等要素層的拓?fù)浣Y(jié)構(gòu)化檢查及修改。</p><p>  3)測(cè)量控制點(diǎn)、獨(dú)立地物、居民地、交通、水系、境界與政區(qū)、管線與垣柵、地貌、土質(zhì)、植被、等高線、地名等要素層的坐標(biāo)數(shù)據(jù)值域檢查及修改。</p><

34、;p>  4)所有要素層要素屬性的檢查及修改。</p><p>  5)等高線要素層的高程值檢查及修改。</p><p>  最終達(dá)到數(shù)字地圖質(zhì)量管理的要求,從而大大提高了效率和減輕了以往繁雜的工作量。</p><p>  2.2.4系統(tǒng)設(shè)計(jì)原則</p><p><b>  1)獨(dú)立性</b></p>

35、<p>  系統(tǒng)各模塊相互獨(dú)立,各自具備一套完整齊備的檢查功能、處理功能。而且功能相互獨(dú)立,針對(duì)不同的要素層或要素進(jìn)行不同項(xiàng)目的檢查和處理,重復(fù)度小。</p><p><b>  2)合理性</b></p><p>  系統(tǒng)的功能模塊的劃分要以系統(tǒng)的總體設(shè)計(jì)目標(biāo)相符,以系統(tǒng)的設(shè)計(jì)思想為指導(dǎo),合理地進(jìn)行集成和區(qū)分,功能特點(diǎn)清楚邏輯清晰,設(shè)計(jì)合理。</p

36、><p><b>  3)完備性</b></p><p>  根據(jù)系統(tǒng)的應(yīng)用目的要求,功能齊全,適用各種應(yīng)用目的和范圍。</p><p><b>  4)可靠性</b></p><p>  各功能模塊的穩(wěn)定性好,在檢查操作過程中可靠實(shí)用,數(shù)據(jù)處理方法簡(jiǎn)便、科學(xué)、實(shí)用。</p><p&

37、gt;<b>  5)簡(jiǎn)便性</b></p><p>  各功能模塊的操作方便、簡(jiǎn)單、明了、宜于學(xué)習(xí)和使用,容易掌握。</p><p><b>  6)自動(dòng)性</b></p><p>  各功能模塊在檢查數(shù)據(jù)過程中,自動(dòng)化程度較高,部分要素在檢查出錯(cuò)后自動(dòng)修改,數(shù)據(jù)修改后自動(dòng)回存更新。</p><p&g

38、t;<b>  7)高精度性</b></p><p>  檢查修改后的數(shù)據(jù)精度高,符合數(shù)字地圖數(shù)據(jù)采集規(guī)范和標(biāo)準(zhǔn)的要求。</p><p>  第三章 VBA FOR AUTOCAD開發(fā)技術(shù)</p><p>  3.1 CAD的二次開發(fā)環(huán)境</p><p>  AutoCAD的主要特色在于其支持用戶的二次開發(fā),即用戶可以

39、將它設(shè)計(jì)和擴(kuò)展成自己的專用軟件。</p><p>  AutoCAD 2000面市以來,其開發(fā)途徑更加廣闊。除了使用傳統(tǒng)的AutoLISP及基于C語(yǔ)言的ObjectARX等開發(fā)工具外,用戶還可以使用Visual Basic、AutoCAD VBA 、Visual LISP及J++集成開發(fā)環(huán)境來開發(fā)定制AutoCAD,特別是AutoCAD 2000已經(jīng)將AutoCAD VBA 、Visual LISP集成在系統(tǒng)的內(nèi)

40、部,用戶使用更加方便。</p><p>  AutoLISP是AutoCAD內(nèi)嵌的一種解釋語(yǔ)言。它是一種很好的交互式語(yǔ)言,很適合于CAD這類交互性很強(qiáng)的應(yīng)用軟件。LISP語(yǔ)言的特點(diǎn)是程序和數(shù)據(jù)都采用符號(hào)表達(dá)式的形式,即一個(gè)LISP程序可以把另一個(gè)LISP程序作為它的數(shù)據(jù)進(jìn)行處理。因此使用LISP語(yǔ)言編程十分靈活,看起來,是一個(gè)一個(gè)的函數(shù)調(diào)用。利用Auto LISP開發(fā)AutoCAD的一個(gè)典型應(yīng)用是實(shí)現(xiàn)參數(shù)化繪圖的

41、程序設(shè)計(jì)。利用參數(shù)化繪圖方法可以在較短的時(shí)間里快速、高質(zhì)量地完成多方案對(duì)比設(shè)計(jì),也可建立各種零部件的圖形庫(kù),給出一些必要的參數(shù)即可直接繪出圖形,由此可見Auto LISP的強(qiáng)大功能之所在[6]。</p><p>  但是,隨著計(jì)算機(jī)技術(shù)的發(fā)展,AutoCAD編程更加復(fù)雜,代碼越來越龐大,AutoLISP的缺點(diǎn)亦愈未愈明顯。主要表現(xiàn)是:功能單一,綜合處理能力差;解釋執(zhí)行,程序運(yùn)行速度慢;缺乏很好的保護(hù)機(jī)制,軟件質(zhì)量

42、不易保證。</p><p>  ADS (AutoCAD C語(yǔ)言開發(fā)環(huán)境)是AutoCAD R11開始支持的一種基于C語(yǔ)言的靈活的開發(fā)環(huán)境。ADS程序的隱藏錯(cuò)誤往往導(dǎo)致AutoCAD,乃至操作系統(tǒng)的崩潰;要編譯才能運(yùn)行,不易見到代碼的效果;同樣功能C語(yǔ)言的ADS程序一般比AutoLISP程序的源代碼要長(zhǎng)不少,比較繁冗。</p><p>  ARX (AutoCAD運(yùn)行時(shí)間擴(kuò)展)是Auto

43、CAD R13之后推出的一個(gè)全新的面向?qū)ο蟮拈_發(fā)環(huán)境,也是AutoCAD第一次直接提供面向?qū)ο蟮亩伍_發(fā)工具??梢哉fAutoLISP著眼于應(yīng)用程序的交互性,ADS C/C++著眼于應(yīng)用程序的綜合性,而ARX則著眼于應(yīng)用程序的智能性。</p><p>  然而,ARX應(yīng)用程序比ADS程序具備更大的危險(xiǎn)性和破壞性。ARX程序設(shè)計(jì)比ADS要復(fù)雜得多。ARX程序設(shè)計(jì)的錯(cuò)誤,經(jīng)常導(dǎo)致AutoCAD崩潰,甚至操作系統(tǒng)的崩潰

44、。程序員需要有很高的素質(zhì),才能編制好ARX應(yīng)用程序。</p><p>  Vlsual LISP是AutoLISP的換代產(chǎn)品,已經(jīng)集成在AutoCAD 2000之中。它與AutoLISP完全兼容,并提供它所有的功能,同時(shí)它能訪問新的多文檔設(shè)計(jì)環(huán)境。COM/ActiveX用戶界面、事件響應(yīng)器等。Visual LISP同時(shí)提供了新的編程環(huán)境。該環(huán)境提供括號(hào)匹配、跟蹤調(diào)試、源代碼和語(yǔ)法檢查等工具,方便了創(chuàng)建和調(diào)試LI

45、SP程序[7]。</p><p>  用戶和開發(fā)者可以充分利用完全集成在AutoCAD內(nèi)部的LISP開發(fā)環(huán)境。作為一個(gè)完整的用戶化開發(fā)環(huán)境,Visual LISP可以迅速而方便地建立自己的高效解決方案。</p><p>  AutoCAD 2000包含了VBA (Microsoft Visual Basic for Applications)應(yīng)用程序開發(fā)應(yīng)用語(yǔ)言。VBA在集成開發(fā)

46、環(huán)境中提供了高質(zhì)量的用戶化編程能力。它能夠使得AutoCAD數(shù)據(jù)與其它VBA應(yīng)用程序直接共享,如Microsoft Office 97軟件。最重要的是VBA的加入,擴(kuò)展了AutoCAD集成用戶化工具的集成能力。它集成了AutoL1SP、Visual LISP和ObjectARX API等工具。這樣,就為訪問AutoCAD 2000軟件的多種技術(shù)框架提供了新的選擇和新的開放機(jī)會(huì),可以按所需求的工作方式用戶化應(yīng)用程序,也可以從戰(zhàn)略上考

47、慮開發(fā)基于AutoCAD的應(yīng)用程序。</p><p>  總之,雖然Auto CAD 2000的開發(fā)方法很多,Auto CAD中的大部分組件也都可以由用戶自己定義或定制,但很多的功能只需要編輯一些AutoLISP 程序就可以完成了。所以AutoLISP編程開發(fā)Auto CAD是基礎(chǔ)。</p><p>  3.2 VBA FOR AUTOCAD 的主要特點(diǎn)和VB的主要區(qū)別</p>

48、;<p>  VBA可作為空間容器,允許在VBA窗體設(shè)置控件,同時(shí),VBA支持自動(dòng)化控制。VBA提供了一個(gè)綜合開發(fā)環(huán)境,具有完整的容錯(cuò)功能,對(duì)象瀏覽器,屬性窗口和工程窗口。使用VBA,用戶可以用ACTIVEX AUTOMATION所提供的對(duì)象來拓展(二次開發(fā))AUTOCAD的功能,建立自己的解決方案。</p><p>  到底是用VBA還是用VB來控制AUTOCAD好呢?可以從運(yùn)行速度,功能等方面做

49、一個(gè)比較</p><p>  1、應(yīng)用程序的運(yùn)行速度</p><p>  VBA是一個(gè)內(nèi)嵌式的控制器,可以更好的與AUTOCAD溝通,運(yùn)行速度快,并且,AUTOCAD和AUTOCAD共享內(nèi)存空間,明顯節(jié)約了空間,提高了運(yùn)行速度。同時(shí)它提供了應(yīng)用程序和其他VBA程序的溝通路徑,當(dāng)使用其他程序的對(duì)象類型庫(kù)是,AUTOCAD可以作為該程序的AUTOMATION客戶程序,而不僅僅是AUTOCAD本

50、身。</p><p>  當(dāng)AUTOCAD被外部的VB程序或外部的VBA應(yīng)用程序控制時(shí),其運(yùn)行速度明顯降低,因?yàn)橥獠繎?yīng)用程序要通過WINDOWS系統(tǒng)與CAD溝通。</p><p><b>  2、程序功能</b></p><p>  雖然VBA沒有VB含有的其他部件和功能(例如外部數(shù)據(jù)引擎和報(bào)表輸出等功能)以及VB所提供建立可執(zhí)行的原代碼編譯器

51、,但是VBA提供了一個(gè)文件中心模型,能讓代碼程序以應(yīng)用程序的格式應(yīng)用起來。</p><p><b>  3、投資</b></p><p>  VBA是主應(yīng)用程序提供的一個(gè)部件,隨應(yīng)用程序本身一起提供,不需要單獨(dú)購(gòu)買,而 VB 是一個(gè)單獨(dú)軟件需要另外購(gòu)買</p><p>  總體而言,兩者各有所長(zhǎng),使用VBA進(jìn)行AUTOCAD二次開發(fā)的優(yōu)勢(shì)體現(xiàn)在

52、下面幾個(gè)方面:</p><p>  1)開發(fā)環(huán)境和VB類似,而VB編程環(huán)境易學(xué)易用。CAD VBA是自動(dòng)嵌入在CAD應(yīng)用程序中的,所以不必編程來建立與CAD的連接,而VB必須通過編程來建立與CAD的連接。</p><p>  2)VBA運(yùn)行在與CAD相同的處理空間,從而提供了一個(gè)高效的編程環(huán)境,而獨(dú)立的VB與ACTIVEX AUTOMATION的接口需要通過IPC驅(qū)動(dòng)AUTOCAD,因而V

53、BA比VB 更具明顯的性能優(yōu)勢(shì)AutoCAD VBA在AutoCAD應(yīng)用程序進(jìn)程內(nèi)運(yùn)行,程序運(yùn)行速度比較快。</p><p>  3)可以利用VBA進(jìn)行可視化界面設(shè)計(jì),允許快速開發(fā)程序和及時(shí)得到設(shè)計(jì)的反饋,例如,可以快速構(gòu)建對(duì)話框。</p><p>  4)工程可以單獨(dú)存在,亦可以嵌入在圖形中允許程序隨圖形文件一起存儲(chǔ)(R14版本不支持),這使開發(fā)者在發(fā)行應(yīng)用程序時(shí)有極大的靈活性。<

54、/p><p>  5)VBA還可以同其他使用VBA的應(yīng)用程序集成,共享系統(tǒng)資源,例如,用戶可以創(chuàng)建一個(gè)應(yīng)用程序,自動(dòng)提取屬性信息,把結(jié)果直接插入Excel數(shù)據(jù)表以及執(zhí)行任意數(shù)據(jù)轉(zhuǎn)換。</p><p>  6)支持事件過程:允許工程文件加密。</p><p>  總之,AutoCAD VBA是一個(gè)非??春玫拈_發(fā)工具,現(xiàn)在全球已經(jīng)有超過80萬家AutoCAD二次開發(fā)商使用A

55、utoCAD VBA進(jìn)行程序開發(fā)</p><p>  3.3 VBA的基礎(chǔ)知識(shí)及編程基礎(chǔ)</p><p>  3.3.1用VBA開發(fā)AutoCAD所涉及的一些概念</p><p>  面向?qū)ο蠹夹g(shù)目前被廣泛地應(yīng)用于計(jì)算機(jī)的各個(gè)領(lǐng)域,其中最直接、最基本的應(yīng)用就是用于軟件的開發(fā)過程中,形成了包含面向?qū)ο蟮姆治?OOA)、面向?qū)ο蟮脑O(shè)計(jì)(OOD)和面向?qū)ο蟮某绦蛟O(shè)引(O

56、OP)的所謂面向?qū)ο蟮能浖_發(fā)方法(OOSD) .</p><p><b>  1、類和對(duì)象</b></p><p>  面向?qū)ο蟮某绦蛟O(shè)計(jì)不同于早期的過程化程序設(shè)計(jì),它允許抽象化、模塊化的分層結(jié)構(gòu),具有多態(tài)性、繼承性和封裝性。面向?qū)ο蟮某绦蛟O(shè)計(jì)中最主要的概念是類和對(duì)象。類決定了對(duì)象的特征以及對(duì)象外觀和行為。比如鑄造砂模和鑄件之間的關(guān)系,鑄造砂模是類,它確定了每個(gè)鑄件

57、(對(duì)象)的特征,比如大小和形狀。用類創(chuàng)建對(duì)象,對(duì)象就是鑄件。在VBA中,對(duì)象就是由類創(chuàng)建,或者說對(duì)象是類的一個(gè)實(shí)例。類的描述保存在類型庫(kù)中,而且通過VBA集成開發(fā)環(huán)境(VBA IDE)中的對(duì)象瀏覽器可以查看。對(duì)象代表應(yīng)用程序中的元素,比如,AutoCAD 圖形文件中的直線、圖層、文字、塊等等。在VBA的程序中,在使用對(duì)象的任一方法或改變它的屬性值之前,必須先識(shí)別對(duì)象。對(duì)象集合則是一個(gè)包含幾個(gè)其他對(duì)象的對(duì)象,而這些對(duì)象通常但并不總是相同的

58、類型。例如,在AutoCAD中的文檔集合對(duì)象(Documents)包含了所有己經(jīng)打開的文檔對(duì)象(Document)。</p><p>  2、屬性、方法和事件</p><p>  在VBA中,屬性定義了應(yīng)用程序中對(duì)象的特征,例如AutoCAD中圖元的大小、顏色或位置,或某一方面的行為,例如圖元對(duì)象是否有激活或可見的。通過修改對(duì)象的屬性值可以改變對(duì)象的特征。方法指的是對(duì)象能執(zhí)行的動(dòng)作。例如,

59、AutoCAD個(gè)文檔集合對(duì)象的Add方法,它可以在當(dāng)前打開的文檔之上增加一個(gè)新的文檔對(duì)象。事件是一個(gè)對(duì)象可以辨認(rèn)的動(dòng)作,像單擊鼠標(biāo)或按下某鍵等,并且可以寫某些代碼針對(duì)此類動(dòng)作來做出響應(yīng)。用戶的操作或程序代碼的結(jié)果可能導(dǎo)致事件的發(fā)生,或是由系統(tǒng)引發(fā)。在VBA中,AutoCAD中的對(duì)象有三種級(jí)別的事件:</p><p>  應(yīng)用程序級(jí)(Application)、文檔級(jí)(Document)和圖元對(duì)象級(jí)(Object)事

60、件。應(yīng)用程序級(jí)(Application)事件:當(dāng)AutoCAD本身的環(huán)境被改變時(shí),就觸發(fā)該類事件。例如,創(chuàng)建、打開、保存、關(guān)閉或打印圖形文件時(shí);使用AutoCAD命令時(shí):加載或卸載ARX或LISP應(yīng)用程序時(shí):改變系統(tǒng)變量時(shí);以及改變主窗體尺寸時(shí)等等。文檔級(jí)(Document)事件:當(dāng)一個(gè)指定的圖形文件(DWG文件)自身或其內(nèi)容發(fā)生變化時(shí),就觸發(fā)該類要件。例如,添加、刪除或修改圖形文件中的對(duì)象時(shí);快捷菜單激活時(shí):選擇集被改變時(shí):圖形文件窗

61、口被改變時(shí):以及重新生成圖形文件數(shù)據(jù)時(shí)等等。此外,該類事件還對(duì)應(yīng)著一個(gè)圖形文件的打開、關(guān)閉以及打印、加載或卸載ARX和LISP應(yīng)用程序等操作。圖元對(duì)象級(jí)(Object)事件:當(dāng)圖形數(shù)據(jù)庫(kù)中的圖元對(duì)象被修改時(shí),觸發(fā)該事件AutoCAD ActiveX中,具有Modified一種圖元對(duì)象級(jí)事件,該事件在圖形數(shù)據(jù)庫(kù)中的圖元對(duì)象被修改或被觸發(fā)。</p><p>  3、過程和過程關(guān)鍵字</p><p&

62、gt;  過程是包含VBA代碼的單位。它包含一系列的語(yǔ)句和方法,以執(zhí)行操作或計(jì)算數(shù)值。在VBA中,有兩種過程:子過程和函數(shù)過程(通常簡(jiǎn)單地稱為函數(shù))。子過程執(zhí)行一個(gè)操作或一系列的運(yùn)算,但是不返回值。子過程的聲明使用Sub關(guān)鍵字,并用End Sub語(yǔ)句來結(jié)束。函數(shù)過程將返回一個(gè)值,可以在表達(dá)式中使用。函數(shù)過程的聲明使用Function關(guān)鍵字,并用End Function語(yǔ)句來結(jié)束。VBA包含許多內(nèi)置函數(shù),用戶也可以創(chuàng)建自己的自定義函數(shù)。S

63、ub和函數(shù)過程都可以接受參數(shù)。</p><p>  在VBA中,在Sub和Function前面的關(guān)鍵字Public和Private是用來表示作用域的。關(guān)鍵字Public表示該過程或函數(shù)在整個(gè)工程中是公用的,任何窗體、模塊都可以調(diào)用該過程。關(guān)鍵字Private表示該過程或函數(shù)不能被任何其他窗體、模塊和應(yīng)用程序(如AutoCAD)調(diào)用,只能在自身的過程中運(yùn)行。</p><p><b>

64、;  4、宏與工程</b></p><p>  用過Office產(chǎn)品的人都知道“宏”這個(gè)概念,宏就是VBA的程序語(yǔ)句代碼的集合。宏是指一個(gè)或多個(gè)操作的集合,其中每個(gè)操作實(shí)現(xiàn)特定的功能。在VBA中,可以認(rèn)為與過程等同。工程(或工程文件)是VBA對(duì)其開發(fā)中的應(yīng)用程序的稱呼。它包含了很多功能單元,如窗體、模塊和過程及其代碼等等。在AutoCAD VBA中,工程文件被保存為擴(kuò)展名為“dvb”的文件[5]。&l

65、t;/p><p><b>  5、窗體與模塊</b></p><p>  窗體是為方便人機(jī)交互而提供的圖形界面。在窗體上可以放置各種控件。在AutoCAD VBA中,窗體可以被保存為“.frm”文件。模塊是將VBA聲明過程作為一個(gè)單元進(jìn)行保存的集合。模塊有兩種基本類型:類模塊和標(biāo)準(zhǔn)模塊。模塊中的每一個(gè)過程都可以是一個(gè)函數(shù)過程或一個(gè)子程序。在AutoCAD VBA中,類模塊

66、通常都含有新對(duì)象定義的模塊。新建一個(gè)類實(shí)例時(shí),也就創(chuàng)建了新的對(duì)象。模塊中定義的任何過程都會(huì)變成該對(duì)象的屬性和方法。類模塊可以被保存為“.c1S”文件。標(biāo)準(zhǔn)模塊包含的是子過程和函數(shù)過程,這些過程不與任何對(duì)象相關(guān)聯(lián),可以被保存為“.bas”文件[2]。</p><p><b>  6、事件處理器</b></p><p>  事件處理器是事件被觸發(fā)后,程序?qū)χ憫?yīng)的一段代碼

67、。也被稱為事件過程。</p><p>  3.3.2 VBA編程基礎(chǔ)</p><p><b>  1)變量</b></p><p>  在VBA中,變量用來臨時(shí)存儲(chǔ)數(shù)據(jù)。它可以是數(shù)字、文本字符串或日期,也可以是一個(gè)對(duì)象,比如控件。變量包括名字(用來引用變量所包含的值的詞)和數(shù)據(jù)類型(確定變量能夠存儲(chǔ)的數(shù)據(jù)的種類)。</p><

68、;p>  (1)變量的數(shù)據(jù)類型</p><p>  VB可以處理14種標(biāo)淮變量類型,如Integer, Long, Decimal, Single, Double,String, Boolean, Object, Byte, Data以及Variant等數(shù)據(jù)類型,Variant數(shù)據(jù)類型是所有沒被顯式聲明(用如Dim, Private, Public或Static等語(yǔ)句)為其他類型變量的數(shù)據(jù)類型。Varian

69、t數(shù)據(jù)類型并沒有類型聲明字符。Variant是一種特殊的數(shù)據(jù)類型,除了定長(zhǎng)String數(shù)據(jù)及用戶定義類型外,可以包含任何種類的數(shù)據(jù)。Variant也可以包含EmPty, Error, Nothing及Null特殊值。可以用VarType函數(shù)或TYpeName函數(shù)來決定如何處理Variant中的數(shù)據(jù)。另外也允許用戶自定義變量類型,用戶自定義數(shù)據(jù)類型可以是任何用Type語(yǔ)句定義的數(shù)據(jù)類型。用戶自定義類型可包含一個(gè)或多個(gè)某種數(shù)據(jù)類型的數(shù)據(jù)元素

70、、數(shù)組或一個(gè)先前定義的用戶自定義類型。</p><p><b>  (2)變量的聲明</b></p><p>  在使用變量之前,用戶必須先對(duì)變量進(jìn)行聲明。變量聲明有顯式聲明和隱式聲明兩種。顯式聲明是用Dim, Private, Public或Static關(guān)鍵字聲明的。變量的隱式聲明是指在給變量賦初值時(shí),在變量的結(jié)尾處使用特定的字符對(duì)其進(jìn)行類型聲明,常用的有:<

71、/p><p>  Integer類型聲明字符是百分比符號(hào)(%);</p><p>  String的類型聲明字符為美圓號(hào)($);</p><p>  Long的類型聲明字符為和號(hào)(&):</p><p>  Single的類型聲明字符(!):</p><p>  Double的類型聲明字符是數(shù)字符號(hào)(#)。<

72、/p><p>  (3)變量的作用域和存活期</p><p>  變量有三個(gè)級(jí)別的:過程的級(jí)別、私有模塊級(jí)別和公有模塊級(jí)別。</p><p>  過程的級(jí)別:用Dim語(yǔ)句在過程中聲明的私有變量,只在其被定義的過程中有效。</p><p>  私有模塊級(jí)別:用Dim語(yǔ)句在模塊級(jí)聲明的變量,在該模塊的所有過程中有效,但對(duì)工程中的其他模塊無效。<

73、/p><p>  公有模塊級(jí)別:用Public關(guān)鍵字在模塊級(jí)聲明的變量,在工程的所有模塊、模塊中的所有過程及工程中的所有窗體均有效。</p><p>  變量保留其值的這段時(shí)間稱為存活期。變量的值可能在整個(gè)存活期都在改變,但它仍然保留著一些值。當(dāng)變量失去了范圍之后,它也就不再保留著任一個(gè)值。Dim語(yǔ)句聲明過程的級(jí)別變量將保留一個(gè)值,直到此過程退出為止。如果該過程調(diào)用其他的過程,則在這些過程正在

74、運(yùn)行的同時(shí),屬于調(diào)用者過程的變量也保留它的值。如果過程的級(jí)別變量是用Static關(guān)鍵字來聲明的,則只要代碼正在任何模塊中運(yùn)行此變量仍會(huì)保留它的值。而當(dāng)所有的代碼都完成運(yùn)行后,變量會(huì)失去它的范圍和它的值。所以它的存活期和模塊級(jí)別的變量是一樣的。如果在Sub或Function語(yǔ)句前加上Static關(guān)鍵字,則在此過程中所有過程級(jí)別的變量的值被保留在調(diào)用期間。</p><p><b>  (4)對(duì)象變量<

75、/b></p><p>  創(chuàng)建一個(gè)對(duì)象變量需要先聲明對(duì)象變量,然后指定對(duì)象變量到一對(duì)象。對(duì)象變量聲明可以使用Dim語(yǔ)句或其他的聲明語(yǔ)句(如Public. Private或Static)。引用對(duì)象的變量則必須是Variant或則Object數(shù)據(jù)類型,或是一個(gè)對(duì)象的指定類型。當(dāng)需等到過程運(yùn)行A知道指定的對(duì)象類型時(shí),可以利用Object數(shù)據(jù)類型來聲明。使用Object數(shù)據(jù)類型來創(chuàng)建對(duì)任何對(duì)象的一般的引用<

76、/p><p>  2)VBA的語(yǔ)法與語(yǔ)句(略)</p><p>  第四章 基于VBA FOR AUTOCAD開發(fā)技術(shù)的面交叉檢查功能開發(fā)</p><p>  所謂面交叉,是指兩個(gè)面域存在重疊部分(如圖2所示),面交叉的檢查屬于第二章提到的拓?fù)潢P(guān)系的檢查??紤]到CAD中層的應(yīng)用,這里的兩個(gè)面域是指同一層中的面域,否則檢查出來的結(jié)果并不具有現(xiàn)實(shí)的意義。</p>

77、;<p>  圖2 面交叉功能界面</p><p><b>  4.1算法實(shí)現(xiàn)</b></p><p>  在 AUTOCAD 中實(shí)體對(duì)象的 INTERSETWITH 方法存在著查詢兩個(gè)實(shí)體交點(diǎn)的功能,可直接利用,該方法可返回實(shí)體包括其延長(zhǎng)線的所有交點(diǎn),該方法的語(yǔ)法為[8]:</p><p>  IntersetWith(Inte

78、rsetObject,ExtentOption)</p><p>  取值為下列4個(gè)常數(shù):</p><p>  兩個(gè)實(shí)體都不延長(zhǎng):AcExtendNone(0)</p><p>  延長(zhǎng)發(fā)出求交要求的實(shí)體: AcExtendThisEntity(1)</p><p>  延長(zhǎng)被求交的實(shí)體: AcExtendOtherEntity(2)<

79、/p><p>  兩個(gè)實(shí)體都延長(zhǎng)AcExtend: AcExtendBoth(3)</p><p><b>  4.2程序流程圖</b></p><p><b>  程序流程圖如下:</b></p><p><b>  圖3 程序流程圖</b></p><p&g

80、t;<b>  4.3程序原代碼</b></p><p><b>  程序原代碼如下:</b></p><p>  Dim objyuan(0 To 1000) As Object</p><p>  Private Sub CommandButton1_Click()</p><p>  Dim

81、layerObj As AcadLayer</p><p>  Set layerObj = ThisDrawing.Layers.Add("jmd")</p><p>  Dim color As AcadAcCmColor layerObj.color = acRed Dim selseta As AcadSelectionSet '定義選擇集a&l

82、t;/p><p>  Set selseta = ThisDrawing.SelectionSets.Item("selseta")</p><p>  selseta.Delete '清空選擇集</p><p>  If VarType(selecta) = vbEmpty Then</p>

83、;<p>  Set selseta = ThisDrawing.SelectionSets.Add("selseta") '創(chuàng)建選擇集a(在確信選擇集已經(jīng)為空的前提下)</p><p><b>  End If</b></p><p>  Dim FilterType(2) As Integer</p>&

84、lt;p>  Dim FilterData(2) As Variant</p><p>  FilterType(0) = 0</p><p>  FilterData(0) = "POLYLINE"</p><p>  FilterType(1) = 62</p><p>  FilterData(1) = 256

85、</p><p>  FilterType(2) = 8</p><p>  FilterData(2) = "JMD"</p><p>  Dim mode As Integer</p><p>  Dim corner1(0 To 2) As Double</p><p>  Dim corne

86、r2(0 To 2) As Double</p><p>  mode = acSelectionSetCrossing</p><p>  corner1(0) = 0: corner1(1) = 0: corner1(2) = 0</p><p>  corner2(0) = 10000000: corner2(1) = 10000000: corner2(2)

87、 = 0</p><p>  selseta.Select mode, corner1, corner2, FilterType, FilterData</p><p>  ‘ 用SELECT 的方法向選擇集中添加實(shí)體,</p><p>  對(duì)象必須是多義線,紅色,在居民地層上</p><p>  Dim ent As Object</

88、p><p>  Dim i, j As Integer</p><p>  Dim obja(0 To 1000) As Object</p><p>  '將選擇集中的實(shí)體置于obja中</p><p><b>  j = 0</b></p><p>  For Each ent In se

89、lseta</p><p>  Set obja(j) = ent</p><p><b>  j = j + 1</b></p><p><b>  Next</b></p><p>  Dim gettwopoint As Variant</p><p>  Dim en

90、try As AcadEntity</p><p><b>  '定義相關(guān)變量</b></p><p>  Dim entObjectID As Long</p><p>  Dim objCount As Integer</p><p>  Dim mspaceObja As AcadObject</p&

91、gt;<p>  Dim mspaceObjb As AcadObject</p><p>  objCount = ThisDrawing.ModelSpace.Count</p><p><b>  '創(chuàng)建輔助圓層</b></p><p>  Dim layerObjb As AcadLayer</p>

92、<p>  Set layerObjb = ThisDrawing.Layers.Add("輔助圓")</p><p>  Set color= AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.16") </p><p>  '給輔助圓層設(shè)置顏色</p>&

93、lt;p>  Call color.SetRGB(80, 100, 244)</p><p>  layerObjb.TrueColor = color</p><p>  n = j '將上面的j值賦給n(為該選擇集即該層中實(shí)體的個(gè)數(shù))</p><p>  For ii = 0 To n</p><p>  Set

94、mspaceObja = obja(ii)</p><p>  Set entry = mspaceObja</p><p>  gettwopoint = entry.Coordinates '求實(shí)體坐標(biāo)</p><p>  On Error Resume Next '?</p><p><

95、;b>  'p為ii次級(jí)循環(huán)</b></p><p>  For p = ii + 1 To n - 1</p><p>  '跳過已判斷過的情況</p><p>  If ii = p Then</p><p>  ppp = 0 ‘跳過</p><p><b>  E

96、lse</b></p><p>  j = 0 </p><p>  Set mspaceObjb = obja(p)</p><p>  Dim intPoints As Variant</p><p><b>  '求兩個(gè)實(shí)體的交點(diǎn)</b></p><p>  i

97、ntPoints = mspaceObja.IntersectWith(mspaceObjb, acExtendNone)</p><p>  If VarType(intPoints) <> vbEmpty Then '如果交點(diǎn)不為空(即存在交點(diǎn))</p><p>  For i = LBound(intPoints) To UBound(intPoints

98、)</p><p><b>  q = 0</b></p><p>  For q = LBound(gettwopoint) To UBound(gettwopoint)</p><p>  If gettwopoint(q) = intPoints(i) Then GoSub aaa </p><p>  &

99、#39;如果實(shí)體坐標(biāo)和交點(diǎn)坐標(biāo)一致則跳出</p><p><b>  Next q</b></p><p>  Dim centerPt(0 To 2) As Double</p><p>  Dim radius As Double</p><p>  centerPt(0) = intPoints(j): cente

100、rPt(1) = intPoints(j + 1): centerPt(2) = intPoints(j + 2) '圓心</p><p>  radius=30 </p><p><b>  '半

101、徑</b></p><p>  Set circleObj = ThisDrawing.ModelSpace.AddCircle(centerPt, radius)</p><p>  circleObj.Layer = "輔助圓"</p><p>  circleObj.color = acbule</p><p

102、>  cnamber = cnamber + 1</p><p>  Set objyuan(cnamber) = circleObj</p><p>  Dim center(0 To 2) As Double</p><p>  Dim magnification As Double</p><p>  magnification

103、= 50</p><p><b>  i = i + 2</b></p><p><b>  j = j + 3</b></p><p><b>  k = k + 1</b></p><p><b>  Next i</b></p><

104、;p><b>  i = 0</b></p><p><b>  j = 0</b></p><p><b>  k = 0</b></p><p><b>  End If</b></p><p><b>  End If</b&g

105、t;</p><p><b>  Next p</b></p><p><b>  aaa:</b></p><p><b>  Next ii</b></p><p>  On Error Resume Next</p><p>  If cnambe

106、r = "" Then cnamber = " 0 "</p><p>  nnnn = "共有" & cnamber & "個(gè)交點(diǎn)"</p><p>  MsgBox nnnn, , "IntersectWith Example"</p><p> 

107、 cnamber = 0</p><p><b>  End Sub</b></p><p>  Private Sub CommandButton2_Click()</p><p>  Dim selseta As AcadSelectionSet</p><p>  Dim selsetb As AcadSelect

108、ionSet</p><p>  Set selseta = ThisDrawing.SelectionSets.Add("selseta")</p><p>  Set selsetb = ThisDrawing.SelectionSets.Add("selsetb")</p><p><b>  End Sub&

109、lt;/b></p><p>  Private Sub CommandButton3_Click()</p><p><b>  End</b></p><p><b>  End Sub</b></p><p><b>  4.4程序運(yùn)行界面</b></p>

110、;<p><b>  程序運(yùn)行界面如下:</b></p><p>  圖4 面交叉功能運(yùn)行界面一</p><p><b>  左擊“面交叉”:</b></p><p>  圖5 面交叉功能運(yùn)行界面二</p><p><b>  檢查結(jié)果:</b></p>

111、;<p>  圖6 面交叉功能運(yùn)行界面三</p><p><b>  第五章 小結(jié)</b></p><p>  本文集中筆墨討論了數(shù)字地圖質(zhì)量管理的內(nèi)容,方法,質(zhì)量管理系統(tǒng)的設(shè)計(jì)原則和設(shè)計(jì)目標(biāo)。然后結(jié)合現(xiàn)代軟件技術(shù)的發(fā)展,提出了自己解決問題的思路——應(yīng)用VBA技術(shù)即VB FOR APPLICATION。VBA是目前比較流行的應(yīng)用程序開發(fā)語(yǔ)言,功能非常強(qiáng)大

112、。用VBA編程技術(shù)可以在AUTO CAD環(huán)境中結(jié)合開發(fā)人員的需要開發(fā)出多種實(shí)用的功能。</p><p>  論文所設(shè)計(jì)的程序只是前文所提到的數(shù)字地圖質(zhì)量管理的一個(gè)小小的方面——面交叉問題。 這個(gè)程序雖然很小原理也比較簡(jiǎn)單,卻能很實(shí)用的檢查出數(shù)字地圖中存在的面交叉現(xiàn)象,并且能在圖上顯示出來交叉點(diǎn)。</p><p>  論文需要解決的問題還有很多,主要有:在CAD 界面下利用已經(jīng)打開的文件菜單

113、直接打開待檢查的數(shù)字地圖;對(duì)面交叉的地物進(jìn)行合理化判別;對(duì)不符合地形圖圖式的面交叉地物進(jìn)行自動(dòng)修正,以真正實(shí)現(xiàn)數(shù)字地圖質(zhì)量管理的目標(biāo)。</p><p>  數(shù)字地圖質(zhì)量檢查系統(tǒng)有著巨大的開發(fā)空間,由于學(xué)識(shí)和時(shí)間的限制,只能做其中小小的部分,希望日后能進(jìn)一步開發(fā)。</p><p><b>  致 謝</b></p><p>  本文是在導(dǎo)師余潔

114、教授的悉心指導(dǎo)下進(jìn)行的。余老師學(xué)識(shí)淵博,思維敏捷,態(tài)度嚴(yán)謹(jǐn),在設(shè)計(jì)過程中給予我嚴(yán)格的要求,引導(dǎo)我認(rèn)識(shí)問題分析問題解決問題,使我受益匪淺,終身受用。在此畢業(yè)設(shè)計(jì)完成之際,向幫助我、指導(dǎo)我的老師及同學(xué)致以由衷的感謝和敬意。在以后的學(xué)習(xí)和工作當(dāng)中,我會(huì)秉承師風(fēng),繼續(xù)努力,不斷創(chuàng)新,以取得更好的成績(jī)。</p><p>  感謝我的同學(xué),謝謝他們對(duì)我的支持和幫助。</p><p>  感謝我的同學(xué)、

115、朋友和家人,是他們?cè)谏钌虾途竦牟粩喙膭?lì)和支持,使得我在工作、學(xué)業(yè)和生活中保持積極樂觀的態(tài)度,不斷進(jìn)取。</p><p>  謹(jǐn)以此文,表達(dá)我最誠(chéng)摯的謝意!</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 史文中,王樹良.GIS數(shù)據(jù)之屬性不穩(wěn)定性的研究[J].中國(guó)圖形圖象學(xué)報(bào),2001,(9):918-924.<

116、;/p><p>  [2] 童小華,劉大杰等.GIS數(shù)據(jù)化數(shù)據(jù)的平差模型及軟件實(shí)現(xiàn)[J].同濟(jì)大學(xué)學(xué)報(bào),1998(6),27-28.</p><p>  [3] 劉大杰,史文中.GIS空間數(shù)據(jù)的精度分析和質(zhì)量控制[M].上海:上??茖W(xué)技術(shù)文獻(xiàn)出版社.1999,156-206.</p><p>  [4] 王衛(wèi)安,孫春紅.地理信息系統(tǒng)的質(zhì)量控制[J].測(cè)繪通報(bào),1999,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論