📄 line.cpp
字号:
#include "stdafx.h"
#include "math.h"
#include "VCad.h"
#include "VCadDoc.h"
#include "VCadView.h"
#include "Entity.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//定义 CLine 类
IMPLEMENT_SERIAL(CLine, CEntity, 0)
CLine::CLine()
{
Init();
}
CLine::CLine(const CLine& line)
: CEntity(line)
{
m_begin = line.m_begin;
m_end = line.m_end;
}
CLine::CLine(const Position& begin,const Position& end)
{
Init();
m_begin = begin ;
m_end = end ;
}
CLine::~CLine()
{
}
CLine& CLine::operator = (const CLine& line)
{
// 处理特殊情况:line1 = line1
if(this == &line)
return *this;
// 一般情形:line2 = line1
// 调用基类的重载“=”操作
CEntity::operator = (line);
m_begin = line.m_begin;
m_end = line.m_end;
return *this;
}
CEntity* CLine::Copy()
{
CLine* pEntity = new CLine(m_begin, m_end);
return pEntity;
}
void CLine::Init()
{
CEntity::Init();
m_type = etLine;
m_begin.Init();
m_end.Init();
}
int CLine::GetType()
{
return etLine;
}
Position CLine::GetBeginPos()
{
return m_begin;
}
Position CLine::GetEndPos()
{
return m_end;
}
void CLine::Draw(CDC * pDC, int drawMode /* = dmNormal */)
{
CPoint pt_begin, pt_end; // 屏幕坐标的起点和终点
// 将世界坐标转化为屏幕坐标
g_pView->WorldtoScreen(m_begin,pt_begin);
g_pView->WorldtoScreen(m_end,pt_end) ;
// 得到原来的绘图模式
int n = GetROP2(pDC->GetSafeHdc());
// 创建画笔的原则:
// 如果在正常的绘图模式下,使用成员变量创建画笔
// 如果是其它的模式,使用全局函数"SetDrawEnvir"创建画笔
CPen pen;
if( drawMode == dmNormal )
pen.CreatePen(m_lineStyle,m_lineWidth,m_color) ;
else
::SetDrawEnvir(pDC, drawMode, &pen);
// 得到原来的画笔
CPen* pOldPen = pDC->SelectObject(&pen);
pDC->SetMapMode(MM_LOENGLISH);
// 根据屏幕坐标绘制图元
pDC->MoveTo(pt_begin);
pDC->LineTo(pt_end);
// 恢复原来的画笔
pDC->SelectObject(pOldPen);
// 恢复原来的绘图模式
pDC->SetROP2(n);
}
void CLine::Serialize(CArchive& ar)
{
CEntity::Serialize(ar);
m_begin.Serialize(ar);
m_end.Serialize(ar);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -