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

📄 processview.cpp

📁 该软件是我读硕士的时候写的
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// ProcessView.cpp : implementation of the CProcessView class
//

#include "stdafx.h"
#include "Process.h"

#include "MainFrm.h"
#include "ProcessDoc.h"
#include "ProcessView.h"

#include "ProcessData.h"
#include "DlgIDWT.h"
#include "DlgIntensity.h"

#include "DlgKalman.h"
#include "BPNetDlg.h"
#include "Matrix1.h"

#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>

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

#define pi 3.1415926

/////////////////////////////////////////////////////////////////////////////
// CProcessView

IMPLEMENT_DYNCREATE(CProcessView, CScrollView)

BEGIN_MESSAGE_MAP(CProcessView, CScrollView)
	//{{AFX_MSG_MAP(CProcessView)
	ON_COMMAND(ID_WAVELET_NO1, OnWavelet)
	ON_COMMAND(ID_IWAVELET, OnIwavelet)
	ON_COMMAND(ID_KALMAN_MOXING1, OnKalmanMoxing1)
	ON_COMMAND(ID_FILTER_MEAN, OnFilterMean)
	ON_COMMAND(ID_NIHE_YIYUANERCI, OnNiheYiyuanerci)
	ON_COMMAND(ID_NIHE_ZHIXIAN, OnNiheZhixian)
	ON_WM_MOUSEMOVE()
	ON_COMMAND(ID_FILTER_MIDDLE, OnFilterMiddle)
	ON_COMMAND(ID_CHECK, OnCheck)
	ON_COMMAND(ID_NORMALIZE, OnNormalizeData)
	ON_COMMAND(ID_INSERT, OnInsertValue)
	ON_COMMAND(ID_INSERT_INCnAZI, OnINSERTINCnAZI)
	ON_COMMAND(ID_MANGQV, OnMangqv)
	ON_COMMAND(ID_QITA_ZUANSHItoZUANSU, OnZUANSHItoZUANSU)
	ON_COMMAND(ID_QITA_ZHUANSU, OnZhuansu)
	ON_COMMAND(ID_QITA_PAILIANG, OnPailiang)
	ON_COMMAND(ID_QITA_BISHUIGONGLV, OnShuigonglv)
	ON_COMMAND(ID_QITA_YACHA, OnYacha)
	//}}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()

/////////////////////////////////////////////////////////////////////////////
// CProcessView construction/destruction

CProcessView::CProcessView()
{
	// TODO: add construction code here
		DataNum=0;

	    INPUTDATA=false;
		AFTERDWT=false;
		DRAWWAVELET=true;
		AFTERKALMAN=false;

		rect.left = 50;
		rect.top = 100;
		rect.right = 900;
		rect.bottom = 20000;

		rectHeader.left = 50;
		rectHeader.top = 10;
		rectHeader.right = 900;
		rectHeader.bottom = 80;

}

CProcessView::~CProcessView()
{
}

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

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CProcessView drawing

void CProcessView::OnDraw(CDC* pDC)
{
	CProcessDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	COLORREF oldBkColor = pDC->SetBkColor(RGB(250,250,255));
	
	int i,j;
	CString str;
	
	COLORREF m_gridColor = RGB(60, 60, 60);
	
	CPen penDot;
	penDot.CreatePen(PS_DOT, 0, m_gridColor);
	CPen* pOldPen = pDC->SelectObject(&penDot);
	

	for (int x = rect.left ; x < rect.right; x += SCALE_WIDTH1)
	{
		if (x != 0)
		{
			pDC->MoveTo(x, rect.top);
			pDC->LineTo(x, rect.bottom);
		}
	}
	
	for (int y = rect.top ; y < rect.bottom; y += SCALE_DEPTH1)
	{
		if (y != 0)
		{
			pDC->MoveTo(rect.left, y);
			pDC->LineTo(rect.right, y);
			
		}
		
	}	
	CPen penDash;
	penDash.CreatePen(PS_SOLID, 1, m_gridColor);
	pDC->SelectObject(&penDash);
	for (y = rect.top ; y < rect.bottom; y += (10*SCALE_DEPTH1))
	{
		if (y != 0)
		{
			pDC->MoveTo(rect.left, y);
			pDC->LineTo(rect.right, y);
			
		}
		
	}
	for (x = rect.left ; x < rect.right; x +=(5*SCALE_WIDTH1))
	{
		if (x != 0)
		{
			pDC->MoveTo(x, rect.top);
			pDC->LineTo(x, rect.bottom);
		}
	}
	// Outlines
	//画出边框
	CPen penSolid;
	penSolid.CreatePen(PS_SOLID, 2, m_gridColor);
	pDC->SelectObject(&penSolid);
	
	pDC->MoveTo(rect.left, rect.top);
	pDC->LineTo(rect.right, rect.top);
	pDC->MoveTo(rect.right, rect.bottom);
	pDC->MoveTo(rect.left, rect.bottom);
	pDC->LineTo(rect.left, rect.top);
	pDC->MoveTo(rect.right, rect.top);
	pDC->LineTo(rect.right, rect.bottom);
	pDC->LineTo(rect.left, rect.bottom);
	
	//绘制文件头
	
	pDC->MoveTo(rectHeader.left, rectHeader.top);
	pDC->LineTo(rectHeader.right, rectHeader.top);
	pDC->MoveTo(rectHeader.right, rectHeader.bottom);
	pDC->MoveTo(rectHeader.left, rectHeader.bottom);
	pDC->LineTo(rectHeader.left, rectHeader.top);
	pDC->MoveTo(rectHeader.right, rectHeader.top);
	pDC->LineTo(rectHeader.right, rectHeader.bottom);
	pDC->MoveTo(rectHeader.right, rectHeader.bottom);
	pDC->LineTo(rectHeader.left, rectHeader.bottom);
	
	pDC->SelectObject(pOldPen);
	pDC->SetBkColor(oldBkColor);
	

	if(pDoc->m_bOpenFile) DrawGrid(pDC);

	CProcessApp *app=(CProcessApp *)AfxGetApp();
    if(app->DRAWBPNN) DrawDataBPNet(pDC);

	if(pDoc->m_bOpenFile&&AFTERDWT) DrawDataWavelet(pDC);

	if(pDoc->m_bOpenFile&&AFTERKALMAN) DrawDataKalman(pDC);
}
void CProcessView::DrawGrid(CDC* pDC)
{
	CString ShowFileName,strName,strNum,str1,str2;
	CProcessDoc* pDoc = GetDocument();
	memcpy(DataData,pDoc->DataData,sizeof(double)*shuzu);
	memcpy(DataDepth,pDoc->DataDepth,sizeof(double)*shuzu);
	DataNum=pDoc->DataNum;
    //绘制文件头的内容
	ShowFileName=pDoc->lpszinputdatafile;
	strName="文件名:"+ShowFileName;
    pDC->TextOut(rectHeader.left+6,rectHeader.top+5,strName);
	
	str1.Format("%.3f米 ",pDoc->DataDepth[0]);
	str2.Format("%.3f米 ",pDoc->DataDepth[DataNum-1]);
	strNum=" 测井井段:";
	strNum=strNum+str1+"--"+str2;
	pDC->TextOut(rectHeader.left+6,rectHeader.top+25,strNum);

	str1.Format("%d ",pDoc->DataNum);
	strNum="数据个数:";
	strNum=strNum+str1;
	pDC->TextOut(rectHeader.left+6,rectHeader.top+45,strNum);

	COLORREF oldBkColor = pDC->SetBkColor(RGB(250,250,255));

	int i,j;
	int templittle,tempbig;
	CString str;
	double DataDataTmp1,DataDataTmp2;
	double DataDepthTmp1,DataDepthTmp2;
	
	COLORREF m_gridColor = RGB(60, 60, 60);

	CPen penDash;
	penDash.CreatePen(PS_SOLID, 1, m_gridColor);
	CPen* pOldPen =pDC->SelectObject(&penDash);

	j=0;
	templittle=int(pDoc->DataDepth[0])-int(pDoc->DataDepth[0])%10;
    tempbig=int(pDoc->DataDepth[DataNum-1])-int(pDoc->DataDepth[DataNum-1])%10;
	//tempbig=3000;
	for (i = templittle; i <=tempbig; i+=10)
	{
		pDC->MoveTo(rect.left, rect.top+j);
		pDC->LineTo(rect.left-10, rect.top+j);
		pDC->MoveTo(rect.left, rect.top+j+1);
		pDC->LineTo(rect.left-10, rect.top+j+1);
		
		str.Format("%d",i);
		pDC->TextOut(rect.left-36, rect.top+j, str);
        j+= 10*SCALE_DEPTH1;
	}

	lMaxData=0;
	lMinData=0;
	for (i=0; i<DataNum; i++)
	{
		// 判断是否大于当前最大值
		if (DataData[i] > lMaxData)
		{
			// 更新最大值
			lMaxData = DataData[i];
		}
		if (DataData[i] < lMinData)
		{
			// 更新最小值
			lMinData = 0.0;
		}
	}
	
	COLORREF m_DataColor = RGB(0, 0, 255);
	CPen penSolidData;
	penSolidData.CreatePen(PS_SOLID, 1, m_DataColor);
	pDC->SelectObject(&penSolidData);
	int temp;
	temp=0;
	for (i = 1; i <DataNum; i ++)
	{	
		
		DataDataTmp1=CURVE_WIDTHMAX*pDoc->DataData[i-1]/(lMaxData-lMinData);
		DataDataTmp2=CURVE_WIDTHMAX*pDoc->DataData[i]/(lMaxData-lMinData);
		DataDepthTmp1=SCALE_DEPTH1*(pDoc->DataDepth[i-1]-templittle);
		DataDepthTmp2=SCALE_DEPTH1*(pDoc->DataDepth[i]-templittle);
		
		pDC->MoveTo(rect.left+DataDataTmp1, rect.top+DataDepthTmp1);
		pDC->LineTo(rect.left+DataDataTmp2, rect.top+DataDepthTmp2);
	} 
	
	pDC->SelectObject(pOldPen);
	
}
void CProcessView::DrawData(CDC *pDC)
{
	int i,j;
	double templittle,tempbig;
	CString str;

	int	  xb, yb, xe, ye;   
                            
	CString m_str;
	float value;
	int GL = 70;
	int GR = m_totalLog.cx-10;
	int GT = 25;
	int GB = m_totalLog.cy-10;
	int PX = GR - GL;
	int PY = GB - GT;
	ye=GT;
	int XTicks=20;
	j = XTicks / 2;
	for(i = 0; i <= 10; i ++) 
	{
	
		m_str.Format("%4.0f", i*100);
			if(i!=0)
//				PrintString(pDC,xb, GT- 15, 0, m_str);
		
		if (i > 0 && i < XTicks)
		{
			pDC->MoveTo(xb, yb);
			pDC->LineTo(xe, ye);
		}
	} 
	

	
}
/////////////////////////
void CProcessView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();
 //   OnUpdate(NULL, 0, NULL);

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

/////////////////////////////////////////////////////////////////////////////
// CProcessView printing

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

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

/////////////////////////////////////////////////////////////////////////////
// CProcessView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CProcessView message handlers

void CProcessView::OnWavelet() 
{
/*
	if(INPUTDATA==false)
		{
			AfxMessageBox("请先输入数据!");
			return;
	    }
*/


	int t=GetNumber("请选择分解的层数!!!",1,12);
	
	J=t;//分解的层数
	
	int i,j,wlen,sca[20],flag[20];
	int m;//分解的层数
	int count;
	//
	static double h[]={0.332670552950,0.806891509311,0.459877502118,
		-0.135011020010,-0.085441273882,0.035226291882};
	static double g[]={0.0352263,0.08544127,-0.135011,
		-0.459877502118,0.8068915,-0.33267055};
	wlen=6;//小波长度

	char d_name[16]="temp\\d0.txt",c_name[16]="temp\\c0.txt";
	
	m=J;
	j=DataNum;
	flag[0]=0;
	for(i=0;i<=m;i++)
	{
		flag[i+1]=flag[i]+j;
		sca[i]=j;
		j=j/2;
	}
	
	count=2*DataNum;
	memcpy(DataWaveletLow,DataData,sizeof(double)*shuzu);
	memcpy(DataWaveletHigh,DataData,sizeof(double)*shuzu);
	
    DWT(g,h,wlen,DataWaveletLow,DataWaveletHigh,m,sca);
	
	ofstream ostrm,ostrmc,ostrmd;
    ostrm.open( c_name);
	
    for(i=0;i<DataNum;i++)
	{
        ostrm<<DataWaveletLow[i]<<endl;
	}
	ostrm.close();
	
	for(i=1;i<=J;i++)
	{
		c_name[6]++;
		d_name[6]++;
        
		ostrmc.open( c_name);
		ostrmd.open( d_name);
		for(j=0;j<sca[i];j++)
		{
			ostrmc<<DataWaveletLow[flag[i]+j]<<endl;
			ostrmd<<DataWaveletHigh[flag[i]+j]<<endl;
		}
		ostrmc.close();
		ostrmd.close();
	}
 	AFTERDWT=true;
	DRAWWAVELET=true;
	
	CProcessDoc* pDoc = GetDocument();
	memcpy(pDoc->DataWaveletLow,DataWaveletLow,sizeof(double)*shuzu);
	memcpy(pDoc->DataWaveletHigh,DataWaveletHigh,sizeof(double)*shuzu);
	
	Invalidate();	
}

void CProcessView::DrawDataWavelet(CDC *pDC)
{
	CProcessDoc* pDoc = GetDocument();
	memcpy(DataWaveletLow,pDoc->DataWaveletLow,sizeof(double)*shuzu);
	memcpy(DataWaveletHigh,pDoc->DataWaveletHigh,sizeof(double)*shuzu);

	COLORREF oldBkColor = pDC->SetBkColor(RGB(250,250,255));

	int i,j;
	double templittle,tempbig;
	CString str;
	double DataDataTmp1,DataDataTmp2;
	double DataDepthTmp1,DataDepthTmp2;
	double DataDataTmpHigh1,DataDataTmpHigh2;
	int tmp,tmpDataLength;
	
	COLORREF m_gridColor = RGB(60, 60, 60);
	
	pDC->SetBkColor(oldBkColor);

	lMaxDataLow=0;
	lMinDataLow=0;
	lMaxDataHigh=0;
	lMinDataHigh=0;
	for (i=0; i<(2*DataNum-DataNum/(1<<J)); i++)
	{

		// 判断是否大于当前最大值
		if (pDoc->DataWaveletLow[i] > lMaxDataLow)
		{
			// 更新最大值
			 lMaxDataLow= pDoc->DataWaveletLow[i];
		}
		if (pDoc->DataWaveletLow[i] < lMinDataLow)
		{
			lMinDataLow = pDoc->DataWaveletLow[i];
		}

		if (pDoc->DataWaveletHigh[i] > lMaxDataHigh)
		{
			lMaxDataHigh = pDoc->DataWaveletHigh[i];
		}
		if (pDoc->DataWaveletHigh[i] < lMinDataHigh)
		{
			lMinDataHigh = pDoc->DataWaveletHigh[i];
		}
	}
	
	COLORREF m_DataColor = RGB(255, 0, 0);
	CPen penSolidData;
	penSolidData.CreatePen(PS_SOLID, 1, m_DataColor);
	CPen* pOldPen = pDC->SelectObject(&penSolidData);
	
	templittle=int(pDoc->DataDepth[0])-int(pDoc->DataDepth[0])%10;
    tempbig=int(pDoc->DataDepth[DataNum/2-1])-int(pDoc->DataDepth[DataNum/2-1])%10;

	if(DRAWWAVELET==true)
	{
	tmpDataLength=0;
	for(i=1;i<=J;i++)
	{
		tmp=1<<i;
		tmpDataLength+=DataNum*2/tmp;
	}
	for (i = 1; i <DataNum/tmp; i ++)
	{	

		DataDataTmp1=CURVE_WIDTHMAX*pDoc->DataWaveletLow[i+tmpDataLength-1]/(lMaxDataLow-lMinDataLow);
		DataDataTmp2=CURVE_WIDTHMAX*pDoc->DataWaveletLow[i+tmpDataLength]/(lMaxDataLow-lMinDataLow);
		DataDataTmpHigh1=CURVE_WIDTHMAX*pDoc->DataWaveletHigh[i+tmpDataLength-1]/(lMaxDataHigh-lMinDataHigh);
		DataDataTmpHigh2=CURVE_WIDTHMAX*pDoc->DataWaveletHigh[i+tmpDataLength]/(lMaxDataHigh-lMinDataHigh);
		DataDepthTmp1=SCALE_DEPTH1*(pDoc->DataDepth[i]-templittle);
		DataDepthTmp2=SCALE_DEPTH1*(pDoc->DataDepth[i+1]-templittle);
	
		      pDC->MoveTo(rect.left+DataDataTmp1+2*SCALE_WIDTH2, rect.top+DataDepthTmp1);
		      pDC->LineTo(rect.left+DataDataTmp2+2*SCALE_WIDTH2, rect.top+DataDepthTmp2);
		
		      pDC->MoveTo(rect.left+DataDataTmpHigh1+2*SCALE_WIDTH2+200, rect.top+DataDepthTmp1);
		pDC->LineTo(rect.left+DataDataTmpHigh2+2*SCALE_WIDTH2+200, rect.top+DataDepthTmp2);
		
	}

⌨️ 快捷键说明

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