📄 class designview.cpp
字号:
// Class DesignView.cpp : implementation of the CClassDesignView class
//
#include "stdafx.h"
#include "Class Design.h"
#include "mainFrm.h"
#include "ExchangeData.h"//为了在Class DesignView.cpp文件中能够用到这几个类的成员变量,
#include "uoQie.h" // 所以要在文件头上加上这几个自定义类的头文件。
#include "BiLi.h" //
#include "XuanZhuang.h" //
#include "PolygonFH.h" //
#include "math.h"
#include "Class DesignDoc.h"
#include "Class DesignView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define PI 3.14159////////////////////自己定义PI的值,下面要利用正弦余弦函数
/////////////////////////////////////////////////////////////////////////////
// CClassDesignView
IMPLEMENT_DYNCREATE(CClassDesignView, CView)
BEGIN_MESSAGE_MAP(CClassDesignView, CView)
//{{AFX_MSG_MAP(CClassDesignView)
ON_COMMAND(ID_POINT, OnPoint)
ON_COMMAND(ID_LINE, OnLine)
ON_COMMAND(ID_MULTILINE, OnMultiline)
ON_COMMAND(ID_LINE_BILI, OnLineBili)
ON_COMMAND(ID_LINE_XDUICHENG, OnLineXduicheng)
ON_COMMAND(ID_LINE_YDUICHENG, OnLineYduicheng)
ON_COMMAND(ID_LINE_OrgDUICHENG, OnLINEOrgDUICHENG)
ON_COMMAND(ID_LINE_CUOQIE, OnLineCuoqie)
ON_COMMAND(ID_LINE_XUANZHUANG, OnLineXuanzhuang)
ON_COMMAND(ID_POINT_XDUICHENG, OnPointXduicheng)
ON_COMMAND(ID_POINT_YDUICHENG, OnPointYduicheng)
ON_COMMAND(ID_POINT_OrgDUICHENG, OnPOINTOrgDUICHENG)
ON_COMMAND(ID_POINT_PINGYI, OnPointPingyi)
ON_COMMAND(ID_POINT_XUANZHUANG, OnPointXuanzhuang)
ON_COMMAND(ID_MULTILINE_BILI, OnMultilineBili)
ON_COMMAND(ID_MULTILINE_XDUICHENG, OnMultilineXduicheng)
ON_COMMAND(ID_MULTILINE_OrgDUICHENG, OnMULTILINEOrgDUICHENG)
ON_COMMAND(ID_MULTILINE_YDUICHENG, OnMultilineYduicheng)
ON_COMMAND(ID_MULTILINE_CUOQIE, OnMultilineCuoqie)
ON_COMMAND(ID_MULTILINE_XUANZHUANG, OnMultilineXuanzhuang)
ON_COMMAND(ID_MULTILINE_PINGYI, OnMultilinePingyi)
ON_COMMAND(ID_Multiline_fuhe, OnMultilinefuhe)
ON_COMMAND(ID_POINT_qingping, OnPOINTqingping)
ON_COMMAND(ID_LINE_qingping, OnLINEqingping)
ON_COMMAND(ID_MULTILINE_qingping, OnMULTILINEqingping)
ON_WM_MOUSEMOVE()
ON_COMMAND(ID_LINE_PINGYI, OnLinePingyi)
ON_UPDATE_COMMAND_UI(ID_POINT_XDUICHENG, OnUpdatePointXduicheng)
ON_UPDATE_COMMAND_UI(ID_POINT_YDUICHENG, OnUpdatePointYduicheng)
ON_UPDATE_COMMAND_UI(ID_POINT_OrgDUICHENG, OnUpdatePOINTOrgDUICHENG)
ON_UPDATE_COMMAND_UI(ID_POINT, OnUpdatePoint)
ON_UPDATE_COMMAND_UI(ID_LINE, OnUpdateLine)
ON_UPDATE_COMMAND_UI(ID_LINE_XDUICHENG, OnUpdateLineXduicheng)
ON_UPDATE_COMMAND_UI(ID_LINE_YDUICHENG, OnUpdateLineYduicheng)
ON_UPDATE_COMMAND_UI(ID_LINE_OrgDUICHENG, OnUpdateLINEOrgDUICHENG)
ON_UPDATE_COMMAND_UI(ID_MULTILINE, OnUpdateMultiline)
ON_UPDATE_COMMAND_UI(ID_MULTILINE_XDUICHENG, OnUpdateMultilineXduicheng)
ON_UPDATE_COMMAND_UI(ID_MULTILINE_YDUICHENG, OnUpdateMultilineYduicheng)
ON_UPDATE_COMMAND_UI(ID_MULTILINE_OrgDUICHENG, OnUpdateMULTILINEOrgDUICHENG)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClassDesignView construction/destruction
CClassDesignView::CClassDesignView()
{
// TODO: add construction code here
}
CClassDesignView::~CClassDesignView()
{
}
BOOL CClassDesignView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CClassDesignView drawing
void CClassDesignView::OnDraw(CDC* pDC)
{
CClassDesignDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRect rect; ////声明一个CRect类变量
GetClientRect(&rect); //////获取程序窗口的客户区坐标
// ClientToScreen(&rect);//把客户区坐标转化为屏幕坐标
int ORGX=rect.right;
int ORGY=rect.bottom;
pDC->SetMapMode(MM_LOMETRIC);//定义映射模式
pDC->SetViewportOrg(ORGX/2,ORGY/2);
pDC->SetViewportExt(ORGX,ORGY);//////以上都是将获得的客户区矩阵的中心坐标设为
///// 逻辑坐标的中心坐标
pDC->MoveTo(ORGX*2,0);
pDC->LineTo(-ORGX*2,0);
pDC->MoveTo(0,ORGY*2);
pDC->LineTo(0,-ORGY*2);
pDC->TextOut(ORGX+350,-15,"X");
pDC->TextOut(15,ORGY+200,"Y");
pDC->TextOut(10,-10,"0");
switch(CurrenDraw)////////////////////////实现多分支语句选择结构
{
case m_bPoint ://///////////////////////画原画点
{
CBrush BlueBrush(RGB(0,0,255));//蓝色画刷
pDC->SelectObject(&BlueBrush); //将画刷选入设备环境
pDC->Ellipse(150,150,170,170); //设定位置画原画点,不过将描点改为画一个圆,增强可视性
}break;
case m_bPoint_Xduicheng://////////////画点关于X轴对称
{
CBrush BlueBrush(RGB(0,0,255));//蓝色画刷
pDC->SelectObject(&BlueBrush); //将画刷选入设备环境
pDC->Ellipse(150,150,170,170);//设定位置画原画点,不过将描点改为画一个圆,增强可视性
CBrush BlueBrush1(RGB(0,255,0));//绿色画刷
pDC->SelectObject(&BlueBrush1); //将画刷选入设备环境
pDC->Ellipse(150,-150,170,-170); //关于X轴对称后的画点
}break;
case m_bPoint_Yduicheng: //////////////画点关于Y轴对称
{
CBrush BlueBrush(RGB(0,0,255));
pDC->SelectObject(&BlueBrush);
pDC->Ellipse(150,150,170,170);
CBrush BlueBrush1(RGB(0,255,0));
pDC->SelectObject(&BlueBrush1);
pDC->Ellipse(-150,150,-170,170);////关于轴对称后的画点
}break;
case m_bPoint_ORGduicheng://////////////画点关于原点对称
{
CBrush BlueBrush(RGB(0,0,255));
pDC->SelectObject(&BlueBrush);
pDC->Ellipse(150,150,170,170);
CBrush BlueBrush1(RGB(0,255,0));
pDC->SelectObject(&BlueBrush1);
pDC->Ellipse(-150,-150,-170,-170);
}break;
case m_bPoint_Pingyi: //////////////画点平移变换
{
CBrush BlueBrush(RGB(0,0,255));
pDC->SelectObject(&BlueBrush);
pDC->Ellipse(150,150,170,170);
CBrush BlueBrush1(RGB(0,255,0));
pDC->SelectObject(&BlueBrush1);
pDC->Ellipse(150+dfData1,150+dfData2,170+dfData1,170+dfData2);
}break;
case m_bPoint_Xuanzhuang://////////////画点旋转变换
{
CBrush BlueBrush(RGB(0,0,255));
pDC->SelectObject(&BlueBrush);
pDC->Ellipse(150,150,170,170);
CBrush BlueBrush1(RGB(0,255,0));
pDC->SelectObject(&BlueBrush1);
pDC->Ellipse(int( 160*cos(dfData1*PI/180)-160*sin(dfData1*PI/180)-10 ),
int( 160*sin(dfData1*PI/180)+160*cos(dfData1*PI/180)+10 ),
int( 160*cos(dfData1*PI/180)-160*sin(dfData1*PI/180)+10 ),
int( 160*sin(dfData1*PI/180)+160*cos(dfData1*PI/180)-10 )
);/////画点旋转变换算法
}break;
case m_bLine :////////////////////画原直线
{
pDC->MoveTo(250,250);
pDC->LineTo(15,20);
}break;
case m_bLine_bili:////////////////////画原直线比例变换
{
int Org_Rec[3][3]={{dfData1,0,0},{0,dfData1,0},{0,0,1}};/////只需改这组数组的数据即可,其为二维变换矩阵
int Before_Rec[2][3]={{250,250,1},{15,20,1}};
int After_Rec[2][3]={0};////数组赋值
pDC->MoveTo( Before_Rec[0][0], Before_Rec[0][1]);
pDC->LineTo( Before_Rec[1][0], Before_Rec[1][1]);////画原直线
CPen SolidPen(PS_SOLID,3,RGB(255,0,0));//创建红色画笔
pDC->SelectObject(&SolidPen);//将画笔选入设备环境
SetData(Org_Rec,After_Rec,Before_Rec);/////调用自定义函数完成矩阵相乘并赋值
pDC->MoveTo(After_Rec[0][0]+200,After_Rec[0][1]);
pDC->LineTo(After_Rec[1][0]+200,After_Rec[1][1]);//////画出比例变换后的直线
}break;
case m_bLine_Xduicheng:////////////////////画原直线关于X轴对称变换
{
int Org_Rec[3][3]={{1,0,0},{0,-1,0},{0,0,1}};
int Before_Rec[2][3]={{250,250,1},{15,20,1}};
int After_Rec[2][3]={0};
pDC->MoveTo( Before_Rec[0][0], Before_Rec[0][1]);
pDC->LineTo( Before_Rec[1][0], Before_Rec[1][1]);
CPen SolidPen(PS_SOLID,2,RGB(255,0,0));//创建红色画笔
pDC->SelectObject(&SolidPen);//将画笔选入设备环境
SetData(Org_Rec,After_Rec,Before_Rec);
pDC->MoveTo(After_Rec[0][0],After_Rec[0][1]);//// 画关于X轴对称
pDC->LineTo(After_Rec[1][0],After_Rec[1][1]);//// 变换后直线
}break;
case m_bLine_Yduicheng:////////////////////画原直线关于Y轴对称变换
{
int Org_Rec[3][3]={{-1,0,0},{0,1,0},{0,0,1}};
int Before_Rec[2][3]={{250,250,1},{15,20,1}};
int After_Rec[2][3]={0};
pDC->MoveTo( Before_Rec[0][0], Before_Rec[0][1]);
pDC->LineTo( Before_Rec[1][0], Before_Rec[1][1]);
CPen SolidPen(PS_SOLID,2,RGB(255,0,0));//创建红色画笔
pDC->SelectObject(&SolidPen);//将画笔选入设备环境
SetData(Org_Rec,After_Rec,Before_Rec);
pDC->MoveTo(After_Rec[0][0],After_Rec[0][1]);//// 画关于Y轴对称
pDC->LineTo(After_Rec[1][0],After_Rec[1][1]);//// 变换后直线
}break;
case m_bLine_Orgduicheng:////////////////////画原直线关于原点对称变换
{
int Org_Rec[3][3]={{-1,0,0},{0,-1,0},{0,0,1}};
int Before_Rec[2][3]={{250,250,1},{15,20,1}};
int After_Rec[2][3]={0};
pDC->MoveTo( Before_Rec[0][0], Before_Rec[0][1]);
pDC->LineTo( Before_Rec[1][0], Before_Rec[1][1]);
CPen SolidPen(PS_SOLID,2,RGB(255,0,0));//创建红色画笔
pDC->SelectObject(&SolidPen);//将画笔选入设备环境
SetData(Org_Rec,After_Rec,Before_Rec);
pDC->MoveTo(After_Rec[0][0],After_Rec[0][1]);//// 画关于原点对称
pDC->LineTo(After_Rec[1][0],After_Rec[1][1]);//// 变换后直线
}break;
case m_bLine_CuoQie://直线错切
{
int Org_Rec[3][3]={{1,dfData2,0},{dfData1,1,0},{0,0,1}};
int Before_Rec[2][3]={{250,250,1},{15,20,1}};
int After_Rec[2][3]={0};
pDC->MoveTo( Before_Rec[0][0], Before_Rec[0][1]);
pDC->LineTo( Before_Rec[1][0], Before_Rec[1][1]);
CPen SolidPen(PS_SOLID,2,RGB(255,0,0));//创建红色画笔
pDC->SelectObject(&SolidPen);//将画笔选入设备环境
SetData(Org_Rec,After_Rec,Before_Rec);
pDC->MoveTo(After_Rec[0][0],After_Rec[0][1]);
pDC->LineTo(After_Rec[1][0],After_Rec[1][1]);
}break;
case m_bLine_Xuanzhuang://直线旋转变换
{
double Org_Rec[3][3]={
{cos(dfData1*PI/180),sin(dfData1*PI/180),0.0},
{-sin(dfData1*PI/180),cos(dfData1*PI/180),0.0},
{0.0,0.0,1.0}
};
int Before_Rec[2][3]={{250,250,1},{15,20,1}};
double After_Rec[2][3]={{0.0},{0.0}};
pDC->MoveTo(Before_Rec[0][0],Before_Rec[0][1]);
pDC->LineTo(Before_Rec[1][0],Before_Rec[1][1]);
CPen SolidPen(PS_SOLID,2,RGB(255,0,0));//创建红色画笔
pDC->SelectObject(&SolidPen);//将画笔选入设备环境
for(int i=0;i<=1;i++)
for(int j=0;j<=2;j++)
{
for(int k=0;k<=2;k++)
After_Rec[i][j]+=Before_Rec[i][k]*Org_Rec[k][j];//////利用循环为数组赋值
}
pDC->MoveTo((int)After_Rec[0][0],(int)After_Rec[0][1]);
pDC->LineTo((int)After_Rec[1][0],(int)After_Rec[1][1]);
}break;
case (m_bLine_Pingyi): //直线平移变换
// ShowData(); //DestroyWindow();
{
int Org_Rec[3][3]={{1,0,0},{0,1,0},{dfData1,dfData2,1}};
int Before_Rec[2][3]={{250,250,1},{15,20,1}};
int After_Rec[2][3]={0};
pDC->MoveTo( Before_Rec[0][0], Before_Rec[0][1]);
pDC->LineTo( Before_Rec[1][0], Before_Rec[1][1]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -