VC++开发GIS系统(185)线上加点之核心函数实现

本文目录
  • 正文

继续我们的VC++开发GIS的过程,本文要介绍的功能是:线上加点。

功能描述

  1. 选中一条线
  2. 在线上单击
  3. 如果单击的点在线上,则线加了一个节点。

效果如图:

函数定义

在_malaBase.h中定义线上加点的函数:

bool addPointInLine(malaPoint point, vector<malaPoint>& Line);//线上加点

参数:

  1. point 鼠标点击的点
  2. Line 被选中的线

函数实现

在_malaBase.cpp中实现线上加点的函数:

/*
* 线上加点实现
*/
bool malaLogic::addPointInLine(malaPoint point, vector<malaPoint>& Line)
{
    bool Tug = FALSE;
    int length = Line.size();
    vector<malaPoint>MyLine;
    int pos = 0;
    for (int i = 1; i < length; i++)
    {
        if (isPointInLine(point, Line[i - 1], Line[i]))
        {
            Tug = TRUE;
            pos = i;
        }
        MyLine.push_back(Line[i - 1]);
        if (Tug)
            break;
    }

    if (Tug)
    {
        MyLine.push_back(point);
        for (int j = pos; j < length; j++)
        {
            MyLine.push_back(Line[j]);
        }
        Line = MyLine;
        MyLine.clear();
        return TRUE;
    }
    return FALSE;
}

其中 isPointInLine 函数可以参考:VC++开发GIS系统(181)线上加点之判断点是否在线上函数实现

详细代码可以参考:GitHub

如您有疑问,可在文末留言,或到QQ群提问。

本站QQ群:291616564 麻辣GIS

微信公众号:malagis,扫描右边二维码直接关注。

微信捐助麻辣GIS 支付宝捐助麻辣GIS

如果本文对您有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。


作者:,GIS爱好者。
分享本文,请您带上本文链接

发表评论