⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tran3dview.cpp

📁 From C++ to Visual C++ one hundred examples.
💻 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 + -