📄 shotparaview.cpp
字号:
void CShotParaView::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 CShotParaView::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 CShotParaView::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 CShotParaView::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 CShotParaView::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 CShotParaView::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 CShotParaView::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 CShotParaView::OnButtonTtpSave()
{
// TODO: Add your control notification handler code here
if(MessageBox("本操作将计算结果保存于工程中,\n数据改变将对以后的某些计算产生影响,\n确定修改 ?",
"工程信息",MB_ICONQUESTION|MB_YESNO)==IDNO)
{return;}
m_bComputeSave = TRUE;
m_bComputeState = TRUE;
// MessageBox("修改将在对话框关闭之后进行!","工程信息");
CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
pMainWnd->m_structTTPTable.bState = m_bComputeState ;
pMainWnd->m_structTTPTable.fGun = m_fGun ;
pMainWnd->m_structTTPTable.fLong = m_fLong ;
pMainWnd->m_structTTPResult.bState = TRUE;
pMainWnd->m_structTTPResult.fPressDiff = m_fPressDiff ;
pMainWnd->m_structTTPResult.lNum = pMainWnd->m_structTTPTable.lNum;
for(int iTemp=0;iTemp<pMainWnd->m_structTTPResult.lNum;iTemp++)
{
pMainWnd->m_structTTPShotPara[iTemp] = m_structDate [iTemp];
pMainWnd->m_structTTPResult.fPP[iTemp] = m_fPP[iTemp];
pMainWnd->m_structTTPResult.fPDepth[iTemp] = m_fPDepth[iTemp];
pMainWnd->m_structTTPResult.fPDiameter[iTemp] = m_fPDiameter[iTemp];
}
MessageBox("参数校正结果已经写入工程!","工程信息");
}
void CShotParaView::OnCheckAngle()
{
UpdateData();
if(m_bAngle)
m_ctrlAngleEdit.EnableWindow(true);
else
m_ctrlAngleEdit.EnableWindow(false);
UpdateData(FALSE);
}
int CShotParaView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
GetParentFrame()->SetWindowText(_T("射孔参数校正"));
return 0;
}
void CShotParaView::OnSpdCacl()
{
// TODO: Add your command handler code here
OnButtonComput();
}
void CShotParaView::OnContextMenu(CWnd*, CPoint point)
{
// CG: This block was added by the Pop-up Menu component { if (point.x == -1 && point.y == -1){ //keystroke invocation CRect rect; GetClientRect(rect); ClientToScreen(rect); point = rect.TopLeft(); point.Offset(5, 5); } CMenu menu; VERIFY(menu.LoadMenu(IDR_POPUP_SPD)); CMenu* pPopup = menu.GetSubMenu(5); ASSERT(pPopup != NULL); CWnd* pWndPopupOwner = this;// while (pWndPopupOwner->GetStyle() & WS_CHILD)// pWndPopupOwner = pWndPopupOwner->GetParent(); pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, pWndPopupOwner); }
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -