999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于ObjectARX的自定義面域研究

2013-06-26 07:39:14王健潔趙麗娟王曉帆王光昇
城市勘測(cè) 2013年1期
關(guān)鍵詞:測(cè)繪工程

王健潔 ,趙麗娟,王曉帆,王光昇

(1.天津市測(cè)繪院,天津 300381; 2.天津市國(guó)土資源測(cè)繪和房屋測(cè)量中心,天津 300051)

1 引 言

在國(guó)內(nèi)的測(cè)繪行業(yè)中,AutoCAD 一直是數(shù)據(jù)采集加工的主流軟件,這主要是因?yàn)樗奖阋子茫瑘D形表現(xiàn)靈活多樣,尤其是對(duì)線劃圖的表達(dá)更是其他制圖軟件所無(wú)法比擬的,所以在數(shù)字化測(cè)繪的歷史進(jìn)程中,AutoCAD 扮演了相當(dāng)重要的角色。但在信息化測(cè)繪的今天,人們對(duì)地圖的要求已經(jīng)不是僅僅局限于圖面了,而對(duì)信息的承載、獲取、共享等方面提出了越來(lái)越多的需求。在這種情況下,矛盾就出現(xiàn)了,GIS 數(shù)據(jù)長(zhǎng)于信息的表達(dá),有很多人便提出了摒棄CAD,直接采集GIS 數(shù)據(jù)的建議,但顯然,直接采集GIS 數(shù)據(jù)的技術(shù)手段并不成熟,同時(shí)我們也無(wú)法一下子就放棄AutoCAD 的巨大優(yōu)勢(shì)。發(fā)展不應(yīng)該只有放棄,需要將CAD 與GIS 進(jìn)行有效地融合,各取所長(zhǎng),尋找更合理的方案使得數(shù)據(jù)的采集滿足信息化的測(cè)繪的需求。

天津市測(cè)繪院在地形圖數(shù)據(jù)管理中大膽變革,將原來(lái)的圖幅管理模式改為單元管理,避免了圖幅接邊問題,保證了數(shù)據(jù)的完整性,方便了外業(yè)修測(cè),但在數(shù)據(jù)分發(fā)時(shí)仍需要按圖幅裁切提供,在AutoCAD 中,對(duì)點(diǎn)、線的裁切分幅是可以用程序來(lái)完成的,但對(duì)于Hatch 填充面AutoCAD 并沒有提供區(qū)域裁剪的工具,那么如何實(shí)現(xiàn)GIS 數(shù)據(jù)中的面那樣能夠任意裁剪呢,本文以自定義面域?yàn)槔接懥巳绾螌IS 數(shù)據(jù)的功能有效地融合到AutoCAD 的圖形元素中。

2 要素設(shè)計(jì)

在設(shè)計(jì)的面域元素時(shí)應(yīng)該考慮到以下幾方面問題。

2.1 任意裁剪

通過Clipper 類庫(kù)實(shí)現(xiàn)面域的空間操作。Clipper類庫(kù)是開源的多邊形裁剪庫(kù),它可以實(shí)現(xiàn)多邊形的相交(Intersection)、合并(union)、差異(difference)、異或(xor)、偏移(Offset)等操作,它能夠處理復(fù)雜的多邊形,如自相交、環(huán)島多邊形等,如圖1所示。

圖1 Clipper 類庫(kù)

2.2 支持圓弧的裁剪

在一般的GIS 數(shù)據(jù)中是不支持圓弧的,而既然設(shè)計(jì)在AutoCAD 中表現(xiàn)面域,就需要解決面域中圓弧的裁切問題。

2.3 面域表現(xiàn)

在自定義實(shí)體類時(shí),一般是從AutoCAD 基類派生,所以要選擇適合表現(xiàn)復(fù)雜面的基類,這里選擇從AcDbMPolygon 基類派生。

2.4 自定義要素屬性

采用自定義實(shí)體的優(yōu)勢(shì)在于,可以對(duì)圖形的表現(xiàn)以及與用戶交互的接口進(jìn)行全面的控制,使之符合地形圖要素的要求。例如:

(1)定義編碼屬性

以前通過AutoCAD 對(duì)象的thickness 屬性來(lái)記錄編碼信息,實(shí)際上這種方法是不合理的,因?yàn)閠hickness 在三維空間視圖中用于表示目標(biāo)的厚度。僅僅是由于thickness 允許用戶修改,同時(shí)受限于以往的技術(shù)手段,才勉強(qiáng)這樣去做了,當(dāng)我們用自定義實(shí)體技術(shù)來(lái)定制要素的時(shí)候,可以解決這個(gè)問題。自定義實(shí)體中的屬性和方法可以自由地定制,對(duì)編碼屬性而言,用一個(gè)字符串類型的成員就可以了,這樣一個(gè)簡(jiǎn)單設(shè)計(jì)可以避免因?yàn)槭褂胐ouble 類型值帶來(lái)的精度損失。

(2)定義要素名稱

在自定義實(shí)體中,可以在屬性面板中顯示要素的名稱,使得在AutoCAD 中表現(xiàn)的地形圖要素更加直觀,便于圖面判讀,如圖2所示。

圖2 顯示要素名稱

3 程序?qū)崿F(xiàn)

3.1 創(chuàng)建自定義對(duì)象類

一般創(chuàng)建自定義實(shí)體需要建立兩個(gè)工程,一個(gè)是DBX 工程,負(fù)責(zé)自定義實(shí)體的讀、寫、顯示等操作;另一個(gè)是ARX 工程,包含了程序的入口點(diǎn),用戶在該工程中建立命令函數(shù)創(chuàng)建自定義實(shí)體對(duì)象實(shí)例,然后在AutoCAD 中加載運(yùn)行。

為了方便起見,一般要在“項(xiàng)目依賴項(xiàng)”中設(shè)置ARX 工程依賴于DBX 工程,這樣就不用在ARX 工程屬性中明確寫明所依賴的庫(kù)文件了。

3.2 顯示COM 接口屬性

如果想在屬性面板中顯示自定義的屬性,還必須建立一個(gè)COM 工程,為每個(gè)自定義實(shí)體類建立COM Wrapper 對(duì)象,然后在自定義實(shí)體類中實(shí)現(xiàn)subGetClassID 函數(shù),最后在新生成的* _i.c 頭文件中復(fù)制CLSID 并將其賦值給subGetClassID 函數(shù)的參數(shù)* pClsid,這樣就建立起自定義實(shí)體類和COM 包裝類的關(guān)系,如:

Acad::ErrorStatus CMyPolygon::subGetClassID (CLSID *pClsid)const{

assertReadEnabled ();

* pClsid=CLSID_MyPolygonCom;

return(Acad::eOk);

}

有了COM Wrapper 對(duì)象,我們就可以在AutoCAD中通過VisualLISP 創(chuàng)建和編輯自定義對(duì)象了。

3.3 注意事項(xiàng)

自定義實(shí)體工程不是必須要建立成DBX 類型,也可以建立成ARX 類型,二者的區(qū)別在于:DBX 工程是標(biāo)準(zhǔn)的自定義實(shí)體工程,可以加載到所有RealDWG 宿主應(yīng)用程序中,如AutoCAD、VoloView 等;ARX 類型的應(yīng)用程序只能加載AutoCAD 中,所以當(dāng)我們的應(yīng)用程序僅僅是應(yīng)用在AutoCAD 環(huán)境中時(shí),完全可以把自定義實(shí)體工程建立成ARX 工程,這樣做的原因是,ARX應(yīng)用程序有很多函數(shù)在DBX 工程中不支持,如acedAlert、acedRedraw 等以“aced”開頭的函數(shù),改成ARX 工程后,我們可以應(yīng)用的功能函數(shù)更多。

3.4 引用Clipper 圖形裁剪庫(kù)

在互聯(lián)網(wǎng)上可以很容易下載到Clipper 源程序,將其中的clipper.cpp、clipper.hpp 兩個(gè)文件添加到自定義面域的工程中,默認(rèn)情況下Clipper 代碼中使用std::max、std::min 函數(shù)的地方會(huì)與C+ +編譯器的全局函數(shù)沖突,導(dǎo)致編譯錯(cuò)誤,需要在工程屬性的預(yù)處理器定義中添加預(yù)定義編譯開關(guān)NOMINMAX。

假設(shè)定義如下的測(cè)試函數(shù),用于實(shí)現(xiàn)兩個(gè)CMy-Polygon 對(duì)象的裁判剪操作:

Bool DoExecute(CMyPolygon* poly_a,CMyPolygon* poly_b,ClipType clipType,double scale);函數(shù)實(shí)現(xiàn)思路如下:

定義3 個(gè)Polygons 變量:

ClipperLib::Polygons sub;

ClipperLib::Polygons clp;

ClipperLib::Polygons sol;

sub 是目標(biāo)對(duì)象,clp 是剪切器對(duì)象,首先,從poly_a、poly_b 中讀取閉合環(huán)坐標(biāo)填充到sub 和clp 中,需要注意的是,從poly_a 和poly_b 中讀取每個(gè)環(huán)的坐標(biāo)時(shí),首尾點(diǎn)是相同的,所以需要去掉最后一個(gè)點(diǎn),這樣符合Clipper 類中Polygon 的定義規(guī)則,然后,將兩個(gè)多邊形通過AddPolygons 方法填加Clipper 變量中,最后執(zhí)行剪切操作:

Clipper clpr;

clpr.AddPolygons(sub,ClipperLib::ptSubject;

clpr.AddPolygons(clp,ClipperLib::ptClip);

bool succeeded = clpr.Execute(clipType,sol,ClipperLib::pftEvenOdd,ClipperLib::pftEvenOdd);

運(yùn)行的結(jié)果保存在ClipperLib::Polygons 類型的參數(shù)sol 中。

3.5 面域中弧段的裁剪

在Clipper::Polygons 中多邊形面中每個(gè)閉合路徑是通過點(diǎn)表來(lái)描述的,所以對(duì)CAD 中的弧段需要進(jìn)行圓弧加密,然后由加密后的點(diǎn)集組成多邊形再進(jìn)行裁剪操作,但是裁剪后的多邊形無(wú)法復(fù)原被分隔后的圓弧信息,如圖3所示。

面域1 中的圓弧AB 加密后為綠色線所示,以加密后的點(diǎn)形成的多邊形與面域2 進(jìn)行裁剪,點(diǎn)D 為其中的分割點(diǎn),由點(diǎn)A 到點(diǎn)D 之間的綠色線是裁剪后的一條邊,我們無(wú)法從這條邊返回對(duì)應(yīng)的圓弧信息,這樣就會(huì)造成精度的損失,關(guān)于這種圓弧裁切的問題我們的解決方法是:

圖3 圓弧加密前后的裁剪

首先,通過CAD 中的實(shí)體的相交關(guān)系找出多邊形中的所有弧段,然后計(jì)算出每條弧段與另一多邊形的各個(gè)邊的交點(diǎn),那么這些交點(diǎn)將弧段分隔成子弧段,然后再將子弧段加密,再通過Clipper 進(jìn)行多邊形運(yùn)算,最后將運(yùn)行結(jié)果中的點(diǎn)按照子弧段進(jìn)行轉(zhuǎn)換,即加密點(diǎn)轉(zhuǎn)換成圓弧。

對(duì)圓弧進(jìn)行加密可以直接通過ObjectARX 中的getSamplePoints 函數(shù):

參數(shù)pointArray 存儲(chǔ)從弧起點(diǎn)至終點(diǎn)的所有采集點(diǎn),包括弧起點(diǎn)和終點(diǎn)。參數(shù)approxEps 為弦公差,即偏離一個(gè)光滑圓的可接受偏差,它既可用弦角度建立,又可用偏差來(lái)建立。弦公差會(huì)影響用來(lái)在屏幕上畫圓圈的弦線的數(shù)目,弦公差越小,需要繪制的弦數(shù)越多,如圖4所示。

圖4 弦公差

由于已經(jīng)存儲(chǔ)了子弧段,在裁剪后的加密點(diǎn)返回圓弧的過程中只需要將那些落在子弧段上的點(diǎn)去掉可以了。

4 結(jié) 語(yǔ)

本文簡(jiǎn)要論述了在AutoCAD 中實(shí)現(xiàn)自定義面域的基本方法,并將GIS 中對(duì)面域的操作引入到自定義實(shí)體中。在今后的數(shù)據(jù)采集中我們可以繼續(xù)發(fā)揮CAD 在線劃數(shù)據(jù)采集上的優(yōu)勢(shì),同時(shí)可以有效地借鑒GIS 在信息表達(dá)上的長(zhǎng)處,將兩者融為一體,更好地為信息化測(cè)繪服務(wù)。

[1]Autodesk.ObjectARX 開發(fā)指南[R].1999.

[2]老大中,趙占強(qiáng).AutoCAD 2000ARX 二次開發(fā)實(shí)例精粹[M].北京:國(guó)防工業(yè)出版社,2001.

[3]Charles McAuley.AutoCAD 2000ObjectARX 編 程 指 南[M].北京:機(jī)械工業(yè)出版社,2000.

[4]張長(zhǎng)勛.AutoCAD VisualLISP 程序開發(fā)技術(shù)[M].北京:國(guó)防工業(yè)出版社,2005.

[5]余承飛,方勇.AutoCAD 2000 二次開發(fā)技術(shù)(ObjectARX)[M].北京:人民郵電出版社,1999.

[6]宋延杭,王川,李永宣.ObjectARX 實(shí)用指南[M].北京:人民郵電出版社,1999.

猜你喜歡
測(cè)繪工程
浙江省第一測(cè)繪院
工程測(cè)繪中GNSS測(cè)繪技術(shù)的應(yīng)用
測(cè)繪新技術(shù)在測(cè)繪工程中的應(yīng)用
江西建材(2018年4期)2018-04-10 12:37:38
04 無(wú)人機(jī)測(cè)繪應(yīng)用創(chuàng)新受青睞
無(wú)人機(jī)在地形測(cè)繪中的應(yīng)用
電子制作(2017年9期)2017-04-17 03:01:00
子午工程
太空探索(2016年6期)2016-07-10 12:09:06
測(cè)繪簡(jiǎn)史
工程
工程
工程
主站蜘蛛池模板: 动漫精品啪啪一区二区三区| 日韩精品毛片| 91娇喘视频| 久久综合九色综合97婷婷| 不卡无码h在线观看| 亚洲中文久久精品无玛| 毛片手机在线看| 久久精品女人天堂aaa| 丝袜国产一区| 亚洲欧洲日本在线| 国产成人高清精品免费| 日韩麻豆小视频| 米奇精品一区二区三区| 欧美综合中文字幕久久| 午夜精品福利影院| 亚洲无线视频| 九一九色国产| 国产又粗又猛又爽视频| 五月婷婷综合色| 日韩无码真实干出血视频| 九色综合伊人久久富二代| 欧美a在线视频| 中日无码在线观看| 91麻豆精品国产91久久久久| 成年人视频一区二区| 亚洲婷婷丁香| 蜜芽国产尤物av尤物在线看| 国产系列在线| 中文字幕亚洲乱码熟女1区2区| 精品久久久无码专区中文字幕| 日韩天堂网| 日韩av电影一区二区三区四区| 国产精品免费久久久久影院无码| 成人免费一区二区三区| 999国产精品| 国产日韩欧美视频| 伊人激情久久综合中文字幕| 国产欧美日韩精品第二区| 亚洲精品中文字幕午夜| 国模在线视频一区二区三区| 成人免费午夜视频| 第一区免费在线观看| 免费人成网站在线观看欧美| 国产网站黄| 很黄的网站在线观看| 久无码久无码av无码| 五月婷婷导航| 欧美成人a∨视频免费观看| 亚洲男女天堂| 高清无码手机在线观看| 亚洲日韩久久综合中文字幕| 亚洲日本中文字幕天堂网| 欧美福利在线| 中文字幕日韩欧美| 日本黄色不卡视频| 台湾AV国片精品女同性| 国产精品亚洲va在线观看 | 成人午夜网址| 中文字幕无线码一区| 一级毛片免费不卡在线| 一级毛片不卡片免费观看| 午夜高清国产拍精品| 91久久天天躁狠狠躁夜夜| 亚洲国产精品不卡在线| 国产玖玖玖精品视频| 国产a在视频线精品视频下载| 精品国产香蕉在线播出| 精品无码一区二区在线观看| 在线观看视频99| 精品欧美一区二区三区在线| 91外围女在线观看| 精品第一国产综合精品Aⅴ| аⅴ资源中文在线天堂| 999精品视频在线| 一级看片免费视频| 久久九九热视频| 一级黄色网站在线免费看| 国产精品99在线观看| 91无码人妻精品一区二区蜜桃| 精品久久久无码专区中文字幕| 真人免费一级毛片一区二区| 色老二精品视频在线观看|