////////////////////////////////////////////////////////////////////////////// //文件 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 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_)