VC++开发GIS系统(259)重绘注释功能实现

前文《VC++开发GIS系统(258)获取可视范围的所有注释》实现了重绘注释的一个重要函数 getAllLabel,用于获取可视范围内的所有注释,接下来的工作是实现重绘注释的功能。

在文章《VC++开发GIS系统(94)窗口的重绘(四)》中已经实现了点文件的重绘,《VC++开发GIS系统(164)重绘线之更新重绘函数》实现了线文件的重绘。《VC++开发GIS系统(217)重绘区功能实现》实现了区的重绘。本文将继续完善displayAllGraphs函数,实现注释文件的重绘。

函数完善

找到malagisView.cpp中的displayAllGraphs函数,更新代码如下:

//重绘函数
void CmalagisView::displayAllGraphs()
{
  upadteTree();
  for (size_t i = 0; i < mNode.size(); i++)
  {
    if (mNode[i].isOpen == true)
    {
      //重绘点文件
      if (mNode[i].fileType==L"mpt")
      {
        //先获取所有符合条件的点
        CPointIO pio;
        vector<malaPointFile>allPoints;
        pio.getAllPoint(mScreen, allPoints,mNode[i].filePath);
        //再依次画点
        malaCDC dc(this,mScreen);
        for (size_t j = 0; j < allPoints.size();j++)
        {
          dc.pointDrawAuto(allPoints[j].m_point, allPoints[j].m_pointpro);
        }
        if (allPoints.size())
          allPoints.clear();
      }
      //重绘线文件
      if (mNode[i].fileType == L"mle")
      {
        //先获取可视范围所有的线
        CLineIO lio;
        vector<malaLineFile>allLines;
        lio.getAllLines(mScreen, allLines, mNode[i].filePath);
        //再依次画区
        malaCDC dc(this, mScreen);
        for (size_t j = 0; j < allLines.size();j++)
        {
          dc.lineDrawAll(allLines[j].mLine,allLines[j].mLinePro);
        }
        if (allLines.size())
          allLines.clear();
      }
      //重绘区文件
      if (mNode[i].fileType == L"mpn")
      {
        //先获取可视范围所有的线
        CPolyIO lio;
        vector<malaPolyFile>allPolys;
        lio.getAllPolys(mScreen, allPolys, mNode[i].filePath);
        //再依次画区
        malaCDC dc(this, mScreen);
        for (size_t j = 0; j < allPolys.size(); j++)
        {
          dc.polyDrawAuto(allPolys[j].mPoly, allPolys[j].mPolyPro);
        }
        if (allPolys.size())
          allPolys.clear();
      }
      //重绘注释文件
      if (mNode[i].fileType == L"mll")
      {
        //先获取可视范围所有的注释
        CLabelIO lio;
        vector<malaLabelFile>allLabels;
        lio.getAllLabel(mScreen, allLabels, mNode[i].filePath);
        //再依次画
        malaCDC dc(this, mScreen);
        for (size_t j = 0; j < allLabels.size(); j++)
        {
          dc.textDraw(allLabels[j].mLabel, allLabels[j].mLabelPro);
        }
        if (allLabels.size())
          allLabels.clear();
      }

    }
  }
}

思路为先获取所有显示范围的注释,然后依次绘图。其中 getAllLabel 参考文章《VC++开发GIS系统(258)获取可视范围的所有注释》, textDraw 参考文章《VC++开发GIS系统(250)绘制文字的函数

详细代码可以参考:GitHub

VC++开发GIS系统(258)获取可视范围的所有注释 VC++开发GIS系统(260)选择注释之类的定义及实现

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

发表评论