📄 segyviewview.cpp
字号:
// SegyViewView.cpp : implementation of the CSegyViewView class
//
#include "stdafx.h"
#include "SegyView.h"
#include "SegyViewDoc.h"
#include "SegyViewView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSegyViewView
IMPLEMENT_DYNCREATE(CSegyViewView, CView)
BEGIN_MESSAGE_MAP(CSegyViewView, CView)
//{{AFX_MSG_MAP(CSegyViewView)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSegyViewView construction/destruction
CSegyViewView::CSegyViewView()
{
// TODO: add construction code here
}
CSegyViewView::~CSegyViewView()
{
}
BOOL CSegyViewView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CSegyViewView drawing
void CSegyViewView::OnDraw(CDC* pDC)
{
CSegyViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
if (GetDocument()->m_bOpenfile)
{
DrawTracePicture(pDC);
}
}
/////////////////////////////////////////////////////////////////////////////
// CSegyViewView printing
BOOL CSegyViewView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
/////////////////////////////////////////////////////////////////////////////
// CSegyViewView diagnostics
#ifdef _DEBUG
void CSegyViewView::AssertValid() const
{
CView::AssertValid();
}
CSegyViewDoc* CSegyViewView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSegyViewDoc)));
return (CSegyViewDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSegyViewView message handlers
BOOL CSegyViewView::DrawTracePicture(CDC *pDC)
{
CFile tagFile = GetDocument()->m_tagFile;
int nTotalTrace = GetDocument()->m_nEndTrace - GetDocument()->m_nBeginTrace + 1;
int nCode = GetDocument()->m_nCode;
int nFrequency = GetDocument()->m_nFrequency;
short* pSData = new short[nFrequency];
int* pNData = new int[nFrequency];
float* pFData = new float[nFrequency];
long* pLData = new long[nFrequency];
// 先画160道作为测试
nTotalTrace = 160;
tagFile.Seek(3600, CFile::begin);
for (int i = 1; i <= nTotalTrace; ++i)
{
tagFile.Seek(240, CFile::current);
if (nCode == 3)
{
tagFile.ReadHuge(pSData, sizeof(short) * nFrequency);
TwoByteIntegerChange(pSData, nFrequency);
DrawDataLine(pSData, nFrequency, pDC, i);
}
else if (nCode == 2)
{
tagFile.ReadHuge(pNData, sizeof(int) * nFrequency);
FourByteIntegerChange(pNData, nFrequency);
DrawDataLine(pNData, nFrequency, pDC, i);
}
else if (nCode == 1)
{
tagFile.ReadHuge(pLData, sizeof(long) * nFrequency);
IBM32toIEEE(pLData, nFrequency);
DrawDataLine((float*)pLData, nFrequency, pDC, i);
}
else if (nCode == 5)
{
tagFile.ReadHuge(pFData, sizeof(float) * nFrequency);
DrawDataLine(pFData, nFrequency, pDC, i);
}
}
delete [] pSData;
delete [] pLData;
delete [] pNData;
delete [] pFData;
return TRUE;
}
BOOL CSegyViewView::TwoByteIntegerChange(short* pDataParam, int nTotal)
{
unsigned char *cpTemp;
unsigned char ch;
cpTemp = (unsigned char*)pDataParam;
for (int i = 0; i < nTotal; ++i)
{
ch = cpTemp[0];
cpTemp[0] = cpTemp[1];
cpTemp[1] = ch;
cpTemp += 2;
}
return TRUE;
}
BOOL CSegyViewView::FourByteIntegerChange(int* pDataParam, int nTotal)
{
unsigned char *cpTemp;
unsigned char ch;
cpTemp = (unsigned char*)pDataParam;
for (int i = 0; i < nTotal; ++i)
{
ch = cpTemp[0]; cpTemp[0] = cpTemp[3]; cpTemp[3] = ch;
ch = cpTemp[1]; cpTemp[1] = cpTemp[2]; cpTemp[2] = ch;
cpTemp += 4;
}
return TRUE;
}
BOOL CSegyViewView::IBM32toIEEE(long* pDataParam, int nTotal)
{
register int fconv, fmant, i, t;
for (i = 0; i < nTotal; ++i)
{
fconv = ((int *)pDataParam)[i];
fconv = (fconv << 24) | ((fconv >> 24) & 0xff)
| ((fconv & 0xff00) << 8) | ((fconv & 0xff0000) >> 8);
if (fconv)
{
fmant = 0x00ffffff & fconv;
t = (int)( (0x7f000000 & fconv) >> 22 ) - 130;
while (!(fmant & 0x00800000))
{
--t;
fmant <<= 1;
}
if (t > 254)
fconv = (0x80000000 & fconv) | 0x7f7fffff;
else if (t <= 0)
fconv = 0;
else
fconv = (0x80000000 & fconv) | (t << 23) | (0x007fffff & fmant);
}
pDataParam[i] = fconv;
}
return TRUE;
}
BOOL CSegyViewView::DrawDataLine(short* pshortParam, int nTotal, CDC* pDC, int nTraceNum)
{
CPen blackPen(PS_SOLID, 1, RGB(0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&blackPen);
int blankX, blankY;
blankX = 5;
blankY = 1;
POINT ptBegin, point;
ptBegin.x = 20 + blankX * nTraceNum;
ptBegin.y = 20 + blankY;
pDC->MoveTo(ptBegin);
for (int i = 0; i < nTotal; ++i)
{
point.x = ptBegin.x + pshortParam[i] * blankX / 8500;
point.y = ptBegin.y + blankY * i;
pDC->LineTo(point);
}
pDC->SelectObject(pOldPen);
return TRUE;
}
BOOL CSegyViewView::DrawDataLine(int *pintParam, int nTotal, CDC *pDC, int nTraceNum)
{
CPen blackPen(PS_SOLID, 1, RGB(0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&blackPen);
int blankX, blankY;
blankX = 5;
blankY = 1;
POINT ptBegin, point;
ptBegin.x = 20 + blankX * nTraceNum;
ptBegin.y = 20 + blankY;
pDC->MoveTo(ptBegin);
for (int i = 1; i <= nTotal; ++i)
{
point.x = ptBegin.x + pintParam[i] * blankX / 9000;
point.y = ptBegin.y + blankY * i;
pDC->LineTo(point);
}
pDC->SelectObject(pOldPen);
return TRUE;
}
BOOL CSegyViewView::DrawDataLine(float *pfloatParam, int nTotal, CDC *pDC, int nTraceNum)
{
CPen blackPen(PS_SOLID, 1, RGB(0, 0, 0));
CPen* pOldPen = pDC->SelectObject(&blackPen);
int blankX, blankY;
blankX = 5;
blankY = 1;
POINT ptBegin, point;
ptBegin.x = 20 + blankX * nTraceNum;
ptBegin.y = 20 + blankY;
pDC->MoveTo(ptBegin);
for (int i = 1; i <= nTotal / 10; ++i)
{
point.x = ptBegin.x + (int)( (float)pfloatParam[i] / 200);
point.y = ptBegin.y + blankY * (i - 1);
pDC->LineTo(point);
}
pDC->SelectObject(pOldPen);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -