📄 pointshape.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 + -