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

📄 gmgsanalysewnd.cpp

📁 对测井数据显示、编辑、处理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 增加测井曲线数据
	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 + -