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

📄 newgraph.cpp

📁 这是本人两年前兼职为某个公司做的石油钻进设计软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// NewGraph.cpp : implementation file
//

#include "stdafx.h"
#include "CVenus.h"
#include "MainFrm.h"
#include "NewGraph.h"
#include	"ChildFrm.h"
#include "resource.h"

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

/////////////////////////////////////////////////////////////////////////////
// CNewGraph

IMPLEMENT_DYNCREATE(CNewGraph, CFormView)

CNewGraph::CNewGraph()
	: CFormView(CNewGraph::IDD)
{
	//{{AFX_DATA_INIT(CNewGraph)
	//}}AFX_DATA_INIT
	// TODO: add construction code here
	m_iX = 28;
	m_iY = 220;
	m_iXStart = 50;
	m_iYStart = 50;
	m_color[0] = RGB(0,0,0);
	m_color[1] = RGB(0,255,0);
	m_color[2] = RGB(0,0,255);
	m_color[3] = RGB(255,0,255);
	m_color[4] = RGB(0,0,160);
	m_color[5] = RGB(0,255,255);
	m_color[6] = RGB(0,128,0);
	m_color[7] = RGB(128,0,0);
	m_color[8] = RGB(0,64,0);
	m_color[9] = RGB(0,128,192);
	m_color[10] = RGB(64,128,128);
	m_color[11] = RGB(196,196,0);
	m_color[12] = RGB(255,128,128);
	m_color[13] = RGB(128,0,64);
	m_color[14] = RGB(244,100,175);
	m_color[15] = RGB(175,244,100);
}

CNewGraph::~CNewGraph()
{
}

void CNewGraph::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CNewGraph)
	DDX_Control(pDX, IDC_USERBITMAPCTRL, m_ctrlPic);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CNewGraph, CFormView)
	ON_WM_CONTEXTMENU()
	//{{AFX_MSG_MAP(CNewGraph)
	ON_WM_CREATE()
	ON_COMMAND(IDM_SPD_BITMP, OnSpdBitmp)
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CNewGraph diagnostics

#ifdef _DEBUG
void CNewGraph::AssertValid() const
{
	CFormView::AssertValid();
}

void CNewGraph::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CNewGraph message handlers

int CNewGraph::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	CMainFrame*	wnd = (CMainFrame*)AfxGetMainWnd();
	CString cstrProjectName;
	if(wnd->m_structWellInfo.bWellState == TRUE)	//油井
	{
		switch(wnd->m_iPaint)
		{
		case 1:										//孔深/孔密
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/孔密";
			break;
		case 2:										//孔深/相位角
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/相位角";
			break;
		case 3:										//非均质性/相位角
			cstrProjectName = "射孔敏感度分析(产率图)-非均质性/相位角";
			break;
		case 4:										//孔深/孔径
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/孔径";
			break;
		case 5:										//孔深/压实厚度
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/压实厚度";
			break;
		case 6:										//孔深/压实程度
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/压实程度";
			break;
		case 7:										//孔深/污染深度
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/污染深度";
			break;
		case 8:										//污染深度/实际孔深
			cstrProjectName = "射孔敏感度分析(产率图)-污染深度/实际孔深";
			break;
		case 9:										//孔深/污染程度
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/污染程度";
			break;
		case 10:									//孔深/非均质性
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/非均质性";
			break;
		}
	}
	else											//气井
	{
		switch(wnd->m_iPaint)
		{
		case 1:										//孔深/孔密
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/孔密";
			break;
		case 2:										//相位
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/相位";
			break;
		case 3:										//孔径
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/孔径";
			break;
		case 4:										//生产压差
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/生产压差";
			break;
		case 5:										//压实程度
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/压实程度";
			break;
		case 6:										//地层渗透率
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/地层渗透率";
			break;
		case 7:										//污染程度
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/污染程度";
			break;
		case 8:										//非均质性
			cstrProjectName = "射孔敏感度分析(产率图)-孔深/非均质性";
			break;
		}
	}
	GetParentFrame()->SetWindowText(cstrProjectName);

	m_iX = (int)(m_iX*wnd->m_fScale);
	m_iY = (int)(m_iY*wnd->m_fScale);
	m_fScale = wnd->m_fScale;
	CString cstrTemp;
	int iTemp;
	if(wnd->m_structWellInfo.bWellState == TRUE)	//油井
	{
		cstrTemp = wnd->m_structOilShotForecast.strModel ;
		for(iTemp=0;iTemp<wnd->m_structBDTTable.lCount;iTemp++)
		{
			if(cstrTemp.Compare(wnd->m_structSDT[iTemp].strModel)==0)
			{
				m_fKS = wnd->m_structSDT[iTemp].fShotDepth ;
				//m_fPKS = wnd->m_structSDT[iTemp].fShotDepth * wnd->m_structTTPResult.fPP[iTemp];
				m_fPKS = wnd->m_structTTPResult.fPDepth[iTemp];	
				m_fKM = wnd->m_structOilShotForecast.fShotDen ;
				m_fKJ = wnd->m_structSDT[iTemp].fDiameter ;
				m_fXW1 = wnd->m_structOilShotForecast.fShotPhasic ;
				m_fYH = wnd->m_structSDT[iTemp].fPressDeep ;
				m_fWH = wnd->m_structBDTTable.fDrillPolluteDepth ;
				m_fYC = wnd->m_structSDT[iTemp].fPressLong ;
				m_fWC = wnd->m_structBDTTable.fDrillPollutePercent ;
				m_fKZR = wnd->m_structBDTTable.fStratumHeterosphere ;
				m_fJBJ = (float)(wnd->m_structBDTTable.fWellRadius * 1000);
				m_fDP = wnd->m_structBDTTable.fProducePressDiff ;
				m_fPK = (float)(wnd->m_structBDTTable.fStratumFilterPercent * 1000);
				m_fPE = wnd->m_structBDTTable.fStratumAverPress ;
				m_fXW[0] = (float)0;
				m_fXW[1] = (float)90;
				m_fXW[2] = (float)120;
				m_fXW[3] = (float)180;
				m_fXW[4] = (float)60;
				break;
			}
		}
	}
	else									//气井
	{
		cstrTemp = wnd->m_structGasShotForecast.strModel ;
		for(iTemp=0;iTemp<wnd->m_structBDTTable.lCount;iTemp++)
		{
			if(cstrTemp.Compare(wnd->m_structSDT[iTemp].strModel)==0)
			{
				m_fKS = wnd->m_structSDT[iTemp].fShotDepth ;
				//m_fPKS = wnd->m_structSDT[iTemp].fShotDepth * wnd->m_structTTPResult.fPP[iTemp];
				m_fPKS = wnd->m_structTTPResult.fPDepth[iTemp];	
				m_fKM = wnd->m_structGasShotForecast.fShotDen ;
				m_fKJ = wnd->m_structSDT[iTemp].fDiameter ;
				m_fXW1 = wnd->m_structGasShotForecast.fShotPhasic ;
				m_fYH = wnd->m_structSDT[iTemp].fPressDeep ;
				m_fWH = wnd->m_structBDTTable.fDrillPolluteDepth ;
				m_fYC = wnd->m_structSDT[iTemp].fPressLong ;
				m_fWC = wnd->m_structBDTTable.fDrillPollutePercent ;
				m_fKZR = wnd->m_structBDTTable.fStratumHeterosphere ;
				m_fJBJ = (float)(wnd->m_structBDTTable.fWellRadius * 1000);
				m_fDP = wnd->m_structBDTTable.fProducePressDiff ;
				m_fPK = (float)(wnd->m_structBDTTable.fStratumFilterPercent * 1000);
				m_fPE = wnd->m_structBDTTable.fStratumAverPress ;
				m_fXW[0] = (float)0;
				m_fXW[1] = (float)90;
				m_fXW[2] = (float)120;
				m_fXW[3] = (float)180;
				m_fXW[4] = (float)60;
				break;
			}
		}
	}
	return 0;
}
float CNewGraph::fnprwOil1(float ks, float km, float kj, float xw, float jbj, float kzr, float yh, float yc, float wh, float wc)
{
	return (float)(-0.25+0.00148*ks-1.23E-06*pow(ks,2)+0.00958*km-
		0.0000998*pow(km,2)-0.00467*km*(log(kzr)/log(10))+0.0178*kj-
		0.000296*pow(kj,2)+0.00195*xw-0.00001*pow(xw,2));
}

float CNewGraph::fnprwOil2(float ks, float km, float kj, float xw, float jbj, float kzr, float yh, float yc, float wh, float wc)
{
	return (float)(fnprwOil1(ks,km,kj,xw,jbj,kzr,yh,yc,wh,wc)-2*0.000828*
		xw*(log(kzr)/log(10))+0.4*(log(kzr)/log(10))+0.3488*yc-0.1745*
		pow(yc,2)+0.69*wc-0.35*pow(wc,2)-0.00778*yh);
}

float CNewGraph::fnprwOil(float ks, float km, float kj, float xw, float jbj, float kzr, float yh, float yc, float wh, float wc)
{
	return (float)(fnprwOil2(ks,km,kj,xw,jbj,kzr,yh,yc,wh,wc)+0.000156*
		pow(yh,2)-0.000452*wh+2.05E-07*pow(wh,2)+0.319*kzr-0.103*
		pow(kzr,2)-0.0009512*jbj+2.378E-06*pow(jbj,2));
}

float CNewGraph::fnprcOil1(float ks, float km, float kj, float xw, float jbj, float kzr, float yh, float yc, float wh, float wc)
{
	return (float)(-0.25+0.00191*ks-1.36E-06*pow(ks,2)+0.01665*km-
		0.000173*pow(km,2)-0.00856*km*(log(kzr)/log(10))+0.0201*kj-
		0.000335*pow(kj,2)+0.00211*xw-0.0000108*pow(xw,2));
}

float CNewGraph::fnprcOil2(float ks, float km, float kj, float xw, float jbj, float kzr, float yh, float yc, float wh, float wc)
{
	return (float)(fnprcOil1(ks,km,kj,xw,jbj,kzr,yh,yc,wh,wc)-2*0.000887*
		xw*(log(kzr)/log(10))+0.5*(log(kzr)/log(10))+0.512*yc-
		0.253*pow(yc,2)+0.3315*wc-0.168*pow(wc,2)-0.00963*yh);
}

float CNewGraph::fnprcOil(float ks, float km, float kj, float xw, float jbj, float kzr, float yh, float yc, float wh, float wc)
{
	return (float)(fnprcOil2(ks,km,kj,xw,jbj,kzr,yh,yc,wh,wc)+
		0.000193*pow(yh,2)-0.000841*wh+7.14E-07*pow(wh,2)+
		0.406*kzr-0.135*pow(kzr,2)-0.0009736*jbj+2.43E-06*
		pow(jbj,2));
}

float CNewGraph::fnprlOil1(float ks, float km, float kj, float xw, float jbj, float kzr)
{
	return (float)(-0.45+0.00191*ks-1.36*pow(10,-6)*pow(ks,2)+
		0.01665*km-0.000173*pow(km,2)-0.00856*km*(log(kzr)/log(10))+
		0.0201*kj-0.000335*pow(kj,2)+0.00211*xw-0.0000108*pow(xw,2));
}


float CNewGraph::fnprlOil2(float ks, float km, float kj, float xw, float jbj, float kzr)
{
	return (float)(fnprlOil1(ks,km,kj,xw,jbj,kzr)-2*0.000887*xw*(log(kzr)/log(10))+
		0.5*(log(kzr)/log(10))+0.512*1-0.253*pow(1,2)+0.3315*1-0.168*pow(1,2)-
		0.00963*0);
}

float CNewGraph::fnprlOil(float ks, float km, float kj, float xw, float jbj, float kzr)
{
	return (float)(fnprlOil2(ks,km,kj,xw,jbj,kzr)+0.000193*pow(0,2)-
		0.000841*0+7.14*pow(10,-7)*pow(0,2)+0.406*kzr-0.135*pow(kzr,2)-
		0.0009736*jbj+2.43E-6*pow(jbj,2));
}

float CNewGraph::fnprwGas1(float ks, float km, float kj, float xw, float kzr, float yh, float yc, float wh, float wc)
{
	return (float)(0.7158+0.1231*(ks-200)/61.5-0.0126*(yh-13)/2.87+
		0.1244*(km-29)/8.609999+0.0599*(yc-0.525)/0.195+8.519999E-02
		*(kj-13)/2.87+0.14*(wc-0.525)/0.195-0.0149*(wh-525)/133+
		0.0112*(xw-90)/30+0.0467*(kzr-0.505)/0.203);
}

float CNewGraph::fnprwGas2(float ks, float km, float jbj, float yc, float wc, float dp)
{
	return (float)(-0.0221*(dp-16)/5.74+0.0559*(jbj-114.3)/15.62+
		0.0095*((ks-200)/61.5)*((km-29)/8.609999)+0.0241*((km-29)/
		8.609999)*((wc-0.525)/0.195)+0.0106*((yc-0.525)/0.195)*
		((wc-0.525)/0.195));
}

float CNewGraph::fnprwGas3(float ks, float km, float xw, float yh, float yc, float dp)
{
	return (float)(0.0106*((km-29)/8.609999)*((dp-16)/5.74)-0.0142*
		((xw-90)/30)*((dp-16)/5.74)-0.0126*pow((ks-200)/61.5,2)+
		0.0009*pow((yh-13)/2.87,2)-0.0144*pow((km-29)/8.609999,2)-
		0.012*pow((yc-0.525)/0.195,2));
}

float CNewGraph::fnprwGas4(float kj, float xw, float jbj, float kzr, float wh, float pk, float dp)
{
	return (float)(0.0104*pow((wh-525)/133,2)-0.0092*pow((kzr-0.505)/0.203,2)+
		0.0101*pow((pk-100)/41,2)+0.0187*pow((dp-16)/5.74,2)+0.0116*pow((jbj-114.3)/15.62,2)-
		0.0027*pow((xw-90)/30,2)-0.0074*pow((kj-13)/2.87,2));
}

float CNewGraph::fnprwGas5(float ks, float xw, float kzr, float wc, float dp)
{
	return (float)(0.0159*((xw-90)/30)*((kzr-0.505)/0.203)-0.0101*
		((ks-200)/61.5)*((dp-16)/5.74)-0.0219*pow((wc-0.525)/0.195,2));
}

float CNewGraph::fnprcGas1(float ks, float km, float kj, float xw, float kzr, float yh, float yc, float wh, float wc)
{
	return (float)(1.2575+0.0435*(ks-425)/71.76-0.0223*(yh-13)/2.87+
		0.1973*(km-29)/8.609999+0.0281*(yc-0.525)/0.195+0.1873*(kj-13)/2.87+
		0.0544*(wc-0.525)/0.195-0.0193*(wh-200)/82+0.0255*(xw-90)/30+0.0515*
		(kzr-0.505)/0.203);
}


float CNewGraph::fnprcGas2(float ks, float km, float xw, float jbj, float kzr, float wh, float wc)
{
	return (float)(0.0485*(jbj-114.3)/15.62+0.0111*((ks-425)/71.76)*
		((km-29)/8.609999)+0.0201*((wc-0.525)/0.195)*((wh-200)/82)+
		0.0211*((xw-90)/30)*((kzr-0.505)/0.203)-0.0069*pow((ks-425)/71.67,2));
}

float CNewGraph::fnprcGas3(float km, float kj, float xw, float kzr, float yc, float wh, float wc)
{
	return (float)(-0.0255*pow((km-29)/8.609999,2)-0.0057*
		pow((yc-0.525)/0.195,2)-9.100001E-03*pow((kj-13)/2.87,2)-
		0.0102*pow((wc-0.525)/0.195,2)+0.0024*pow((wh-200)/82,2)-
		0.0177*pow((xw-90)/30,2)-0.0102*pow((kzr-0.505)/0.203,2));
}

float CNewGraph::fnprcGas4(float yh, float jbj, float pk, float dp)
{
	return (float)(0.0028*pow((jbj-114.3)/15.62,2)+0.01*
		pow((dp-16)/5.74,2)+0.0338*pow((pk-100)/41,2)+0.0028*
		pow((yh-13)/2.87,2)-0.0243*(pk-100)/41-0.0373*(dp-16)/5.74);
}

void CNewGraph::OnDraw(CDC* pDC) 
{
	// TODO: Add your specialized code here and/or call the base class
	CMainFrame*	wnd = (CMainFrame*)AfxGetMainWnd();
	m_ctrlPic.PicCls ();
	CRect rc;	
	GetClientRect(&rc);
	TRACE("%d, %d\n", rc.Width(), rc.Height());
	m_fScale = 1;
	if(rc.Width() > 600)
		m_iX = 28*rc.Width()/400;
	else if(rc.Width() > 500)
		m_iX = 28*rc.Width()/430;
	else
		m_iX = 28*rc.Width()/450;

	if(rc.Height() > 500)
		m_iY = 220*rc.Height()/300;
	else if(rc.Height() > 400)
		m_iY = 220*rc.Height()/320;
	else if(rc.Height() > 350)
		m_iY = 220*rc.Height()/350;
	else if(rc.Height() > 300)
		m_iY = 220*rc.Height()/420;
	else
		m_iY = 220*rc.Height()/500;
	
/*	CSize sizeTotal;
	sizeTotal.cx = rc.Width();
	sizeTotal.cy = rc.Height();
	SetScrollSizes(MM_TEXT, sizeTotal);
*/
	m_ctrlPic.SetWindowPos(this, rc.left, rc.top, rc.Width(), rc.Height(), NULL);
	
	if(wnd->m_structWellInfo.bWellState == TRUE)	//油井
	{
		switch(wnd->m_iPaint)
		{
		case 1:										//孔深/孔密
			DrawOilKSKM();
			break;
		case 2:										//孔深/相位角
			DrawOilKSXW();
			break;
		case 3:										//非均质性/相位角
			DrawOilKZRXW();
			break;
		case 4:										//孔深/孔径
			DrawOilKSKJ();
			break;
		case 5:										//孔深/压实厚度
			DrawOilKSYH();
			break;
		case 6:										//孔深/压实程度
			DrawOilKSYC();
			break;
		case 7:										//孔深/污染深度
			DrawOilKSWH();
			break;
		case 8:										//污染深度/实际孔深
			DrawOilWHFKS();
			break;
		case 9:										//孔深/污染程度
			DrawOilKSWC();
			break;
		case 10:									//孔深/非均质性
			DrawOilKSKZR();
			break;
		}
	}
	else											//气井
	{
		switch(wnd->m_iPaint)
		{
		case 1:										//孔深/孔密
			DrawGasKSKM();
			break;
		case 2:										//相位
			DrawGasKSXW();
			break;
		case 3:										//孔径
			DrawGasKSKJ();
			break;
		case 4:										//生产压差
			DrawGasKSDP();
			break;
		case 5:										//压实程度
			DrawGasKSYC();
			break;
		case 6:										//地层渗透率
			DrawGasKSPK();
			break;
		case 7:										//污染程度
			DrawGasKSWC();
			break;
		case 8:										//非均质性
			DrawGasKSKZR();
			break;
		}
	}	
//	m_ctrlPic.UpdateWindow();

}

void CNewGraph::DrawOilKSKM()
{
	float m0 = (float)5;
	float m1 = (float)0;
	float km,ks,kj,xw,jbj,kzr,yh,yc,wh,wc;
	kj = m_fKJ ;
	xw = m_fXW1 ;
	jbj = m_fJBJ ;
	kzr = m_fKZR ;
	yh = m_fYH ;
	yc = m_fYC ;
	wh = m_fWH ;
	wc = m_fWC ;
	float pr2[8][14];
	int i,j;
	for(i=0;i<8;i++)
	{
		km = (float)((i+1)*4+4);		//8~36
		for(j=0;j<13;j++)
		{
			ks = (float)(j*50);			//0~600
			if(ks<=wh)
				pr2[i][j] = (float)(fnprwOil(ks,km,kj,xw,jbj,kzr,yh,yc,wh,wc)*1.1);
			else	//pprr?
				pr2[i][j] = (float)(fnprcOil(ks,km,kj,xw,jbj,kzr,yh,yc,wh,wc)*1.1);
			if(yh==0 && wh==0)
				pr2[i][j] = (float)(fnprlOil(ks,km,kj,xw,jbj,kzr)*1.1);
			if(pr2[i][j]<0) pr2[i][j] = (float)0;
			if(pr2[i][j]>m1) m1 = pr2[i][j];		//Max
			if(pr2[i][j]<m0) m0 = pr2[i][j];		//Min
		}
	}
	//
	float x1,x2,y1,y2,xMax,xMin,yMax,yMin;
	xMin = (float)100000000;
	xMax = (float)0;
	yMin = (float)100000000;
	yMax = (float)0;

⌨️ 快捷键说明

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