免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 3204|回复: 3
收起左侧

[经验共享] MapGIS二次开发之打开Tin文件

[复制链接]

7656

主题

1178

铜板

2299

好友

技术员

为地信喝彩!

积分
106237
QQ
发表于 2010-9-22 11:07 | 显示全部楼层 |阅读模式
先说说mapgis二次开发的开发环境:

Win2000,VC 6.0,平台:mapgis65及其对应的SDK。至于二次开发的开发环境配置我就不细说了。打开Tin文件的操作主要是在Tin工作区进行的。Tin工作区的主要操作函数放在"Tin_area.h"中。
2.jpg
首先我们先熟悉一下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-&gtntColNo=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的知识设置适当的变量并对这些变量赋值并传给相应的操作函数基本上就可以完成。
地质啷http://weibo.com/943569550

0

主题

124

铜板

1

好友

技术员

好好学地信

Rank: 3Rank: 3

积分
47
发表于 2010-11-2 13:30 | 显示全部楼层
在学二次开发中,非常感谢楼主啦
太阳一直都在。。。。

1

主题

2738

铜板

0

好友

教授级高工

Rank: 12Rank: 12Rank: 12

积分
1473
发表于 2022-1-23 15:10 | 显示全部楼层
感谢分享                                             
回复 支持 反对

使用道具 举报

0

主题

5286

铜板

1

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2348
QQ
发表于 2022-3-22 11:16 | 显示全部楼层
学习一哈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表