【MapGIS二次开发】丁字线(T字线)的绘制

/ 10评 / 0

  在做MapGIS二次开发的过程中经常遇到一些问题,在网上搜的过程中发现关于MapGIS二次开发的文章非常少,因此打算慢慢将自己做二次开发的一些经验分享在博客里,供有需要的朋友参考,用不着的童鞋可以绕道了~~

  利用MapGIS作图过程中经常要用到丁字线或十字线来描述一些特定的地理标识,MapGIS中要作上述的线型需要手工拖拽两根或者数根直线连接,并且精确度不高,因此可以在二次开发过程中加入快速添加类似丁字线等线型的功能,对于作图人员来说这是很方便的。

  就拿简单的丁字线来做示范,实现思路其实很简单,就是先取得鼠标左键按下时点的坐标,然后取得左键松开时点的坐标,将这两个点坐标进行简单的加减运算得出丁字线的四个点坐标,再调用_AppendLin函数将线加入到工作区中即可。具体代码示例如下:

  鼠标左键按下的响应事件:


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);
}

  鼠标移动的响应事件:

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);
}

  鼠标左键松开时的响应事件:

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二次开发】丁字线(T字线)的绘制” 》 有 10 条评论

  1. huangjun说道:

    唉,我还是绕道吧~

  2. 太子虹说道:

    呵呵,到博主这里来看看了,支持博主来了

  3. 小段说道:

    程序写的真不错,比我强多了,佩服中…

  4. 宁波LED说道:

    博主好厉害哦。呵呵

  5. 卢松松说道:

    MapGIS ❗ ❗ 你厉害

  6. 弄你!说道:

    什么嘎嘎?瞟了几眼,感觉看不懂,不愿意看!写点俺看的懂的行不?

回复 弄你! 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注