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

基于ObjectARX的自定義面域研究

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

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

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

1 引 言

在國內的測繪行業中,AutoCAD 一直是數據采集加工的主流軟件,這主要是因為它方便易用,圖形表現靈活多樣,尤其是對線劃圖的表達更是其他制圖軟件所無法比擬的,所以在數字化測繪的歷史進程中,AutoCAD 扮演了相當重要的角色。但在信息化測繪的今天,人們對地圖的要求已經不是僅僅局限于圖面了,而對信息的承載、獲取、共享等方面提出了越來越多的需求。在這種情況下,矛盾就出現了,GIS 數據長于信息的表達,有很多人便提出了摒棄CAD,直接采集GIS 數據的建議,但顯然,直接采集GIS 數據的技術手段并不成熟,同時我們也無法一下子就放棄AutoCAD 的巨大優勢。發展不應該只有放棄,需要將CAD 與GIS 進行有效地融合,各取所長,尋找更合理的方案使得數據的采集滿足信息化的測繪的需求。

天津市測繪院在地形圖數據管理中大膽變革,將原來的圖幅管理模式改為單元管理,避免了圖幅接邊問題,保證了數據的完整性,方便了外業修測,但在數據分發時仍需要按圖幅裁切提供,在AutoCAD 中,對點、線的裁切分幅是可以用程序來完成的,但對于Hatch 填充面AutoCAD 并沒有提供區域裁剪的工具,那么如何實現GIS 數據中的面那樣能夠任意裁剪呢,本文以自定義面域為例,探討了如何將GIS 數據的功能有效地融合到AutoCAD 的圖形元素中。

2 要素設計

在設計的面域元素時應該考慮到以下幾方面問題。

2.1 任意裁剪

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

圖1 Clipper 類庫

2.2 支持圓弧的裁剪

在一般的GIS 數據中是不支持圓弧的,而既然設計在AutoCAD 中表現面域,就需要解決面域中圓弧的裁切問題。

2.3 面域表現

在自定義實體類時,一般是從AutoCAD 基類派生,所以要選擇適合表現復雜面的基類,這里選擇從AcDbMPolygon 基類派生。

2.4 自定義要素屬性

采用自定義實體的優勢在于,可以對圖形的表現以及與用戶交互的接口進行全面的控制,使之符合地形圖要素的要求。例如:

(1)定義編碼屬性

以前通過AutoCAD 對象的thickness 屬性來記錄編碼信息,實際上這種方法是不合理的,因為thickness 在三維空間視圖中用于表示目標的厚度。僅僅是由于thickness 允許用戶修改,同時受限于以往的技術手段,才勉強這樣去做了,當我們用自定義實體技術來定制要素的時候,可以解決這個問題。自定義實體中的屬性和方法可以自由地定制,對編碼屬性而言,用一個字符串類型的成員就可以了,這樣一個簡單設計可以避免因為使用double 類型值帶來的精度損失。

(2)定義要素名稱

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

圖2 顯示要素名稱

3 程序實現

3.1 創建自定義對象類

一般創建自定義實體需要建立兩個工程,一個是DBX 工程,負責自定義實體的讀、寫、顯示等操作;另一個是ARX 工程,包含了程序的入口點,用戶在該工程中建立命令函數創建自定義實體對象實例,然后在AutoCAD 中加載運行。

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

3.2 顯示COM 接口屬性

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

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

assertReadEnabled ();

* pClsid=CLSID_MyPolygonCom;

return(Acad::eOk);

}

有了COM Wrapper 對象,我們就可以在AutoCAD中通過VisualLISP 創建和編輯自定義對象了。

3.3 注意事項

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

3.4 引用Clipper 圖形裁剪庫

在互聯網上可以很容易下載到Clipper 源程序,將其中的clipper.cpp、clipper.hpp 兩個文件添加到自定義面域的工程中,默認情況下Clipper 代碼中使用std::max、std::min 函數的地方會與C+ +編譯器的全局函數沖突,導致編譯錯誤,需要在工程屬性的預處理器定義中添加預定義編譯開關NOMINMAX。

假設定義如下的測試函數,用于實現兩個CMy-Polygon 對象的裁判剪操作:

Bool DoExecute(CMyPolygon* poly_a,CMyPolygon* poly_b,ClipType clipType,double scale);函數實現思路如下:

定義3 個Polygons 變量:

ClipperLib::Polygons sub;

ClipperLib::Polygons clp;

ClipperLib::Polygons sol;

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

Clipper clpr;

clpr.AddPolygons(sub,ClipperLib::ptSubject;

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

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

運行的結果保存在ClipperLib::Polygons 類型的參數sol 中。

3.5 面域中弧段的裁剪

在Clipper::Polygons 中多邊形面中每個閉合路徑是通過點表來描述的,所以對CAD 中的弧段需要進行圓弧加密,然后由加密后的點集組成多邊形再進行裁剪操作,但是裁剪后的多邊形無法復原被分隔后的圓弧信息,如圖3所示。

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

圖3 圓弧加密前后的裁剪

首先,通過CAD 中的實體的相交關系找出多邊形中的所有弧段,然后計算出每條弧段與另一多邊形的各個邊的交點,那么這些交點將弧段分隔成子弧段,然后再將子弧段加密,再通過Clipper 進行多邊形運算,最后將運行結果中的點按照子弧段進行轉換,即加密點轉換成圓弧。

對圓弧進行加密可以直接通過ObjectARX 中的getSamplePoints 函數:

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

圖4 弦公差

由于已經存儲了子弧段,在裁剪后的加密點返回圓弧的過程中只需要將那些落在子弧段上的點去掉可以了。

4 結 語

本文簡要論述了在AutoCAD 中實現自定義面域的基本方法,并將GIS 中對面域的操作引入到自定義實體中。在今后的數據采集中我們可以繼續發揮CAD 在線劃數據采集上的優勢,同時可以有效地借鑒GIS 在信息表達上的長處,將兩者融為一體,更好地為信息化測繪服務。

[1]Autodesk.ObjectARX 開發指南[R].1999.

[2]老大中,趙占強.AutoCAD 2000ARX 二次開發實例精粹[M].北京:國防工業出版社,2001.

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

[4]張長勛.AutoCAD VisualLISP 程序開發技術[M].北京:國防工業出版社,2005.

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

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

猜你喜歡
測繪工程
浙江省第一測繪院
工程測繪中GNSS測繪技術的應用
測繪新技術在測繪工程中的應用
江西建材(2018年4期)2018-04-10 12:37:38
04 無人機測繪應用創新受青睞
無人機在地形測繪中的應用
電子制作(2017年9期)2017-04-17 03:01:00
子午工程
太空探索(2016年6期)2016-07-10 12:09:06
測繪簡史
工程
工程
工程
主站蜘蛛池模板: 日本一本在线视频| 欧美另类第一页| 在线观看免费黄色网址| 色天天综合| 婷婷开心中文字幕| 精品国产自在在线在线观看| 中文字幕无码电影| 亚洲国产在一区二区三区| 亚洲中文字幕av无码区| 美女国内精品自产拍在线播放| 亚洲视频免| 亚洲日韩AV无码精品| 国产91视频观看| 国产毛片片精品天天看视频| 欧美精品在线看| h视频在线播放| 国产福利小视频高清在线观看| 亚洲成人在线网| hezyo加勒比一区二区三区| 日韩无码视频播放| 一级毛片免费观看不卡视频| 波多野结衣中文字幕一区| 亚洲AV电影不卡在线观看| 大香网伊人久久综合网2020| 超清无码一区二区三区| 色呦呦手机在线精品| 色悠久久久久久久综合网伊人| 国产精品久久久久鬼色| 中文字幕va| 亚洲国产综合精品一区| 久久性妇女精品免费| 欧美三级日韩三级| a在线观看免费| 国产h视频在线观看视频| 人妻精品久久久无码区色视| 国产日韩欧美精品区性色| 久久99国产综合精品女同| 农村乱人伦一区二区| 成人午夜网址| 日韩精品一区二区三区免费| 99精品在线看| 亚洲无码视频一区二区三区| 狠狠五月天中文字幕| a级毛片免费在线观看| 国产高清免费午夜在线视频| 五月天天天色| 国产精品成人一区二区| 国产青榴视频| 波多野结衣一区二区三区88| 国产精品林美惠子在线观看| 国产网站免费| 日本成人精品视频| 国产麻豆另类AV| 22sihu国产精品视频影视资讯| 国产成人三级在线观看视频| 欧美自慰一级看片免费| 五月激激激综合网色播免费| 国产麻豆va精品视频| 欧洲高清无码在线| 色综合激情网| 国产凹凸视频在线观看| 国产精品真实对白精彩久久| 夜夜爽免费视频| 欧美天天干| 精品剧情v国产在线观看| 色婷婷电影网| 一边摸一边做爽的视频17国产| 成人福利在线免费观看| 99精品欧美一区| 欧美精品在线观看视频| 四虎精品国产AV二区| 精品三级网站| 四虎影院国产| 日韩欧美国产成人| 99视频在线观看免费| 在线播放精品一区二区啪视频 | a级毛片在线免费观看| 婷婷在线网站| 国产福利不卡视频| 1769国产精品视频免费观看| 亚洲精品日产精品乱码不卡| 午夜欧美理论2019理论|