📄 tran3dview.cpp
字号:
// Tran3DView.cpp : implementation of the CTran3DView class
//
#include "stdafx.h"
#include "Tran3D.h"
#include "Tran3DDoc.h"
#include "Tran3DView.h"
#include "set3View.h"
#include "MyClass.h"
#include "math.h"
#define PI 3.141592654
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTran3DView
IMPLEMENT_DYNCREATE(CTran3DView, CView)
BEGIN_MESSAGE_MAP(CTran3DView, CView)
//{{AFX_MSG_MAP(CTran3DView)
ON_COMMAND(ID_DRAW3VIEW, OnDraw3view)
ON_UPDATE_COMMAND_UI(ID_DRAW3VIEW, OnUpdateDraw3view)
ON_COMMAND(ID_DRAWTST, OnDrawtst)
ON_UPDATE_COMMAND_UI(ID_DRAWTST, OnUpdateDrawtst)
ON_COMMAND(ID_DRAWXDC, OnDrawxdc)
ON_UPDATE_COMMAND_UI(ID_DRAWXDC, OnUpdateDrawxdc)
ON_COMMAND(ID_DRAWXEX, OnDrawxex)
ON_UPDATE_COMMAND_UI(ID_DRAWXEX, OnUpdateDrawxex)
ON_COMMAND(ID_DRAWZDC, OnDrawzdc)
ON_UPDATE_COMMAND_UI(ID_DRAWZDC, OnUpdateDrawzdc)
ON_COMMAND(ID_DRAWZEC, OnDrawzec)
ON_UPDATE_COMMAND_UI(ID_DRAWZEC, OnUpdateDrawzec)
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTran3DView construction/destruction
CTran3DView::CTran3DView()
{
// TODO: add construction code here
m_NowSelect=SEL_NONE;
}
CTran3DView::~CTran3DView()
{
}
BOOL CTran3DView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTran3DView drawing
void CTran3DView::OnDraw(CDC* pDC)
{
CTran3DDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CTran3DView diagnostics
#ifdef _DEBUG
void CTran3DView::AssertValid() const
{
CView::AssertValid();
}
void CTran3DView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTran3DDoc* CTran3DView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTran3DDoc)));
return (CTran3DDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTran3DView message handlers
void CTran3DView::OnDraw3view()
{
// TODO: Add_3VIEW;
m_NowSelect=SEL_3VIEW;
m_str="三视图";
Cset3View dlg(this);
dlg.m_NowStatic1="俯视图平移量";
dlg.m_NowStatic2="测视图平移量";
dlg.m_NowPara1=-150;
dlg.m_NowPara2=-160;
if(dlg.DoModal()==IDOK)//弹出数据对话框
{
int i,j;
CMyClass my1;//构造新的CMyClass对象
my1.z0=dlg.m_NowPara1;
my1.x0=dlg.m_NowPara2;
//将主视图变换矩阵清零
for(i=1;i<=4;++i)
{
for(j=1;j<=4;++j)
my1.A[i][j]=0;
}
//给主视图变换矩阵复制
my1.A[1][1]=1;
my1.A[3][3]=1;
my1.A[4][4]=1;
//将俯视图变换矩阵清零
for(i=1;i<=4;++i)
{
for(j=1;j<=4;++j)
my1.Ah[i][j]=0;
}
//给俯视图变换矩阵赋值
my1.Ah[1][1]=1;
my1.Ah[2][3]=-1;
my1.Ah[4][3]=-my1.z0;
my1.Ah[4][4]=1;
//将侧视图变换矩阵清零
for(i=1;i<=4;++i)
{
for(j=1;j<=4;++j)
my1.Aw[i][j]=0;
}
//给侧视图变换矩阵复制
my1.Aw[2][1]=-1;
my1.Aw[3][3]=1;
my1.Aw[4][1]=-my1.x0;
my1.Aw[4][4]=1;
RedrawWindow();
my1.DrawTriview();
}
}
void CTran3DView::OnUpdateDraw3view(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_NowSelect==SEL_3VIEW);
}
void CTran3DView::OnDrawtst()
{
// TODO: Add your command handler code here
m_NowSelect=SEL_TST;
CMyClass my1;
Rol=5;
DE=50;
Theta=45;
Phi=45;
my1.Rol=Rol;
my1.DE=DE;
my1.Theta=Theta;
my1.Phi=Phi;
RedrawWindow();
my1.DrawPers();
}
void CTran3DView::OnUpdateDrawtst(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_NowSelect==SEL_TST);
}
void CTran3DView::OnDrawxdc()
{
// TODO: Add your command handler code here
m_NowSelect=SEL_XDC;
m_str="斜等测视图";
Cset3View dlg(this);
dlg.m_NowStatic1=" X方向错切位移量";
dlg.m_NowStatic2=" Y方向错切位移量";
dlg.m_NowPara1=0.707f;
dlg.m_NowPara2=0.707f;
if(dlg.DoModal()==IDOK)
{
int i,j;
CMyClass my1;//构造新的CMyClass对象
my1.i_0=dlg.m_NowPara2;
my1.h_0=dlg.m_NowPara1;
//将主视图变换矩阵清零
for(i=1;i<=4;++i)
{
for(j=1;j<=4;++j)
my1.A[i][j]=0;
}
//给主视图变换矩阵复制
my1.A[1][1]=1;
my1.A[2][2]=1;
my1.A[3][1]=my1.h_0;
my1.A[3][2]=my1.i_0;
my1.A[4][4]=1;
RedrawWindow();
my1.Drawxdc();
}
}
void CTran3DView::OnUpdateDrawxdc(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_NowSelect==SEL_XDC);
}
void CTran3DView::OnDrawxex()
{
// TODO: Add your command handler code here
m_NowSelect=SEL_XEX;
m_str="斜二测视图";
Cset3View dlg(this);
dlg.m_NowStatic1=" X方向错切位移量";
dlg.m_NowStatic2=" Y方向错切位移量";
dlg.m_NowPara1=0.3535f;
dlg.m_NowPara2=0.3535f;
if(dlg.DoModal()==IDOK)
{
int i,j;
CMyClass my1;//构造新的CMyClass对象
my1.i_0=dlg.m_NowPara2;
my1.h_0=dlg.m_NowPara1;
//将主视图变换矩阵清零
for(i=1;i<=4;++i)
{
for(j=1;j<=4;++j)
my1.A[i][j]=0;
}
//给主视图变换矩阵复制
my1.A[1][1]=1;
my1.A[2][2]=1;
my1.A[3][1]=my1.h_0;
my1.A[3][2]=my1.i_0;
my1.A[4][4]=1;
RedrawWindow();
my1.Drawzec();
}
}
void CTran3DView::OnUpdateDrawxex(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_NowSelect==SEL_XEX);
}
void CTran3DView::OnDrawzdc()
{
// TODO: Add your command handler code here
m_NowSelect=SEL_ZDC;
m_str="正等测视图";
Cset3View dlg(this);
dlg.m_NowStatic1=" X轴夹角";
dlg.m_NowStatic2=" Y轴夹角";
dlg.m_NowPara1=125;
dlg.m_NowPara2=45;
if(dlg.DoModal()==IDOK)
{
int i,j;
CMyClass my2;//构造新的CMyClass对象
my2.Theta=dlg.m_NowPara2;
my2.phi_x=dlg.m_NowPara1;
//将主视图变换矩阵清零
for(i=1;i<=4;++i)
{
for(j=1;j<=4;++j)
my2.A[i][j]=0;
}
//给正等测变换矩阵复制
my2.A[1][1]=(float)cos(my2.theta_y*PI/180);
my2.A[1][2]=(float)sin(my2.theta_y*PI/180)*(float)sin(my2.phi_x*PI/180);
my2.A[2][2]=(float)cos(my2.phi_x*PI/180);
my2.A[3][1]=(float)sin(my2.theta_y*PI/180);
my2.A[3][2]=-(float)cos(my2.theta_y*PI/180)*(float)sin(my2.phi_x*PI/180);
my2.A[4][4]=1;
RedrawWindow();
my2.Drawzdc();
}
}
void CTran3DView::OnUpdateDrawzdc(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_NowSelect==SEL_ZDC);
}
void CTran3DView::OnDrawzec()
{
// TODO: Add your command handler code here
m_NowSelect=SEL_ZEC;
m_str="正二测视图";
Cset3View dlg(this);
dlg.m_NowStatic1=" X轴夹角";
dlg.m_NowStatic2=" Y轴夹角";
dlg.m_NowPara1=25;
dlg.m_NowPara2=115;
if(dlg.DoModal()==IDOK)
{
int i,j;
CMyClass my2;//构造新的CMyClass对象
my2.Theta=dlg.m_NowPara2;
my2.phi_x=dlg.m_NowPara1;
//将主视图变换矩阵清零
for(i=1;i<=4;++i)
{
for(j=1;j<=4;++j)
my2.A[i][j]=0;
}
//给正等测变换矩阵复制
my2.A[1][1]=(float)cos(my2.theta_y*PI/180);
my2.A[1][2]=(float)sin(my2.theta_y*PI/180)*(float)sin(my2.phi_x*PI/180);
my2.A[2][2]=(float)cos(my2.phi_x*PI/180);
my2.A[3][1]=(float)sin(my2.theta_y*PI/180);
my2.A[3][2]=(float)-cos(my2.theta_y*PI/180)*(float)sin(my2.phi_x*PI/180);
my2.A[4][4]=1;
RedrawWindow();
my2.Drawzec();
}
}
void CTran3DView::OnUpdateDrawzec(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->SetCheck(m_NowSelect==SEL_ZEC);
}
void CTran3DView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(m_NowSelect=SEL_TST)
{
switch(nChar)
{
case VK_UP://上
Phi=Phi-IncAng;
DrawPers();
break;
case VK_DOWN:
Phi=Phi+IncAng;
DrawPers();
break;
case VK_RIGHT:
Theta=Theta-IncAng;
DrawPers();
break;
case VK_LEFT:
Theta=Theta+IncAng;
DrawPers();
break;
case 190:
Rol=Rol-IncRol;
DrawPers();
break;
case 188:
Rol=Rol+IncRol;
DrawPers();
break;
case 187:
DE=DE+IncDE;
DrawPers();
break;
case 189:
DE=DE-IncDE;
DrawPers();
break;
default:
break;
}
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CTran3DView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(m_NowSelect==SEL_TST)
{
s_PointEnd=point;
}
CView::OnLButtonDown(nFlags, point);
}
void CTran3DView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if((m_NowSelect==SEL_TST)&&(nFlags==MK_LBUTTON))
{
//
Theta=Theta+(s_PointEnd.x-point.x);
Phi=Phi-(s_PointEnd.y-point.y);
DrawPers();
s_PointEnd=point;
}
CView::OnMouseMove(nFlags, point);
}
void CTran3DView::DrawPers()
{
CMyClass my;
my.Theta=Theta;
my.Phi=Phi;
my.DE=DE;
my.Rol=Rol;
RedrawWindow();
my.DrawPers();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -