Geometry是ArcGIS Engine中使用最為廣泛的對象集之一,用戶在創建、刪除、編輯和進行地理分析的時候,就是處理一個包含幾何形體的矢量對象;除了顯示要素意外,控件對象選擇,要素符號化,標注要素,編輯要素都需要Geometry參與。圖1是Geometry的主要幾何對象模型圖,接下來將一一介紹這些幾何對象。
ICurve接口的Length屬性用於返回一個Curve對象的長度。
ICurve接口的FromPoint和ToPoint屬性可以獲得Curve對象的起止點。
ICurve接口的Reverseorientation方法可以改變一個Curve對象的節點次序即調動Curve對象的起始點和終止點互相調換。
ICurve接口的IsClosed屬性則可以判斷一個Curve對象起始點和終止點是否在一個位置上。
ICurve接口的GetSubcurve方法可以復制一條Curve對象的特定部分,例如一條10千米公路的Curve對象,獲取2-5千米處的公路的曲線代碼片段如下所示:
//QI到ICurve接口
ICurve pCurve = pPolyline as ICurve;
//創建一個Polyline對象
ICurve pNewCurve = new PolylineClass();
bool btrue= true;
//獲取-5千米間的曲線對象
pCurve.GetSubcurve(2, 5, btrue, out pNewCurve);
此外ICurve的QueryTangent和QueryNormal方法分別用於獲取Curve對象上某一點的曲線的切線和法線。
2.4.7 Triangle Strip和Trangle Fan, Trangle,Ring幾何對象
Triangle Strip和Trangle Fan, Trangle,Ring是構成MultiPatch幾何對象的構建對象。
2.4.7.1Triangle Strip幾何對象
TriangelStrip對象是由一系列點定義的曲面片組成,而曲面片是有若干個三角形所組成,所以這個曲面可以定義為:(0,1,2) ,(2, 1, 3), (2, 3, 4), (4, 3, 5)。
2Trangle Fan幾何對象
一個Trangle Fan對象由一系列點定義的曲面片組成,所不同的是所有的三角形共享一個頂點。如下圖所示,所以這個曲面可以定義為:(0,1,2) ,(0,2, 3), (0, 3, 4), (0, 4, 5)。
3Triangle幾何對象
Triangle由三個點所確定如下圖,一個Triangle可定義為(0,1,2)等。
4Ring幾何對象
Ring和前邊介紹的組成Polygon的Ring一樣,例如下邊一個房屋組成它的牆是個OutRing對象,而窗戶和門是InnerRing對象
8Multipatch幾何對象
Multipatch幾何對象用於描述3D圖形,可以由TriangleStrip, TriangleFan, Triangle和ring對象組合構成組成。Multipatch可以通過多種方式創建,一種是通過導入外部3D格式數據文件(3D Studio Max .3ds files, OpenFlight .flt files, COLLADA .dae files, Sketchup .skp files, VRML .wrl files),另外ArcGIS Engine提供了多種創建Multipatch幾何對象的方法:
如果創建沒有貼圖紋理,沒有法向,沒有組成部分信息的Multipatch時,只需創建好組成的Multipatch的各個部分即可,然后通過MultiPatch的IGeometryCollection接口添加各個組成部分即可。
如果要為Multipatch每個組成部分添加紋理信息,法向信息,屬性信息就必須使用GeneralMultiPatchCreator
通過IConstructMultiPatch接口和IExtrude接口操作GeometryEnvironment對象可以通過拉伸Polyline對象(拉伸為牆)和Polygon對象(拉伸為多面體)來創建MultiPatch.
通過訪問3D符號庫,獲取3DSymbol來渲染點,把三維符號放置在點的位置從而生成Multipatch.
接下來給大家介紹通過GeneralMultiPatchCreator
GeometryMaterial:用於構建材質,通過IGeometryMaterial創建的材質可以作為TextureLineSymbol或者 TextureFillSymbol屬性用來創建這些符號,也可以把它添加到GeometryMaterialList對象中,用於GeneralMultipatchCreator
GeometryMaterialList:材質對象的容器用於GeneralMultiPatchCreator
GeneralMultiPatchCreator
9Geometry集合接口
通過前邊對於具體的Geometry對象的介紹可知,除了Point對象之外,其他幾何對象都是通過其他幾何對象集合構建而成。如MultiPoint對象是點的集合,Path對象是Segment對象的集合,Polyline對象是Path對象的集合,Polygon對象是Ring對象的集合,Multipatch對象是Triangle Strip和Trangle Fan, Trangle,Ring對象的集合。
ArcGIS Engine提供了三個主要的幾何圖形集合接口用於對幾何對象的操作,分別是IPointCollection,ISegmentCollection和IGeometryCollection,這些接口揭示出ArcGIS Engine的幾何模型的實質——它們是一種組合構成的模式,這種組合並不一定按照嚴格的層次結構組織。
在前面介紹一些幾何對象的時候,也給大家演示了部分使用功能,這三個接口在程序開發中經常使用到,接下來簡單闡述以下這三個接口的使用方法。
2.4.9.1IGeometryCollection接口IGeometryCollection接口被Polygon,Polyline, Multipoint, Multipatch, Trangle,T rangle Strip,Trangle Fan和GeometryBag所實現。IGeometryCollection接口提供的方法可以讓開發者對一個幾何對象的組成元素即子對象進行添加,改變和移除。例如:
組成Polyline對象的子對象是Path對象。
組成Polygon對象的子對象是Ring對象。
組成Multipoint對象的子對象是Point對象。
組成MultiPatch對象的子對象是TrangleFan TrangleStrip,Triangle或Ring對象。
組成GeometryBag對象的是任何類型的幾何體對象,實際上GeometryBag是一個可以容納任何類型幾何對象的容器。
IGeometryCollection的Geometry 屬性可以通過一個索引值返回一個組成該幾何對象的某個子對象,而GeometryCount返回組成該幾何對象的子對象的數目。
IGeometry的AddGeometry和AddGeometries方法都用於向一個幾何對象添加子對象,它們的區別是前者一次只能添加一個幾何對象,而后者可以一次添加一個幾何對象數組。除此之外,AddGeometry方法可以將子對象添加到幾何的指定索引值的位置,而AddGeometries方法將子對象數組添加到集合的最后。
在使用AddGeometry方法添加子對象到Polygon對象的過程中,如果子對象即Ring出現覆蓋現象,那么多邊形就沒有封閉或出現了包含關系,那么這個Polygon就不是簡單Polygon,因此通過IGometryCollection來創建一個Polygon時,需要使用ITopologicalOperator 的Simplify方法保證其有效性。
.4.9.2ISegmentCollection接口
ISegmentCollection接口被Path,Ring,Polyline和Polygon四個類所實現,它們被稱作是Segment集合對象,使用這個接口可以處理組成Segment集合對象中的每一個子Segment對象。使用ISegmentCollection接口可以為一個Segment集合對象添加,插入,刪除Segment子對象。ISegmentCollection接口SetCircle和SetRectangle方法提供了一種簡單不需要添加Segment的情況下構建一個完成的Path,Ring,Polyline和Polygon的方法。
2.4.9.3IPointCollection接口
IPointCollection可以被多個幾何對象類所實現,這些對象都是由多個點構成如:Mullipoint,Path,Ring,Polyline,Polygon,TriangleFan,TrangleStrip,Trangle,Multipatch等,它們都可以稱作PointCollection對象,通過IPointCollection接口定義的方法可以獲取,添加,插入,查詢,移除幾何對象中的某個頂點。同以上兩個接口一樣它也定義了操作一個點集合對象的方法,例如通過AddPoint方法可以向PointCollection對象中的特定索引位添加一個點對象,如果不指定位置,則添加到最后。通過IPointCollection的Point屬性通過頂點索引可以得到某一頂點。
在本章節最后的Demo 實例將為大家演示IPointCollection提供的功能。
2.4.10幾何對象總結
在Geometry模型中的幾何對象分為兩種類型,一類是用來直接構建要素類的稱為高級幾何對象,一類用來構建高級幾何對象相對低一級的幾何對象成為構建幾何對象如下表所示:
幾何對象名稱 |
所屬類別 |
構成子幾何對象 |
用於創建和編輯的接口 |
Polyline |
高級 |
Path |
IGeometryCollection, IPointCollection |
Polygon |
高級 |
Ring |
IGeometryCollection, IPointCollection |
MultiPoint |
高級 |
Point |
IGeometryCollection, IPointCollection |
MultiPatch |
高級 |
TrangleFan,Ring TrangleStrip ,Trangle, |
IGeometryCollection, IPointCollection |
Ring |
低級 |
Segment |
ISegmentCollection, IPointCollection |
Path |
低級 |
Segment |
ISegmentCollection, IPointCollection |
Segment |
低級 |
Point |
IPoint,ILine, ICurve |
TriangleFan |
低級 |
Point |
IGeometryCollection, IPointCollection |
TriangleStrip |
低級 |
Point |
IGeometryCollection, IPointCollection |
Triangle |
低級 |
Point |
IGeometryCollection, IPointCollection |
Point |
高級/低級 |
無 |
IPoint |