📄 seismic_data.cpp
字号:
// Seismic_Data.cpp : implementation file
//
#include "stdafx.h"
#include "showsgy.h"
#include "Seismic_Data.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Seismic_Data dialog
Seismic_Data::Seismic_Data(CWnd* pParent /*=NULL*/)
: CDialog(Seismic_Data::IDD, pParent)
{
//{{AFX_DATA_INIT(Seismic_Data)
m_InputFile = _T("");
m_lx = 0;
m_ly = 0;
m_lz = 0;
m_lsamp = 0;
m_BlankFile = _T("");
//}}AFX_DATA_INIT
}
void Seismic_Data::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(Seismic_Data)
DDX_Text(pDX, IDC_EDIT1, m_InputFile);
DDX_Text(pDX, IDC_EDIT2, m_lx);
DDX_Text(pDX, IDC_EDIT3, m_ly);
DDX_Text(pDX, IDC_EDIT4, m_lz);
DDX_Text(pDX, IDC_EDIT5, m_lsamp);
DDX_Text(pDX, IDC_EDIT_BlankFile, m_BlankFile);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(Seismic_Data, CDialog)
//{{AFX_MSG_MAP(Seismic_Data)
ON_BN_CLICKED(IDC_Data, OnData)
ON_BN_CLICKED(IDC_GetBlankFile, OnGetBlankFile)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Seismic_Data message handlers
#include "stdio.h"
#include "math.h"
void swapbs(char *buf, short size)
{
char tmp;
switch (size) {
case 2:
tmp=buf[0]; buf[0]=buf[1]; buf[1]=tmp;
break;
case 4:
tmp=buf[0]; buf[0]=buf[3]; buf[3]=tmp;
tmp=buf[1]; buf[1]=buf[2]; buf[2]=tmp;
break;
case 8:
tmp=buf[0]; buf[0]=buf[7]; buf[7]=tmp;
tmp=buf[1]; buf[1]=buf[6]; buf[6]=tmp;
tmp=buf[2]; buf[2]=buf[5]; buf[5]=tmp;
tmp=buf[3]; buf[3]=buf[4]; buf[4]=tmp;
break;
default:
break;
}
return;
}
void Seismic_Data::info3d(CString sgyname,long &nx,long &ny,long &nz,long &samprate)
{
FILE *f;
long int fillen,traces,bh1[60],ibm;
short int token=0,bh[200];
long i,j,l;
f=fopen(sgyname,"rb");
fseek(f,3200,0);
fread(bh,200,1,f);
if(bh[12]>255) token=1;
ibm=0;
if(token) { for(i=0;i<200;i++) swapbs((char *)(bh+i),2);ibm=1;}
samprate=bh[8];
nz=bh[10];
fseek(f,0,2);
fillen=ftell(f);
traces=(fillen-3600)/(240+nz*4L);
ny=bh[6];
if((ny)<2)
{
fseek(f,3600,0);
l=4L*nz;
ny=1;
for(i=0;i<traces;i++)
{
fread(bh1,240,1,f);
fseek(f,l,1);
if(token) for(j=0;j<60;j++) swapbs((char *)(bh1+j),4);
if ((ny)>bh1[3]) break;
ny=bh1[3];
}
}
if(ny<2)
{
fseek(f,3600,0);
l=4*nz;
ny=1;
for(i=0;i<traces;i++)
{
fread(bh1,240,1,f);fseek(f,l,1);
if(token) for(j=0;j<60;j++) swapbs((char *)(bh1+j),4);
if (ny>bh1[5]) break;
ny=bh1[5];
}
}
nx=traces/(ny);
fclose(f);
}
void Seismic_Data::OnData()
{
// TODO: Add your control notification handler code here
long m_nx,m_ny,m_nz,m_samprate;
CString lpszFilter="微机文件(*.sgy)|*.sgy|工作站文件(*.seg)|*.seg|所有文件(*.*)|*.*||";
CFileDialog myFileDialog(TRUE,NULL,"*.sgy",OFN_LONGNAMES,lpszFilter);
if(myFileDialog.DoModal()==IDOK) m_InputFile=myFileDialog.GetPathName();
else return;
if(strlen(m_InputFile)>4)
{
info3d(m_InputFile,m_nx,m_ny,m_nz,m_samprate);
m_lx=m_nx;
m_ly=m_ny;
m_lz=m_nz;
m_lsamp=m_samprate;
UpdateData(FALSE);
}
else return;
}
void Seismic_Data::OnGetBlankFile()
{
// TODO: Add your control notification handler code here
CString lpszFilter="边界文件(*.bln)|*.bln||";
CFileDialog dlg(TRUE,NULL,"*.bln",OFN_LONGNAMES,lpszFilter);
if(dlg.DoModal()==IDOK)
{
m_BlankFile=dlg.GetPathName();
UpdateData(FALSE);
}
else
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -