麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

VC++开发GIS系统(162)重绘线之查找可视范围所有的线

继续前文重绘线工作,在重绘窗口的时候,判断可视范围下的所有图形可以在一定程度上提高程序的运行速度。 在文章《VC++开发GIS系统(92)窗口的重绘(二)》中讲解了获取可视范围下所有点的函数,本文实现一个获取可视范围下所有线的函数。

#### 函数定义

在_malaIO.h的CLineIO中添加下面的函数

void getAllLines(malaScreen &pScreen, vector<malaLineFile>&pAllLines, CString &fileName);//获取某个文件中某一范围的所有的线

参数:

  1. pScreen 当前的屏幕
  2. pAllPoints 返回的所有可视的线
  3. fileName 线文件的完整路径

函数实现

在_malaIO.cpp中实现上述函数

//获取某个文件中某一范围的所有的线
void CLineIO::getAllLines(malaScreen &pScreen, vector<malaLineFile>&pAllLines, CString &fileName)
{
    CFile file;
    file.Open(LPCTSTR(fileName), CFile::modeRead | CFile::modeCreate | CFile::modeNoTruncate);
    CArchive ar(&file, CArchive::load);
    if (pAllLines.size())
        pAllLines.clear();

    vector<malaPoint> tLine;
    malaLinePro tLinePro;
    malaPoint tPoint;
    int pointNum;
    while (1)
    {
        try
        {
            ar >> tLinePro.lineId >> tLinePro.lineStyle >> tLinePro.lineWidth >> tLinePro.lineColor;
            ar >> pointNum;
        }
        catch (CException* e)
        {
            break;
        }

        for (int i = 0; i < pointNum; i++)
        {
            try
            {
                ar >> tPoint.x >> tPoint.y;
            }
            catch (CException* e)
            {
                break;
            }
            tLine.push_back(tPoint);
        }
        //检查是否在可视范围内
        
        malaLogic mylog;
        malaRect lineRc = mylog.getRect(tLine);
        malaRect screenRc;
        screenRc.xmin = pScreen.lbx;
        screenRc.ymin = pScreen.lby;
        ScreenToCoord(pScreen.wScreen, 0, pScreen, &screenRc.xmax, &screenRc.ymax);

        if (mylog.isRectIntersect(lineRc,screenRc))
        {
            malaLineFile MyLine(tLine, tLinePro);
            pAllLines.push_back(MyLine);
        }
        tLine.clear();
    }
}

这里用到的getRect参考文章:VC++开发GIS系统(160)重绘线之获取一个图形的外接矩形,isRectIntersect函数参考:VC++开发GIS系统(161)判断两个矩形是否相交

详细代码可以参考:GitHub

麻辣GIS-Sailor
作者:
GIS爱好者,学GIS,更爱玩GIS。
微博关注
手机阅读
赞赏支持
手机阅读
微信捐助麻辣GIS
微信打赏
支付宝捐助麻辣GIS
支付宝打赏

声明

1.本文所分享的所有需要用户下载使用的内容(包括但不限于软件、数据、图片)来自于网络或者麻辣GIS粉丝自行分享,版权归该下载资源的合法拥有者所有,如有侵权请第一时间联系本站删除。

2.下载内容仅限个人学习使用,请切勿用作商用等其他用途,否则后果自负。

3.如果本文对您有所帮助,请您对我们团队进行 打赏捐助让我们在传播3S的路上可以走得更远,不胜感激。PS:如果你是学生党,请优先把经费用于购买学习资料 以及 与小哥哥/小姐姐约会上:-)

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

QQ群(一):291616564 加入QQ群

QQ群(二):166408035 加入QQ群

QQ群(三):627853279 加入QQ群

QQ群(四):436386604 加入QQ群

QQ群(五):606176554 加入QQ群

QQ群(六):946178380 加入QQ群

QQ群(七):861271808 加入QQ群

新疆互助群:910717627 加入QQ群

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

发表评论