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

VC++开发GIS系统(184)剪断线之菜单响应 VC++开发GIS系统(186)线上加点之类的设计及实现

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

发表评论