利用Region類代替AutoCAD面域進行圖形計算的方法
【專利摘要】本發(fā)明公開了一種利用Region類代替AutoCAD面域進行圖形計算的方法,包括以下步驟:S1,獲取AutoCAD線圖形對象,并對線圖形對象重采樣,以坐標點集P的方式表達所述圖形對象;S2,組建面域構造函數(shù),將步驟S1重采樣得到的點集P輸入面域構造函數(shù),完成Region類面域的構造;S3,基于Region類面域實現(xiàn)相關圖形計算方法。本發(fā)明可通過自交的線對象構造面域;可通過局部未閉合的線對象構造面域;可通過回頭線對象構造面域。
【專利說明】利用Reg1n類代替AutoCAD面域進行圖形計算的方法
【技術領域】
[0001]本發(fā)明涉及一種AutoCAD圖形計算方法(包括:面積計算、布爾運算等),特別是涉及一種利用Reg1n類代替AutoCAD面域進行圖形計算的方法。
【背景技術】
[0002]AutoCAD面域是使用形成閉合環(huán)的對象創(chuàng)建的二維閉合區(qū)域,環(huán)可以是直線、多段線、圓、圓弧、橢圓、橢圓弧和樣條曲線的組合,組成環(huán)的對象必須閉合或通過與其他對象共享端點而形成閉合的區(qū)域,可以通過多個環(huán)或者端點相連形成環(huán)的開曲線來創(chuàng)建面域。面域除了包括封閉的邊界形狀,還包括邊界內部的平面,就像一個沒有厚度的平面。
[0003]由于AutoCAD提供的面域構造功能不支持局部未閉合線、自相交線、回頭線,也不直接提供點與面域之間的位置關系判斷功能。日常工程圖紙的繪制難免會出現(xiàn)以上情況,當以上情況給計算結果帶來的影響可以忽略不計時,由于AutoCAD自帶面域構造功能的局限性,將會使得眾多基于AutoCAD面域的圖形計算方法無法高效、順利地完成。
[0004]Reg1n類:指示由矩形或由路徑構成的圖形形狀的內部,無法繼承此類。命名空間為 System.Drawing。從.NET Framework 2.0 開始就有了 Reg1n 類。基于 Reg1n 類可以進行區(qū)域與區(qū)域之間的交集、并集、差集布爾運算,亦可以直接用來判斷一個點或者一個對象是否在另個區(qū)域內部。但是,目前還沒有利用Reg1n類代替AutoCAD面域進行圖形計算的相關報道。
【發(fā)明內容】
[0005]本發(fā)明旨在至少解決現(xiàn)有技術中存在的技術問題,特別創(chuàng)新地提出了一種利用Reg1n類在AutoCAD中代替AutoCAD自帶面域進行相關圖形計算的方法。
[0006]為了實現(xiàn)本發(fā)明的上述目的,本發(fā)明提供的一種利用Reg1n類代替AutoCAD面域進行圖形計算的方法,包括以下步驟:
[0007]SI,獲取AutoCAD線圖形對象,并對線圖形對象重采樣,以坐標點集P的方式表達所述圖形對象;
[0008]S2,組建面域構造函數(shù),將步驟SI重采樣得到的點集P輸入面域構造函數(shù),完成Reg1n類面域的構造;
[0009]S3,基于Reg1n類面域實現(xiàn)相關圖形計算方法。
[0010]在本發(fā)明的一種優(yōu)選實施方式中,所述步驟SI具體包括以下步驟:
[0011]S21,定義類型為AcadEntity的圖形對象obj,定義類型為AcadSelect1nSet的選擇集Sset ;
[0012]S22,通過 AcadSelect 1nSet.SelectOnScreen ()方法在 AutoCAD 繪圖區(qū)域選擇對象,通過對Sset選擇集遍歷查找,逐一讀取選擇集里的圖形對象:
[0013]S23,如果 obj (i).0bjectName 為“AcDbPolyLine”,則通過obj (i).Coordinates 方法逐一讀取多段線的節(jié)點坐標構建點集P ;
[0014]如果obj (i).0bjectName 為曲線,包括 AcDbCircle, AcDbARC, AcDbELLIPSE 及AcDbSPLINE,則通過調用AutoCAD內置命令“_divide”對所述曲線對象進行曲線分割處理,分割處理完成后各曲線對象形成了一系列有序的點隊列,點隊列里的點的類型為AcadPoint,通過AcadPoint.Coordinates方法逐一讀取點隊列里的坐標值構建點集P。
[0015]在本發(fā)明的一種優(yōu)選實施方式中,所述面域函數(shù)的構造方法包括以下步驟:
[0016]S31,定義類型為PointFO的點集P,給點集P賦值;
[0017]S32,定義類型為 GraphicsPath 的多邊形 Grphs,調用 GraphicsPath 的AddPolygon 方法生成 Grphs ;
[0018]S33,初始化面域Reg1nO,輸入多邊形Grphs,完成面域的構造。
[0019]在本發(fā)明的一種優(yōu)選實施方式中,所述有關面域的圖形計算包括面積計算、布爾運算及點與面域的位置關系判斷。
[0020]在本發(fā)明的一種優(yōu)選實施方式中,所述面積計算的方法為:通過面域的Reg1n.GetReg1nScans方法對Reg1n面域進行矩陣變換,分解成多個小矩形的集合,最后通過各小矩形的面積累加得到面域的面積;
[0021]其中,在進行矩陣變換時,GetReg1nScans方法在處理邊界數(shù)據(jù)時視為整型對待,因此處理結果會損失精度,為了保證面積計算的準確性,在構造面域時,將點集P的值放大N倍,最后將計算結果縮小N*N倍,所述N為正整數(shù)。
[0022]在本發(fā)明的一種優(yōu)選實施方式中,所述N = 10000。
[0023]在本發(fā)明的一種優(yōu)選實施方式中,所述布爾運算包括交集、并集及差集計算,其中,交集計算采用交集Reg1n.1ntersect (Reg1n)方法,并集計算采用并集Reg1n.Un1n (Reg1n)方法,差集計算采用差集Reg1n.Xor (Reg1n)方法。
[0024]在本發(fā)明的一種優(yōu)選實施方式中,所述點與面域的位置關系判斷方法為:采用Reg1n.1sVisible (PointF)方法。
[0025]綜上所述,由于采用了上述技術方案,本發(fā)明的有益效果是:可以通過自相交的線對象構造面域;可以通過局部未閉合的線對象構造面域;可以通過回頭線對象構造面域;可以完成復雜線對象的布爾運算;可以直接判斷點與面域的位置關系。
【專利附圖】
【附圖說明】
[0026]圖1是本發(fā)明局部未閉合線對象面域構造實例示意圖;
[0027]圖2是本發(fā)明自相交線對象面域構造實例示意圖;
[0028]圖3是本發(fā)明回頭線對象面域構造實例示意圖;
[0029]圖4是本發(fā)明面域交集計算實例示意圖;
[0030]圖5是本發(fā)明面域并集計算實例示意圖;
[0031]圖6是本發(fā)明面域差集計算實例示意圖;
[0032]圖7是本發(fā)明點與面域的位置關系判斷實例示意圖。
【具體實施方式】
[0033]下面詳細描述本發(fā)明的實施例,所述實施例的示例在附圖中示出,其中自始至終相同或類似的標號表示相同或類似的元件或具有相同或類似功能的元件。下面通過參考附圖描述的實施例是示例性的,僅用于解釋本發(fā)明,而不能理解為對本發(fā)明的限制。
[0034]本發(fā)明提供了一種利用Reg1n類代替AutoCAD面域進行圖形計算的方法,包括以下步驟:
[0035]S0,在VS中建立VB.NET類庫dll程序集(本發(fā)明基于VS集成開發(fā)環(huán)境,編程語言采用VB.NET,編程方式為AutoCAD COM,采用的AutoCAD的版本可以為但不限于AutoCAD 2008),例如可以命名為Reg1nToCAD.D11,在所述類庫解決方案中引用.Net程序集 System, drawing, dl I,引用 Com 庫 AutoCAD 2008Type Library 和 AutoCAD/ObjectDBXCommon 17.0Type Library,完成引用后在所述類庫中導入以下命名空間,如下所示:
[0036]Imports System.Drawing.Drawing2D
[0037]Imports System.Drawing
[0038]Imports Autodesk.AutoCAD.1nterop
[0039]Imports Autodesk.AutoCAD.1nterop.Common
[0040]SI,編寫功能模塊,在AutoCAD工程圖紙中獲取線圖形對象,并對線圖形對象重采樣,以坐標點集P的方式表達所述圖形對象。圓、圓弧、橢圓、橢圓弧、樣條曲線等曲線對象需要進行曲線分割處理,離散成一系列有序點隊列,逐次采集點隊列里各點的坐標值,實現(xiàn)曲線對象的點集形式表達。功能模塊的實現(xiàn)具體包括以下步驟:
[0041]S21,定義類型為AcadEntity(AutoCAD COM圖形對象)的圖形對象obj,定義類型為 AcadSelect 1nSet (AutoCAD COM 選擇集)的選擇集 Sset ;
[0042]S22,通過 AcadSelect1nSet.SelectOnScreenO (AutoCAD COM 選擇模型空間對象)方法在AutoCAD繪圖區(qū)域選擇對象,通過對Sset選擇集遍歷查找,即obj (i) = SSet.1tem(i),逐一讀取選擇集里的圖形對象:
[0043]S23,如果 obj (i).0bjectName (AutoCAD COM 獲取對象類型)為“AcDbPolyLine” (AutoCAD COM 多段線),則通過 obj ⑴.Coordinates (AutoCADCOM 多段線節(jié)點坐標)方法逐一讀取多段線的節(jié)點坐標構建點集P ;
[0044]如果ob j (i).0bjectName 為曲線,包括 AcDbCircle (AutoCAD COM 圓)、AcDbARC (AutoCAD COM 圓弧)、AcDbELLIPSE (AutoCAD COM 橢圓或者橢圓弧)及AcDbSPLINE (AutoCAD COM樣條曲線),則通過調用AutoCAD內置命令“_divide”對所述曲線對象進行曲線分割處理,分割處理完成后各曲線形成了一系列有序的點隊列,點隊列里的點的類型為AcadPoint (AutoCAD COM點類型),通過AcadPoint.Coordinates方法逐一讀取點隊列里的坐標值構建點集P。
[0045]需要說明的是,本發(fā)明的線圖形對象可以局部不閉合、可以包含回頭線、可以自相交等。
[0046]S2,組建面域構造函數(shù),將重采樣得到的點集P輸入面域構造函數(shù),完成Reg1n類面域的構造。在本實施方式中,面域構造函數(shù)的構造方法包括以下步驟:
[0047]S31,定義類型為PointFO (表示在二維平面中定義點的浮點x和y坐標的有序對,是System.Drawing的成員)的點集P,給點集P賦值,賦值方式為P (I).X = ?,P⑴.Y=?,......,P (n).X=? , P (η).Y = ?,其中 η 代表點的個數(shù)。
[0048]S32,定義類型為GraphicsPath (表示一系列相互連接的直線和曲線,是System.Drawing.Drawing2D 的成員)的多邊形 Grphs,調用 GraphicsPath 的方法 AddPolygon (添加多邊形)生成多邊形,即 Grphs = GraphicsPath.AddPolygon (P)。
[0049]S33,初始化面域 Reg1nO,即 myReg1n As New Reg1nO, myReg1n.MakeEmpty O ,輸入數(shù)據(jù)完成面域構造,例如得到myReg1n.Un1n (Grph)。
[0050]S3,基于Reg1n類面域實現(xiàn)相關圖形計算。在本實施方式中,與面域有關的圖形計算包括面積計算、布爾運算及點與面域的位置關系判斷。其中,面積計算的方法為:將Reg1n類面域進行矩陣變換,分解成多個小矩形的集合,最后通過各小矩形的面積累加得出面域的面積。其中,在進行矩陣變換時,GetReg1nScans方法在處理面域邊界數(shù)據(jù)時視為整型對待,因此處理結果會損失精度,為了保證面積計算的準確性,在面域構造時,將點集P的值放大N倍,在本實施方式中,N= 10000。最后將計算結果縮小N*N倍,N為10的正整數(shù)倍。
[0051]矩陣變換方法為RectFs = myReg1n.GetReg1nScans (Mymatrix),其中變量RectFs 類型為 RectangleF O,GetReg1nScans (返回 RectangleF 結構的數(shù)組。RectangleF,存儲的一組浮點數(shù),共四個,表示一個矩形的位置和大小,是System.Drawing的成員)是Reg1n類的自帶方法,變量Mymatrix的類型為Matrix (封裝表示幾何變換的3x 3仿射矩陣,是System.Drawing.Drawing2D的成員),RectFs即為面域變換后的小矩陣集合。通過RectFs (i).Height與RectFs (i).Width方法即可獲取長、寬值,長*寬即可得到各矩形的面積。其中,i為小矩形集合的序號。
[0052]布爾運算包括交集、并集及差集計算,其中,交集計算采用交集Reg1n.1ntersect (Reg1n) (Reg1n 類求交集)方法,并集計算采用并集 Reg1n.Un1n (Reg1n)(Reg1n類求并集)方法,差集計算采用差集Reg1n.Xor (Reg1n類求差集)(Reg1n)方法。
[0053]點與面域的位置關系判斷方法為:采用myReg1n.1sVisible (PointF) (IsVisible:測試指定的PointF結構是否包含在此Reg1n中)方法。
[0054]將類庫Reg1nToCAD.Dl I編譯封裝,在AutoCAD中通過“Net load”命令加載類庫Reg1nToCAD.Dl 1,加載完成后調用類庫中定義的函數(shù)和方法,即可完成線對象面積、交集、差集、并集以及點與面域的位置關系判斷計算過程。計算的結果如圖1到圖7所示。
[0055]經(jīng)過我們的實驗表明,Reg1n類在構造面域時,能夠有效地抵抗【背景技術】中提到的AutoCAD在構造面域時所面臨的問題。
[0056]在本說明書的描述中,參考術語“一個實施例”、“一些實施例”、“示例”、“具體示例”、或“一些示例”等的描述意指結合該實施例或示例描述的具體特征、結構、材料或者特點包含于本發(fā)明的至少一個實施例或示例中。在本說明書中,對上述術語的示意性表述不一定指的是相同的實施例或示例。而且,描述的具體特征、結構、材料或者特點可以在任何的一個或多個實施例或示例中以合適的方式結合。
[0057]盡管已經(jīng)示出和描述了本發(fā)明的實施例,本領域的普通技術人員可以理解:在不脫離本發(fā)明的原理和宗旨的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發(fā)明的范圍由權利要求及其等同物限定。
【權利要求】
1.一種利用1^681011類代替八此0(^0面域進行圖形計算的方法,其特征在于,包括以下步驟: 31,獲取八此00\0線圖形對象,并對線圖形對象重采樣,以坐標點集?的方式表達所述圖像對象; 32,組建面域構造函數(shù),將步驟31重采樣得到的點集?輸入面域構造函數(shù),完成如#。!!類面域的構造; 33,基于卩681011類面域實現(xiàn)相關圖形計算方法。
2.根據(jù)權利要求1所述的利用1?叩1011類代替面域進行圖形計算的方法,其特征在于,所述步驟51具體包括以下步驟: 321,定義類型為八¢£1(12111:11:7的圖形對象0)3』,定義類型為八(^(1361601:1011361:的選擇集856^ ; 322,應用八(^(13616(^101136七80100^011801-66110方法在八此¢)010繪圖區(qū)域選擇對象,通過對3861:選擇集遍歷查找,逐一讀取選擇集里的圖形對象; 323,如果 0)3』(1).謂肅6 為“八。013?01711116”,則通過 0)3』(1).的 1:68 方法逐一讀取多段線的節(jié)點坐標構建點集?。其中,1代表對象的序號; 如果 0)3』(1).013』6。謂&1116 為曲線,包括4。013仙0、及八肥,則通過調用八此00\0內置命令“^11^1(16”對所述曲線對象進行曲線分割處理,分割處理完成后各曲線對象則行成了一系列有序的點隊列,點隊列里的點的類型為^08(1^01111:,通過八0001-(111181:68方法逐一讀取點隊列里的點的坐標值構建點集
3.根據(jù)權利要求1所述的利用1?叩1011類代替面域進行圖形計算的方法,其特征在于,所述面域函數(shù)的構造方法包括以下步驟: 331,定義類型為?0111切0的點集?,給點集?賦值; 332,定義類型為的多邊形的八(1(190178011 方法生成; 333,初始化面域0681011 0,輸入多邊形完成面域構造。
4.根據(jù)權利要求1所述的利用1?叩1011類代替面域進行圖形計算的方法,其特征在于,所述與面域有關的圖形計算包括面積計算、布爾運算及點與面域的位置關系判斷。
5.根據(jù)權利要求4所述的利用1?叩1011類代替“^0(^0面域進行圖形計算的方法,其特征在于,所述面積計算的方法為:通過面域的0681011.661:^6^1011808118方法對0681011面域進行矩陣變換,分解成多個小矩形的集合,最后通過各小矩形的面積累加得到面域的面積; 其中,在進行矩陣變換時,由于(?找60011318方法在處理面域邊界數(shù)據(jù)時視為整型對待,因此處理結果會損失精度,為了保證面積計算的準確性,在構建面域時,將點集?的值放大~倍,最后將計算結果縮小倍,所述~為正整數(shù)。
6.根據(jù)權利要求5所述的利用1?叩1011類代替“^0(^0面域進行圖形計算的方法,其特征在于,所述?=10000。
7.根據(jù)權利要求4所述的利用1?叩1011類代替“^0(^0面域進行圖形計算的方法,其特征在于,所述布爾運算包括交集、并集及差集計算,其中,交集計算采用卩叩1011111:61~8601: (^681011)方法,并集計算采用如#。]!.1)111011 (^681011)方法,差集計算采用1^6^1011.^01~ (^6^1011)方法。
8.根據(jù)權利要求4所述的利用1?叩1011類代替“^0(^0面域進行圖形計算的方法,其特征在于,所述點與面域的位置關系判斷方法為:采用0681011.18^1811316 (^01111:]7)方法。
【文檔編號】G06T11/00GK104463928SQ201410775243
【公開日】2015年3月25日 申請日期:2014年12月15日 優(yōu)先權日:2014年12月15日
【發(fā)明者】周志軍, 陳翰新, 向澤君, 張平, 朱清海, 劉遠凱, 何德平, 潘成軍, 謝征海, 周召兵, 馮永能, 劉洪海, 王昌翰, 張鳳英, 楊本廷, 朱偉, 冉瑞華, 廖中林, 劉洋河, 肖興國, 滕德貴, 岳仁賓, 黃建, 潘攀, 邱友榮, 范華鋒, 鄒方猛, 秦亞華, 田世華, 胡一勤, 吳昊, 覃渝, 余亨源, 陳劍坤, 沈翠, 陳小麗, 劉小云, 劉超, 吳秀娟, 徐娟 申請人:重慶市勘測院