⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mappergrid.cpp

📁 vc 和mapobjects地理信息系统组件开发 很有启发意义和参考价值
💻 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 + -