亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于ObjectARX的自定義面域研究

        2013-06-26 07:39:14王健潔趙麗娟王曉帆王光昇
        城市勘測 2013年1期
        關(guān)鍵詞:弧段多邊形圓弧

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

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

        1 引 言

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

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

        2 要素設(shè)計

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

        2.1 任意裁剪

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

        圖1 Clipper 類庫

        2.2 支持圓弧的裁剪

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

        2.3 面域表現(xiàn)

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

        2.4 自定義要素屬性

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

        (1)定義編碼屬性

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

        (2)定義要素名稱

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

        圖2 顯示要素名稱

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

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

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

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

        3.2 顯示COM 接口屬性

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

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

        assertReadEnabled ();

        * pClsid=CLSID_MyPolygonCom;

        return(Acad::eOk);

        }

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

        3.3 注意事項

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

        3.4 引用Clipper 圖形裁剪庫

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

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

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

        定義3 個Polygons 變量:

        ClipperLib::Polygons sub;

        ClipperLib::Polygons clp;

        ClipperLib::Polygons sol;

        sub 是目標(biāo)對象,clp 是剪切器對象,首先,從poly_a、poly_b 中讀取閉合環(huán)坐標(biāo)填充到sub 和clp 中,需要注意的是,從poly_a 和poly_b 中讀取每個環(huán)的坐標(biāo)時,首尾點是相同的,所以需要去掉最后一個點,這樣符合Clipper 類中Polygon 的定義規(guī)則,然后,將兩個多邊形通過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);

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

        3.5 面域中弧段的裁剪

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

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

        圖3 圓弧加密前后的裁剪

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

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

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

        圖4 弦公差

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

        4 結(jié) 語

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

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

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

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

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

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

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

        猜你喜歡
        弧段多邊形圓弧
        一種航天測控冗余跟蹤弧段處理方法
        上海航天(2024年1期)2024-03-08 02:52:28
        基于改進(jìn)弧段切點弦的多橢圓檢測
        多邊形中的“一個角”問題
        淺析圓弧段高大模板支撐體系設(shè)計與應(yīng)用
        面向工業(yè)復(fù)雜場景的合作靶標(biāo)橢圓特征快速魯棒檢測
        多邊形的藝術(shù)
        外圓弧面銑削刀具
        解多邊形題的轉(zhuǎn)化思想
        多邊形的鑲嵌
        淺談如何將多段線中的弧線段折線化
        四川建筑(2015年4期)2015-06-24 14:08:40
        激情人妻在线视频| 强d乱码中文字幕熟女免费| 亚洲国产果冻传媒av在线观看 | 国产欧美va欧美va香蕉在| 西西人体444www大胆无码视频| 熟女俱乐部五十路二区av| 欧美成人网视频| 亚洲乱熟妇一区二区三区蜜桃| 国产一区二区三区在线综合视频 | 18禁黄久久久aaa片| 国产亚洲日韩欧美一区二区三区| 亚洲 美腿 欧美 偷拍| 国产精品又爽又粗又猛又黄| 精品激情成人影院在线播放| 欧美精品黑人粗大免费| 亚洲av色先锋资源电影网站| 精品国产迪丽热巴在线| 亚洲国产精品成人一区二区在线| 婷婷亚洲岛国热超碰中文字幕 | 熟女人妻在线视频| 亚洲国产一区二区三区最新| 粗大挺进孕妇人妻在线| 国产自拍成人免费视频| 国产成年女人毛片80s网站| 无码人妻精品一区二区三区免费| 区无码字幕中文色| 国产另类人妖在线观看| 色又黄又爽18禁免费网站现观看| 亚洲精品国偷拍自产在线麻豆| 国产成人精品日本亚洲语音1| 五月停停开心中文字幕| 男女啪啪视频高清视频| 亚洲加勒比久久88色综合| 亚洲另类自拍丝袜第五页| 日产精品一区二区免费| 亚洲精品一区二区在线免费观看 | 日本成人中文字幕亚洲一区| 麻豆亚洲一区| 国产中文欧美日韩在线| 国产目拍亚洲精品一区二区| 亚洲高清精品一区二区|