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

📄 ox_planerview.cpp

📁 机械原理课程设计,牛头刨床的动力学分析
💻 CPP
字号:
// Ox_PlanerView.cpp : implementation of the COx_PlanerView class
//

#include "stdafx.h"
#include "Ox_Planer.h"
#include "GetData.h"	// Added by ClassView

#include "Ox_PlanerDoc.h"
#include "Ox_PlanerView.h"
//#include "planer.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// COx_PlanerView

IMPLEMENT_DYNCREATE(COx_PlanerView, CView)

BEGIN_MESSAGE_MAP(COx_PlanerView, CView)
	//{{AFX_MSG_MAP(COx_PlanerView)
	ON_WM_TIMER()
	ON_COMMAND(ID_Cartoon, OnCartoon)
	ON_COMMAND(ID_fssfsffsd, Onfssfsffsd)
	ON_COMMAND(ID_SVA, OnSva)
	ON_COMMAND(ID_SHAFT, OnShaft)
	ON_COMMAND(ID_CLEAR, OnClear)
	ON_COMMAND(ID_TB, OnTb)
	ON_COMMAND(ID_GetData, OnGetData)
	ON_COMMAND(ID_TEXT, OnText)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COx_PlanerView construction/destruction
BOOL COx_PlanerView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) 
{
	// TODO: Add your specialized code here and/or call the base class

return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}
COx_PlanerView::COx_PlanerView()
{
	// TODO: add construction code here
flag=0;
i=0;
oxplaner.Creat(Getdata.m_n,Getdata.m_k ,Getdata.m_h,Getdata.m_LO2O3,
			   Getdata.m_b1,Getdata.m_b2,Getdata.m_b3,Getdata.m_xs,Getdata.m_ys,
			   Getdata.m_yp,Getdata.m_g3 ,Getdata.m_g4,Getdata.m_g5,
			   Getdata.m_ys3,Getdata.m_ys4,Getdata.m_pr);

}

COx_PlanerView::~COx_PlanerView()
{

}

BOOL COx_PlanerView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// COx_PlanerView drawing

void COx_PlanerView::OnDraw(CDC* pDC)
{
	COx_PlanerDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if(flag==0){
          OnCartoon();
		  //OnD(100,100,20,10,i);
		  }

	
     // TODO: add draw code for native data here

}

/////////////////////////////////////////////////////////////////////////////
// COx_PlanerView diagnostics

#ifdef _DEBUG
void COx_PlanerView::AssertValid() const
{
	CView::AssertValid();
}

void COx_PlanerView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

COx_PlanerDoc* COx_PlanerView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(COx_PlanerDoc)));
	return (COx_PlanerDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// COx_PlanerView message handlers





void COx_PlanerView::Serialize(CArchive& ar) 
{
	if (ar.IsStoring())
	{	// storing code
	}
	else
	{	// loading code
	}
}


void COx_PlanerView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
   if(i==360)
		i=0;
	else i+=10;
		Invalidate();
	CView::OnTimer(nIDEvent);
}

void COx_PlanerView::OnCartoon() 
{
	flag=0;
    SetTimer(1,50,NULL);
    CPen *o,n[6];
    CClientDC pDC(this);
	n[0].CreatePen(PS_DOT,1.5,RGB(255,0,0));
	n[1].CreatePen(PS_SOLID,2.5,RGB(177,255,0));
	n[2].CreatePen(PS_SOLID,2,RGB(0,0,255));
	n[3].CreatePen(PS_DOT,2,RGB(177,177,0));
	n[4].CreatePen(PS_SOLID,2,RGB(177,0,177));
	n[5].CreatePen(PS_SOLID,2,RGB(0,177,177));

   double ox,oy;
  CRect r;  
    GetClientRect(&r);
    ox=r.right/2;
    oy=r.bottom*5/6;
    double blc;
    blc=(double)(r.bottom*4/6/oxplaner.r34);


	o=pDC.SelectObject(&n[0]);
	pDC.Ellipse(ox-oxplaner.r12*blc,oy-oxplaner.r13*blc-oxplaner.r12*blc,
		ox+oxplaner.r12*blc,oy-oxplaner.r13*blc+oxplaner.r12*blc);
	pDC.MoveTo(ox,oy);
	o=pDC.SelectObject(&n[3]);
    pDC.Ellipse(ox-3,oy-3,ox+3,oy+3);
	pDC.LineTo(ox, oy-oxplaner.r13*blc);
	o=pDC.SelectObject(&n[1]);

	pDC.LineTo(ox-oxplaner.p2[i][1]*blc,oy-oxplaner.p2[i][2]*blc);
	pDC.Ellipse(ox-3,oy-oxplaner.r13*blc-3,
		ox+3,oy-oxplaner.r13*blc+3);
	OnD(ox-oxplaner.p2[i][1]*blc,oy-oxplaner.p2[i][2]*blc,
	15,10,oxplaner.t3[i]);
	pDC.MoveTo(ox,oy);
	o=pDC.SelectObject(&n[2]);
	pDC.LineTo(ox-oxplaner.p4[i][1]*blc,oy-oxplaner.p4[i][2]*blc);
	o=pDC.SelectObject(&n[5]);
	pDC.LineTo(ox-oxplaner.p5[i][1]*blc,oy-oxplaner.p5[i][2]*blc);
	o=pDC.SelectObject(&n[4]);
    pDC.MoveTo(ox-oxplaner.p5[i][1]*blc-20,oy-oxplaner.p5[i][2]*blc);

	pDC.LineTo(ox-oxplaner.p5[i][1]*blc+200,oy-oxplaner.p5[i][2]*blc);
	pDC.Ellipse(ox-oxplaner.p4[i][1]*blc-3,oy-oxplaner.p4[i][2]*blc-3,
		ox-oxplaner.p4[i][1]*blc+3,oy-oxplaner.p4[i][2]*blc+3);
	pDC.Ellipse(ox-oxplaner.p5[i][1]*blc-3,oy-oxplaner.p5[i][2]*blc-3,
		ox-oxplaner.p5[i][1]*blc+3,oy-oxplaner.p5[i][2]*blc+3);
    OnD(ox-oxplaner.p5[i][1]*blc,oy-oxplaner.p5[i][2]*blc,30,20,0);
	o=pDC.SelectObject(&n[3]);
    pDC.MoveTo(ox-200,oy-oxplaner.p5[0][2]*blc-10);
	pDC.LineTo(ox+70,oy-oxplaner.p5[0][2]*blc-10);
    pDC.MoveTo(ox-200,oy-oxplaner.p5[0][2]*blc+10);
	pDC.LineTo(ox+70,oy-oxplaner.p5[0][2]*blc+10);
    pDC.SelectObject(o);
	// TODO: Add your command handler code here
	
}
void COx_PlanerView::OnD(double x,double y,double m,double n,double angle)
{
CClientDC pDC(this);
double i,j;
i=cos(angle);j=sin(angle);
pDC.Ellipse(x-3,y-3,x+3,y+3);
pDC.MoveTo(x+n*j/2.0-i*m/2.0,y-n*i/2.0-m*j/2.0);
pDC.LineTo(x+n*j/2.0+i*m/2.0,y-n*i/2.0+m*j/2.0);
pDC.LineTo(x-n*j/2.0+i*m/2.0,y+n*i/2.0+m*j/2.0);
pDC.LineTo(x-n*j/2.0-i*m/2.0,y+n*i/2.0-m*j/2.0);
pDC.LineTo(x+n*j/2.0-i*m/2.0,y-n*i/2.0-m*j/2.0);
 }

void COx_PlanerView::Onfssfsffsd() 
{
	
	 KillTimer(1);
	 flag=1;
     Invalidate();
// TODO: Add your command handler code here
	
}

    static  int del=10;    
    static int  xo=100; 
    static int  yo=600; 
    static int  a1=50;
    static int  a2=300; 
    static int  b1=50;
    static int  b2=100;

      



void COx_PlanerView::OnSva() 
{
    

  OnShaft();
  CClientDC dc(this);
  CPen pen1(0,2,RGB(255,0,0));
  CPen pen2(0,2,RGB(0,255,0));
  CPen pen3(0,2,RGB(0,0,255));
  CPen *pOldPen;
  int x,y,z;
  CRect r;  
  GetClientRect(&r);
  xo=r.right/10;
  yo=r.bottom/2;
  a1=r.right/20;
  a2=r.right*4/5;
  b1=r.bottom/3;
  b2=r.bottom/3;    
  
  
  x=oxplaner.pdraw[0];
  y=oxplaner.vpdraw[0];
  z=oxplaner.apdraw[0];  
  
  for(i=1;i<360;i++)
  { 
	 
  if(fabs(oxplaner.pdraw[i])>x)x=fabs(oxplaner.pdraw[i]);
  if(fabs(oxplaner.vpdraw[i])>y)y=fabs(oxplaner.vpdraw[i]);
  if(fabs(oxplaner.apdraw[i])>z)z=fabs(oxplaner.apdraw[i]);

}
  
 
 for(i=1;i<360;i++)
{
  
  pOldPen=dc.SelectObject(&pen1);
  


	 dc.MoveTo(xo+(i-1)*(a2-20)/360,yo-oxplaner.pdraw[i-1]*b2/(x+1.5));
     dc.LineTo(xo+i*(a2-20)/360,yo-oxplaner.pdraw[i]*b2/(x+1.5)); //位移



  if(i==120)
{
    dc.MoveTo(xo+i*(a2-20)/360,yo-oxplaner.pdraw[i]*b2/(x+1.5)-5);
    dc.LineTo(xo+i*(a2-20)/360,yo-oxplaner.pdraw[i]*b2/(x+1.5)-30);
  
	dc.TextOut(xo+i*(a2-20)/360,yo-oxplaner.pdraw[i]*b2/(x+1.5)-35,"s");

}

  dc.SelectObject(&pOldPen);
 pOldPen=dc.SelectObject(&pen2);


    dc.MoveTo(xo+(i-1)*(a2-20)/360,yo-oxplaner.vpdraw[i-1]*b2/(y+1.5));
    dc.LineTo(xo+i*(a2-20)/360,yo-oxplaner.vpdraw[i]*b2/(y+1.5)); //速度



    if(i==180)
{
    dc.MoveTo(xo+i*(a2-20)/360,yo-oxplaner.vpdraw[i-1]*b2/(y+1.5)-5);
    dc.LineTo(xo+i*(a2-20)/360,yo-oxplaner.vpdraw[i]*b2/(y+1.5)-30);
  
	dc.TextOut(xo+i*(a2-20)/360,yo-oxplaner.vpdraw[i]*b2/(y+1.5)-35,"v");
}

 dc.SelectObject(&pOldPen);
  pOldPen=dc.SelectObject(&pen3);

  dc.MoveTo(xo+(i-1)*(a2-20)/360,yo-oxplaner.apdraw[i-1]*b2/(z+1.5));
  dc.LineTo(xo+i*(a2-20)/360,yo-oxplaner.apdraw[i]*b2/(z+1.5)); //加速度

    if(i==240)
{
  dc.MoveTo(xo+i*(a2-20)/360,yo-oxplaner.apdraw[i-1]*b2/(z+1.5)-5);
    dc.LineTo(xo+i*(a2-20)/360,yo-oxplaner.apdraw[i]*b2/(z+1.5)-30);
  
	dc.TextOut(xo+i*(a2-20)/360,yo-oxplaner.apdraw[i]*b2/(z+1.5)-35,"a");
}

  dc.SelectObject(&pOldPen);
  
}	
	
}



void COx_PlanerView::OnShaft() 
{
	// TODO: Add your command handler code here

  CClientDC dc(this);
  CPen pen(0,2,RGB(250,0,0));
  CPen *pOldPen;
  flag=2;
  pOldPen=dc.SelectObject(&pen);
  CRect r;  
  GetClientRect(&r);
  xo=r.right/10;
  yo=r.bottom/2;
  a1=r.right/20;
  a2=r.right*4/5;
  b1=r.bottom/3;
  b2=r.bottom/3;    
  
  dc.MoveTo(xo-a1,yo);
  dc.LineTo(xo+a2,yo);
  dc.LineTo(xo+a2-10,yo+5);
  dc.MoveTo(xo+a2,yo);
  dc.LineTo(xo+a2-10,yo-5);    //x shaft

  dc.TextOut(xo+a2+5,yo,"t|Ψ|s|度",10);       
  
  dc.MoveTo(xo,yo+b1);
  dc.LineTo(xo,yo-b2);
  dc.LineTo(xo-5,yo-b2+10);
  dc.MoveTo(xo,yo-b2);
  dc.LineTo(xo+5,yo-b2+10);  //y shaft

  dc.TextOut(xo-5,yo-b2-15,"S/V/A",5); 
  
  
  for(i=0;i<=(360/del);i++)
    {
      dc.MoveTo(xo+i*(a2-20)*del/360,yo);
  
       dc.LineTo(xo+i*(a2-20)*del/360,yo-5);
    }
  
  dc.SelectObject(&pen);
 
	
}

void COx_PlanerView::OnClear() 
{
	// TODO: Add your command handler code here
	Invalidate();
	
}

void COx_PlanerView::OnTb() 
{
	// TODO: Add your command handler code here;

 OnShaft();
  CClientDC dc(this);
  CPen pen(0,2,RGB(255,0,0));
  CPen *pOldPen;
  pOldPen=dc.SelectObject(&pen);

  CRect r;  
  GetClientRect(&r);
  xo=r.right/10;
  yo=r.bottom/2;
  a1=r.right/20;
  a2=r.right*4/5;
  b1=r.bottom/3;
  b2=r.bottom/3;    
  
  int x;  
  x=oxplaner.tbdraw[0];   
  
  for(i=1;i<360;i++)
{
   if(fabs(oxplaner.tbdraw[i])>x)x=fabs(oxplaner.tbdraw[i]);
   
}
  
 for(i=1;i<360;i++)
{
	 dc.MoveTo(xo+(i-1)*(a2-20)/360,yo-oxplaner.tbdraw[i-1]*b2/(x+1.5));
     dc.LineTo(xo+i*(a2-20)/360,yo-oxplaner.tbdraw[i]*b2/(x+1.5));

    if(i==120)
	{
	
     dc.MoveTo(xo+i*(a2-20)/360,yo-oxplaner.tbdraw[i]*b2/(x+1.5)-5);
     dc.LineTo(xo+i*(a2-20)/360,yo-oxplaner.tbdraw[i]*b2/(x+1.5)-30);
  
	 dc.TextOut(xo+i*(a2-20)/360,yo-oxplaner.tbdraw[i]*b2/(x+1.5)-35,"tb");
	}
  }
dc.SelectObject(&pOldPen);
}

void COx_PlanerView::OnGetData() 
{
	// TODO: Add your command handler code here
	if(Getdata.DoModal()==IDOK)
	{  
oxplaner.Creat(Getdata.m_n,Getdata.m_k ,Getdata.m_h,Getdata.m_LO2O3,
			   Getdata.m_b1,Getdata.m_b2,Getdata.m_b3,Getdata.m_xs,Getdata.m_ys,
			   Getdata.m_yp,Getdata.m_g3 ,Getdata.m_g4,Getdata.m_g5,
			   Getdata.m_ys3,Getdata.m_ys4,Getdata.m_pr);
	}
	Invalidate();
	
}

void COx_PlanerView::OnText() 
{
	// TODO: Add your command handler code here
	CString filename;
	CString str;
    filename="textout2";
    filename=filename+".txt";
	str="notepad "+filename;
	WinExec(str,SW_SHOW);  
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -