麻辣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。

声明

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

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

手机阅读
公众号关注
知识星球
手机阅读
麻辣GIS微信公众号关注
最新GIS干货
关注麻辣GIS知识星球
私享圈子

留言板(小编看到第一时间回复)