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

📄 magneticproview.cpp

📁 自己编的用于ENVI
💻 CPP
字号:
// MagneticProView.cpp : implementation of the CMagneticProView class
//

#include "stdafx.h"
#include "MagneticPro.h"

#include "MagneticProDoc.h"
#include "MagneticProView.h"
#include "SetDrawParaDialog.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMagneticProView

IMPLEMENT_DYNCREATE(CMagneticProView, CScrollView)

BEGIN_MESSAGE_MAP(CMagneticProView, CScrollView)
	//{{AFX_MSG_MAP(CMagneticProView)
	ON_COMMAND(ID_FILE_OPEN_MDATA, OnFileOpenMdata)
	ON_COMMAND(ID_DRAW_CMDATA, OnDrawCMdata)
	ON_COMMAND(ID_DRAW_SUN_CURVE, OnDrawSunCurve)
//	ON_COMMAND(ID_EXCHANG_MAGNETIC, OnExchangMagnetic)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMagneticProView construction/destruction

CMagneticProView::CMagneticProView()
{
	// TODO: add construction code here
    m_bmp.LoadBitmap(IDB_BITMAP2);
}

CMagneticProView::~CMagneticProView()
{
}

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

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMagneticProView drawing

void CMagneticProView::OnDraw(CDC* pDC)
{
	CMagneticProDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	CRect rc,memrc;
    CDC *dc=GetDC(),memdc;
    //dc.m_hDC=::GetDC();
    memdc.CreateCompatibleDC(dc);
    memdc.SelectObject(&m_bmp);
    GetClientRect(&rc) ;
    dc->BitBlt(rc.top,rc.left,rc.Width(),rc.Height()
             ,&memdc,rc.top,rc.left,SRCCOPY);
    ReleaseDC(&memdc);
    ReleaseDC(dc);

	// TODO: add draw code for native data here
}

void CMagneticProView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

/////////////////////////////////////////////////////////////////////////////
// CMagneticProView printing

BOOL CMagneticProView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMagneticProView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMagneticProView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CMagneticProView diagnostics

#ifdef _DEBUG
void CMagneticProView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CMagneticProView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

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

/////////////////////////////////////////////////////////////////////////////
// CMagneticProView message handlers

void CMagneticProView::OnFileOpenMdata() 
{
	// TODO: Add your command handler code here
	
}
/////////////////////////////////////////////////////////////////////////////
///////               以下程序实现绘制磁测数据功能           ////////////////
/////////////////////////////////////////////////////////////////////////////

void CMagneticProView::OnDrawCMdata() 
{
	// TODO: Add your command handler code here
	CMagneticProDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	//DrawGrapher(pDoc->XX,pDoc->mPointNum,pDoc->m_MData,pDoc->mPointNum);

	for(int i=0;i<pDoc->mPointNum;i++)
	{
		fTemp[i]=pDoc->m_MData[i].mData;
	}
	DrawGrapher(pDoc->XX,pDoc->mPointNum,fTemp,pDoc->mPointNum);

}

void CMagneticProView::OnDrawSunCurve() 
{
	// TODO: Add your command handler code here
    CMagneticProDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
   
	for(int i=0;i<pDoc->sPointNum;i++)
	{
		fTemp[i]=pDoc->m_SData[i].mData;
	}
	DrawGrapher(pDoc->XX,pDoc->sPointNum,fTemp,pDoc->sPointNum);
} 

bool CMagneticProView::DrawGrapher(double xArray[], int xNum, double yArray[], int yNum)
{
    int Xstart,Ystart,Xdivide,Ydivide,xN,yN;
	double Xscale,Yscale;
	CString tTemp;
  /////////////////////////////////////////////////////////////////////////////////////
    CSetDrawParaDialog sdlg;
    if(sdlg.DoModal())
	{
        ;
	}
	else
	{
       return false;
	}
  ////////////////////////////////////////////////////////////////////////////////////
    //UpdateData(TRUE);
    Xstart=sdlg.m_Xstart;
	Ystart=sdlg.m_Ystart;                      //////////
	Xdivide=sdlg.m_Xdivide;                    //////////  /获得各项绘图参数
	Ydivide=sdlg.m_Ydivide;                    //////////
	xN=sdlg.m_xN;
	yN=sdlg.m_yN;
	Xscale=sdlg.m_Xscale;
	Yscale=sdlg.m_Yscale;
	
    ///////////////////////////////////////////////////////////////////////////////////////
    CDC *pDC=GetDC();
	////////////////////////////////////////////////////////////////////////////////////
    //////////            绘制X-轴                                      ///////////////
	////////////////////////////////////////////////////////////////////////////////////
	 GetMaxMinMid(xArray, xNum);
     Xmax=Ximax;
	 Xmin=Ximin;
	 Xmid=Ximid;
     pDC->MoveTo(Xstart,Ystart);
     pDC->LineTo((int)(Xstart+Xscale*(Xmax-Xmin)),Ystart);
    for(int i=0;i<Xdivide;i++)
	{
	  pDC->MoveTo(Xstart+(int)(i*Xscale*(Xmax-Xmin)/Xdivide),Ystart);
      pDC->LineTo(Xstart+(int)(i*Xscale*(Xmax-Xmin)/Xdivide),Ystart-5);      
	}
	////////////////////////////////////////////////////////////////////////////////////
	for(int i=0;i<=Xdivide;i=i+xN)
	{
		//pDC->MoveTo();
        tTemp.Format("%5.1f",Xmin+i*(Xmax-Xmin)/Xdivide);
		pDC->TextOut(Xstart+(int)(i*Xscale*(Xmax-Xmin)/Xdivide),Ystart+10,tTemp);
	}
    ///////////////////   绘制Y轴                                   ///////////////////
    /////////////////////////////////////////////////////////////////////////////////////
    GetMaxMinMid(yArray, yNum);
     Ymax=Ximax;
	 Ymin=Ximin;
	 Ymid=Ximid;
     pDC->MoveTo(Xstart,Ystart);
     pDC->LineTo(Xstart,Ystart-(int)(Yscale*(Ymax-Ymin)));  //绘制直线
    for(int i=0;i<Ydivide;i++)
	{
	  pDC->MoveTo(Xstart,-(int)(i*Yscale*(Ymax-Ymin)/Ydivide)+Ystart);   //绘制小直线
      pDC->LineTo(Xstart+10,-(int)(i*Yscale*(Ymax-Ymin)/Ydivide)+Ystart);      
	}
    ////////////////////////////////////////////////////////////////////////////////////
    	for(int i=0;i<=Ydivide;i=i+yN)
	{
		//pDC->MoveTo();
        tTemp.Format("%5.1f",Ymin+i*(Ymax-Ymin)/Ydivide);
		pDC->TextOut(Xstart-40,Ystart-(int)(i*Yscale*(Ymax-Ymin)/Ydivide),tTemp);
	}
	/////////////////////////////////////////////////////////////////////////////////
    ////                        绘制曲线                             ////
	/////////////////////////////////////////////////////////////////////////////////
    
	pDC->MoveTo(Xstart,Ystart-(int)((yArray[0]-Ymin)*Yscale*Ydivide/(Ymax-Ymin)));
	for(int i=1;i<xNum,i<yNum;i++)
	{
		pDC->LineTo(Xstart+(int)(i*Xscale/*(Xmax-Xmin)/xNum*/) /*(int)((xArray[i]-Xmin)*Xscale*Xdivide/(Xmax-Xmin))*/,
			Ystart-(int)((yArray[i]-Ymin)*Yscale/*Ydivide*Yscale/(Ymax-Ymin)*/));

    }

  //////////////////////////////////////////////////////////////////////////////////
  //	::AfxMessageBox("Draw finish!");

  return true;
  
}

bool CMagneticProView::GetMaxMinMid(double fArray[], int xNum)
{
	 Xmax=Ximax=Ximid=fArray[0];
	 Xmin=Ximin=fArray[0];
	for(int i=0;i<xNum;i++)
	{
		if(fArray[i]>Xmax)
			Xmax=fArray[i];

		if(fArray[i]<Xmin)
			Xmin=fArray[i];
	}
    Ximax=Xmax;
	Ximin=Xmin;
	Ximid=(Ximax+Ximin)/2.0;
	return true;

}
/*
void CMagneticProView::OnExchangMagnetic() 
{
	// TODO: Add your command handler code here
	CMagneticProDoc::OnExchangMagnetic();
}
*/

⌨️ 快捷键说明

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