📄 dialogshotpara.cpp
字号:
// DialogShotPara.cpp : implementation file
//
#include "stdafx.h"
#include "CVenus.h"
#include "DialogShotPara.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDialogShotPara dialog
CDialogShotPara::CDialogShotPara(CWnd* pParent /*=NULL*/)
: CDialog(CDialogShotPara::IDD, pParent)
{
//{{AFX_DATA_INIT(CDialogShotPara)
m_fDate = 0.0f;
m_fGun = 0.0f;
m_fLimitDate = 0.0f;
m_fLong = 0.0f;
m_cstrModel = _T("");
m_fShotPress = 0.0f;
m_bAngle = FALSE;
m_fAngle = 90.0f;
//}}AFX_DATA_INIT
m_bComputeSave = FALSE;
}
void CDialogShotPara::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDialogShotPara)
DDX_Control(pDX, IDC_EDIT_ANGLE, m_ctrlAngleEdit);
DDX_Control(pDX, IDC_CHECK_ANGLE, m_ctrlAngleCheck);
DDX_Control(pDX, IDC_LIST_SHOTPARA, m_ctrlShotPara);
DDX_Control(pDX, IDC_LIST_DATE, m_ctrlListDate);
DDX_Control(pDX, IDC_EDIT_MODEL, m_ctrl208);
DDX_Control(pDX, IDC_EDIT_GUN, m_ctrl102);
DDX_Control(pDX, IDC_TAB1, m_ctrlTab);
DDX_Control(pDX, IDC_EDIT_LIMITDATE, m_ctrl209);
DDX_Control(pDX, IDC_EDIT_DATE, m_ctrl207);
DDX_Control(pDX, IDC_BUTTON_MODIFY, m_ctrl206);
DDX_Control(pDX, IDC_STATIC205, m_ctrl205);
DDX_Control(pDX, IDC_STATIC204, m_ctrl204);
DDX_Control(pDX, IDC_STATIC203, m_ctrl203);
DDX_Control(pDX, IDC_STATIC202, m_ctrl202);
DDX_Control(pDX, IDC_STATIC201, m_ctrl201);
DDX_Control(pDX, IDC_STATIC103, m_ctrl106);
DDX_Control(pDX, IDC_STATIC102, m_ctrl105);
DDX_Control(pDX, IDC_STATIC101, m_ctrl104);
DDX_Control(pDX, IDC_EDIT_LONG, m_ctrl101);
DDX_Text(pDX, IDC_EDIT_DATE, m_fDate);
DDX_Text(pDX, IDC_EDIT_GUN, m_fGun);
DDX_Text(pDX, IDC_EDIT_LIMITDATE, m_fLimitDate);
DDX_Text(pDX, IDC_EDIT_LONG, m_fLong);
DDX_Text(pDX, IDC_EDIT_MODEL, m_cstrModel);
DDX_Text(pDX, IDC_EDIT_SHOTPRESS, m_fShotPress);
DDX_Check(pDX, IDC_CHECK_ANGLE, m_bAngle);
DDX_Text(pDX, IDC_EDIT_ANGLE, m_fAngle);
DDV_MinMaxFloat(pDX, m_fAngle, 0.f, 180.f);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDialogShotPara, CDialog)
//{{AFX_MSG_MAP(CDialogShotPara)
ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, OnSelchangeTab1)
ON_BN_CLICKED(IDC_BUTTON_MODIFY, OnButtonModify)
ON_NOTIFY(NM_CLICK, IDC_LIST_DATE, OnClickListDate)
ON_BN_CLICKED(IDC_BUTTON_COMPUT, OnButtonComput)
ON_BN_CLICKED(IDC_BUTTON_TTP_SAVE, OnButtonTtpSave)
ON_BN_CLICKED(IDC_CHECK_ANGLE, OnCheckAngle)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDialogShotPara message handlers
void CDialogShotPara::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int selected = m_ctrlTab.GetCurSel ();
switch(selected)
{
case 0:
//
m_ctrl101.ShowWindow (true);
m_ctrl102.ShowWindow (true);
m_ctrl104.ShowWindow (true);
m_ctrl105.ShowWindow (true);
m_ctrl106.ShowWindow (true);
m_ctrlShotPara.ShowWindow (true);
m_ctrlAngleCheck.ShowWindow(true);
m_ctrlAngleEdit.ShowWindow(true);
//
m_ctrl201.ShowWindow (false);
m_ctrl202.ShowWindow (false);
m_ctrl203.ShowWindow (false);
m_ctrl204.ShowWindow (false);
m_ctrl205.ShowWindow (false);
m_ctrl206.ShowWindow (false);
m_ctrl207.ShowWindow (false);
m_ctrl208.ShowWindow (false);
m_ctrl209.ShowWindow (false);
m_ctrlListDate.ShowWindow (false);
break;
case 1:
//
m_ctrl101.ShowWindow (false);
m_ctrl102.ShowWindow (false);
m_ctrl104.ShowWindow (false);
m_ctrl105.ShowWindow (false);
m_ctrl106.ShowWindow (false);
m_ctrlShotPara.ShowWindow (false);
m_ctrlAngleCheck.ShowWindow(false);
m_ctrlAngleEdit.ShowWindow(false);
//
m_ctrl201.ShowWindow (true);
m_ctrl202.ShowWindow (true);
m_ctrl203.ShowWindow (true);
m_ctrl204.ShowWindow (true);
m_ctrl205.ShowWindow (true);
m_ctrl206.ShowWindow (true);
m_ctrl207.ShowWindow (true);
m_ctrl208.ShowWindow (true);
m_ctrl209.ShowWindow (true);
m_ctrlListDate.ShowWindow (true);
break;
default:
break;
}
*pResult = 0;
}
BOOL CDialogShotPara::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
TC_ITEM TabCtrlItem;
TabCtrlItem.mask = TCIF_TEXT;
TabCtrlItem.pszText = "校正射孔弹基本参数";
m_ctrlTab.InsertItem( 0, &TabCtrlItem );
TabCtrlItem.pszText = "射孔弹储存期限";
m_ctrlTab.InsertItem( 1, &TabCtrlItem );
UpdateData(TRUE);
m_ctrlShotPara.InsertColumn (0,"射孔弹型号",LVCFMT_LEFT ,200,0);
m_ctrlShotPara.InsertColumn (1,"穿深",LVCFMT_LEFT ,60,1);
m_ctrlShotPara.InsertColumn (2,"孔径",LVCFMT_LEFT ,60,2);
m_ctrlShotPara.InsertColumn (3,"校正系数",LVCFMT_LEFT ,100,3);
m_ctrlShotPara.InsertColumn (4,"校正穿深",LVCFMT_LEFT ,100,4);
m_ctrlShotPara.InsertColumn (5,"校正孔径",LVCFMT_LEFT ,100,5);
m_ctrlListDate.InsertColumn (0 ,"射孔弹型号" ,LVCFMT_LEFT ,200 ,0 );
m_ctrlListDate.InsertColumn (1 ,"规定储存时间" ,LVCFMT_LEFT ,150 ,1 );
m_ctrlListDate.InsertColumn (2 ,"实际储存时间" ,LVCFMT_LEFT ,150 ,2 );
m_fGun = m_structTTPTable.fGun ;
m_fLong = m_structTTPTable.fLong ;
UpdateData(FALSE);
LVITEM pitem;
pitem.mask=LVIF_TEXT;
pitem.state=0;
pitem.stateMask=0;
pitem.iSubItem=0;
pitem.pszText="";
char strTemp[10];
UpdateData();
for(int iTemp = 0 ;iTemp < m_structTTPTable.lNum ;iTemp++)
{
pitem.iItem = iTemp;
m_ctrlListDate.InsertItem (&pitem);
m_ctrlListDate.SetItemText (iTemp ,0 , m_structDate[iTemp].strModel );
sprintf(strTemp ,"%3.1f" ,m_structDate[iTemp].fLimitDate );
m_ctrlListDate.SetItemText (iTemp ,1 , strTemp );
sprintf(strTemp ,"%3.1f" ,m_structDate[iTemp].fDate );
m_ctrlListDate.SetItemText (iTemp ,2 , strTemp );
m_ctrlShotPara.InsertItem (&pitem);
m_ctrlShotPara.SetItemText (iTemp ,0 , m_structDate[iTemp].strModel );
sprintf(strTemp ,"%5.2f" ,m_structDate[iTemp].fShotDepth );
m_ctrlShotPara.SetItemText (iTemp ,1 ,strTemp );
sprintf(strTemp ,"%3.2f" ,m_structDate[iTemp].fDiameter );
m_ctrlShotPara.SetItemText (iTemp ,2 ,strTemp );
if(m_bComputeState == TRUE)
{
sprintf(strTemp,"%5.4f",m_fPP[iTemp]);
m_ctrlShotPara.SetItemText (iTemp,3,strTemp);
sprintf(strTemp,"%5.4f",m_fPDepth[iTemp]);
m_ctrlShotPara.SetItemText (iTemp,4,strTemp);
sprintf(strTemp,"%5.4f",m_fPDiameter[iTemp]);
m_ctrlShotPara.SetItemText (iTemp,5,strTemp);
}
}
m_cstrModel = m_structDate[0].strModel ;
m_fLimitDate = m_structDate[0].fLimitDate ;
m_fDate = m_structDate[0].fDate ;
m_fShotPress = m_fPressDiff;
m_fAngle = 90.0f;
m_bAngle = FALSE;
UpdateData(FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDialogShotPara::OnButtonModify()
{
// TODO: Add your control notification handler code here
long lTemp = m_ctrlListDate.GetSelectionMark ();
if(lTemp < 0 ) return;
char strTemp[6];
UpdateData();
m_structDate[lTemp].fLimitDate = m_fLimitDate;
m_structDate[lTemp].fDate = m_fDate;
UpdateData(FALSE);
sprintf(strTemp,"%3.1f",m_structDate[lTemp].fLimitDate);
m_ctrlListDate.SetItemText (lTemp,1,strTemp);
sprintf(strTemp,"%3.1f",m_structDate[lTemp].fDate);
m_ctrlListDate.SetItemText (lTemp,2,strTemp);
}
void CDialogShotPara::OnClickListDate(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
int iTemp = m_ctrlListDate.GetSelectionMark ();
if(iTemp < 0 ) return;
UpdateData(TRUE);
m_cstrModel = m_structDate[iTemp].strModel;
m_fDate = m_structDate[iTemp].fDate;
m_fLimitDate = m_structDate[iTemp].fLimitDate;
UpdateData(FALSE);
*pResult = 0;
}
void CDialogShotPara::OnButtonComput()
{
// TODO: Add your control notification handler code here
if(m_fAngle == 0.0f || m_fAngle == 180.0f)
{
MessageBox("角度不能为0或180度 !" ,"错误" );
return;
}
if(m_structSD.fFilter == 0)
{
MessageBox("渗透率为0将引起零除错误 !" ,"错误" );
return;
}
if(m_bWellState) //油井
{
ComputOil();
}
else //气井
{
ComputGas();
}
ComputShotDepth(); //深度校正
ComputPP(); //计算校正系数
}
void CDialogShotPara::ComputOil()
{
float fTemp1,fTemp2,fTemp3;
UpdateData(TRUE);
fTemp1 = m_structSD.fFilter * 1000;
fTemp2 = m_structSD.fPress ;
fTemp3 = (float)(17.24 / (pow(fTemp1,0.3)));
if(fTemp3 >= (0.7 * fTemp2))
fTemp3 = (float)(0.7 * fTemp2);
m_fShotPress = (-fTemp3*100)/100;
UpdateData(FALSE);
m_fPressDiff = m_fShotPress;
}
void CDialogShotPara::ComputGas()
{
float fTemp1,fTemp2,fTemp3;
UpdateData(TRUE);
fTemp1 = m_structSD.fFilter * 1000;
fTemp2 = m_structSD.fPress ;
if(fTemp1 <10)
{
fTemp3 = (float)(17.24 / fTemp1);
}
else
{
fTemp3 = (float)(17.24 / (pow(fTemp1,0.18)));
}
if(fTemp3 >= (0.7 * fTemp2))
fTemp3 = (float)(0.7 * fTemp2);
m_fShotPress = (-fTemp3*100)/100;
m_fPressDiff = m_fShotPress;
UpdateData(FALSE);
}
void CDialogShotPara::ComputShotDepth()
{
float c1,c2,c3,c4,c5,c6;
float fTemp1;
UpdateData(TRUE);
c1 = (float)1;
c6 = (float)1;
fTemp1 = m_fGun; //枪管间隙(毫米)
if(fTemp1 >14 && fTemp1 <= 24)
c1 = (float)0.95;
else if(fTemp1 >24 && fTemp1 <=34)
c1 = (float)0.9;
else if(fTemp1 >34)
c1 = (float)0.85;
fTemp1 = m_fPressDiff + m_structSD.fPress ; //射孔压差+地层压力
if(fTemp1 < 7 )
c2 = (float)1.1;
else if(fTemp1 >=7 && fTemp1 <13)
c2 = (float)1;
else if(fTemp1 >=13 && fTemp1 <20)
c2 = (float)0.95;
else if(fTemp1 >=20 && fTemp1 <30)
c2 = (float)0.9;
else if(fTemp1 >=30)
c2 = (float)0.85;
fTemp1 = m_fLong; //射孔段套管层数
if(fTemp1 <=1)
c3 = (float)1;
else if(fTemp1 >1 && fTemp1 <=2)
c3 = (float)0.6;
else if(fTemp1 >2)
c3 = (float)0.4;
c5 = (float)0.9;
CString cstrTemp;
cstrTemp = m_structSD.cstrModel ;
if(cstrTemp.Compare ("J-55") == 0 ||
cstrTemp.Compare ("j-55") == 0 ||
cstrTemp.Compare ("J55") == 0 ||
cstrTemp.Compare ("j55") == 0 )
c5 = (float)1.0;
else if(
cstrTemp.Compare ("P-110") == 0 ||
cstrTemp.Compare ("p-110") == 0 ||
cstrTemp.Compare ("P110") == 0 ||
cstrTemp.Compare ("p110") == 0 )
c5 = (float)0.75;
else if(cstrTemp.Compare ("N80") == 0)
c5 = (float)0.85;
float timeTemp;
float faib[255],ksl[255],faif;
for(int i = 0;i<m_structTTPTable.lNum ;i++)
{
timeTemp = m_structDate[i].fDate - m_structDate[i].fLimitDate ;
if(timeTemp <= 3)
c4 = (float)1;
else if(timeTemp > 3 && timeTemp <= 6)
c4 = (float)0.9;
else if(timeTemp > 6 && timeTemp <=12)
c4 = (float)0.85;
else if(timeTemp >12 )
c4 = (float)0.8;
faif = m_structSD.fHole ;
faib[i] = m_structDate[i].fPortion ;
if(faib[i] < 0.15)
faib[i] = (float)0.15;
else if(faib[i] >0.22)
faib[i] = (float)0.22;
if(faif < 0.15)
faif = (float)0.15;
else if(faif >0.22)
faif = (float)0.22;
fTemp1 = faif/faib[i];
ksl[i] = m_structDate[i].fShotDepth * (float)pow(fTemp1,1.5);
if(fTemp1 <1)
ksl[i] = ksl[i] * (float)sqrt(0.19/faib[i]);
else if(fTemp1 >1 && faib[i] < 0.19)
ksl[i] = ksl[i] * (float)sqrt(faib[i]/0.19);
c6 = ksl[i]/m_structDate[i].fShotDepth ;
m_fPP[i] = c1*c2*c3*c4*c5*c6;
}
UpdateData(FALSE);
}
void CDialogShotPara::ComputPP()
{
double pi = 3.1415926535;
char strTemp[10];
for(int iTemp=0 ;iTemp<m_structTTPTable.lNum ;iTemp++)
{
if(m_bAngle)
{
m_fPDepth[iTemp] = (float)(m_fPP[iTemp] * m_structDate[iTemp].fShotDepth * sin(m_fAngle*pi/180));
m_fPDiameter[iTemp] = (float)(m_fPP[iTemp] * m_structDate[iTemp].fDiameter / pow(sin(m_fAngle*pi/180),0.5));
}
else
{
m_fPDepth[iTemp] = m_fPP[iTemp] * m_structDate[iTemp].fShotDepth ;
m_fPDiameter[iTemp] = m_fPP[iTemp] * m_structDate[iTemp].fDiameter ;
}
UpdateData();
sprintf(strTemp,"%5.4f",m_fPP[iTemp]);
m_ctrlShotPara.SetItemText (iTemp,3,strTemp);
sprintf(strTemp,"%5.4f",m_fPDepth[iTemp]);
m_ctrlShotPara.SetItemText (iTemp,4,strTemp);
sprintf(strTemp,"%5.4f",m_fPDiameter[iTemp]);
m_ctrlShotPara.SetItemText (iTemp,5,strTemp);
UpdateData(FALSE);
}
}
void CDialogShotPara::OnButtonTtpSave()
{
// TODO: Add your control notification handler code here
if(MessageBox("本操作将计算结果保存于工程中,\n数据改变将对以后的某些计算产生影响,\n确定修改 ?",
"工程信息",MB_ICONQUESTION|MB_OKCANCEL)==IDCANCEL)
{return;}
m_bComputeSave = TRUE;
m_bComputeState = TRUE;
MessageBox("修改将在对话框关闭之后进行!","工程信息");
}
void CDialogShotPara::OnCheckAngle()
{
UpdateData();
if(m_bAngle)
m_ctrlAngleEdit.EnableWindow(true);
else
m_ctrlAngleEdit.EnableWindow(false);
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -