📄 vecdrawdoc.cpp
字号:
// VecDrawDoc.cpp : implementation of the CVecDrawDoc class
//
#include "stdafx.h"
#include "math.h"
#include "VecDraw.h"
#include "VecDrawDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CVecDrawDoc
IMPLEMENT_DYNCREATE(CVecDrawDoc, CDocument)
BEGIN_MESSAGE_MAP(CVecDrawDoc, CDocument)
//{{AFX_MSG_MAP(CVecDrawDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
double Distance(CPoint p1,CPoint p2)
{
return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
};
void DrawChoose(CDC *pDC,CPoint p1,CPoint p2,COLORREF color)
{
int dd=5;
CPen pen(0,0,color);
CPen *pOldPen=pDC->SelectObject(&pen);
// pDC->SetROP2(R2_NOT);
pDC->Rectangle(p1.x-dd,p1.y-dd,p1.x+dd,p1.y+dd);
pDC->Rectangle(p2.x-dd,p1.y-dd,p2.x+dd,p1.y+dd);
pDC->Rectangle((p1.x+p2.x)/2-dd,p1.y-dd,(p1.x+p2.x)/2+dd,p1.y+dd);
pDC->Rectangle(p1.x-dd,p2.y-dd,p1.x+dd,p2.y+dd);
pDC->Rectangle(p2.x-dd,p2.y-dd,p2.x+dd,p2.y+dd);
pDC->Rectangle((p1.x+p2.x)/2-dd,p2.y-dd,(p1.x+p2.x)/2+dd,p2.y+dd);
pDC->Rectangle(p1.x-dd,(p1.y+p2.y)/2-dd,p1.x+dd,(p1.y+p2.y)/2+dd);
pDC->Rectangle(p2.x-dd,(p1.y+p2.y)/2-dd,p2.x+dd,(p1.y+p2.y)/2+dd);
pDC->SelectObject(&pOldPen);
}
/////////////////////////////////////////////////////////////////////////////
//draw.cpp
IMPLEMENT_SERIAL(CDraw,CObject,1)
CDraw::CDraw(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only)
{
m_ColorPen=ColorPen;
m_ColorBrush=ColorBrush;
m_LineWide=LineWide;
m_LineType=LineType;
m_Layer=Layer;
b_Delete=Delete;
m_ID_Only=ID_Only;
b_Select=0;
}
void CDraw::Serialize(CArchive &ar)
{
/*
if(ar.IsStoring())
ar<<m_ColorPen<<m_ColorBrush<<m_LineWide<<m_LineType<<m_Layer<<b_Delete<<m_ID_Only;
else
ar >>m_ColorPen>>m_ColorBrush>>m_LineWide>>m_LineType>>m_Layer>>b_Delete>>m_ID_Only;
*/
if(ar.IsStoring())
ar<<b_Select;
else
ar>>b_Select;
}
bool CDraw::SelectObject(CPoint pnt)
{
return 1;
}
void CDraw::Draw(CDC *pDC,COLORREF color)
{
}
void CDraw::CurDraw(CDC *pDC,COLORREF color)
{
}
double CDraw::IsPoint(CPoint pnt)
{
return 0;
}
COLORREF CDraw::GetColor()
{
return m_ColorPen;
}
void CDraw::SetColor(COLORREF color)
{
m_ColorPen=color;
}
void CDraw::Offset(int x1,int y1)
{
}
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_SERIAL(CSave,CObject,1)
CSave::CSave(int vT,int vI)
{
VectorType=vT;
Index=vI;
}
int CSave::GetType(){return VectorType;};
int CSave::GetIndex(){return Index;};
void CSave::Serialize(CArchive &ar)
{
if(ar.IsStoring())
ar<<VectorType<<Index;
else
ar>>VectorType>>Index;
}
/////////////////////////////////////////////////////////////////////////////
//line.cpp
IMPLEMENT_SERIAL(CLine,CObject,1)
CLine::CLine(CPoint p1,CPoint p2)
{
m_FirstPoint=p1;
m_SecondPoint=p2;
m_ColorPen=RGB(0,0,255);
}
CLine::CLine(CPoint p1,CPoint p2,COLORREF color)
{
m_FirstPoint=p1;
m_SecondPoint=p2;
m_ColorPen=color;
}
CLine::CLine(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only,CPoint FirstPoint,CPoint SecondPoint)
{
CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,Delete,ID_Only);
m_FirstPoint=FirstPoint;
m_SecondPoint=SecondPoint;
}
void CLine::Serialize(CArchive &ar)
{
CDraw::Serialize(ar);
if(ar.IsStoring())
ar<<m_FirstPoint<<m_SecondPoint;
else
ar>>m_FirstPoint>>m_SecondPoint;
}
bool CLine::SelectObject(CPoint pnt)
{
if(IsPoint(pnt)<5)
return 1;
return 0;
}
void CLine::Draw(CDC *pDC,COLORREF color)
{
m_LineType=0;m_LineWide=0;
CPen pen(m_LineType,m_LineWide,color);
CPen *pOldPen=pDC->SelectObject(&pen);
//pDC->SetBkColor(RGB(0,100,0));
pDC->MoveTo(m_FirstPoint);
pDC->LineTo(m_SecondPoint);
pDC->SelectObject(&pOldPen);
}
void CLine::CurDraw(CDC *pDC,COLORREF color)
{
// m_ColorPen=color;
if(b_Select==1)
{
Draw(pDC,color);
CPen pen(0,0,color);
CPen *pOldPen=pDC->SelectObject(&pen);
pDC->Rectangle(m_FirstPoint.x-5,m_FirstPoint.y-5,m_FirstPoint.x+5,m_FirstPoint.y+5);
pDC->Rectangle(m_SecondPoint.x-5,m_SecondPoint.y-5,m_SecondPoint.x+5,m_SecondPoint.y+5);
pDC->SelectObject(&pOldPen);
}
else
{
CPen pen(0,0,NULL_PEN);
CPen *pOldPen=pDC->SelectObject(&pen);
CBrush *pOldBrush=(CBrush *)pDC->SelectStockObject(NULL_BRUSH);
// pDC->SetROP2(R2_NOT);
pDC->FillRect(CRect(m_FirstPoint.x-5,m_FirstPoint.y-5,m_FirstPoint.x+5,m_FirstPoint.y+5),(CBrush *)pDC->SelectStockObject(NULL_BRUSH));
pDC->FillRect(CRect(m_SecondPoint.x-5,m_SecondPoint.y-5,m_SecondPoint.x+5,m_SecondPoint.y+5),(CBrush *)pDC->SelectStockObject(NULL_BRUSH));
pDC->SelectObject(&pOldBrush);
pDC->SelectObject(&pOldPen);
Draw(pDC,m_ColorPen);
}
//Draw(pDC);
}
double CLine::IsPoint(CPoint pnt)
{
double fw,aa,bb,cc,ss;
if(((pnt.x>m_FirstPoint.x)&&(pnt.x>m_SecondPoint.x))||((pnt.x<m_FirstPoint.x)&&(pnt.x<m_SecondPoint.x)))
return 100;
if(((pnt.y>m_FirstPoint.y)&&(pnt.y>m_SecondPoint.y))||((pnt.y<m_FirstPoint.y)&&(pnt.y<m_SecondPoint.y)))
return 100;
aa=0;
aa=Distance(pnt,m_FirstPoint);
if (aa==0) return 0;
bb=0;
bb=Distance(pnt,m_SecondPoint);
if (bb==0) return 0;
cc=0;
cc=Distance(m_FirstPoint,m_SecondPoint);
ss=(aa+bb+cc)*(aa+bb-cc)*(bb+cc-aa)*(aa+cc-bb);
if (ss==0) return 0;
ss=sqrt(ss);
fw=0;
fw=ss/cc;
return fw;
}
void CLine::Offset(int x1,int y1)
{
m_FirstPoint.x+=x1;
m_FirstPoint.y+=y1;
m_SecondPoint.x+=x1;
m_SecondPoint.y+=y1;
}
/////////////////////////////////////////////////////////////////////////////
//Rect.cpp
IMPLEMENT_SERIAL( CRectAngle,CObject,1)
CRectAngle::CRectAngle(CPoint p1,CPoint p2)
{
m_FirstPoint=p1;
m_SecondPoint=p2;
m_ColorPen=RGB(0,0,255);
}
CRectAngle::CRectAngle(CPoint p1,CPoint p2,COLORREF color)
{
m_FirstPoint=p1;
m_SecondPoint=p2;
m_ColorPen=color;
}
CRectAngle::CRectAngle(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only,CPoint FirstPoint,CPoint SecondPoint)
{
CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,Delete,ID_Only);
m_FirstPoint=FirstPoint;
m_SecondPoint=SecondPoint;
}
void CRectAngle::Serialize(CArchive &ar)
{
CDraw::Serialize(ar);
if(ar.IsStoring())
ar<<m_FirstPoint<<m_SecondPoint;
else
ar>>m_FirstPoint>>m_SecondPoint;
}
bool CRectAngle::SelectObject(CPoint pnt)
{
if(IsPoint(pnt)<5)
return true;
return false;
}
void CRectAngle::Draw(CDC *pDC,COLORREF color)
{
m_LineType=0;m_LineWide=0;
CPen pen(m_LineType,m_LineWide,color);
CPen *pOldPen=pDC->SelectObject(&pen);
// CBrush *pOldBrush=(CBrush *)pDC->SelectStockObject(NULL_BRUSH);
//pDC->SetBkColor(RGB(0,100,0));
pDC->Rectangle(m_FirstPoint.x,m_FirstPoint.y,m_SecondPoint.x,m_SecondPoint.y);
pDC->SelectObject(&pOldPen);
// pDC->SelectObject(&pOldBrush);
}
void CRectAngle::CurDraw(CDC *pDC,COLORREF color)
{
// m_ColorPen=color;
// Draw(pDC);
if(b_Select==1)
{
Draw(pDC,color);
DrawChoose(pDC,m_FirstPoint,m_SecondPoint,color);
}
else
Draw(pDC,m_ColorPen);
}
double CRectAngle::IsPoint(CPoint pnt)
{
double fw,aa;
if(((pnt.x>m_FirstPoint.x)&&(pnt.x>m_SecondPoint.x))||((pnt.x<m_FirstPoint.x)&&(pnt.x<m_SecondPoint.x)))
return 100;
if(((pnt.y>m_FirstPoint.y)&&(pnt.y>m_SecondPoint.y))||((pnt.y<m_FirstPoint.y)&&(pnt.y<m_SecondPoint.y)))
return 100;
if(((pnt.x>m_FirstPoint.x)&&(pnt.x<m_SecondPoint.x))&&((pnt.y>m_FirstPoint.y)&&(pnt.y<m_SecondPoint.y)))
return 0;
if(((pnt.x<m_FirstPoint.x)&&(pnt.x>m_SecondPoint.x))&&((pnt.y<m_FirstPoint.y)&&(pnt.y>m_SecondPoint.y)))
return 0;
fw=0;
aa=0;
aa=abs(pnt.x-m_FirstPoint.x);
fw=aa;
aa=abs(pnt.y-m_FirstPoint.y);
if(aa<fw)fw=aa;
aa=abs(pnt.x-m_SecondPoint.x);
if(aa<fw)fw=aa;
aa=abs(pnt.y-m_SecondPoint.y);
if(aa<fw)fw=aa;
return fw;
}
void CRectAngle::Offset(int x1,int y1)
{
m_FirstPoint.x+=x1;
m_FirstPoint.y+=y1;
m_SecondPoint.x+=x1;
m_SecondPoint.y+=y1;
}
/////////////////////////////////////////////////////////////////////////////
//Circle.cpp
IMPLEMENT_SERIAL( CCircle,CObject,1)
CCircle::CCircle(CPoint CentrePoint,int R)
{
m_CentrePoint=CentrePoint;
m_Radius=R;
m_ColorPen=RGB(0,0,255);
}
CCircle::CCircle(CPoint CentrePoint,int R,COLORREF color)
{
m_CentrePoint=CentrePoint;
m_Radius=R;
m_ColorPen=color;
}
CCircle::CCircle(CPoint CentrePoint,CPoint Arc,COLORREF color)
{
m_CentrePoint=CentrePoint;
m_Radius=Distance(m_CentrePoint,Arc);
m_ColorPen=color;
}
CCircle::CCircle(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only,CPoint CentrePoint,int R)
{
CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,Delete,ID_Only);
m_CentrePoint=CentrePoint;
m_Radius=R;
}
void CCircle::Serialize(CArchive &ar)
{
CDraw::Serialize(ar);
if(ar.IsStoring())
ar<<m_CentrePoint<<m_Radius;
else
ar>>m_CentrePoint>>m_Radius;
}
bool CCircle::SelectObject(CPoint pnt)
{
if(IsPoint(pnt)<5)
return true;
return false;
}
void CCircle::Draw(CDC *pDC,COLORREF color)
{
int x1,y1,x2,y2,R;
R=(int)m_Radius;
x1=0;y1=0;x2=0;y2=0;
x1=m_CentrePoint.x-R;
y1=m_CentrePoint.y-R;
x2=m_CentrePoint.x+R;
y2=m_CentrePoint.y+R;
m_LineType=0;m_LineWide=0;
CPen pen(m_LineType,m_LineWide,color);
CPen *pOldPen=pDC->SelectObject(&pen);
// CBrush *pOldBrush=(CBrush *)pDC->SelectStockObject(NULL_BRUSH);
//pDC->SetBkColor(RGB(0,100,0));
pDC->SetBkMode(TRANSPARENT);
pDC->Ellipse(x1,y1,x2,y2);
pDC->SelectObject(&pOldPen);
// pDC->SelectObject(&pOldBrush);
}
void CCircle::CurDraw(CDC *pDC,COLORREF color)
{
CPoint p1,p2;
int R=(int)m_Radius;
p1.x=m_CentrePoint.x-R;
p1.y=m_CentrePoint.y-R;
p2.x=m_CentrePoint.x+R;
p2.y=m_CentrePoint.y+R;
// m_ColorPen=color;
// Draw(pDC);
if(b_Select==1)
{
Draw(pDC,color);
DrawChoose(pDC,p1,p2,color);
}
else
Draw(pDC,m_ColorPen);
}
double CCircle::IsPoint(CPoint pnt)
{
double fw,aa;
fw=0;
aa=0;
aa=Distance(m_CentrePoint,pnt);
// if(aa>m_Radius)
// fw=(aa-m_Radius);
// else
// fw=m_Radius-aa;
fw=aa-m_Radius;
return fw;
}
void CCircle::Offset(int x1,int y1)
{
m_CentrePoint.x+=x1;
m_CentrePoint.y+=y1;
}
/////////////////////////////////////////////////////////////////////////////
//RectFill.cpp
IMPLEMENT_SERIAL( CRectFill,CObject,1)
CRectFill::CRectFill(CPoint p1,CPoint p2)
{
m_FirstPoint=p1;
m_SecondPoint=p2;
m_ColorPen=RGB(0,0,255);
}
CRectFill::CRectFill(CPoint p1,CPoint p2,COLORREF color)
{
m_FirstPoint=p1;
m_SecondPoint=p2;
m_ColorPen=color;
}
CRectFill::CRectFill(COLORREF ColorPen,int ColorBrush,int LineWide,int LineType,int Layer,int Delete,int ID_Only,CPoint FirstPoint,CPoint SecondPoint)
{
CDraw(ColorPen,ColorBrush,LineWide,LineType,Layer,Delete,ID_Only);
m_FirstPoint=FirstPoint;
m_SecondPoint=SecondPoint;
}
void CRectFill::Serialize(CArchive &ar)
{
CDraw::Serialize(ar);
if(ar.IsStoring())
ar<<m_FirstPoint<<m_SecondPoint;
else
ar>>m_FirstPoint>>m_SecondPoint;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -