#ifndef DrawBase_H #define DrawBase_H //格线类型 //字体对齐方式 // #include "VecCoordinate.h" #define LEFT Qt::AlignLeft #define RIGHT Qt::AlignRight// 1 #define CENTER Qt::AlignCenter// 2 #define VCENTER Qt::AlignVCenter//3 #pragma warning( push ,0) #include "OSGFramework.h" // #include "QtWellTrackNode.h" // #include "QtWellSceneManager.h" #include "ObjWelllog.h" // #include "HeadObj.h" // #include "QtWellLogTrackNode.h" #include "drawbase_global.h" // #include "VecCoordinate.h" #include #pragma warning( pop ) //#ifdef _WINDOWS //#ifdef DRAWBASE_LIB //#define DRAWBASE_EXPORT __declspec(dllexport) //#else //#define DRAWBASE_EXPORT __declspec(dllimport) //#endif //#else //#define DRAWBASE_EXPORT //#endif BEGIN_OSGGRAPHICS_NAMESPACE; struct DRAWBASE_EXPORT ColorMessage { int ColorNum; //颜色级数 int Mode; //调色方式 QColor Color[256]; //定义颜色数组 }; // 边结构数据类型 typedef struct Edge{ int ymax; // 边的最大y坐标 float x; // 与当前扫描线的交点x坐标 float dx; // 边所在直线斜率的倒数 struct Edge * pNext; // 指向下一条边 } Edge, * LPEdge; struct DRAWBASE_EXPORT WaveMessage { int WaveType; // 绘图类型0-波形,1-填充,2-变密度 int Mode; //绘填充或变密度图形时的填充方式,1-正半周,-1--负半周,0-全周 float m_Left; //波列左刻度时间 float m_Right; //波列右刻度时间 float m_MaxRange; //波列最大幅度 float m_Base; //波列基值 int m_WaveSpace; //绘制波列间隔数,即每隔m_WaveSpace个点画一个波列 float m_WaveHight; //波列高度 QColor WaveColor; //波列曲线的颜色 QColor FillColor; //填充的颜色 ColorMessage m_ColorMessage; }; class DRAWBASE_EXPORT CDrawBase/*:public CQtWellLogTrackNode*/ { // Q_OBJECT public: CDrawBase(); virtual ~CDrawBase(); virtual void Destory(); public: // virtual float ConvertY(eCoordType eInCoordType, double flDep, // eCoordType eOutCoordType ); float ConvertY(float fDep); virtual void _Build(); virtual void DrawCurve(QPainter* pdc,QRectF mrt); virtual void _UpdateHUD(); double getYOSGGlobalFromPixel(double y); double getXOSGGlobalFromPixel(double x); double getYGeoNormalFromPixel(double y); double getYGeoFromOSGGlobal(double yOSGGlobal); double getXGeoFromOSGGlobal(double xOSGGlobal,bool IsWF=0); // osg::Vec3d OSGPixleToOSGLocal(osg::Vec3d vOSGPixel ); double getYFromOSGPixel(double y); double getXFromOSGPixel(double x,bool IsWF=0,bool CalType=0); // float YConvertToGEO(float y); // float XConvertToGEO(float x); // virtual void _Update( eUpdateEvent e,CObjectEventParam *pEventParam ); virtual void Refurbish(); virtual void ReadData(); virtual void SaveData(); virtual void InitProperty(); virtual void GetProperty(); void JudgePixel(QImage &pDC,QColor bc,unsigned char *strPixel); void JudgePixel(unsigned char *iptrn,unsigned char *strPixel); void FillLith(QPainter *pDC,QPointF *lpPoints,int nCount,QColor crFore,QColor crBack,QPointF *pixels,int *pointn,int nWidth,int nHeight); void LineFillLith(QPainter *hdc,int x1,int x2,int y,int penw,QColor crFore,QColor crBack,QPointF *pixels,int *pointn,int nWidth,int nHeight); void LineFillLith(QPainter *hdc,int x1,int x2,int y,int ipen,QColor crFore,QColor crBack,QImage image,int x0,int y0); void FillLith(QPainter *pDC,QPointF *lpPoints,int nCount,QColor crFore,QColor crBack,QImage image,int x0,int y0); void DrawLith(QPainter *pDC,QPointF *pt,int nPoint,QBrush FhName,QColor pForeColor,QColor bkColor); int LITH_HEIGHT,LITH_WIDTH; int nHeight; int nWidth; /*Slf_WAVE WaveInfo;*/ float m_nVertRatio,m_nHoriRatio,m_DepthScale,m_MMScale,m_HDepthScale; int m_Ishorizontal; bool m_IsPrint; int DrawDev; float m_PlotSdep,m_PlotEdep;//,m_MoveSdep,m_MoveEdep,m_MoveDep; MyDataTypeEnum v,vCurve; char* m_Value,*m_BackData; QBrush m_brush; float m_SDep,m_EDep,m_Rlev; bool mIsCut,m_bSecond; //第二比例 float m_LeftVal; //左刻度 float m_RightVal; //右刻度 int m_nMaxAmp; //最大幅度 int m_nWaveHeight; //波形幅度 float m_flRlev2; //二维曲线采样间隔 float m_flStart,m_flEnd; //二维曲线开始值、结束值 int m_nSamples; //每深度间隔的数据点 int m_PointNum; float *m_WaveValue; //波列数组 short *m_ShortWaveValue; //波列数组 Slf_WAVE WaveInfo; //波列基本信息 // WaveMessage mWaveMes; //波列设置消息 void GetDepth(QPainter *pDC,QRectF &mrt,QRectF &rt, float &sdep,//屏幕显示起始斜深 float &edep,//屏幕显示终止斜深 float &sdepc,//水平位移显示下,斜深对应的水平位移;垂深显示下,斜深对应的垂深; float &edepc);//水平位移显示下,斜深对应的水平位移;垂深显示下,斜深对应的垂深; int iIndex; QString sName; QString sUnit; QString sFilePath; float ScreenWidth; float ScreenHeight; float ComputeCurvePos(float flVal,float lsc,float rsc,float lps,float rps,int iType,float scale,float flMin=-99999,float flMax=99999); float ComputePosToCurveVal(float x,float lsc,float rsc,float lps,float rps,int iType,float scale,float flMin=-99999,float flMax=99999); // void WriteStr(QPainter *pDC,QRectF rt1,CString cs,LOGFONT lf, // QColor crColor,int iAlign, // BOOL bVert,float flHoriRatio,int iBkMode,QColor crBack,UINT nFormat); public: /** * @brief 设置来自document的sheet句柄 */ // void SetWellSheet(CSheet* wellSheet); /** * @brief 控制图头部分显示属性 */ virtual void SettingHeaderElements(); /** * @brief 绘制曲线道头 */ virtual void DrawHead(QPainter *pPainter,QRectF rect,QRectF trect=QRectF()); /** * @brief 绘制曲线体 */ virtual void DrawClient(QPainter *pPainter,QRectF rt); virtual void GetClientItem(float sdep,float edep, QVector &lines); virtual void DrawSidelines(QPainter *pPainter,QRectF rt); double GetDdep(); public: double GetData(int RepCode,char *buffer); void SetData(int RepCode,char *buffer,float yy); // CItemText *m_pLeftText; //左刻度 // CItemText *m_pRightText;//右刻度 // CItemText *m_pUnitText; //单位 // CItemText *m_pCurveNameText;//曲线名称 // virtual CQtWellTrackNode * GetWellTrackNode(); //得到wellNode实例 protected: CObjWellLog *m_pWellLog; // CSheet* m_pWellSheet; protected: private: //FontMessage *MyFontMes; //字体类型 // private: /** * @brief 初始化波列显示参数 */ /** * @brief 初始化波列属性 */ /** * @brief 更新色标颜色 * @param colorMode:显示模式,0:灰度;1:渐变 */ // HeadObj* hHeadObj; // ClientItem* m_pWave; }; END_OSGGRAPHICS_NAMESPACE #endif // DrawBase_H