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

📄 pointshape.cpp

📁 用于地理信息系统(GIS)行业程序。 完整的鼠标交互式地图点、线、面的绘制
💻 CPP
字号:
//PointShape.cpp


#include "stdafx.h"
#include "Draw.h"
#include "PointShape.h"
#include "DrawShapeView.h"
#include "GlobeFile.h"


extern CDrawShapeView* gpCDrawShapeView;
extern float LVtoAV(int iInputval);
extern int AVtoLV(float fInputval);

//当声明了动态创建时就一定要实现该动态创建
//当声明了一虚函数时,就一定要实现它
IMPLEMENT_SERIAL(CPointShape,CObject,1)


CPointShape::CPointShape(short colorPen,short colorBrush,short lineWide,
		short lineType,short layer,int idOnly,BOOL bDelete,
 		float Xcoord,float Ycoord)
		:CDraw( colorPen, colorBrush, lineWide, 
		lineType, layer, idOnly, bDelete)

{
	m_fXcoord = Xcoord;
	m_fYcoord = Ycoord;
	m_fRadius = 0.0;		//实际数据在Draw中指定为4

 }

void CPointShape::Serialize(CArchive& ar)
{
	//调用基类
	CDraw::Serialize(ar);

	if(ar.IsStoring())	//存储
	{
		
		ar<<m_fYcoord<<m_fXcoord<<m_fRadius;

	}
	else
	{
		ar>>m_fYcoord>>m_fXcoord>>m_fRadius;

	}
 }

CPointShape::~CPointShape()
{
}

void CPointShape::Draw(CDC *pDC,int drawMode1,int drawMode2,short color)
{
	int iCircleX,iCircleY; //逻辑坐标数据,由APtoLP转换而成
	int iRadius;		  //半径
//	int x2,y2;


	if(m_bDelete) //如果作了删除标志,则不绘制该图形
		return;	

	float minX,minY,maxX,maxY;
	GetBoundRect(minX,minY,maxX,maxY);
	if(!IsRectCross(minX,minY,maxX,maxY))
	{
		return;
	}
	
//在AddLine()函数中有new CLine(...)语句,实例化直线时,赋了其线型、线颜色、坐标等值

	short color_pen=m_ColorPen;  //存为局部变量,当要指定颜色显示时
								//也不直接为CDraw类数据成员赋值,以免对单个
								//图形的颜色赋值而影响所有图形所具有的默认颜色。
	short line_type=m_LineType;
	short color_brush=m_ColorBrush;

	if(drawMode1==0)
		pDC->SetROP2(R2_COPYPEN);
	else	
		pDC->SetROP2(R2_NOT);
	
	//设定画笔的线型.宽度.颜色
	if(drawMode2==1)	//被鼠标选择选择后特殊显示
	{
		if(m_LineType!=2)// 1:PS_SOLID,2:PS_DASH
			m_LineType=2;
		else
			m_LineType++;
	}
	else if(drawMode1==2)	//指定颜色绘制
	{
		color_pen=color;
		color_brush=color;
	}


	CPen pen(line_type,m_LineWide,gpCGraphPara->GetColor(color_pen));
	CBrush brush(gpCGraphPara->GetColor(color_pen));
	CPen* pOldPen=pDC->SelectObject(&pen);
	CBrush* pOldBrush = pDC->SelectObject(&brush);

	//实际到逻辑坐标
	gpCDrawShapeView->APtoLP(m_fXcoord,m_fYcoord,&iCircleX,&iCircleY);

	//由实际半径转换为逻辑半径长度
//	iRadius = AVtoLV(m_fRadius);

	iRadius = 4; //逻辑半径长度不变,图形大小不随比例尺
				 //改变而改变,所以大小不变

	//由圆心和半径画圆
	pDC->Ellipse(iCircleX - iRadius,iCircleY - iRadius,iCircleX + iRadius,iCircleY + iRadius);

	pDC->SelectObject(pOldPen);
	pDC->SelectObject(pOldBrush);

}


void  CPointShape::GetBoundRect(float& x1, float& y1, float& x2, float& y2)
{
	x1 = m_fXcoord;
	y1 = m_fYcoord;
	x2 = m_fXcoord;
	y2 = m_fYcoord;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -