📄 mappergrid.cpp
字号:
// MapperGrid.cpp: implementation of the CMapperGrid class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "mapper.h"
#include "MapperGrid.h"
#include "mapgriddlg.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMapperGrid::CMapperGrid()
{
m_crLineColor=RGB(255,0,0);
m_iLineSize=1;
m_iLineStyle=2;
}
CMapperGrid::~CMapperGrid()
{
DeleteAll();
}
BOOL CMapperGrid::Create(CMap1 &map)
{
DeleteAll();
//获得窗口的范围
double left,right,top,bottom,stepX,stepY;
CMoRectangle rect=theApp.GetMapPane()->m_map.GetExtent();
CMapGridDlg mgd;
mgd.m_dWndLeft=rect.GetLeft();
mgd.m_dWndRight=rect.GetRight();
mgd.m_dWndTop=rect.GetTop();
mgd.m_dWndBottom=rect.GetBottom();
if(mgd.DoModal()!=IDOK)
return FALSE;
left=mgd.m_dGridLeft;
right=mgd.m_dGridRight;
top=mgd.m_dGridTop;
bottom=mgd.m_dGridBottom;
stepX=mgd.m_dStepX;
stepY=mgd.m_dStepY;
m_crLineColor=mgd.m_oColor.GetColor();
m_iLineSize=mgd.m_iSize;
m_iLineStyle=(short)mgd.m_nStyle;
//默认使用虚线
//开始结束使用整数数值,至多1位小数
//可以保存shp文件,文字标注困难
//可以是绘图方式,支持文字标注
double d;
CMoPoint pt0,pt1;
CMoPoints pts;
for(d=left;d<=right;d+=stepX)
{
pt0.CreateDispatch(TEXT("MapObjects2.Point"));
pt1.CreateDispatch(TEXT("MapObjects2.Point"));
pts.CreateDispatch(TEXT("MapObjects2.Points"));
pt0.SetX(d);
pt0.SetY(top);
pts.Add(pt0);
pt1.SetX(d);
pt1.SetY(bottom);
pts.Add(pt1);
CMoLine* line = new CMoLine();
line->CreateDispatch(TEXT("MapObjects2.Line"));
line->GetParts().Add(pts);
if (LPDISPATCH(line))
m_oaLines.Add(line);
pts.ReleaseDispatch();
pt1.ReleaseDispatch();
pt0.ReleaseDispatch();
}
for(d=bottom;d<=top;d+=stepX)
{
pt0.CreateDispatch(TEXT("MapObjects2.Point"));
pt1.CreateDispatch(TEXT("MapObjects2.Point"));
pts.CreateDispatch(TEXT("MapObjects2.Points"));
pt0.SetX(left);
pt0.SetY(d);
pts.Add(pt0);
pt1.SetX(right);
pt1.SetY(d);
pts.Add(pt1);
CMoLine* line = new CMoLine();
line->CreateDispatch(TEXT("MapObjects2.Line"));
line->GetParts().Add(pts);
if (LPDISPATCH(line))
m_oaLines.Add(line);
pts.ReleaseDispatch();
pt1.ReleaseDispatch();
pt0.ReleaseDispatch();
}
return TRUE;
}
void CMapperGrid::Draw(CMap1 &map)
{
//选中对象使用蓝色显示,问题:如果本身是蓝色则不容易判别是否选中
//备选方案:使用外部的rect,虚线,黑色
int i;
CMoSymbol sym;
sym.CreateDispatch(TEXT("MapObjects2.Symbol"));
sym.SetSymbolType(moLineSymbol);
sym.SetSize(m_iLineSize);
sym.SetStyle(m_iLineStyle);
sym.SetColor(m_crLineColor);
for (i = 0; i < m_oaLines.GetSize(); i++)
{
map.DrawShape(*m_oaLines[i], sym);
}
//显示标注需要注意:当窗口大小变化的时候,字符仍然在窗口的边上能显示
}
void CMapperGrid::DeleteAll()
{
for (int i = 0; i < m_oaLines.GetSize(); i++)
{
m_oaLines[i]->ReleaseDispatch();
delete m_oaLines[i];
}
m_oaLines.RemoveAll();
}
BOOL CMapperGrid::Save()
{
//保存msf
//文件对话框在save内
return TRUE;
}
BOOL CMapperGrid::ExportShp(CString sPathFile)
{
//使用固定的文件名mappergrid.shp
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -