📄 gmgsanalysewnd.cpp
字号:
// 增加测井曲线数据
CGMGDataManager dataManager;
CString strName = GetAppPath() + "\\Data\\X15-22_AC.txt";
dataManager.InitFileName(strName);
CCurveUnit* pCurveUnit = new CCurveUnit;
dataManager.GetWellCurveData(pCurveUnit);
m_arrCurve.Add(pCurveUnit);
m_arrCurve[0]->SetCurveProperty(COR_GREEN, 1, PS_SOLID );
m_arrCurve[0]->SetRoad(m_arrRoad[2]);
////////////////////////////////////////////////////////////////
strName = GetAppPath() + "\\Data\\X15-22_PORW.txt";
dataManager.InitFileName(strName);
CCurveUnit* pCurveUnit1 = new CCurveUnit;
dataManager.GetWellCurveData(pCurveUnit1);
m_arrCurve.Add(pCurveUnit1);
m_arrCurve[1]->SetCurveProperty(COR_RED, 1, PS_SOLID );
m_arrCurve[1]->SetRoad(m_arrRoad[3]);
////////////////////////////////////////////////////////////////
strName = GetAppPath() + "\\Data\\X15-22_RT.txt";
dataManager.InitFileName(strName);
CCurveUnit* pCurveUnit2 = new CCurveUnit;
dataManager.GetWellCurveData(pCurveUnit2);
m_arrCurve.Add(pCurveUnit2);
m_arrCurve[2]->SetCurveProperty(COR_YELLOW, 1, PS_SOLID );
m_arrCurve[2]->SetRoad(m_arrRoad[4]);
////////////////////////////////////////////////////////////////
// 设置色标数组
m_arrColor.AddColorUnit(120.4, 234.6, CRect(10, 20, 300, 400));
m_arrColor.AddColorUnit(120.4, 234.6, CRect(10, 20, 300, 400));
m_arrColor.AddColorUnit(120.4, 234.6, CRect(10, 20, 300, 400));
m_arrColor[0]->SetRoad(m_arrRoad[2]);
m_arrColor[1]->SetRoad(m_arrRoad[3]);
m_arrColor[2]->SetRoad(m_arrRoad[4]);
for(int j = 0; j < 3; j ++)
{
m_arrColor[j]->InitColorFromFile();
}
// 设置深度信息
m_depScaleUnit.SetScaleLineColor(COR_BLUE);
m_depScaleUnit.SetScaleStartDep(m_arrCurve[0]->GetStartDep());
m_depScaleUnit.SetScaleEndDep(m_arrCurve[0]->GetEndDep());
m_depScaleUnit.SetMinScale(10);
m_depScaleUnit.SetMaxScale(50);
m_depScaleUnit.SetRoad(m_arrRoad[0]);
//
m_bHaveData = TRUE;
}
void CGmgsAnalyseWnd::DrawMapInMem(CDC* pDC)
{
CRect rect;
GetClientRect(rect);
pDC->FillSolidRect(rect, RGB(0, 0, 0));
//是否进行了延拓处理
if(m_bContinue)
{
m_arrOrgLayerContinue.Draw(pDC);
m_arrIntLayerContinue.Draw(pDC);
m_arrInvLayerContinue.Draw(pDC);
m_arrMeanLineContinue.Draw(pDC);
m_arrRectLineContinue.Draw(pDC);
m_depScaleUnitContinue.Draw(pDC);
}
m_arrRoad.Draw(pDC);
m_arrButtom.Draw(pDC);
m_arrColor.Draw(pDC);
m_arrOrgLayer.Draw(pDC);
m_arrIntLayer.Draw(pDC);
m_arrInvLayer.Draw(pDC);
m_arrMeanLine.Draw(pDC);
m_arrRectLine.Draw(pDC);
m_arrCurve.Draw(pDC);
m_depScaleUnit.Draw(pDC);
if(m_bInterpret)
{
m_interpretLine.Draw(pDC);
}
}
void CGmgsAnalyseWnd::CreateMemDC(int nWidth,int nHeight)
{
HDC hDC = ::GetDC(NULL);
CDC* pDeskDC = CDC::FromHandle (hDC);
m_memDC.CreateCompatibleDC(pDeskDC);
m_bmp.CreateCompatibleBitmap(pDeskDC, nWidth, nHeight);
//一定要有此句,DC与Bmp联结上,DC用来作操作接口,Bmp用来保存图像数据
m_memDC.SelectObject(&m_bmp);
m_memDC.PatBlt(0,0,nWidth,nHeight,WHITENESS);
}
void CGmgsAnalyseWnd::Plot()
{
CRect rect;
GetClientRect(rect);
if(!m_memDC)
CreateMemDC(rect.Width(), rect.Height());
DrawMapInMem(&m_memDC);
}
void CGmgsAnalyseWnd::ReAddLayerLine()
{
m_arrRectLine.RemoveAll();
int nCount = m_arrIntLayer.GetSize();
for(int i = 0; i < nCount - 1; i ++)
{
int x, y, width;
x = m_arrIntLayer[i]->GetLayerRect().left;
y = m_arrIntLayer[i]->GetLayerRect().bottom;
width = m_arrIntLayer[i]->GetLayerRect().Width();
CRectLineUnit* pLu1 = new CRectLineUnit(x, y, width);
pLu1->m_pRect1 = m_arrIntLayer[i];
pLu1->m_pRect2 = m_arrIntLayer[i+ 1];
m_arrRectLine.Add(pLu1);
}
}
void CGmgsAnalyseWnd::SetInterpretMode(int nMode)
{
m_nInterpretMode = nMode;
if(nMode == 1)
{
m_interpretLine.SetIsDraw(TRUE);
}
if(nMode == 2)
{
m_interpretLine.SetIsDraw(FALSE);
}
if(nMode == 0)
{
m_interpretLine.SetIsDraw(FALSE);
Plot();
ReDraw();
}
}
int CGmgsAnalyseWnd::GetInterpretMode()
{
return m_nInterpretMode;
}
void CGmgsAnalyseWnd::UndoInterpret()
{
int nCount = m_arrIntLayer.GetSize();
if(nCount > 0)
{
int y = m_arrMeanLine[nCount - 1]->GetStartPos();
m_interpretLine.SetYPos(y);
m_ptInterpretPrev = m_interpretLine.GetPointSecond();
m_ptInterpretOrg = m_ptInterpretPrev;
m_arrIntLayer.RemoveAt(nCount - 1);
m_arrMeanLine.RemoveAt(nCount - 1);
this->ReAddLayerLine();
}
Plot();
ReDraw();
}
void CGmgsAnalyseWnd::InsertLayer()
{
BOOL b = FALSE;
int nIndex;
int nCount = m_arrIntLayer.GetSize();
for(int i = 0; i < nCount; i ++)
{
if(m_arrIntLayer[i]->m_bSelect)
{
nIndex = i;
b = TRUE;
}
}
if(b)
{
int nStartPos = m_arrIntLayer[nIndex]->GetTopPosition();
int nEndPos = (m_arrIntLayer[nIndex]->GetBottomPosition() - nStartPos) / 2 + nStartPos;
float depthStart = m_arrCurve[0]->GetDepth(nStartPos);
float depthEnd = m_arrCurve[0]->GetDepth(nEndPos);
float fMeanValue = m_arrCurve[0]->GetMeanValue(depthStart, depthEnd, m_nMeanMethod);
int nPos = m_arrCurve[0]->GetXPosition(fMeanValue);
int nColorIndex = m_arrCurve[0]->GetColorIndex(fMeanValue);
COLORREF color = m_arrColor[0]->GetIndexColor(nColorIndex);
m_arrIntLayer[nIndex]->SetTopPosition(nEndPos);
m_arrIntLayer.InsertLayerData(nIndex, color, CRect(450, nStartPos, 470, nEndPos), fMeanValue);
m_arrIntLayer.SetRoad(m_arrRoad[5]);
this->ReAddLayerLine();// 重新生成层位间的分界线
ReLoadInterpretMeanLineData(); //重新设置平均值线
}
}
void CGmgsAnalyseWnd::ReLoadInterpretMeanLineData()
{
int nCount = m_arrIntLayer.GetSize();
m_arrMeanLine.RemoveAll();
for(int i = 0; i < nCount; i ++)
{
float depthStart = m_arrCurve[0]->GetDepth(m_arrIntLayer[i]->GetTopPosition());
float depthEnd = m_arrCurve[0]->GetDepth(m_arrIntLayer[i]->GetBottomPosition());
float fMeanValue = m_arrCurve[0]->GetMeanValue(depthStart, depthEnd, m_nMeanMethod);
int nPos = m_arrCurve[0]->GetXPosition(fMeanValue);
COLORREF color = m_arrIntLayer[i]->GetLayerColor();
m_arrMeanLine.AddMeanLineUnit(color, fMeanValue, m_arrIntLayer[i]->GetTopPosition(),
m_arrIntLayer[i]->GetBottomPosition(), nPos);
m_arrIntLayer[i]->SetMeanValue(fMeanValue);
}
}
void CGmgsAnalyseWnd::DeleteLayer()
{
CMessageDlg dlg;
int nMode = dlg.DoModal();
if(nMode == IDCANCEL)
return;
int nIndex = -1;
int nCount = m_arrIntLayer.GetSize();
for(int i = 0; i < nCount; i ++)
{
if(m_arrIntLayer[i]->m_bSelect)
nIndex = i;
}
if(nIndex < nCount && nIndex >= 0)
{
m_arrIntLayer[nIndex + 1]->SetTopPosition(m_arrIntLayer[nIndex]->GetTopPosition());
m_arrIntLayer.RemoveAt(nIndex);
}
this->ReAddLayerLine();// 重新生成层位间的分界线
ReLoadInterpretMeanLineData(); //重新设置平均值线
}
void CGmgsAnalyseWnd::ReStartInterpretLayer()
{
m_arrIntLayer.RemoveAll();
m_arrRectLine.RemoveAll();
m_arrMeanLine.RemoveAll();
m_bInterpret = TRUE;
Plot();
ReDraw();
}
void CGmgsAnalyseWnd::SaveInterLayerData(CString strFileName)
{
FILE* fp;
fp = fopen(strFileName, "w");
if(fp == NULL)
return;
int nCount = m_arrMeanLine.GetSize();
int y1, y2;
float startDep, endDep;
fprintf(fp, "$INTERPRET_LAYER_DATA$\n");
fprintf(fp, "DataName: startDep endDep value\n");
fprintf(fp, "%d\n", nCount);
CMainFrame *pFrame = (CMainFrame*)AfxGetApp()->m_pMainWnd;
int nIndex = pFrame->m_meanComboBox.GetCurSel();
for(int i = 0; i < nCount; i ++)
{
y1 = m_arrMeanLine[i]->GetStartPos();
y2 = m_arrMeanLine[i]->GetEndPos();
startDep = m_arrCurve[0]->GetDepth(y1);
endDep = m_arrCurve[0]->GetDepth(y2);
float fMeanValue = m_arrCurve[0]->GetMeanValue(startDep, endDep, nIndex);
fprintf(fp, "%10.3f %10.3f %10.3f\n", startDep, endDep, fMeanValue);
}
fclose(fp);
}
/*
//对测井曲线深度进行延拓,并对其它相应的数据进行延拓处理
*/
void CGmgsAnalyseWnd::ContinuationWellCurve()
{
//处理测井曲线
int nCount = m_arrCurve.GetSize();
for(int i = 0; i < nCount; i ++)
{
m_arrCurve[i]->CointuationDepth();
}
int nColHeight = m_arrCurve[0]->GetColHeight();
int nHeight = 1000 * nColHeight / m_arrCurve[0]->GetDataSize();
//处理深度信息
m_depScaleUnitContinue.SetRoad(m_arrRoad[0]);
m_depScaleUnitContinue.SetColHeight(nHeight);
m_depScaleUnitContinue.SetScaleStartDep(0.0);
m_depScaleUnitContinue.SetScaleEndDep(m_arrCurve[0]->GetStartDep());
m_depScaleUnitContinue.SetMinScale(100);
m_depScaleUnitContinue.SetMaxScale(1000);
m_depScaleUnit.SetYBase(nHeight + 90);
m_depScaleUnit.SetColHeight(m_depScaleUnit.GetColHeight() - nHeight);
//处理解释层位
//处理反演层位
//
m_bContinue = TRUE;
}
void CGmgsAnalyseWnd::OnMsg(CString str)
{
((CMainFrame *)AfxGetMainWnd())->ShowStatusMsg (str);
}
BOOL CGmgsAnalyseWnd::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
// TODO: Add your message handler code here and/or call default
if(m_nInterpretMode == INTERPRET_COARSE)
{
HCURSOR hCursor = AfxGetApp()->LoadStandardCursor (IDC_CROSS);
SetCursor(hCursor);
return TRUE;
}
HCURSOR hCursor = AfxGetApp()->LoadStandardCursor (IDC_ARROW);
SetCursor(hCursor);
return CWndEx::OnSetCursor(pWnd, nHitTest, message);
}
BOOL CGmgsAnalyseWnd::GetIsHaveData()
{
return m_bHaveData;
}
void CGmgsAnalyseWnd::SetInterpret(BOOL b)
{
m_bInterpret = b;
}
void CGmgsAnalyseWnd::SetMeanCalculateMothed(int nMethod)
{
m_nMeanMethod = nMethod;
}
void CGmgsAnalyseWnd::SetInterpretCoarse(BOOL b)
{
m_bInterpretCoarse = b;
}
void CGmgsAnalyseWnd::SetInterpretFine(BOOL b)
{
m_bInterpretFine = b;
}
BOOL CGmgsAnalyseWnd::GetIsInterpretCoarse()
{
return m_bInterpretCoarse;
}
BOOL CGmgsAnalyseWnd::GetIsInterpretFine()
{
return m_bInterpretFine;
}
BOOL CGmgsAnalyseWnd::GetIsContinue()
{
return m_bContinue;
}
void CGmgsAnalyseWnd::OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CWndEx::OnSysKeyDown(nChar, nRepCnt, nFlags);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -