口的保护和快速恢复等功能。CGisView类是MAPGIS类库中大多数类的基类。
CGisEditView 类继承了CGisView 类。它封装了MAPGIS编辑处理的基本数据对象和方法。包括几乎所有的点、线、区的编辑功能以及图层的处理函数、矢量化函数、节点平差函数、数字化函数、最基本的文件操作功能。CGisEditView类及其基类组成了十分强大的图形编辑函数库。
用户开发自己的软件时最好是继承CGisEditView类,这样用户可以同时使用BaseEditWindow 、CGisView 、CGisEditView类及VC++的Cview类所提供的所有功能。 CPrjEditView类继承了CGisEditView 类,它集成了对工程文件进行编辑处理所必需的数据对象的方法,具有对整个工程文件的各个文件编辑处理功能。
6.MAPGIS的开发环境介绍
使用VC++开发MAPGIS应用程序的最快速有效的方法就是使用MAPGIS类库。这些类已经为用户的程序与MAPGIS操作平台的接口做好了准备,用户可以体会到使用这些类可以很容易地实现MAPGIS系统里的功能,而且在实现MAPGIS系统功能的基础上用户还可以随意地添加自己想要的功能。下面我们以CGisEditView类为例讲述如何构造一个简单的MAPGIS图形编辑器的方法和基本步骤。 第一步、建一个Visual C++的项目。打开Visual C++工作环境,选择File菜单New命令,在弹出的对话框中选择Projects页的MFC AppWizard(EXE)项并在Project name编辑框中敲入工程名(例如:engineer),然后单击OK。这样便进入了AppWizard(向导)的第一步,在这一步里用户要选择工程类型,可以选择单文档或多文档工程(基于对话框的工程不适合我们建MAPGIS工程),初学者最好选单文档类型;单击Next进入向导的第二步、第三步、直到完成(Finish之后OK),这几步用户可以采用默认设置。到此为止一个VC的项目已建好,然后用户的工作就是在这个项目中实现MAPGIS平台中的功能及自己想要的其他功能。
第二步、要完成的工作是将工程中的视图类改为继承CGisEditView类。具体操作是打开工程中的视图类的两个文件(*View.h、*View.cpp),用Visual C++查找替换功能(Edit菜单下的Rplace命令或热键Ctrl+H)分别将这两个文件中的CView字符串全部替换为CGisEditView,替换完毕,在工程中视图类的定义前面加入#include “cgisedit.h”,这样就完成了CGisEditView类的继承。
第三步、调用CGisEditView类中的OnDraw(pDC)函数,以完成绘图工作的预先处理。具体操作方法:在视图类的OnDraw(CDC* pDC)函数中加语句CGisEditView::OnDraw(pDC)。见下面示例:
void CEngineerView::OnDraw(CDC* pDC) { }
图12-3 添加函数实现图形显示
CEngineerDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc);
// TODO: add draw code for native data here CGisEditView::OnDraw(pDC);
第四步、对Visual C++的工作环境进行必要的设置,这些设置很重要。 第1项(字节)设置:选择Project菜单下的Settings命令,在C/C++页面上,Category一栏选择 Code Generation,并将Struct Member alignment设定为1 Byte。
第2项(输出目录)设置:把生成的可执行文件输出到MAPGSI动态连接库所在的目录下。
第3项(包含库)设置:设置头文件及库文件的路径。选择Tools菜单下的Options命令
完成这几步用户就可以进行编译连接,执行,在客户区单击鼠标右键你会发现弹出一个有关MAPGIS操作的快捷菜单。这时用户可以使用CGisEditView类及其基类中的函数设计自己的基于MAPGIS的图形软件了。
CPrjEditView类(或CGisView类)的使用方法和CGisEditView类的使用方法基本相同,只不过要继承CPrjEditView类(或CGisView类)。
第五讲MAPGIS空间数据存取和属性编辑
1.工作区操作
1.1 工作区介绍
逻辑缓冲池 工作区 (实体数据) 网络数据库 本地文件 物理存储 1.2工作区操作函数
[工作区操作流程]
1)初始化工作区实例(_InitWorkArea) 循环[2>,5>]
2)打开工作区(点,线,区,网,表)(_OpenArea) 3)装文件至工作区(_LoadFile) 4)...实体(图形,属性)操作,表格操作...... 5)关闭打开的工作区(_CloseArea) 6)释放工作区实例(_FreeWorkArea)
C示范:打开点工作区,装入点文件
AHINST AHInst; short AiPnt;
AHInst = _InitWorkArea(m_hInstance); AiPnt =_OpenArea(AHInst,PNT); If(_LoadFile(AiPnt) > 0) {
…..//实体操作
}
_CloseArea(AiPnt); _FreeWorkArea(AHInst);
1.3 工作区函数
1>AREA_HINST _InitWorkArea(HINSTANCE hInst); 2>int 3>short 4>int _FreeWorkArea(AREA_HINST ahInst);
_OpenArea(AREA_HINST,short type);
_CloseArea(short ai); (_SetChangeFlag(short ai,char flag);) 5>short
_LoadAFile(char * datName,short ai);
short _LoadFile(short ai); 6>char _GetAreaType(short ai); 7>short _IsAreaEmpty(short ai); 8>short _IsOpenArea(short ai);
9>short _GetAreaNumber(AREA_HINST ahInst); 10>short
_GetFirstAreaNo(AREA_HINST ahInst);
11>short _GetNextAReaNo(AREA_HINST ahInst); 12>short
_SaveFile(short ai,short ver=VERSION); _SaveAFile
C示范:读取属于AHInst实例的所有工作区 short i,ai,an;
an = _GetAreaNumber(AHInst); ai = _GetFirstAreaNo(AHInst);
for(i = 0; i < an; i++,ai = _GetNextAreaNo(AHInst)) { //使用工作区ai... }
2.空间实体操作
实体存取主要依据实体数据的唯一标识:实体号 实体(Lin,Pnt,Nod,Reg,Net) 2.1 取实体个数
_Get...Num: 逻辑数,物理数 2.2 取实体空间数据,图形数据
_Get... 2.3 实体操作
1)取实体图形参数 _Get...Info 2)更新实体图形参数 _Update....Info 3)添加实体 _Append... 4)删除实体 _Del... 5)撤销删除实体 _UnDel...
[注意]:函数返回:1==>成功;0==>失败;-1==>该图元被删除 C示范:从给定的ai号工作区重读区所有的线
long i,linN; long len; LIN_INFO linf; D_DOT *lxy;
_GetLinNum(ai,&i,&linN);//取线实体数,i返回逻辑数,linN返回物理数 for(i = 1;i < linN; i++) {
if(_GetLin(ai,&lxy,&len,&Linf) <= 0) continue;
//处理线实体代码 //... }
2.4 特殊函数
线(拓扑)==>_GetLinTop;_WriteLinTop;_ClearLinTop 区==>合并_UnionRegAtoB,分裂_SplitReg 2.5 拷贝操作
_CopyPart...(_CopyPartLin...) _CopyAll...(_CopyAllLin...) _CopyList...(_CopyListLin...)
3.属性(属性结构)操作
3.1属性结构
1)属性结构描述
CAtt_Stru
2)属性结构函数
a.取属性结构:_GetAttStru b.设置属性结构:_SetAttStru
c:添加属性结构字段:_AppendStruFld
d:删除属性结构字段:_DelStruFldOnNumb, _DelStruFld
e:编辑属性结构:_EditStruct f:浏览属性结构:_ViewStruct
g比较属性结构: _IsSameAttStru
C示范:向给定的ai号点工作区的点属性结构添加double类型字段”产量”,字符串类型字段”地方”;
CFIELD_HEAD fldEntry;
lstrcpy(fldEntry.fieldname,”产量”); fldEntry.fieldtype=DOUBLE_TYPE fldEntry.msk_leng=15;
fldEntry.point_leng=6;
_AppendStruFld(ai,PNT,1,&fldEntry); lstrcpy(fldEntry.fieldname,”地方”); fldEntry.fieldtype=STR_TYPE fldEntry.msk_leng=64;
_AppendStruFld(ai,PNT,1,&fldEntry);
3.2 属性操作
1)属性数据表示===>属性表 2)属性操作函数
a.取属性:_GetAtt
b.写属性:_WriteAtt
d:编辑属性结构:_EditStruct
e:浏览属性结构:_ViewStruct 3)字段操作函数 a.取字段值
_CvtFldToString,_CvtFldToString1 b.设置字段值
_SetFld,_SetFldFromStr
_SetFldOnNumb,_SetFldOnNumbFromStr
设置字段值之后,要写属性_WriteAtt,才能将字段值写入工作区
4)图形数据和属性联动闪烁显示 5)属性数据的输入,输出 6)属性连接
long WINAPI _LinkTbl1(CLinkTblInfo &linkTblInfo); 7)属性外挂
4.网络介绍
4.1 MAPGIS网络环境的建立 4.2函数
1)装文件_LoadFile
2)存文件_SaveFile 3)锁图元 _Lock… 4.3 其他概念 1)数据源 2)用户,角色 3)访问权限 4)加锁
第六讲 图形显示输出及窗口操作
1. 图形显示输出
1.1显示输出的基本原理
1)逻辑坐标、设备坐标、窗口坐标、屏幕坐标 基本概念:
逻辑坐标:逻辑坐标又称图形坐标或用户坐标,(现统称逻辑坐标),是用户处理自己的图形实际所采用的坐标系。例如:用户自定义坐标、大地坐标、地理坐标。
设备坐标:是图形设备的坐标系。数字化仪该设备的坐标原点一般在中心;笔式绘图仪以步距为单位,以中心或某一角为原点;在MAPGIS二次开发中,应用程序窗口也是一种
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库二次开发初级培训班培训讲义(5)在线全文阅读。
相关推荐: