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

📄 seismic_data.cpp

📁 用Visual C++编写的地震记录显示程序
💻 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 + -