麻辣GIS微信平台

更多 GIS 干货

微信关注不错过

VC++开发GIS系统(214)输入区之类实现

前文《VC++开发GIS系统(204)输入区之类设计》设计了输入区的类,一系列的准备工作,本文对这个类做一个实现。

类的实现

在_malaPolygon.cpp中实现 CmalaLinesInput类,代码如下:

/*
* 输入区实现
*/
CmalaPolysInput::CmalaPolysInput(CView* mView, malaScreen *pScreen, CString &fileFullPath)
{
    mBaseView = mView;
    mScreen = pScreen;
    mPath = fileFullPath;
    mIsDraw = false;
    GetPolyPro();//获取输入区的属性
}
CmalaPolysInput::~CmalaPolysInput()
{
    if (mPoly.size())
        mPoly.clear();
}
void CmalaPolysInput::GetPolyPro()
{
    if (dlgInputPoly(mPolyPro) == FALSE)
    {
        mPolyPro.polyStyle = 0;
        mPolyPro.borderColor = RGB(0, 0, 0);
        mPolyPro.borderStyle = 0;
        mPolyPro.fillStyle = 0;
        mPolyPro.fillColor = RGB(0, 0, 0);
    }
}
void CmalaPolysInput::LButtonDown(UINT nFlags, malaPoint point)
{
    mPoly.push_back(point);
    mPerPoint = point;
    mIsDraw = true;
}

void CmalaPolysInput::MouseMove(UINT nFlags, malaPoint point)
{
    if (mIsDraw)
    {
        vector<malaPoint>tpPoly;
        tpPoly = mPoly;
        tpPoly.push_back(mPerPoint);
        malaCDC mycdc(mBaseView,*mScreen);
        mycdc.polyDrawAutoX(tpPoly, mPolyPro);
        tpPoly.pop_back();
        tpPoly.push_back(point);
        mycdc.polyDrawAutoX(tpPoly, mPolyPro);
        mPerPoint = point;
        tpPoly.clear();
    }

}

void CmalaPolysInput::RButtonDown(UINT nFlags, malaPoint point)
{
    mIsDraw = false;
    mPoly.push_back(point);
    malaCDC mycdc(mBaseView, *mScreen);
    mycdc.polyDrawAuto(mPoly, mPolyPro);
    //保存点
    if (mPoly.size()>=2)
    {
        CPolyIO pio;
        pio.polyAdd(mPoly, mPolyPro, mPath);
    }
    mPoly.clear();
}

代码有点长,这里解释一下思路。

  1. 构造输入区的类的时候调用GetPolyPro 函数,(参考:VC++开发GIS系统(205)输入区之设置区属性对话框),设置并记录区的输入参数。
  2. 点击左键记录当前点击坐标点,并push到点的序列 mPoly 中,同时设置绘图状态 mIsDraw 为真。
  3. 移动鼠标,如果 mIsDraw 为真则触发橡皮筋绘图(参考:VC++开发GIS系统(206)输入区之绘制多边形区的函数VC++开发GIS系统(207)输入区之绘制椭圆区的函数VC++开发GIS系统(208)输入区之绘制区的函数(多边形与椭圆))。
  4. 右击结束绘图,并保存绘制的区(参考:VC++开发GIS系统(213)输入区之保存区函数

详细代码可以参考:GitHub

相关阅读

麻辣GIS-Sailor

作者:

GIS爱好者,学GIS,更爱玩GIS。

声明

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

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

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

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