ArcObjects SDK開發 012 PageLayout和Page

mytudousi發表於2022-12-07

1、從ArcMap角度看結構

一個Mxd檔案包含一個PageLayout物件和一個多多個Map物件,每個Map會被包成MapFrame,新增到PageLayout中。我們用ArcMap開啟一個mxd檔案,在佈局模式下看PageLayout都包含了什麼。

image1.png

PageLayout包含的內容以及內容之間的關係較為複雜,整體上可以分為兩個部分,Page和Elment。Elment又包含3類,MapFrame、MapSurroundFrame和普通的Element。每個MapFrame都會載入一個Map,並可以設定網格(MapGrid),每個MapSurroundFrame都對應一個MapFrame。看起來比較複雜,我們對應一下實際的東西就容易理解了。

MapFrame,翻譯過來就是地圖容器,Map會放到MapFrame後新增到PageLayout中。地圖文件有幾個Map,PageLayout中就會有幾個MapFrame。MapSurroundFrame是MapSurround的容器,繼承IMapSurround的物件有指北針、比例尺以及圖例等。這些物件都和Map密切相關。所以每個MapSurroundFrame都會關聯一個MapFrame,不然MapSurroundFrame中的MapSurround物件就不知道該如何渲染了。

2、從SDK的角度看

如果從ArcMap上看感覺亂糟糟的,那麼從SDK的角度看會清晰很多。

image2.png

PageLayout包含兩個最重要的內容,一是繼承實現了IPageLayout介面,定義了Page屬性,Page較為簡單。第二是繼承實現了IGraphicsContainer介面,這樣就可以在PageLayout上面載入和顯示Element。

在繼承IElement介面的類中,有兩個特殊的類,MapFarme和MapSurroundFrame。MapFarme是Map的載體,Map透過MapFarme載入顯示到了PageLayout上。MapSurroundFrame為和地圖相關的圖飾物件的載體,例如指北針、比例尺、圖例等,這些物件都繼承了IMapSurround介面,透過MapSurroundFrame載入顯示到PageLayout上。每個MapSurroundFrame都對應一個MapFarme,從而確定載入的指北針、比例尺是針對哪個地圖的。

MapFarme有一個比較重要的屬性MapGrids,可以管理多種針對MapFrame的各種格網,例如經緯網、公里網等。

3、Page

Page物件可透過IPageLayout的Page屬性獲得,為IPage介面型別。Page翻譯過來就是紙張的意思,其意義也是如此,標識我們要出的圖要繪製在多大的紙張上。我們開啟ArcMap,在沒載入任何地圖的情況下,系統會建立一個空地圖。切換到佈局檢視下,最外面的黑色邊框即為Page的範圍。如下圖所示。

image3.png

處於選中狀態的綠色虛線是MapFrame,當前載入的地圖沒有任何圖層。其外面的黑色實線是Page的邊界,我們出圖的時候,只能出位於Page範圍內的元素。Page預設單位是釐米,也可以設定為毫米或者英寸。Page預設是A4紙大小,其大小是可以設定的。Page左下角為0,0點,向右為X軸正方向,向上為Y軸正方向。

Page可設定的屬性資訊不多,我們可以參考下ArcObject SDK幫助中IPage的定義來看Page可以設定哪些資訊。

image4.png

從幫助上看,大概可以設定Page的邊框、背景、大小以及單位等資訊。我們平常使用的主要還是設定大小和單位。

相關文章