|
先说说mapgis二次开发的开发环境:
Win2000,VC 6.0,平台:mapgis65及其对应的SDK。至于二次开发的开发环境配置我就不细说了。打开Tin文件的操作主要是在Tin工作区进行的。Tin工作区的主要操作函数放在"Tin_area.h"中。
首先我们先熟悉一下mapgis中的Tin三角网的结构。
typedef struct tagTinNetDispParam
{
long PntColNo; //顶点颜色号.
long LinColNo; //网线颜色号.
BOOL IsDispPntNo; //是否显示高程点号.
BOOL IsDispTriNo; //是否显示三角网号.
BOOL IsDispCode; //是否显示地性码.
BOOL IsDispValue; //是否显示高程值.
short sDemValDn; //高程值显示小数位数.
} TinNetDispParam;
打开Tin文件主要用到的就三个函数:
TinAI WINAPI _tnGetTinAI(void); // 创建Tin工作区
short WINAPI _tnClearArea(TinAI tinAi); // 在Tin工作区上装载Tin文件
short WINAPI _tnDispTinNet(MyDC mdc,TinAI tinAi,TinNetDispParam *NetDispParam); // 显示三角剖分
具体的步骤:
1. 在视图类添加必要的变量
TinAI m_Tinai; // 工作区号
TinNetDispParam *NetDispParam; // 三角网结构体指针变量
bool b_ShowTin; // 是否显示Tin文件,初始化为false,即不显示
2. 添加相应的“装入Tin文件”的菜单
3. 通过CLASS WIZARD为装入Tin文件建立对应的映射函数
void CMyEditView::OnTinarea()
{
// TODO: Add your command handler code here
m_Tinai = _tnGetTinAI(); // 获得工作区号
if(_tnLoadFile(m_Tinai)==1) // 假如装载Tin文件成功
{
b_ShowTin=TRUE; // 显示Tin文件
Invalidate(); // 重画客户区
}
}
4. 在OnDraw函数里添加相应的显示Tin文件的代码
void CMyEditView::OnDraw(CDC* pDC)
{
CMyEditDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CGisEditView::OnDraw(pDC);
if(b_ShowTin)
{
MyDC mdc=_GetMyDC(); // // 取显示对象句柄
NetDispParam = new TinNetDispParam; // 为指针变量开辟空间
if(NetDispParam==NULL) return;
NetDispParam->LinColNo=6; // 设置线色的显示颜色为红色,也可以设置其它颜色
NetDispParam->ntColNo=6; // 设置顶点颜色为红色
NetDispParam->IsDispValue=TRUE;
NetDispParam->IsDispPntNo=TRUE;
NetDispParam->IsDispCode = TRUE;
NetDispParam->IsDispTriNo = FALSE;
_tnDispTinNet(mdc,m_Tinai,NetDispParam);
delete NetDispParam;
NetDispParam=NULL;
_DeleteMyDC(mdc); //删除显示对象
return;
}
}
5. 既然有相应的打开工作区的代码,也应有相应的清除工作区的代码。
添加“清除Tin工作区”的菜单,通过CLASS WIZARD建立相应的映射函数
void CMyEditView::OnClearTinArea()
{
// TODO: Add your command handler code here
b_ShowTin=FALSE; 字串8
Invalidate();
_tnDeleteTinAI(m_Tinai);
}
感觉掌握mapgis的二次开发首先要清楚要在哪些头文件找操作函数。找到相应的头文件后就要熟悉相应的数据结构和选择操作函数。最后结合VC的知识设置适当的变量并对这些变量赋值并传给相应的操作函数基本上就可以完成。 |
|