📄 showsgyview.cpp
字号:
// showsgyView.cpp : implementation of the CShowsgyView class
//
#include "stdafx.h"
#include "showsgy.h"
#include "ShowInline.h"
#include "showsgyDoc.h"
#include "showsgyView.h"
#include "Seismic_Data.h"
#include "wzdbtmap.h"
#include "info3d.h"
#include "Time_Slice.h"
#include "display_config.h"
#include "current_infor.h"
#include "histeq.h"
#include "layer.h"
#include "Xline_number.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CShowsgyView
IMPLEMENT_DYNCREATE(CShowsgyView, CScrollView)
BEGIN_MESSAGE_MAP(CShowsgyView, CScrollView)
//{{AFX_MSG_MAP(CShowsgyView)
ON_COMMAND(IDC_Inline, OnInline)
ON_COMMAND(ID_MENUITEM32773, OnMenuitem32773)
ON_COMMAND(IDC_Xline, OnXline)
ON_COMMAND(IDC_Timeslice, OnTimeslice)
ON_COMMAND(ID_MENUITEM32778, OnMenuitem32778)
ON_COMMAND(ID_Inform, OnInform)
ON_COMMAND(IDC_LAYER, OnLayer)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CShowsgyView construction/destruction
CString InputFile;
CSize sizeTotal;
long nx,ny,nz,samprate,ibm,First,token,nxx,nyy;
int px,py,pz,pImage,imangel;
float *xyz;
int *stime;
CShowsgyView::CShowsgyView()
{
// TODO: add construction code here
InputFile=_T("");
BlankFile=_T("");
sizeTotal.cx=sizeTotal.cy=100;
nx=ny=nz=ibm=samprate=0;
First=0;
xyz=new float[1000];
print=0;
token=0;
px=5;
py=2;
pz=15;
pImage=1;
imangel=0;
mybitmap=new CWzdBitmap;
mybitmap->m_Height=0;
mybitmap->m_Width=0;
m_welcome.welcome();
map_number=1;
}
CShowsgyView::~CShowsgyView()
{
}
BOOL CShowsgyView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CShowsgyView drawing
#include "readsgy.h"
void CShowsgyView::OnDraw(CDC* pDC)
{
CShowsgyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
switch (token)
{
case -1:
{
sizeTotal.cx=sizeTotal.cy=100;
break;
}
case 0:
{
sizeTotal.cx =nxx*px+200;
sizeTotal.cy = py*nyy+200;
break;
}
case 1:
case 2:
{
switch (imangel)
{
case 0:
case 2:
{
sizeTotal.cx =nxx+200;
sizeTotal.cy = nyy+200;
break;
}
case 1:
case 3:
{
sizeTotal.cx =nyy+200;
sizeTotal.cy =nxx+200;
break;
}
break;
}
}
}
SetScrollSizes(MM_TEXT, sizeTotal);
if(xyz!=NULL) switch (token)
{
case -1:
{
CDC init1;
init1.CreateCompatibleDC(pDC);
init1.SelectObject(&m_welcome);
pDC->BitBlt(0,0,m_welcome.m_Width,m_welcome.m_Height, &init1, 0,0,SRCCOPY);
break;
}
case 0:
case 1:
case 2:
{
CDC dcComp;
dcComp.CreateCompatibleDC(pDC);
dcComp.SelectObject(mybitmap);
// draw bitmap
pDC->BitBlt(10,10,mybitmap->m_Width ,mybitmap->m_Height , &dcComp, 0,0,SRCCOPY);
break;
}
}
}
void CShowsgyView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
// TODO: calculate the total size of this view
// sizeTotal.cx = sizeTotal.cy = 2000;
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CShowsgyView printing
BOOL CShowsgyView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
print=1;
pInfo->SetMinPage(1);
pInfo->SetMaxPage(1);
return DoPreparePrinting(pInfo);
}
void CShowsgyView::OnBeginPrinting(CDC* pDC , CPrintInfo* pInfo)
{
// TODO: add extra initialization before printing
}
void CShowsgyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CShowsgyView diagnostics
#ifdef _DEBUG
void CShowsgyView::AssertValid() const
{
CScrollView::AssertValid();
}
void CShowsgyView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CShowsgyDoc* CShowsgyView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CShowsgyDoc)));
return (CShowsgyDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CShowsgyView message handlers
void CShowsgyView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CScrollView::OnPrepareDC(pDC, pInfo);
if(pDC->IsPrinting())
{
pDC->SetMapMode(MM_ANISOTROPIC); //转换坐标映射方式
CSize size = CSize(800, 560);
pDC->SetWindowExt(size); //确定窗口大小
//得到实际设备每逻辑英寸的像素数量
int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
//得到设备坐标和逻辑坐标的比例
long xExt = (long)(size.cx * xLogPixPerInch/96);
long yExt = (long)(size.cy * yLogPixPerInch/96);
pDC->SetViewportExt((int)xExt, (int)yExt); //设置视口大小
}
CView::OnPrepareDC(pDC, pInfo);
}
DROPEFFECT CShowsgyView::OnDragEnter(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point)
{
// TODO: Add your specialized code here and/or call the base class
return CScrollView::OnDragEnter(pDataObject, dwKeyState, point);
}
void CShowsgyView::OnInline()
{
// TODO: Add your command handler code here
char ss[20];
ShowInline dlg;
long lineno;
wsprintf(ss,"[1-%d]",nx);
dlg.m_Inlinerange=CString(ss);
if(dlg.DoModal()==IDOK) lineno=dlg.m_Inline_Number-1;
if(nx>0)
{
delete xyz;
xyz=new float[ny*nz];
iline(InputFile,xyz,nx,ny,nz,lineno);
nxx=ny;
nyy=nz;
ReadytoDraw();
}
else return;
}
void CShowsgyView::OnMenuitem32773()
{
// TODO: Add your command handler code here
Seismic_Data dlg;
dlg.m_InputFile=InputFile;
dlg.m_lx=nx;
dlg.m_ly=ny;
dlg.m_lz=nz;
dlg.m_lsamp=samprate;
dlg.m_BlankFile=BlankFile;
if(dlg.DoModal()==IDOK)
{
InputFile=dlg.m_InputFile;
nx=dlg.m_lx;
ny=dlg.m_ly;
nz=dlg.m_lz;
samprate=dlg.m_lsamp;
BlankFile=dlg.m_BlankFile;
if(stime!=NULL) delete stime;
stime=new int[nx*ny];
mybitmap->m_Height =0;
mybitmap->m_Width =0;
if((nx==1)||(ny==1))
{
ny=nx*ny;
nx=1;
delete xyz;
xyz=new float[ny*nz*4L];
iline(InputFile,xyz,nx,ny,nz,1);
nxx=ny;
nyy=nz;
}
ReadytoDraw();
}
}
void CShowsgyView::OnXline()
{
// TODO: Add your command handler code here
char ss[20];
Xline_number dlg;
long lineno;
wsprintf(ss,"[1-%d]",ny);
dlg.m_xlinerange=CString(ss);
if(dlg.DoModal()==IDOK) lineno=dlg.m_xlineno-1;
if(ny>0)
{
if(xyz!=NULL) delete xyz;
xyz=new float[nx*nz];
xline(InputFile,xyz,nx,ny,nz,lineno);
nxx=nx;
nyy=nz;
ReadytoDraw();
}
else return;
}
void CShowsgyView::OnTimeslice()
{
// TODO: Add your command handler code here
Time_Slice dlg;
char ss[20];
long lineno;
wsprintf(ss,"[1-%d]",nz);
dlg.m_TimeRange=CString(ss);
if(dlg.DoModal()==IDOK) lineno=dlg.m_Time-1;
if(nz>0)
{
delete xyz;
xyz=new float[ny*nx];
TimeSlice(InputFile,xyz,nx,ny,nz,lineno);
nxx=nx;
nyy=ny;
ReadytoDraw();
}
else return;
}
void CShowsgyView::OnMenuitem32778()
{
// TODO: Add your command handler code here
display_config dlg;
dlg.m_px =px;
dlg.m_py =py;
dlg.m_pz =pz;
dlg.m_pImage=pImage;
dlg.m_Token=token;
dlg.m_angle=imangel;
dlg.m_MapNumber=map_number;
if(dlg.DoModal()==IDOK)
{
token=dlg.m_Token;
px=dlg.m_px;
py=dlg.m_py;
pz=dlg.m_pz;
pImage=dlg.m_pImage;
imangel=dlg.m_angle;
map_number=dlg.m_MapNumber;
ReadytoDraw();
}
else return;
}
void CShowsgyView::OnInform()
{
// TODO: Add your command handler code here
char s[200];
current_infor dlg;
dlg.m_InputFile=CString("输入文件:")+CString(InputFile);
wsprintf(s,"Inline 线数:%d",nx);dlg.m_Inlines=CString(s);
wsprintf(s,"Xline 线数:%d",ny);dlg.m_Xlines=CString(s);
wsprintf(s,"每道点数:%d",nz);dlg.m_Nz=CString(s);
switch (token)
{
case -1:dlg.m_mode=CString("显示方式:未定");break;
case 0:dlg.m_mode=CString("显示方式:时间剖面");break;
case 1:dlg.m_mode=CString("显示方式:灰度图");break;
case 2:dlg.m_mode=CString("显示方式:彩色位图");break;
}
dlg.DoModal();
}
void CShowsgyView::OnLayer()
{
// TODO: Add your command handler code here
CString xx;
layer dlg;
if(dlg.DoModal()==IDOK) xx=dlg.m_LayerFile;
int i,j,k,*p;
FILE *f;
p=stime;
if(strlen(xx)>5)
{
f=fopen(xx,"r");
while(!feof(f))
{
fscanf(f,"%d%d%d",&i,&j,&k);
*p++=k;
}
fclose(f);
delete xyz;
xyz=new float[nx*ny];
LayerSlice(InputFile,stime,xyz,nx,ny,nz);
nxx=nx;
nyy=ny;
ReadytoDraw();
}
else return;
}
void CShowsgyView::ReadytoDraw()
{
if(xyz!=NULL) switch (token)
{
case -1:Invalidate(TRUE);break;
case 0:
delete mybitmap;
mybitmap=new CWzdBitmap;
mybitmap->px=px;
mybitmap->py=py;
mybitmap->pz=pz;
if(nxx>0&&nyy>0)
mybitmap->CreateTimeSection(xyz,nxx,nyy);
Invalidate(TRUE);break;
case 1:
case 2:
delete mybitmap;
mybitmap=new CWzdBitmap;
mybitmap->token=token;
mybitmap->m_angel=imangel;
mybitmap->m_blankFile=BlankFile;
mybitmap->mapcolor=map_number;
if(nxx>0&&nyy>0)
mybitmap->CreateColorSection(xyz, nxx, nyy);
Invalidate(TRUE);break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -