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

如果本文对你有所帮助,欢迎对我们团队进行打赏捐助,让我们在传播3S的路上可以走得更远。
赞赏支持
微信捐助麻辣GIS 支付宝捐助麻辣GIS

麻辣GIS-Sailor
作者:
GIS爱好者,学GIS,更爱玩GIS。

如您有疑问,可在文末留言,也可在 麻辣GIS•小分队 搜索回答或发帖 ,还可以在QQ群中提问。

本站QQ群(一):291616564 麻辣GIS

本站QQ群(二):166408035 麻辣GIS(二)

本站QQ群(三):627853279 麻辣GIS(三)

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

发表评论