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

📄 gmgsanalysewnd.cpp

📁 对测井数据显示、编辑、处理
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// GmgsAnalyseWnd.cpp : implementation file
//

#include "stdafx.h"
#include "WellDataProcess.h"
#include "GmgsAnalyseWnd.h"

#include "GlobalData.h"

#include "MessageDlg.h"

#include "MainFrm.h"

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

/////////////////////////////////////////////////////////////////////////////
// CGmgsAnalyseWnd

CGmgsAnalyseWnd::CGmgsAnalyseWnd()
{
	g_pAnalyseWnd = this;
	m_bLeftDown		= FALSE;	
	m_bMove			= FALSE;
	m_bDrag			= FALSE;
	m_bInterpret	= FALSE;
	m_bHaveData		= FALSE;

	m_bContinue		= FALSE;

	m_nInterpretIndex  = 0;
	m_nMeanMethod		= 0;


	m_nInterpretMode = INTERPRET_NULL;
}

CGmgsAnalyseWnd::~CGmgsAnalyseWnd()
{
	
}


BEGIN_MESSAGE_MAP(CGmgsAnalyseWnd, CWndEx)
	//{{AFX_MSG_MAP(CGmgsAnalyseWnd)
	ON_WM_CREATE()
	ON_WM_DESTROY()
	ON_WM_ERASEBKGND()
	ON_WM_KEYDOWN()
	ON_WM_LBUTTONDBLCLK()
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	ON_WM_MOUSEMOVE()
	ON_WM_PAINT()
	ON_WM_SIZE()
	ON_WM_SETCURSOR()
	ON_WM_SYSKEYDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CGmgsAnalyseWnd message handlers

int CGmgsAnalyseWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CWndEx::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
		
	return 0;
}

void CGmgsAnalyseWnd::OnDestroy() 
{
	CWndEx::OnDestroy();
	
	// TODO: Add your message handler code here
	
}

BOOL CGmgsAnalyseWnd::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	
	return CWndEx::OnEraseBkgnd(pDC);
}

void CGmgsAnalyseWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	int nMode = 0;
	if(m_bInterpret && m_nInterpretMode == INTERPRET_FINE)
	{
		int i;
		int nPos;
		int nIndex = -1;
		int nCount = m_arrMeanLine.GetSize();
		for(i = 0; i < nCount; i ++)
		{
			if(m_arrMeanLine[i]->m_bSelect)
			{
				nIndex = i;
				nMode = 1;
			}
				
		}
		nCount = m_arrRectLine.GetSize();
		for(i = 0; i < nCount; i ++)
		{
			if(m_arrRectLine[i]->m_bSelect)
			{
				nIndex = i;
				nMode = 2;
			}
		}
		if(nIndex >= 0 && nMode != 0)
		{
			switch(nChar)
			{
			case VK_LEFT:
				{
					if(nMode == 1)
					{
						m_arrIntLayer[nIndex]->SetMeanValue(m_arrIntLayer[nIndex]->GetMeanValue() -0.5f);
						int nXPos = m_arrCurve[0]->GetXPosition(m_arrIntLayer[nIndex]->GetMeanValue()); 
						m_arrMeanLine[nIndex]->SetXPos(nXPos);
					}
					if(nMode == 2)
					{
						nPos = m_arrRectLine[nIndex]->m_pRect1->GetBottomPosition();
						m_arrRectLine[nIndex]->m_pRect1->SetBottomPosition(nPos - 2);
						nPos = m_arrRectLine[nIndex]->m_pRect2->GetTopPosition();
						m_arrRectLine[nIndex]->m_pRect2->SetTopPosition(nPos - 2);
						m_arrRectLine[nIndex]->Offset(0, -2);
						ReLoadInterpretMeanLineData();
						
					}
						
				}
				break;
			case VK_RIGHT:
				{
					if(nMode == 1)
					{
						m_arrIntLayer[nIndex]->SetMeanValue(m_arrIntLayer[nIndex]->GetMeanValue() +0.5f);
						int nXPos = m_arrCurve[0]->GetXPosition(m_arrIntLayer[nIndex]->GetMeanValue()); 
						m_arrMeanLine[nIndex]->SetXPos(nXPos);
					}
					if(nMode == 2)
					{
						nPos = m_arrRectLine[nIndex]->m_pRect1->GetBottomPosition();
						m_arrRectLine[nIndex]->m_pRect1->SetBottomPosition(nPos + 2);
						nPos = m_arrRectLine[nIndex]->m_pRect2->GetTopPosition();
						m_arrRectLine[nIndex]->m_pRect2->SetTopPosition(nPos + 2);
						m_arrRectLine[nIndex]->Offset(0, 2);
						ReLoadInterpretMeanLineData();
						
					}
				}
				break;
			case VK_UP:
				{
					if(nMode == 1)
					{
						m_arrIntLayer[nIndex]->SetMeanValue(m_arrIntLayer[nIndex]->GetMeanValue() - 2.0f);
						int nXPos = m_arrCurve[0]->GetXPosition(m_arrIntLayer[nIndex]->GetMeanValue()); 
						m_arrMeanLine[nIndex]->SetXPos(nXPos);
					}
					if(nMode == 2)
					{
						nPos = m_arrRectLine[nIndex]->m_pRect1->GetBottomPosition();
						m_arrRectLine[nIndex]->m_pRect1->SetBottomPosition(nPos - 6);
						nPos = m_arrRectLine[nIndex]->m_pRect2->GetTopPosition();
						m_arrRectLine[nIndex]->m_pRect2->SetTopPosition(nPos - 6);
						m_arrRectLine[nIndex]->Offset(0, -6);
						ReLoadInterpretMeanLineData();
						
					}
				}
				break;
			case VK_DOWN:
				{
					if(nMode == 1)
					{
						m_arrIntLayer[nIndex]->SetMeanValue(m_arrIntLayer[nIndex]->GetMeanValue() +2.0f);
						int nXPos = m_arrCurve[0]->GetXPosition(m_arrIntLayer[nIndex]->GetMeanValue()); 
						m_arrMeanLine[nIndex]->SetXPos(nXPos);
					}
					if(nMode == 2)
					{
						nPos = m_arrRectLine[nIndex]->m_pRect1->GetBottomPosition();
						m_arrRectLine[nIndex]->m_pRect1->SetBottomPosition(nPos + 6);
						nPos = m_arrRectLine[nIndex]->m_pRect2->GetTopPosition();
						m_arrRectLine[nIndex]->m_pRect2->SetTopPosition(nPos + 6);
						m_arrRectLine[nIndex]->Offset(0, 6);
						ReLoadInterpretMeanLineData();
						
					}
				}
				break;
			default: 
				break;
			}
		}
				
		Plot();
		ReDraw();		
	}
	this->SetFocus();
	
	CWndEx::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CGmgsAnalyseWnd::OnLButtonDblClk(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	this->SetFocus();
	switch(m_nInterpretMode)
		{
		case INTERPRET_NULL:
			{
				m_arrButtom.HitTest(point);
				m_arrCurve.HitTest(point);
			}
			break;
		case INTERPRET_COARSE:
			{
				m_interpretLine.HitTest(point);
				
			}
			break;
		case INTERPRET_FINE:
			{
				m_arrCurve[0]->HitTest(point);
				m_arrOrgLayer.HitTest(point);
				m_arrIntLayer.HitTest(point);
				m_arrRectLine.HitTest(point);
				m_arrMeanLine.HitTest(point);
			}
			break;
		default:
			break;
		}
		Plot();
		ReDraw();
		CWndEx::OnLButtonDblClk(nFlags, point);
}

void CGmgsAnalyseWnd::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	if(m_bInterpret)
	{
		CMainFrame *pFrame	=	 (CMainFrame*)AfxGetApp()->m_pMainWnd; 
		int nIndex = pFrame->m_meanComboBox.GetCurSel();
		this->SetMeanCalculateMothed(nIndex);

		m_bLeftDown = TRUE;
		m_bMove = FALSE;
		m_ptOrg = point;
		m_ptPrev = point;
		if(m_nInterpretIndex == 0)
		{	
			m_ptInterpretOrg.x = point.x;
			m_ptInterpretOrg.y = m_arrRoad[0]->GetRoadHeadHeight() + 10;
		}
		else
		{
			m_ptInterpretOrg.x = point.x;
			m_ptInterpretOrg.y = m_ptInterpretPrev.y;
		}
	}
	CWndEx::OnLButtonDown(nFlags, point);
}

void CGmgsAnalyseWnd::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
		
	m_bLeftDown = FALSE;
	m_bMove = FALSE;
	
	if(m_bDrag && m_arrCurve[0]->m_bSelect)
	{
		CRoadUnit* pRoadUnit = m_arrRoad.HitTest(point);
		if(pRoadUnit)
			m_arrCurve[0]->SetRoad(pRoadUnit);
		m_bDrag = FALSE;
	}

	if(m_bInterpret && m_bDrag)
	{
		switch(m_nInterpretMode)
		{
		case INTERPRET_NULL:
			break;
		case INTERPRET_COARSE:
			{
				COLORREF color;
				m_ptPrev = point;
				m_ptInterpretPrev = point;
				int nHeight = m_arrRoad[0]->GetRoadHeight();
				if(m_ptInterpretPrev.y > nHeight)
					m_ptInterpretPrev.y = nHeight;
				m_bDrag = FALSE;
				m_nInterpretIndex ++;  // 解释层位的索引
		
				if(m_ptPrev.y < m_ptOrg.y)
				{
					m_ptInterpretOrg = m_interpretLine.GetPointSecond();
					m_ptInterpretPrev = m_ptInterpretOrg;
					return;
				}
				float depthStart = m_arrCurve[0]->GetDepth(m_ptOrg.y);
				float depthEnd = m_arrCurve[0]->GetDepth(m_ptPrev.y);
				float fMeanValue = m_arrCurve[0]->GetMeanValue(depthStart, depthEnd, m_nMeanMethod); 
				int nPos   = m_arrCurve[0]->GetXPosition(fMeanValue);		
				int nColorIndex = m_arrCurve[0]->GetColorIndex(fMeanValue);

				color = m_arrColor[0]->GetIndexColor(nColorIndex); 
				
				m_arrIntLayer.AddLayerRect(color, fMeanValue, CRect(450, m_ptInterpretOrg.y, 470, m_ptInterpretPrev.y)); 

				m_arrMeanLine.AddMeanLineUnit(color, fMeanValue, m_ptInterpretOrg.y, m_ptInterpretPrev.y, nPos); 

				ReAddLayerLine();  // 生成层位间的数据线

				m_interpretLine.SetPoint(CPoint(110, m_ptInterpretPrev.y), CPoint(410, m_ptInterpretPrev.y));
				m_interpretLine.SetRoad(m_arrRoad[2]); 
			}
			break;
		case INTERPRET_FINE:
			break;
		default:
			break;
		}
		m_arrIntLayer.SetRoad(m_arrRoad[5]); 
		Plot();
		ReDraw();
	}
	
	CWndEx::OnLButtonUp(nFlags, point);
}

void CGmgsAnalyseWnd::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CString strMsg;
	if(m_bInterpret)
	{
		float depth = m_arrCurve[0]->GetDepth(point.y);
		strMsg.Format ("井深度值:%8.3f", depth);
		OnMsg(strMsg);
	}
	
	
	

	m_bMove =	TRUE;
	if(m_bLeftDown && m_bMove)
	{
		m_bDrag = TRUE;
	}
	else
	{
		m_bDrag = FALSE;
	}
	CWndEx::OnMouseMove(nFlags, point);
}

void CGmgsAnalyseWnd::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here
	ReDraw();
	// Do not call CWndEx::OnPaint() for painting messages
}

void CGmgsAnalyseWnd::OnSize(UINT nType, int cx, int cy) 
{
	CWndEx::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	
}
void CGmgsAnalyseWnd::ReDraw()
{
	CDC *pDC = GetDC();
	CRect rect;
	pDC->GetClipBox (rect);
	pDC->BitBlt (rect.left,rect.top,rect.Width(),rect.Height(),&m_memDC,rect.left,rect.top,SRCCOPY);
	ReleaseDC(pDC);

}


void CGmgsAnalyseWnd::ReadData()
{	
	m_arrRoad.AddRoadUnit(80, 2400, 50, CPoint(10, 10), "深度");
	m_arrRoad.AddRoadUnit(80, 2400, 80, CPoint(60, 10), "地质层位");
	m_arrRoad.AddRoadUnit(80, 2400, 100, CPoint(140, 10), "");
	m_arrRoad.AddRoadUnit(80, 2400, 100, CPoint(240, 10), "");
	m_arrRoad.AddRoadUnit(80, 2400, 100, CPoint(340, 10), "");
	m_arrRoad.AddRoadUnit(80, 2400, 80, CPoint(440, 10), "解释层位");
	m_arrRoad.AddRoadUnit(80, 2400, 80, CPoint(520, 10), "反演层位");

/*  增加按钮控件 */
	m_arrButtom.AddButtomRect(RGB(0, 0, 0), CRect(10, 10, 20 ,20), "自然电位");
	m_arrButtom.AddButtomRect(RGB(0, 0, 0), CRect(10, 10, 20 ,20), "密度");
	m_arrButtom.AddButtomRect(RGB(0, 0, 0), CRect(10, 10, 20 ,20), "电阻率");

	m_arrButtom[0]->SetRoad(m_arrRoad[2]); 
	m_arrButtom[1]->SetRoad(m_arrRoad[3]); 
	m_arrButtom[2]->SetRoad(m_arrRoad[4]); 
	

	m_arrOrgLayer.AddLayerRect(COR_RED, 123.0f, CRect(50, 90, 70, 140)); 
	m_arrOrgLayer.AddLayerRect(COR_GREEN, 123.0f, CRect(50, 140, 70, 230)); 
	m_arrOrgLayer.AddLayerRect(COR_GRAY, 123.0f, CRect(50, 230, 70, 240)); 
	m_arrOrgLayer.AddLayerRect(COR_BLUE, 123.0f, CRect(50, 240, 70, 340)); 
	m_arrOrgLayer.AddLayerRect(COR_YELLOW, 123.0f, CRect(50, 340, 70, 370)); 
	
	m_arrOrgLayer.SetRoad(m_arrRoad[1]); 

	m_interpretLine.SetIsDraw(FALSE);
	m_interpretLine.SetLineColor(COR_RED);
	m_interpretLine.SetLineStyle(PS_SOLID);
	m_interpretLine.SetLineWidth(2); 
    m_interpretLine.SetPoint(CPoint(110, 90), CPoint(410, 90)); 
	m_interpretLine.SetRoad(m_arrRoad[2]);

⌨️ 快捷键说明

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