VC++开发GIS系统(182)剪断线之函数实现

本文目录
  • 正文

上文《VC++开发GIS系统(181)剪断线之判断点是否在线上函数实现》实现了判断点是否在线上的函数,本文继续前文的工作实现剪断线的函数。

函数定义

在_malaBase.h中定义剪断线的函数:

bool cutLine(malaPoint point, vector<malaPoint>& Line1, vector<malaPoint>& Line2);//剪断线

参数:

  1. point 鼠标点击的点
  2. Line1 原来的线(同时返回剪断两条线之一)
  3. Line2 新产生的线

函数实现

在_malaBase.cpp中实现剪断线的函数:

/*
* 剪断线
*/
bool malaLogic::cutLine(malaPoint point, vector<malaPoint>& Line1, vector<malaPoint>& Line2)
{
    vector<malaPoint>Line;
    Line = Line1;
    int length = Line1.size();
    int pos = 0;
    bool cutflag = FALSE;
    for (int i = 1; i < length; i++)
    {
        if (isPointInLine(point, Line[i - 1], Line[i]))
        {
            pos = i;
            cutflag = TRUE;
            break;
        }
    }

    if (cutflag)
    {
        Line1.clear();
        int j;
        for (j = 0; j < pos; j++)
            Line1.push_back(Line[j]);
        Line1.push_back(point);

        Line2.push_back(point);
        for (j = pos; j < length; j++)
            Line2.push_back(Line[j]);

        return TRUE;
    }

    return FALSE;

}

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

详细代码可以参考:GitHub

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

本站QQ群:291616564 麻辣GIS

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

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

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


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

发表评论