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

📄 line.cpp

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

#include "stdafx.h"
#include "DrawShape.h"
#include "Draw.h"
#include "Line.h"

extern CDrawShapeView* gpCDrawShapeView;
extern BOOL IsRectCross(float minX, float minY, float maxX, float maxY);

//串行化实现宏
IMPLEMENT_SERIAL(CLine,CObject,1)

CLine::CLine(short colorPen,short colorBrush,short lineWide,
			 short lineType,short layer,int idOnly,BOOL bDelete,
			 float x1,float y1,float x2,float y2):CDraw(colorPen,
			 colorBrush,lineWide,lineType,layer,idOnly,bDelete)
{
	m_X1=x1;
	m_Y1=y1;
	m_X2=x2;
	m_Y2=y2;
}



void CLine::Draw(CDC *pDC,int drawMode1,int drawMode2,short color)
 {
	int x1,y1; //逻辑坐标数据,由APtoLP转换而成
	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));
	CPen* pOldPen=pDC->SelectObject(&pen);
	gpCDrawShapeView->APtoLP(m_X1,m_Y1,&x1,&y1);
	gpCDrawShapeView->APtoLP(m_X2,m_Y2,&x2,&y2);
	pDC->MoveTo(x1,y1);
	pDC->LineTo(x2,y2);
	pDC->SelectObject(pOldPen);

 }


	 void CLine::GetBoundRect(float& x1, float& y1, float& x2, float& y2)
	{
		//获得矩形边界坐标
		x1 = min(m_X1,m_X2);
		y1 = min(m_Y1,m_Y2);
		x2 = min(m_X1,m_X2);
		y2 = max(m_Y1,m_Y2);
	}
 
 
 void CLine::Serialize(CArchive& ar)
 {
	 CDraw::Serialize(ar);	//调用基类的串行化函数

	 if(ar.IsStoring())	//存储
	 {
		 ar<<m_X1<<m_X2<<m_Y1<<m_Y2;
	 }
	 else	//读取
	 {
		 ar>>m_X1>>m_X2>>m_Y1>>m_Y2;
	 }
 }

⌨️ 快捷键说明

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