📄 ox_planerview.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 + -