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

VC++开发GIS系统(213)输入区之保存区函数 VC++开发GIS系统(215)输入区之菜单响应

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

发表评论