1. 程式人生 > >GIS程式設計(七)實現基本向量圖形系統的文件和檢視(1) 組織向量圖形系統的圖形元素類

GIS程式設計(七)實現基本向量圖形系統的文件和檢視(1) 組織向量圖形系統的圖形元素類

GIS程式設計(七)實現基本向量圖形系統的文件和檢視(1

組織向量圖形系統的圖形元素類

本章將具體組織開發一個用於GIS系統的向量圖形系統。第一步是討論基本圖形系統中圖形元素類的組織,實現向量圖形系統的文件和檢視。

1、圖形元素基類的組織。

新建一個MFC多文件程式,命名為“Draw”。對各種圖形元素進行分析,可以發現各類圖形元素具有一些相同的屬性和操作功能,將圖形元素的公共屬性和操作抽象出來放在一個圖形元素基類中,具體的圖形元素類由這個基類派生。

在標頭檔案【Drawdoc.h】中,在【CDrawDoc】類的定義前,定義一個圖形元素基類【CDraw】。


1、直線類組織

直線類從圖形元素基類派生而來,直線的一些基本引數(如線型、線寬、顏色、刪除標誌等)從基類

CDraw類中繼承而來,對於直線的特殊性質(如直線的起點和終點)則在直線類中定義。在標頭檔案【Drawdoc.h】中,在【CDrawDoc】類的定義前,定義一個直線類【CLine

2、連續直線或封閉多邊形內組織

連續直線是由很多頂點組成的,頂點的數目是不確定的。在標頭檔案【Drawdoc.h】中,定義一個如下的結構來儲存連續直線的一個頂點座標。

typedef struct

{

float x;

float y;

float z;

}PointStruct;

為了節省儲存空間,對於連續直線的頂點座標,採用動態分配儲存空間的方法,即根據連續直線頂點的數目,在CPline物件中分配連續直線的儲存空間。在標頭檔案【

Drawdoc.h】中,定義連續直線或多邊形區域CPline

3、圓類組織

在標頭檔案【Drawdoc.h】中,定義圓類組織【CCircle

4、圓弧類組織

圓弧是圓的一個特例,所以可以從圓類派生而得到一個圓弧類。在標頭檔案【Drawdoc.h】中,定義圓弧類組織【CArc】。

5、標註文字類

圖形中可以有大量的標註文字,標註文字除了具有圖形元素的基本特徵外,還具有位置、字型及標註內容本身等自身的資訊。在標頭檔案【Drawdoc.h】中,定義標註文字類組織【CText】。

6、圖形引數類

在以上定義的圖形元素基類CDraw中,成員變數m_ColorPen等儲存的是在顏色列表的序列號,m_Layer中儲存的也是在圖層列表中的序列號。現在建立一個類來管理諸如顏色、圖層等方面的資訊。在標頭檔案【

Drawdoc.h】中,在圖形基類【CDraw】之前定義圖形引數類組織【CGraphPara】。

在圖形引數類【 CGraphPara】中,定義一個指向long型陣列 m_ColorList來管理顏色列表。

在應用程式【Draw】中,每個圖層的資訊用資料結構【LayerStruct】來表示,在標頭檔案【Drawdoc.h】中,在圖形基類【CGraphPara】之前定義結構【LayerStruct】。

typedef struct //用來儲存層的資訊的結構

{

char m_Name[21];//層的名稱

BOOL b_Display; //是否顯示1-顯示0-隱藏

int reserved; //備用

}LayerStruct;

在圖形引數類【 CGraphPara】中,定義一個【LayerStruct】結構陣列m_LayerList來管理圖層列表。

另外,還定義了兩個成員函式

COLORREF GetColor(int n); //得到第n種顏色的實際顏色

BOOL GetDisplayStatue(int n); //得到第n層的顯示狀態

在實現檔案【Drawdoc.cpp】中加入這兩個函式的實現程式碼。

注意:在【Drawdoc.cpp】以下程式碼的後面新增此成員函式的實現程式碼

 

COLORREF CGraphPara::GetColor(int n)

{

return m_ColorList[n]; //返回第n種顏色的實際值

}

BOOL CGraphPara::GetDisplayStatue(int n)

{

return m_LayerList[n].b_Display;

}

 

參考資料:陳建春,Visual C++開發GIS系統--開發例項剖析。

地理資訊科學

Writed By NX

QQ:1051926720