📄 geopolygon.cpp
字号:
// GeoPolygon.cpp: implementation of the GeoPolygon class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Drawing.h"
#include "GeoPolygon.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GeoPolygon::GeoPolygon()
{
}
GeoPolygon::GeoPolygon(PointVector pt)
{
for(int i=0; i<pt.size(); i++)
point.push_back(CPoint(pt[i].x, pt[i].y));
}
GeoPolygon::~GeoPolygon()
{
}
//point私有,因此必须提供相关接口
void GeoPolygon::AddPoint(CPoint pt)//点从后面加
{
point.push_back(pt);
}
void GeoPolygon::Draw(CDC &dc)
{
CPen pen(PS_SOLID, m_nWidth, m_color);
CPen *oldpen = dc.SelectObject(&pen);
if(m_nMode==0)//线框模式
{
dc.Polyline(&point[0], point.size());
}
else//填充模式
{
CBrush bru(m_color);
CBrush *oldbru = dc.SelectObject(&bru);
dc.Polygon(&point[0],point.size());
dc.SelectObject(oldbru);
}
dc.SelectObject(oldpen);
}
//判断该多边形是否封闭?
BOOL GeoPolygon::IsClose()
{
if(point.size()>2)
{
//如果最后一点离起始点3个象素范围,可以认为封闭
if(abs(point[0].x-point[point.size()-1].x)<=3 && abs(point[0].y-point[point.size()-1].y)<=3)
{
point.pop_back();//除去最后一点,因为它虽然可以认为"等于"起始点,但是毕竟可能相差3个象素范围
point.push_back(point[0]);//把起始点作为最后一点加到数组中
return TRUE;
}
else
return FALSE;
}
else
return FALSE;
}
//去除数组所有元素,使得为空
void GeoPolygon::Reset()
{
int count = point.size();
for(int i=0; i<count; i++)
point.pop_back();
}
//使该多边形封闭
void GeoPolygon::SetClose()
{
if(point.size()<1)
return;
if(point[0].x==point[point.size()-1].x && point[0].y==point[point.size()-1].y)
return;
point.push_back(point[0]);
}
//不执行上述封闭操作,恢复原来的状态
void GeoPolygon::UndoSetClose()
{
if(point.size()<1)
return;
if(point[0].x==point[point.size()-1].x && point[0].y==point[point.size()-1].y)
point.pop_back();
}
//不执行上述增加元素操作
void GeoPolygon::UndoAdd()
{
if(point.size()<1)
return;
point.pop_back();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -