|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
//文件 SeismicDraw.h
|
|
|
//主要功能:
|
|
|
// 双狐基础类库,显示地震剖面数据
|
|
|
//
|
|
|
//程序编写: 2007-3-18
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// CSeismicDraw.h: interface for the CSeismicDraw class.
|
|
|
//
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#if !defined(AFX_SEISMICDRAW_H__911C2B83_8C23_4B79_9C4E_453FD9753F18__INCLUDED_)
|
|
|
#define AFX_SEISMICDRAW_H__911C2B83_8C23_4B79_9C4E_453FD9753F18__INCLUDED_
|
|
|
|
|
|
#if _MSC_VER > 1000
|
|
|
#pragma once
|
|
|
#endif // _MSC_VER > 1000
|
|
|
|
|
|
/*///////////////////////////////////////////////////////////////////////////
|
|
|
文件 SeismicDraw.h
|
|
|
主要功能:
|
|
|
|
|
|
绘制地震剖面的类
|
|
|
///////////////////////////////////////////////////////////////////////////*/
|
|
|
|
|
|
#include <vfw.h>
|
|
|
class AFX_EXT_CLASS CSeismicDrawBase
|
|
|
{
|
|
|
public:
|
|
|
CSeismicDrawBase();
|
|
|
virtual ~CSeismicDrawBase();
|
|
|
|
|
|
public:
|
|
|
enum EDrawType
|
|
|
{
|
|
|
typeVDL = 0, //变密度显示
|
|
|
typeVAL = 1, //波形曲线显示
|
|
|
typeVALL = 2, //左变面积
|
|
|
typeVALR = 3, //右变面积
|
|
|
typeVDLVAL = 4, //变密度+波形曲线
|
|
|
typeVDLVALL = 5, //变密度+左变面积
|
|
|
//变密度+透明左变面积
|
|
|
typeVDLVALR = 6 //变密度+右变面积
|
|
|
//变密度+透明右变面积
|
|
|
};
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////
|
|
|
//调色板使用256色调色板 前252为变密度的颜色 后三个为变面积颜色
|
|
|
RGBQUAD* m_pQuad; //当前调色板
|
|
|
|
|
|
void SetVALColor(COLORREF crBkg, COLORREF crFnt, COLORREF crBas);
|
|
|
void GetVALColor(COLORREF& crBkg,COLORREF& crFnt,COLORREF& crBas);
|
|
|
BYTE GetVdlIndex(float sv); //获得变密度显示时的颜色索引号
|
|
|
|
|
|
int m_nNormalizeMode; //归一化模式
|
|
|
|
|
|
|
|
|
public:
|
|
|
/*///////////////////////////////////////////////////////////////////////////
|
|
|
//初始化地震剖面必要信息
|
|
|
//rtScreen 为剖面的窗口位置
|
|
|
|
|
|
//rtDraw为待显示的行列索引号
|
|
|
////rtDraw.left CDP矩阵的左列
|
|
|
////rtDraw.right CDP矩阵的右列
|
|
|
////rtDraw.top CDP矩阵的上行
|
|
|
////rtDraw.bottom CDP矩阵的下行
|
|
|
|
|
|
////绘制的CDP道数为[left,right] 合计right-left+1 道
|
|
|
|
|
|
//facTimes 波形叠加参数为一道宽度的倍数
|
|
|
//cdpStep 抽道显示参数
|
|
|
//showType 显示类型
|
|
|
/////////////////////////////////////////////////////////////////////////////*/
|
|
|
BOOL InitShowParameter(CRect rtScreen, CRect rtDrawIndex, float facTimes, int cdpStep, int showType); //double方式用,不规则绘制
|
|
|
|
|
|
//生成显示内存图片
|
|
|
void CreateShowMemoryDC();
|
|
|
|
|
|
/*///////////////////////////////////////////////////////////////////////////
|
|
|
绘制参数
|
|
|
///////////////////////////////////////////////////////////////////////////*/
|
|
|
void DrawSec(CDC* pDC, BOOL bStreth);
|
|
|
void DrawSec(CDC* pDC, CPoint ptTopLeft);
|
|
|
|
|
|
|
|
|
//打印预览模式下,获得最少一次能显示的道数,为了防止内存不够
|
|
|
int GetMinCanDrawTraceNum(CRect rtScreen, int nTraceNum);
|
|
|
|
|
|
//在进行绘制过程中首先使用该接口确定绘制参数 返回屏幕的矩形区域和绘制的剖面区域
|
|
|
void COM_INIT_EX(CRect& rtScreen,CRect& rtDraw,int nx,int ny);
|
|
|
|
|
|
protected:
|
|
|
virtual float GetData(int cdp,int sam) = 0; //返回指定道cdp的第sam个采样点
|
|
|
virtual int GetNX() = 0; //获得总道数
|
|
|
virtual int GetNY() = 0; //获得总采样点数
|
|
|
virtual float GetMin(int cdpIndex) = 0; //获得归一化时的最小值
|
|
|
virtual float GetMax(int cdpIndex) = 0; //获得归一化时的最大值,通常两个值相同
|
|
|
|
|
|
protected:
|
|
|
//绘图模式区参数
|
|
|
EDrawType m_nDrawType; //绘图模式 0:变密度 1:波形 2:波形左填充
|
|
|
// 3:波形右填充 4:变密度+波形
|
|
|
// 5:变密度+波形左填充 6:变密度+波形右填充
|
|
|
float m_factorTimes; //波形叠加参数为一道宽度的倍数,振幅缩放倍数
|
|
|
int m_cdpStep; //抽道显示参数,隔几道显示,缺省为1
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////
|
|
|
BITMAPINFOHEADER* m_pInfoHeader; //绘图时调色板,包含在m_pHeader中
|
|
|
BYTE* m_pHeader; //绘图时的DIB数据位外信息
|
|
|
BYTE* m_pBit; //图形数据
|
|
|
|
|
|
//创建色表
|
|
|
BOOL CreateSeisQuad();
|
|
|
|
|
|
int m_nWide;
|
|
|
int m_nHeight;
|
|
|
int m_nWideD;
|
|
|
|
|
|
int m_nCdpFirstIndex; //需要显示的第一道的CDP索引号
|
|
|
int m_nSamFirstIndex; //需要显示的第一个采样点索引号
|
|
|
int m_nCdpCount; //需要显示的道数
|
|
|
int m_nSamCount; //需要显示的采样点数
|
|
|
|
|
|
//double基础的完全适应显示//////////////////////////////////////////////////////////////////////
|
|
|
double m_dPexilWidth; //每个采样点绘制宽度
|
|
|
double m_dPexilHeight; //每个采样点绘制高度
|
|
|
|
|
|
CRect m_rtScreen; //屏幕显示范围
|
|
|
|
|
|
|
|
|
void InitVALBkg();
|
|
|
int FloatToLong(double val);
|
|
|
|
|
|
int CreateBitmap(int nWidth, int nHeight);
|
|
|
int GetCdpPosition(double colIndex);
|
|
|
int GetSamPosition(double rowIndex);
|
|
|
int GetDataIndex(int row,int col);
|
|
|
|
|
|
//显示函数
|
|
|
void CreateVDLEx_Old();
|
|
|
void CreateVDLEx();
|
|
|
void CreateVALEx();
|
|
|
void CreateVALFLEx();
|
|
|
void CreateVALFREx();
|
|
|
};
|
|
|
|
|
|
class AFX_EXT_CLASS CSeismicDraw : public CSeismicDrawBase
|
|
|
{
|
|
|
public:
|
|
|
CSeismicDraw();
|
|
|
~CSeismicDraw();
|
|
|
|
|
|
virtual float GetData(int cdp, int sam);
|
|
|
virtual int GetNX() { return numx; }
|
|
|
virtual int GetNY() { return numy; }
|
|
|
virtual float GetMin(int cdpIndex) { return m_pMin[cdpIndex]; } //获得归一化时的最小值
|
|
|
virtual float GetMax(int cdpIndex) { return m_pMax[cdpIndex]; } //获得归一化时的最大值,通常两个值相同
|
|
|
|
|
|
/*///////////////////////////////////////////////////////////////////////////
|
|
|
//生成显示内存图片
|
|
|
//pData 待显示的地震剖面矩阵 数据按CDP顺序存储 即1维数组CDP向量连续存储
|
|
|
//nx,ny pData矩阵的维数
|
|
|
///////////////////////////////////////////////////////////////////////////////*/
|
|
|
void CreateShowMemoryDC(float* pData,int nx,int ny);
|
|
|
|
|
|
public:
|
|
|
float* m_pMin;
|
|
|
float* m_pMax;
|
|
|
float* m_pData;
|
|
|
int numx;
|
|
|
int numy;
|
|
|
};
|
|
|
|
|
|
#endif // !defined(AFX_SEISMICDRAW_H__911C2B83_8C23_4B79_9C4E_453FD9753F18__INCLUDED_)
|