在做MapGIS二次开发的过程中经常遇到一些问题,在网上搜的过程中发现关于MapGIS二次开发的文章非常少,因此打算慢慢将自己做二次开发的一些经验分享在博客里,供有需要的朋友参考,用不着的童鞋可以绕道了~~
利用MapGIS作图过程中经常要用到丁字线或十字线来描述一些特定的地理标识,MapGIS中要作上述的线型需要手工拖拽两根或者数根直线连接,并且精确度不高,因此可以在二次开发过程中加入快速添加类似丁字线等线型的功能,对于作图人员来说这是很方便的。
就拿简单的丁字线来做示范,实现思路其实很简单,就是先取得鼠标左键按下时点的坐标,然后取得左键松开时点的坐标,将这两个点坐标进行简单的加减运算得出丁字线的四个点坐标,再调用_AppendLin函数将线加入到工作区中即可。具体代码示例如下:
鼠标左键按下的响应事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void CMyPrjEditView::OnLButtonDown(UINT nFlags, CPoint point) { StartX = point.x; //获得起点横坐标 StartY = point.y; //获得起点纵坐标 EndX = point.x; EndY = point.y; FlgSetCapture = 1; if(m_bLinToArea) { if(m_dat==NULL) m_dat = new D_DOT[2]; if(m_dat1==NULL) m_dat1 = new D_DOT[2]; _WpToLp(&point, &m_dat[0]); //屏幕坐标转化为工作区坐标 } CPrjEditView::OnLButtonDown(nFlags, point); } |
鼠标移动的响应事件:
1 2 3 4 5 6 7 8 | void CMyPrjEditView::OnMouseMove(UINT nFlags, CPoint point) { _DrawXORRect(StartX, StartY, EndX, EndY); EndX = point.x; EndY = point.y; _DrawXORRect(StartX, StartY, EndX, EndY); //画一个矩形范围表示丁字线的范围 CPrjEditView::OnMouseMove(nFlags, point); } |
鼠标左键松开时的响应事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | void CMyPrjEditView::OnLButtonUp(UINT nFlags, CPoint point) { LIN_INFO inf; //横线 LIN_INFO inf1; //竖线 Ai=GetCurrentLinArea(); FlgSetCapture = 0; if(m_bLinToArea) { _WpToLp(&point, &m_dat[1]); //屏幕坐标转化为工作区坐标 _WpToLp(&point, &m_dat1[1]); m_dat[1].y=m_dat[0].y; memset(&inf, 0, sizeof(LIN_INFO)); inf.lclr = 0; inf.lw = 0.5; inf.ltp = 1; inf.lclass=1; //初始线结构体 _AppendLin(Ai, m_dat, 2, &inf, 2); //向工作区中添加横线 m_dat1[0].x=(m_dat[0].x+m_dat[1].x)/2; m_dat1[0].y=m_dat[0].y; m_dat1[1].x=m_dat1[0].x; memset(&inf1, 0, sizeof(LIN_INFO)); inf1.lclr = 0; inf1.lw = 0.5; inf1.ltp = 1; inf1.lclass=1; _AppendLin(Ai, m_dat1, 2, &inf1, 2); //向工作区中添加竖线 if(m_dat!=NULL) { delete [2] m_dat; m_dat = NULL; } if(m_dat1!=NULL) { delete [2] m_dat1; m_dat1 = NULL; } _UpdateWindow(); //更新工作区窗口显示线 } CPrjEditView::OnLButtonUp(nFlags, point); } |
由这个功能的实现你可以延伸出更多的功能实现,比如十字线、贝塞尔曲线等等,加上这些简单实用的小工具,你的二次开发软件肯定会比原MapGIS更容易得到编图人员的青睐~~~
唉,我还是绕道吧~
呵呵,到博主这里来看看了,支持博主来了
程序写的真不错,比我强多了,佩服中…
@小段 这种类型的程序你们也用不到嘛
😀 佩服啊
博主好厉害哦。呵呵
MapGIS ❗ ❗ 你厉害
@卢松松 一行有一行的工具 呵呵
什么嘎嘎?瞟了几眼,感觉看不懂,不愿意看!写点俺看的懂的行不?
@弄你! 看新的这篇吧!太空照片很漂亮的 😉