From e1d2459b900b46063d3a6da314c4f3c9edf1ad2a Mon Sep 17 00:00:00 2001 From: jiayulong Date: Wed, 14 Jan 2026 15:24:23 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E4=BA=95=E6=96=9C=E4=B8=89?= =?UTF-8?q?=E5=9B=BE=E4=B8=80=E8=A1=A8=E7=BB=98=E5=88=B6=E3=80=82(?= =?UTF-8?q?=E9=87=87=E7=94=A8=E8=80=81=E4=BB=A3=E7=A0=81=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=EF=BC=8C=E9=9C=80=E8=A6=81=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=AA=8C=E8=AF=81)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DrawBase/include/DrawBase.h | 200 +++ DrawBase/include/drawbase_global.h | 11 + DrawBase/src/DrawBase.cpp | 1289 +++++++++++++++ DrawBase/src/DrawBase.pro | 47 + common/geometryutils.cpp | 26 + common/geometryutils.h | 1 + logPlus/DrawTvd.cpp | 2397 ++++++++++++++++++++++++++++ logPlus/DrawTvd.h | 215 +++ logPlus/ViewInfo.cpp | 95 ++ logPlus/ViewInfo.h | 135 ++ logPlus/formdraw.cpp | 56 + logPlus/formline.cpp | 43 +- logPlus/formline.h | 16 +- logPlus/formline.ui | 36 - logPlus/formwell.cpp | 2 + logPlus/logPlus.pro | 7 + logPlus/mainwindowcurve.cpp | 28 +- logPlus/mainwindowcurve.h | 4 +- 18 files changed, 4561 insertions(+), 47 deletions(-) create mode 100644 DrawBase/include/DrawBase.h create mode 100644 DrawBase/include/drawbase_global.h create mode 100644 DrawBase/src/DrawBase.cpp create mode 100644 DrawBase/src/DrawBase.pro create mode 100644 logPlus/DrawTvd.cpp create mode 100644 logPlus/DrawTvd.h create mode 100644 logPlus/ViewInfo.cpp create mode 100644 logPlus/ViewInfo.h diff --git a/DrawBase/include/DrawBase.h b/DrawBase/include/DrawBase.h new file mode 100644 index 0000000..9becf79 --- /dev/null +++ b/DrawBase/include/DrawBase.h @@ -0,0 +1,200 @@ +#ifndef DrawBase_H +#define DrawBase_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 diff --git a/DrawBase/include/drawbase_global.h b/DrawBase/include/drawbase_global.h new file mode 100644 index 0000000..27369af --- /dev/null +++ b/DrawBase/include/drawbase_global.h @@ -0,0 +1,11 @@ +#ifndef DRAWBASE_GLOBAL_H +#define DRAWBASE_GLOBAL_H + + +# ifdef DRAWBASE_LIB_EXPORT +# define DRAWBASE_EXPORT __declspec(dllexport) +# else +# define DRAWBASE_EXPORT __declspec(dllimport) +# endif + +#endif \ No newline at end of file diff --git a/DrawBase/src/DrawBase.cpp b/DrawBase/src/DrawBase.cpp new file mode 100644 index 0000000..4ef7899 --- /dev/null +++ b/DrawBase/src/DrawBase.cpp @@ -0,0 +1,1289 @@ +#pragma warning( push ,0) +#include +// #include +// #include +#include +#include +#include +#include +#include "QPainter" +// #include "QtWindowWellSection.h" +// #include "HeadObj.h" +//#include "geometryutils.h" +#include "DrawBase.h" +// #include "WellSectionConst.h" +// #include "VecSceneManager.h" +// #include "QtWellTrackNode.h" +// #include "ConsoleOutputWidget.h" +// #include "ObjProject.h" + +#pragma warning( pop ) + +BEGIN_OSGGRAPHICS_NAMESPACE; + +CDrawBase::CDrawBase()/*:CQtWellLogTrackNode() */ +{ + // hHeadObj = new HeadObj(this,GL_LINES); + // m_pWave = new ClientItem(this); + m_Value=0; + m_SDep=0; + m_EDep=0; + m_Rlev=0.125; + iIndex=-1; + nHeight=0; + nWidth=0; + m_PlotSdep=0; + m_PlotEdep=0; +// m_MoveDep=0; + m_PointNum=0; + LITH_WIDTH=32; + LITH_HEIGHT=16; + // m_pLeftText = new CItemText(); + // m_pRightText = new CItemText(); + // m_pCurveNameText=new CItemText(); + // m_pUnitText=new CItemText(); + + m_pWellLog=NULL; +} + +CDrawBase::~CDrawBase() +{ + if(m_Value!=NULL) + delete []m_Value; + // if(hHeadObj&&(long long)hHeadObj->pFF>0x00ffff&&hHeadObj->pFF!=(CDrawBase*)0xfeeefeeefeeefeee&&hHeadObj->pFF!=(CDrawBase*)0xdddddddddddddddd) { + // if(m_pLeftText){ + // m_pLeftText->setParentItem(NULL); + // delete m_pLeftText; + // m_pLeftText=NULL; + // } + // if(m_pRightText){ + // m_pRightText->setParentItem(NULL); + // delete m_pRightText; + // m_pRightText=NULL; + // } + // if(m_pCurveNameText){ + // m_pCurveNameText->setParentItem(NULL); + // delete m_pCurveNameText; + // m_pCurveNameText=NULL; + // } + // if(m_pUnitText) { + // m_pUnitText->setParentItem(NULL); + // delete m_pUnitText; + // m_pUnitText=NULL; + // } + // m_pWave->pFF=NULL; + // hHeadObj->setParentItem(NULL); + // delete hHeadObj; + // hHeadObj=NULL; + // } + // if(m_pWave&&m_pWave->pFF&&m_pWave->pFF!=(CDrawBase*)0xfeeefeeefeeefeee&&m_pWave->pFF!=(CDrawBase*)0xdddddddddddddddd&&m_pWave->pFF!=(CDrawBase*)0xabababababababab) { + // m_pWave->pFF=NULL; + // m_pWave->setParentItem(NULL); + // delete m_pWave; + // m_pWave=NULL; + // } +} +double CDrawBase::getYOSGGlobalFromPixel(double y) +{ + // if(!m_pSceneManager) return 0; + // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); + // if( pLogTrack ) + // { + // CObjWellTrack*m_pWellTrack = pLogTrack->GetWellTrack(); + // if(!m_pWellTrack) return 0; + // CQtWindowWellSection *pWin=dynamic_cast(m_pSceneManager->GetVecWindow()); + // if(pWin){ + // return pWin->getYOSGGlobalFromPixel(m_pWellTrack,y); + // } + // osg::Vec3d vecGeoNormal; + // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGPixel,osg::Vec3d(0,y,0),eCoord_OSGGlobal,vecGeoNormal ); + // return vecGeoNormal[1]; + // } + return 0; +} +// osg::Vec3d CDrawBase::OSGPixleToOSGLocal(osg::Vec3d vOSGPixel ) +// { +// osg::Vec3d vecOSGLocal; +// m_pQtSceneManager->GetCoordinate()->ConvertCoordDouble(NULL,eCoord_OSGPixel, vOSGPixel, +// eCoord_OSGLocal,vecOSGLocal ); +// return vecOSGLocal; +// } + +double CDrawBase::getYGeoNormalFromPixel(double y) +{ + // if(!m_pSceneManager) return 0; + // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); + // if( pLogTrack ) + // { + // CObjWellTrack*m_pWellTrack = pLogTrack->GetWellTrack(); + // if(!m_pWellTrack) return 0; + // CQtWindowWellSection *pWin=dynamic_cast(m_pSceneManager->GetVecWindow()); + // if(pWin){ + // return pWin->getYGeoNormalFromPixel(m_pWellTrack,y); + // } + // osg::Vec3d vecGeoNormal; + // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGPixel,osg::Vec3d(0,y,0),eCoord_GEO,vecGeoNormal ); + // return vecGeoNormal[1]; + // } + return 0; +} +double CDrawBase::getYFromOSGPixel(double y) +{ + return 0; + // CQtWellTrackNode *pWellNode = GetWellTrackNode(); + // if(!pWellNode) return 0; + // if(m_pSceneManager->IsWellSectonHorizonLayout()) + // { + // return pWellNode->ConvertX(eCoord_OSGPixel,y,eCoord_GEO); + // } + // else { + // return pWellNode->ConvertY(eCoord_OSGPixel,y,eCoord_GEO); + // } + // return 0; +} + +double CDrawBase::getXFromOSGPixel(double x,bool IsWF,bool CalType) +{ + return 0; + // CQtWellTrackNode *pWellNode = GetWellTrackNode(); + // if(!pWellNode) return 0; + // float x0=0; + // CSheet& sheet = GetWellTrackNode()->GetWellSheet(); + // if(m_pSceneManager->IsWellSectonHorizonLayout()) { + // osg::Vec3d vecSheet = sheet.VecToSheetCoord( osg::Vec3d(1,x,1),eCoord_OSGPixel,this->GetID() ); + // x0=vecSheet[0]; + // } + // else { + // osg::Vec3d vecSheet = sheet.VecToSheetCoord( osg::Vec3d(x,1,1),eCoord_OSGPixel,this->GetID() ); + // x0=vecSheet[0]; + // } + // const sTrack& sTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrackInfo(m_pWellLog); + // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog ); + + // int nColumeIndex = sTrack.nBeginColumIndex; + // if( nColumeIndex<0 ) + // { + // return 0; + // } + // QList mchilds; + // pLogTrack->GetChildren(mchilds); + // CellRange cellRange = sTrack.GetCellRange(); + // cellRange.nEndRow = cellRange.nBeginRow + mchilds.indexOf( m_pWellLog ) + 1 ; + // cellRange.nBeginRow = cellRange.nEndRow; + + // int nRowNumber = pWellNode->GetWellSheet().GetRowNumber(); + // QRectF rcF = pWellNode->GetWellSheet().GetCellRect( CellRange(nRowNumber-1,nRowNumber-1, + // sTrack.nBeginColumIndex,sTrack.nEndColumIndex)); + // if(rcF.width()==0) return 0; + // float val=0; + // float lsc=0,rsc=0; + // if ( CalType !=AXIS_LINEAR ) { + // if(IsWF) { + // if(mWaveMes.m_Right-mWaveMes.m_Left>0) { + // rsc=log10f(mWaveMes.m_Left); + // lsc=log10f(mWaveMes.m_Right); + // } + // else { + // lsc=log10f(mWaveMes.m_Left); + // rsc=log10f(mWaveMes.m_Right); + // } + // } + // else { + // if(m_RightVal-m_LeftVal>0) { + // rsc=log10f(m_LeftVal); + // lsc=log10f(m_RightVal); + // } + // else { + // lsc=log10f(m_LeftVal); + // rsc=log10f(m_RightVal); + // } + // } + // } + // else { + // if(IsWF) { + // if(mWaveMes.m_Right-mWaveMes.m_Left>0) { + // rsc=(mWaveMes.m_Left); + // lsc=(mWaveMes.m_Right); + // } + // else { + // lsc=(mWaveMes.m_Right); + // rsc=(mWaveMes.m_Left); + // } + // } + // else { + // if(m_RightVal-m_LeftVal>0) { + // rsc=(m_LeftVal); + // lsc=(m_RightVal); + // } + // else { + // lsc=(m_RightVal); + // rsc=(m_LeftVal); + // } + // } + // } + // val=(rcF.width()-(x0-rcF.left()))*(rsc-lsc)/rcF.width()+lsc; + // if ( CalType !=AXIS_LINEAR ) { + // val=powf(10.0f,val); + // } + // return val; +} + +double CDrawBase::getYGeoFromOSGGlobal(double yOSGGlobal) +{ + return 0; + // if(!m_pSceneManager) return 0; + // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); + // if( pLogTrack ) + // { + // CObjWellTrack*m_pWellTrack = pLogTrack->GetWellTrack(); + // if(!m_pWellTrack) return 0; + // osg::Vec3d vecGeoNormal; + // bool bHorizonLayout=m_pWellSceneManager->IsWellSectonHorizonLayout(); + // if(bHorizonLayout) { + // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGGlobal,osg::Vec3d(yOSGGlobal,yOSGGlobal,0),eCoord_GEO,vecGeoNormal ); + // } + // else { + // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGGlobal,osg::Vec3d(0,yOSGGlobal,0),eCoord_GEO,vecGeoNormal ); + // } + // return vecGeoNormal[1]; + // } + // return 0; +} +double CDrawBase::getXGeoFromOSGGlobal(double xOSGGlobal,bool IsWF) +{ + return 0; + // if(!m_pSceneManager) return 0; + // CSheet *pSheet=m_pWellSceneManager->GetCurrentSheet(); + + // osg::Vec3d vecSheet = pSheet->VecToSheetCoord( osg::Vec3d(xOSGGlobal,0,0),eCoord_OSGGlobal,this->GetID() ); + // int x0=vecSheet[0]; + + // CQtWellTrackNode *pWellNode = GetWellTrackNode(); + // if( !pWellNode ) return 0; + + // const sTrack& sTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrackInfo(m_pWellLog); + // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog ); + + // int nColumeIndex = sTrack.nBeginColumIndex; + // if( nColumeIndex<0 ) + // { + // return 0; + // } + // QList mchilds; + // pLogTrack->GetChildren(mchilds); + + // CellRange cellRange = sTrack.GetCellRange(); + // cellRange.nEndRow = cellRange.nBeginRow + mchilds.indexOf( m_pWellLog ) + 1 ; + // cellRange.nBeginRow = cellRange.nEndRow; + + // int nRowNumber = pWellNode->GetWellSheet().GetRowNumber(); + // QRectF rcF = pWellNode->GetWellSheet().GetCellRect( CellRange(nRowNumber-1,nRowNumber-1, + // sTrack.nBeginColumIndex,sTrack.nEndColumIndex)); + // if(rcF.width()==0) return 0; + // float val=0; + // if(IsWF) { + // if(mWaveMes.m_Right-mWaveMes.m_Left>0) val=(x0-rcF.left())*(mWaveMes.m_Right-mWaveMes.m_Left)/rcF.width()+mWaveMes.m_Left; + // else val=(rcF.width()-(x0-rcF.left()))*(mWaveMes.m_Left-mWaveMes.m_Right)/rcF.width()+mWaveMes.m_Right; + // } + // else { + // if(m_RightVal-m_LeftVal>0) val=(x0-rcF.left())*(m_RightVal-m_LeftVal)/rcF.width()+m_LeftVal; + // else val=(rcF.width()-(x0-rcF.left()))*(m_LeftVal-m_RightVal)/rcF.width()+m_RightVal; + // } + // return val; +} + +double CDrawBase::getXOSGGlobalFromPixel(double x) +{ + // if(!m_pSceneManager) return 0; + // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); + // if( pLogTrack ) + // { + // CObjWellTrack*m_pWellTrack = pLogTrack->GetWellTrack(); + // if(!m_pWellTrack) return 0; + // osg::Vec3d vecGeoNormal; + // m_pSceneManager->GetCoordinate()->ConvertCoordDouble( m_pWellTrack->GetID(),eCoord_OSGPixel,osg::Vec3d(x,0,0),eCoord_OSGGlobal,vecGeoNormal ); + // return vecGeoNormal[0]; + // } + return 0; +} + +void CDrawBase::ReadData() +{ + + //CMemRdWt mrw; + + //if (!mrw.Open(sFilePath.toStdString().c_str())) // 打开井文件 + // return; + + //iIndex = mrw.OpenWave(sName.toStdString().c_str());//("EP_S"); + //if(iIndex<0)return; + //objViewInfo->m_LogName = sName; + //mrw.GetWaveInfo(iIndex,&WaveInfo); + + //m_SDep = WaveInfo.StartDepth; + //m_EDep = WaveInfo.EndDepth; + //m_Rlev = WaveInfo.DepLevel; + //int m_nSamples = WaveInfo.TimeSamples; + //int m_flRlev2 = WaveInfo.TimeLevel; + //m_PointNum = (float)(fabs((m_EDep-m_SDep)/m_Rlev+0.5)); + //if(m_Value!=NULL) + // delete []m_Value; + +} +void CDrawBase::SaveData() +{ +} +void CDrawBase::InitProperty() +{ +} +void CDrawBase::GetProperty() +{ +} +void CDrawBase::Refurbish() +{ +} +void CDrawBase::DrawLith(QPainter *pDC,QPointF *pt,int nPoint,QBrush m_Colorbrush,QColor pColor,QColor bkColor) +{ + int x=15; + + unsigned char *tPixel=new unsigned char[16*16]; + + nHeight=x+1; + nWidth=x+1; + LITH_HEIGHT=x+1; + LITH_WIDTH=x+1; +// mScale=cx*cy; + + QImage MemDC(LITH_WIDTH,LITH_HEIGHT,QImage::Format_ARGB32); + QPainter pa1(&MemDC); + pa1.fillRect(QRectF(0,0,LITH_WIDTH,LITH_HEIGHT),m_Colorbrush); + JudgePixel(MemDC,bkColor,tPixel); + +// x=15/25.0*cy*cx; +// x=(int)(x/16.0)*16-1; +// if(x>4*16-1) x=4*14-1; + if(x<15) x=15; + x/=2; + nHeight=x+1; + nWidth=x+1; + LITH_HEIGHT=x+1; + LITH_WIDTH=x+1; + //mScale=cx*cy; + + unsigned char *bPixel = new unsigned char[LITH_WIDTH*LITH_HEIGHT]; + memset(bPixel,0,LITH_WIDTH*LITH_HEIGHT); + + QPointF *point = new QPointF[LITH_WIDTH*LITH_HEIGHT]; + for(int i=0;i15) ja=15; + int ib=i/scale; + if(ib>15) ib=15; + if(tPixel[ja*16+ib]) { + bPixel[j*LITH_WIDTH+i]=1; + } + } + } + delete []tPixel; + for (int j=0; jsave(); + QPen pen=pDC->pen(); + pen.setColor(crFore); + pen.setStyle(Qt::PenStyle::SolidLine); + pen.setWidth(penw); + pDC->setPen(pen); + + int i=0,j=0,k=0; + int y0=0,y1=0; // 扫描线的最大和最小y坐标 + LPEdge pAET=NULL; // 活化边表头指针 + LPEdge * pET=NULL; // 边表头指针 + + pAET=new Edge; // 初始化表头指针,第一个元素不用 + pAET->pNext=NULL; + // 获取y方向扫描线边界 + for(i=1;iy1) y1=lpPoints[i].y(); + } + if(y0>=y1) { + delete pAET; + pDC->restore(); + return; + } + // 初始化边表,第一个元素不用 + pET=new LPEdge[(y1-y0)/penw+1]; + for(i=0;i<=y1-y0;i+=penw) + { + pET[i/penw]= new Edge; + pET[i/penw]->pNext=NULL; + } + for(i=0;ilpPoints[j].y())?i:j; + peg->ymax=lpPoints[k].y(); // 该边最大y坐标 + k=(k==j)?i:j; + peg->x=(float)lpPoints[k].x(); // 该边与扫描线焦点x坐标 + peg->dx=(float)(lpPoints[i].x()-lpPoints[j].x())/(lpPoints[i].y()-lpPoints[j].y());// 该边斜率的倒数 + peg->pNext=NULL; + // 插入边 + ppeg=pET[(int)((lpPoints[k].y()-y0)/penw)]; + while(ppeg->pNext) ppeg=ppeg->pNext; + ppeg->pNext=peg; + }// end if + }// end for i + + // 扫描 + for(i=y0;i<=y1;i+=penw) + { + LPEdge peg0=pET[(i-y0)/penw]->pNext; + LPEdge peg1=pET[(i-y0)/penw]; + if(peg0)// 有新边加入 + { + while(peg1->pNext) peg1=peg1->pNext; + peg1->pNext=pAET->pNext; + pAET->pNext=peg0; + } + // 按照x递增排序pAET + peg0=pAET; + while(peg0->pNext) + { + LPEdge pegmax=peg0; + LPEdge peg1=peg0; + LPEdge pegi=NULL; + while(peg1->pNext) + { + if(peg1->pNext->x>pegmax->pNext->x) pegmax=peg1; + peg1=peg1->pNext; + } + pegi=pegmax->pNext; + pegmax->pNext=pegi->pNext; + pegi->pNext=pAET->pNext; + pAET->pNext=pegi; + if(peg0 == pAET) peg0=pegi; + } + // 遍历活边表,画线 + peg0=pAET; + while(peg0->pNext) + { + if(peg0->pNext->pNext) + { + LineFillLith(pDC,(int)peg0->pNext->x,(int)peg0->pNext->pNext->x,i/penw,penw,crFore,crBack,pixels,pointn,nWidth,nHeight); + peg0=peg0->pNext->pNext; + } + else + break; + } + // 把ymax=i的节点从活边表删除并把每个节点的x值递增dx + peg0=pAET; + while(peg0->pNext) + { + if(peg0->pNext->ymax < i+penw+1) + { + peg1=peg0->pNext; + peg0->pNext=peg0->pNext->pNext; //删除 + delete peg1; + continue; + } + peg0->pNext->x+=peg0->pNext->dx; //把每个节点的x值递增dx + peg0=peg0->pNext; + } + } + // 删除边表 + for(i=0;i<=y1-y0;i+=penw) if(pET[i/penw]) { + delete pET[i/penw]; + } + if(pAET) delete pAET; + if(pET) delete[] pET; + pDC->restore(); +} +void CDrawBase::FillLith(QPainter *pDC,QPointF *lpPoints,int nCount,QColor crFore,QColor crBack,QImage image,int x00,int y00) +{ + int penw = 1; + if(penw<0) penw=1; + // 检查参数合法性 + if(nCount<=2) return; + pDC->save(); + QPen pen=pDC->pen(); + pen.setColor(crFore); + pen.setStyle(Qt::PenStyle::SolidLine); + pen.setWidth(penw); + pDC->setPen(pen); + + int i=0,j=0,k=0; + int y0=0,y1=0; // 扫描线的最大和最小y坐标 + LPEdge pAET=NULL; // 活化边表头指针 + LPEdge * pET=NULL; // 边表头指针 + + pAET=new Edge; // 初始化表头指针,第一个元素不用 + pAET->pNext=NULL; + // 获取y方向扫描线边界 + for(i=1;iy1) y1=lpPoints[i].y(); + } + if(y0>=y1) { + delete pAET; + pDC->restore(); + return; + } + // 初始化边表,第一个元素不用 + pET=new LPEdge[(y1-y0)/penw+1]; + for(i=0;i<=y1-y0;i+=penw) + { + pET[i/penw]= new Edge; + pET[i/penw]->pNext=NULL; + } + for(i=0;ilpPoints[j].y())?i:j; + peg->ymax=lpPoints[k].y(); // 该边最大y坐标 + k=(k==j)?i:j; + peg->x=(float)lpPoints[k].x(); // 该边与扫描线焦点x坐标 + peg->dx=(float)(lpPoints[i].x()-lpPoints[j].x())/(lpPoints[i].y()-lpPoints[j].y());// 该边斜率的倒数 + peg->pNext=NULL; + // 插入边 + ppeg=pET[(int)((lpPoints[k].y()-y0)/penw)]; + while(ppeg->pNext) ppeg=ppeg->pNext; + ppeg->pNext=peg; + }// end if + }// end for i + + // 扫描 + for(i=y0;i<=y1;i+=penw) + { + LPEdge peg0=pET[(i-y0)/penw]->pNext; + LPEdge peg1=pET[(i-y0)/penw]; + if(peg0)// 有新边加入 + { + while(peg1->pNext) peg1=peg1->pNext; + peg1->pNext=pAET->pNext; + pAET->pNext=peg0; + } + // 按照x递增排序pAET + peg0=pAET; + while(peg0->pNext) + { + LPEdge pegmax=peg0; + LPEdge peg1=peg0; + LPEdge pegi=NULL; + while(peg1->pNext) + { + if(peg1->pNext->x>pegmax->pNext->x) pegmax=peg1; + peg1=peg1->pNext; + } + pegi=pegmax->pNext; + pegmax->pNext=pegi->pNext; + pegi->pNext=pAET->pNext; + pAET->pNext=pegi; + if(peg0 == pAET) peg0=pegi; + } + // 遍历活边表,画线 + peg0=pAET; + while(peg0->pNext) + { + if(peg0->pNext->pNext) + { + LineFillLith(pDC,(int)peg0->pNext->x,(int)peg0->pNext->pNext->x,i/penw,penw,crFore,crBack,image,x00,y00); + peg0=peg0->pNext->pNext; + } + else + break; + } + // 把ymax=i的节点从活边表删除并把每个节点的x值递增dx + peg0=pAET; + while(peg0->pNext) + { + if(peg0->pNext->ymax < i+penw+1) + { + peg1=peg0->pNext; + peg0->pNext=peg0->pNext->pNext; //删除 + delete peg1; + continue; + } + peg0->pNext->x+=peg0->pNext->dx; //把每个节点的x值递增dx + peg0=peg0->pNext; + } + } + // 删除边表 + for(i=0;i<=y1-y0;i+=penw) if(pET[i/penw]) { + delete pET[i/penw]; + } + if(pAET) delete pAET; + if(pET) delete[] pET; + pDC->restore(); +} + +void CDrawBase::LineFillLith(QPainter *hdc,int x1,int x2,int y,int ipen,QColor crFore,QColor crBack,QPointF *pixels,int *pointn,int nWidth,int nHeight) +{ + int iy,i,ix1,ix2,l1,l2,l3; + int x11; + bool bQuit = FALSE; + iy = y % nHeight; + if(iy<0) return; + l1 = x1 % nWidth; + l3 = x1 / nWidth; + l2 = nWidth; + int x0=l3*nWidth; + x11 = x0;//max width + int loop=0; + while ( 1 ) + { + if ( x11+nWidth > x2 ) l2 = x2-x11;//end pos + for(i=0;il2) break; + ix1=x11+pixels[iy*nWidth+i].x()*ipen; + ix2=x11+pixels[iy*nWidth+i].y()*ipen; +// if(ix1l2) ix2=l2; +// hdc->drawPoint(x11+ix1,y,ix2-ix1,1,crFore); +// ix2=x11+ix2*ipen; +// ix1=x11+ix1*ipen; + if(ix1x2) ix2=x2; + hdc->drawLine(ix1,y*ipen,ix2,y*ipen); + } + l1 = 0; + l3 ++;//new begin + loop++; + x11 = x0+loop*nWidth*ipen; + if ( x11 > x2) break; + } +} +void CDrawBase::LineFillLith(QPainter *hdc,int x1,int x2,int y,int ipen,QColor crFore,QColor crBack,QImage image,int x0,int y0) +{ + for(int i=x1;idrawPoint(i+x0,y+y0); + } + } + return; +} + +void CDrawBase::_Build() +{ + // m_IsDrawTrack=0; + // m_pWellLog = dynamic_cast(this->GetOSGObject()); + // CQtWellLogTrackNode::_Build(); + // m_pLogTrackViewinfo->SetDrawGrid(false); + // m_pWellSceneManager = dynamic_cast(m_pSceneManager); + + // if(!GetWellTrackNode()) + // return; + // //////读取数据 + // GetProperty(); + // if(m_pWellLog) { + // sName = m_pWellLog->GetName(); + // sFilePath = m_pWellLog->GetSlfFileName(); + // } + // /////////////////////// + // /// + // /// read data + // /// + // ReadData(); + + // int nLen = 0; + + // //////////////////////////////////////// + // //开始build wave部分 + // //道的最小最大值一样 + // m_pWellLogXScalTransform->boundingRect().setWidth(0); + // QGraphicsRectItem *sheetMatrix = GetWellTrackNode()->GetTextContainer(); + // if(hHeadObj) { + // hHeadObj->setParentItem(sheetMatrix); + // hHeadObj->setWellLog(m_pWellLog); + // } + // if(m_pLeftText)m_pLeftText->setParentItem(sheetMatrix); + // if(m_pRightText)m_pRightText->setParentItem(sheetMatrix); + // if(m_pCurveNameText)m_pCurveNameText->setParentItem(sheetMatrix); + // if(m_pUnitText)m_pUnitText->setParentItem(sheetMatrix); + // SettingHeaderElements(); + // if(m_pWave) { + // m_pWave->setWellLog(m_pWellLog); + // m_pWave->setFlag( QGraphicsItem::ItemClipsToShape,true); + // m_pWave->setParentItem(m_pHUDSwitch); + // m_pWave->m_pWellSceneManager=m_pWellSceneManager; + // } + // if(m_pWellSceneManager->GetTrackNodeByLogID(m_pWellLog->GetID())) + // { + // m_pWellLogTrack=dynamic_cast(m_pWellSceneManager->GetTrackNodeByLogID(m_pWellLog->GetID())->GetOSGObject()); + // } + + // SetXScaleTransform(); +} +// void CDrawBase::_Update( eUpdateEvent e,CObjectEventParam *pEventParam ) +// { +// GetProperty(); +// Refurbish(); +// CQtWellLogTrackNode::_Update(e,pEventParam); +// } +// void CDrawBase::SetWellSheet(CSheet* wellSheet) +// { +// m_pWellSheet = wellSheet; +// } + +// CQtWellTrackNode * CDrawBase::GetWellTrackNode() +// { +// m_pWellLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog); +// if( m_pWellLogTrack ) +// { +// QUuid wellTrackID = m_pWellLogTrack->GetWellTrack()->GetID(); +// return dynamic_cast( m_pSceneManager->GetBuilder( wellTrackID ) ); +// } +// return NULL; +// } +void CDrawBase::DrawCurve(QPainter* pdc,QRectF mrt) +{ +} + +void CDrawBase::_UpdateHUD() +{ + // CQtWellTrackNode *pWellNode = GetWellTrackNode(); + // if( !pWellNode ) return; + // const sTrack& sTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrackInfo(m_pWellLog); + // if(sTrack.nEndColumIndex<0) return; + // if(sTrack.nEndRowIndex<0) return; + // if(sTrack.nBeginRowIndex<0) return; + // int nColumeIndex = sTrack.nBeginColumIndex; + // if( nColumeIndex<0 ) + // { + // return; + // } + // CSheet *pSheet=m_pWellSceneManager->GetCurrentSheet(); + // QList mchilds; + // m_pWellLogTrack->GetChildren(mchilds); + + // CellRange cellRange = sTrack.GetCellRange(); + // cellRange.nEndRow = cellRange.nBeginRow + mchilds.indexOf( m_pWellLog ) + 1 ; + // cellRange.nBeginRow = cellRange.nEndRow; + + // QRectF headrcF = pWellNode->GetWellSheet().GetCellRect( cellRange ); + // int nRowNumber = pWellNode->GetWellSheet().GetRowNumber(); + + // QRectF rcGDIViewPort = m_pSceneManager->GetCameraCommand().GetViewPortSize( true,false,true ); + // CSheet &m_pWellSheet=pWellNode->GetWellSheet(); + // osg::Vec3d vec1,vec2,vec3,vec4,vec1_Sheet(rcGDIViewPort.x(),rcGDIViewPort.y(),0); + // m_pSceneManager->GetCoordinate()->ConvertCoordDouble(this->GetID(),eCoord_OSGPixel, osg::Vec3d(rcGDIViewPort.left(),rcGDIViewPort.top(),0), eCoord_OSGGlobal,vec1 ); + // m_pSceneManager->GetCoordinate()->ConvertCoordDouble(this->GetID(),eCoord_OSGPixel, osg::Vec3d(rcGDIViewPort.right(),rcGDIViewPort.top(),0), eCoord_OSGGlobal,vec2 ); + // QRectF rcF = m_pWellSheet.GetCellRect( CellRange(nRowNumber-1,nRowNumber-1,sTrack.nBeginColumIndex,sTrack.nEndColumIndex)); + // vec3 = m_pWellSheet.SheetCoordToVec(osg::Vec3d(rcF.left(),rcF.top(),0), eCoord_OSGGlobal,this->GetID()); + // vec4 = m_pWellSheet.SheetCoordToVec(osg::Vec3d(rcF.right(),rcF.top(),0), eCoord_OSGGlobal,this->GetID()); + // if(vec4[0]vec2[0]) return; + + // float dTopDepth = pWellNode->GetWellTrack()->GetTopWellLogDepth(); + // float dBottomDepth = pWellNode->GetWellTrack()->GetBottomWellLogDepth(); + // float dTopDepth1,dBottomDepth1; + // this->GetVisibleDepth(dTopDepth,dBottomDepth,dTopDepth1,dBottomDepth1); + // if(m_pLogCurveLines){//处理绘图范围 + // double yOSGMinTmp = pWellNode->ConvertY( eCoord_GEO, dTopDepth1 ,eCoord_GEONormal ); + // double yOSGMaxTmp = pWellNode->ConvertY( eCoord_GEO,dBottomDepth1, eCoord_GEONormal ); + // double yOSGMin = qMin( yOSGMinTmp,yOSGMaxTmp ); + // double yOSGMax = qMax( yOSGMinTmp,yOSGMaxTmp ); + // m_pLogCurveLines->Init(2,osg::Vec4f(0,0,1,1)); + // QVector vPoints; + // vPoints << QPointF( m_dOSGPropertyMin,yOSGMin ) + // << QPointF( m_dOSGPropertyMax,yOSGMax ); + // m_pLogCurveLines->SetPoints(vPoints); + // m_pLogCurveLines->setVisible(false); + // } + // double dMarginOSGPixelY = m_pSceneManager->GetCoordinate()->ConvertDeltaX( QUuid(),eCoord_GDICM,m_pWellSceneManager->FIXED_LOGHead_MARGIN_CM, eCoord_OSGPixel,true); + // if(m_pWellSceneManager->GetVecWindow()->GetWindowType()!=GetWindowTypeID_QtMultiWellSection())rcF.setY(rcGDIViewPort.y()-dMarginOSGPixelY);//修正高度 + // QMatrix cmpx=GetWellTrackNode()->GetSheetMatrix()->matrix(); + // int drawcurvetype=m_pWellSceneManager->GetCurveDrawType(); + // if(drawcurvetype==DRAWHEAD) { + // if(hHeadObj)hHeadObj->setRect(headrcF,headrcF); + // if(m_pWave) { + // rcF.setHeight(0); + // m_pWave->setRect(rcF); + // m_pWave->setMatrix(cmpx); + // } + // } + // else if(drawcurvetype==DRAWCURVE) { + // headrcF.setHeight(0); + // if(hHeadObj)hHeadObj->setRect(headrcF,headrcF); + // if(m_pWave) { + // m_pWave->setRect(rcF); + // m_pWave->setMatrix(cmpx); + // } + // } + // else { + // if(hHeadObj)hHeadObj->setRect(headrcF,headrcF); + // if(m_pWave) { + // m_pWave->setRect(rcF); + // m_pWave->setMatrix(cmpx); + // } + // } +} + +double CDrawBase::GetData(int RepCode,char *buffer) +{ + double yy; + if(!buffer) return 0; + switch(RepCode) + { + case REPR_INT: //0 + yy=(double)(*((int*)buffer)); + break; + case REPR_SHORT: //1 + yy=(double)(*((short *)buffer)); + break; + case REPR_LONG://2 + yy=(double)(*((long *)buffer)); + break; + case REPR_FLOAT://3 + yy=(double)(*((float *)buffer)); + break; + case REPR_DOUBLE://4 + yy=(double)(*((double *)buffer)); + break; + case REPR_CHAR://5 + yy=(double)(*((char *)buffer)); + break; + case REPR_UCHAR://6 + yy=(double)(*((unsigned char *)buffer)); + break; + case REPR_USHORT://7 + yy=(double)(*((unsigned short *)buffer)); + break; + case REPR_UINT://8 + yy=(double)(*((unsigned int *)buffer)); + break; + case REPR_ULONG://9 + yy=(double)(*((unsigned long *)buffer)); + break; + case REPR_STRING://10 + yy=-99999; + break; + } + return yy; +} +void CDrawBase::SetData(int RepCode,char *buffer,float yy) +{ + switch(RepCode) + { + case REPR_INT: //0 + (*((int*)buffer))=(int)yy; + break; + case REPR_SHORT: //1 + (*((short *)buffer))=(short)yy; + break; + case REPR_LONG://2 + (*((long *)buffer))=(long)yy; + break; + case REPR_FLOAT://3 + (*((float *)buffer))=yy; + break; + case REPR_DOUBLE://4 + (*((double *)buffer))=(double)yy; + break; + case REPR_CHAR://5 + (*((char *)buffer))=(char)yy; + break; + case REPR_UCHAR://6 + (*((unsigned char *)buffer))=(unsigned char)yy; + break; + case REPR_USHORT://7 + (*((unsigned short *)buffer))=(unsigned short)yy; + break; + case REPR_UINT://8 + (*((unsigned int *)buffer))=(unsigned int)yy; + break; + case REPR_ULONG://9 + (*((unsigned long *)buffer))=(unsigned long )yy; + break; + case REPR_STRING://10 +// *yy=-99999; + break; + } +} + +void CDrawBase::SettingHeaderElements() +{ + // if(m_pUnitText) m_pUnitText->setVisible(false); + // if(m_pCurveNameText)m_pCurveNameText->setVisible(false); + // if(m_pLeftText)m_pLeftText->setVisible(false); + // if(m_pRightText)m_pRightText->setVisible(false); +} +void CDrawBase::DrawHead(QPainter *pPainter,QRectF rt,QRectF trect) +{ + // CVecNodeBuilder::DrawHead(pPainter,rt,trect); + // if(!m_pWellSceneManager) return; + // CQtWellTrackNode *pWellNode = GetWellTrackNode(); + // if( !pWellNode ) return; + + // const sTrack& sTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrackInfo(m_pWellLog); + // CObjWellLogTrack *pLogTrack = m_pWellSceneManager->GetWellSectionGeomtry().GetLogTrack( m_pWellLog ); + + // int nColumeIndex = sTrack.nBeginColumIndex; + // if( nColumeIndex<0 ) + // { + // return; + // } + // CSheet *pSheet=m_pWellSceneManager->GetCurrentSheet(); + // double yTop_OSGPixel(0),xMin_OSGPixel(0),xMax_OSGPixel(0),yBottom_OSGPixel(0); + // CellRange cellRange = sTrack.GetCellRange(); + // QList mchilds; + // pLogTrack->GetChildren(mchilds); + + // cellRange.nEndRow = cellRange.nBeginRow + mchilds.indexOf( m_pWellLog ) + 1 ; + // cellRange.nBeginRow = cellRange.nEndRow; + + // QRectF rcF = pWellNode->GetWellSheet().GetCellRect( cellRange ); + // yTop_OSGPixel = rcF.top(); + // xMin_OSGPixel = rcF.left(); + // xMax_OSGPixel = rcF.right(); + // yBottom_OSGPixel = rcF.bottom(); + // float rowheight=45; + // if(m_pWellSceneManager->IsWellSectonHorizonLayout()) rowheight=m_pWellSceneManager->GetCoordinate()->ConvertDeltaX( QUuid(),eCoord_GDICM,DEFAULT_ROW_HEIGHT,eCoord_GDIPixel,true); + // else rowheight=m_pWellSceneManager->GetCoordinate()->ConvertDeltaY( QUuid(),eCoord_GDICM,DEFAULT_ROW_HEIGHT,eCoord_GDIPixel,true); + + // rowheight/=m_pSceneManager->GetZoomYRatio(); + // double dYOSGPixel = yTop_OSGPixel +rowheight; + // if(m_pLeftText) { + // m_pLeftText->SetPosition(pPainter, osg::Vec3d( xMin_OSGPixel+2,dYOSGPixel,0),Qt::AlignLeft |Qt::AlignBottom); //设置位置 + // } + // if(m_pRightText) { + // m_pRightText->SetPosition(pPainter, osg::Vec3d( xMax_OSGPixel-1,dYOSGPixel,0),Qt::AlignRight |Qt::AlignBottom);; + // } + // double cellcentre_y=yTop_OSGPixel+rowheight/4; + // if(m_pCurveNameText) { + // osg::Vec3d vTextPos = osg::Vec3d((xMin_OSGPixel+xMax_OSGPixel)/2.0,cellcentre_y,ZVALUE_HUDGeometry); + // if(IsSelected()) { + // QColor co=GetSelectedObjectColor(); + // m_pCurveNameText->SetColor(osg::Vec4f(co.red()/255.0,co.green()/255.0,co.blue()/255.0,co.alpha()/255.0));//co.red()/255.0,co.green()/255.0,co.blue()/255.0,co.alphaF()/255.0)); + // } + // m_pCurveNameText->SetText(sName); + // m_pCurveNameText->SetPosition(pPainter, vTextPos,Qt::AlignHCenter|Qt::AlignVCenter ); + // } + // dYOSGPixel = yTop_OSGPixel +rowheight*1/3+rowheight*1/4+rowheight*1/8; + // if(m_pUnitText) { + // m_pUnitText->SetText(sUnit); + // m_pUnitText->SetPosition(pPainter,osg::Vec3d((xMin_OSGPixel+xMax_OSGPixel)/2.0,dYOSGPixel,0),Qt::AlignHCenter|Qt::AlignVCenter); + // } + // m_pSelectedLine->setVisible(false); + // pPainter->save(); + // if(IsSelected()) { + // QPen pPen=pPainter->pen(); + // pPen.setColor(GetSelectedObjectColor()); + // pPen.setWidth(2); + // pPainter->setBrush(Qt::NoBrush); + // TranslateOSGLineStyleToQtPenStyle(pPen, DOTLINE ); + // pPainter->setPen(pPen); + // pPainter->drawRect(rt); + // } + // pPainter->restore(); +} +void CDrawBase::DrawClient(QPainter *pPainter,QRectF rt) +{ + // CVecNodeBuilder::DrawClient(pPainter,rt); +} + +void CDrawBase::GetClientItem(float sdep,float edep, QVector &lines) +{ + +} + +void CDrawBase::DrawSidelines(QPainter *pPainter,QRectF rt) +{ +} + +void CDrawBase::GetDepth(QPainter *pDC,QRectF &mrt,QRectF &rt,float &sdep,float &edep,float &sdepc,float &edepc) +{ + // CQtWellTrackNode *pWellNode = GetWellTrackNode(); + // if(!pWellNode) return; + // m_PlotSdep=pWellNode->GetOSGViewerTopDepth(); + // m_PlotEdep=pWellNode->GetOSGViewerBottomDepth(); + // sdep=pWellNode->m_curSdep; + // edep=pWellNode->m_curEdep; + sdepc=sdep; + edepc=edep; + rt = mrt; +} +//计算曲线位置 +float CDrawBase::ComputePosToCurveVal(float x,float lsc,float rsc,float lps,float rps,int iType,float scale,float flMin,float flMax) +{ + return 0; + // float flVal=0; + // flVal = lsc+(x-lps)/(rps-lps)*(rsc-lsc); + // if ( iType == LOGDepth ) + // { + // flVal = powf(10.0f,flVal); + // } + // // 截止值 + // if ( flVal > flMax ) flVal = flMax; + // if ( flVal < flMin ) flVal = flMin; + // return flVal; +} +//计算曲线位置 +float CDrawBase::ComputeCurvePos(float flVal,float lsc,float rsc,float lps,float rps,int iType,float scale,float flMin,float flMax) +{ + return 0; +// bool bFlag; +// float x; +// /* +// // 截止值 +// if ( flVal > flMax ) +// flVal = flMax; +// if ( flVal < flMin ) +// flVal = flMin; +// */ +// if ( iType == LOGDepth ) +// { +// bFlag = FALSE; +// if (flVal <= 0) +// bFlag = TRUE; +// else +// flVal = log10f(flVal); +// x = lps+(flVal-lsc)/scale; +// if (bFlag ) +// x = lps; +// } +// else +// { +// x = lps+(flVal-lsc)/scale; +// } +// if (x < flMin) { +// x = flMin; +// } +// if (x > flMax) { +// x = flMax; +// } +// return x; +} +float CDrawBase::ConvertY(eCoordType eInCoordType, double flDep, + eCoordType eOutCoordType ) +{ + return ConvertY(flDep); +} +// float CDrawBase::YConvertToGEO(float y) +// { +// CQtWellTrackNode *pWellNode = GetWellTrackNode(); +// if(!pWellNode) return -9999; +// CSheet& sheet = pWellNode->GetWellSheet(); +// osg::Vec3d vecSheet =sheet.SheetCoordToVec( osg::Vec3d( 1,y,0),eCoord_GEO,this->GetID() ); +// return vecSheet[1]; +// } +// float CDrawBase::XConvertToGEO(float x) +// { +// CQtWellTrackNode *pWellNode = GetWellTrackNode(); +// if(!pWellNode) return -9999; +// CSheet& sheet = pWellNode->GetWellSheet(); +// osg::Vec3d vecSheet =sheet.SheetCoordToVec( osg::Vec3d( x,1,0),eCoord_GEO,this->GetID() ); +// return vecSheet[0]; +// } +float CDrawBase::ConvertY(float fDep) +{ + return 0; + // CQtWellTrackNode *pWellNode = GetWellTrackNode(); + // if(!pWellNode) return -9999; + // CSheet& sheet = pWellNode->GetWellSheet(); + + // if(!m_pObjWell) { + // m_pObjWell=pWellNode->GetWellTrack()->GetWelllogRound()->GetWell(); + // if(!m_pObjWell) { + // m_pObjWell = dynamic_cast(GetProject()->GetObjectByID(pWellNode->GetWellTrack()->GetWellID())); + // if(!m_pObjWell) { + // CVecWindowDocument *pDoc=m_pSceneManager->GetDocument(); + // if(pDoc) { + // m_pObjWell=pDoc->GetCurrentWell(); + // pWellNode->GetWellTrack()->SetWelllogRound(m_pObjWell->GetCurrentObjWellRound()); + // } + // } + // } + // } + + + // if(m_pSceneManager->GetDrawType()==1&&m_pObjWell) { + // fDep=m_pObjWell->GetDZ(fDep); + // } + // else if(m_pSceneManager->GetDrawType()==2&&m_pObjWell) { + // fDep=m_pObjWell->GetDX(fDep); + // } + // else if(m_pSceneManager->GetDrawType()==3&&m_pObjWell){ + // fDep=m_pObjWell->GetDZ(fDep); + // } + // osg::Vec3d vecSheet = sheet.VecToSheetCoord( osg::Vec3d( 1,fDep,0),eCoord_GEO,this->GetID() ); + // osg::Vec3d vec=sheet.ToSheetCoord(vecSheet); + // m_pSceneManager->GetCoordinate()->ConvertCoordDouble(this->GetID(),eCoord_OSGGlobal,vec ,eCoord_GDIPixel,vecSheet ); + // if(IsXYSwap(eCoord_GEO,eCoord_GDIPixel)) return vecSheet[0]; + // else return vecSheet[1]; +} +double CDrawBase::GetDdep() +{ + return 0; + // CQtWellTrackNode *pWellNode = GetWellTrackNode(); + // if(!pWellNode) return 1; + // float m_Rlev=0.125; + // float y0=ConvertY0(pWellNode->m_curSdep); + // float y11=ConvertY0(pWellNode->m_curEdep); + // float pointn=(pWellNode->m_curEdep-pWellNode->m_curSdep)/m_Rlev; + // float ddep=(y11-y0)/pointn;//float ddep = 3.5625000; + // if(ddep==0) { + // y0=ConvertY( eCoord_GEO,pWellNode->m_curSdep,eCoord_GDIPixel ); + // y11=ConvertY( eCoord_GEO,pWellNode->m_curEdep,eCoord_GDIPixel ); + // ddep=(y11-y0)/pointn;//float ddep = 3.5625000; + // } + // double xScaleOld=1,yScaleOld=1; + // m_pSceneManager->GetCameraCommand().GetXYScale( xScaleOld,yScaleOld ); + // if(getFacter()) return ddep/=xScaleOld; + // else return ddep; +} +void CDrawBase::Destory() +{ + // if(hHeadObj&&hHeadObj->pFF!=(CDrawBase*)0xfeeefeeefeeefeee&&hHeadObj->pFF!=(CDrawBase*)0xdddddddddddddddd) { + // if(m_pLeftText){ + // m_pLeftText->setParentItem(NULL); + // delete m_pLeftText; + // m_pLeftText=NULL; + // } + // if(m_pRightText){ + // m_pRightText->setParentItem(NULL); + // delete m_pRightText; + // m_pRightText=NULL; + // } + // if(m_pCurveNameText){ + // m_pCurveNameText->setParentItem(NULL); + // delete m_pCurveNameText; + // m_pCurveNameText=NULL; + // } + // if(m_pUnitText) { + // m_pUnitText->setParentItem(NULL); + // delete m_pUnitText; + // m_pUnitText=NULL; + // } + // m_pWave->pFF=NULL; + // hHeadObj->setParentItem(NULL); + // delete hHeadObj; + // hHeadObj=NULL; + // } + // if(m_pWave&&m_pWave->pFF!=(CDrawBase*)0xfeeefeeefeeefeee&&m_pWave->pFF!=(CDrawBase*)0xdddddddddddddddd&&m_pWave->pFF!=(CDrawBase*)0xabababababababab) { + // m_pWave->pFF=NULL; + // m_pWave->setParentItem(NULL); + // delete m_pWave; + // m_pWave=NULL; + // } + // CQtWellLogTrackNode::Destory(); +} +END_OSGGRAPHICS_NAMESPACE diff --git a/DrawBase/src/DrawBase.pro b/DrawBase/src/DrawBase.pro new file mode 100644 index 0000000..9c06102 --- /dev/null +++ b/DrawBase/src/DrawBase.pro @@ -0,0 +1,47 @@ +TEMPLATE = lib +TARGET = DrawBase +DEFINES += DRAWBASE_LIB_EXPORT +QT += core \ + gui \ + opengl +INCLUDEPATH += ../../common \ +../include \ +../../../OSGParts/include \ +../../OSGFramework/include \ +../../../ConvertorManager/include\ +../../OSGDataModel/include\ +../../../DrawBase/include\ +../../../DataModel/include\ +../../Slfio/include\ +../../BaseFun/include +./GeneratedFiles + +HEADERS += ../include/*.h + +SOURCES += *.cpp + + + +OBJECTS_DIR = ../obj +CONFIG(debug, debug|release){ + DESTDIR = ../../Bin + TARGET = $$join(TARGET,,,d) #为debug版本生成的文件增加d的后缀 +} else { + DESTDIR = ../../Bin + TARGET = $$join(TARGET,,,) +} +CONFIG += qt warn_off \ + debug_and_release + +#CONFIG += uitools + +DEFINES += QT_DLL + +#CPATH = $$system(pwd) +# 目标文件夹 +#CATEGORY = OSGDataModel +CONFIG(debug, debug|release){ + LIBS += -L../../Bin -lslfiod +} else { + LIBS += -L../../Bin -lslfio +} diff --git a/common/geometryutils.cpp b/common/geometryutils.cpp index 03ec7f9..1588976 100644 --- a/common/geometryutils.cpp +++ b/common/geometryutils.cpp @@ -7,8 +7,10 @@ #include #include #include +#include #include "LogIO.h" +float mLineWidth=0.75; QString OilField; QString setdec(QString text,int dec,bool all) { @@ -1036,3 +1038,27 @@ QString GetOilSymbolDir(QString cs) { return GetSymbolDir()+"解释结论符号"+cs; } + +int GetLineWidth(QPainter * painter,int flWidth) +{ + float mScale=0.1; + // 线宽1=0.75磅 + float temp; + // 1磅 = 1/72英寸 + //if(painter->device()&&painter->device()->devType()==QInternal::Printer) + { + float dpi=painter->device()->logicalDpiX(); + if(!dpi) dpi=painter->device()->physicalDpiX(); + temp = flWidth*mLineWidth/72.*dpi;//GetZoomXRatio(); + //0.75 + } + /*else + { + temp=flWidth; + } + */ + if(flWidth==3&&abs(temp)<3) temp=3; + else if(flWidth==2&&abs(temp)<2) temp=2; + else if(abs(temp)<=1) temp=1; + return (int)temp; +} diff --git a/common/geometryutils.h b/common/geometryutils.h index 4a64a0a..b4fb561 100644 --- a/common/geometryutils.h +++ b/common/geometryutils.h @@ -228,6 +228,7 @@ QString GetMudSymbolDir(QString cs=QDir::separator()); QString GetOilSymbolDir(QString cs=QDir::separator()); QString GetLithSymbolDir(QString cs=QDir::separator()); QString GetGujingSymbolDir(QString cs=QDir::separator()); +int GetLineWidth(QPainter * painter,int flWidth); struct WellHead { diff --git a/logPlus/DrawTvd.cpp b/logPlus/DrawTvd.cpp new file mode 100644 index 0000000..770f32e --- /dev/null +++ b/logPlus/DrawTvd.cpp @@ -0,0 +1,2397 @@ +#pragma warning( push ,0) +#include +#include +#include +#include +#include +#include +#include "DrawBase.h" +//#include "VecSceneManager.h" +//#include "WellSectionWindowDocument.h" +#include "memrdwt.h" +#include "GeometryUtils.h" +#include "DrawTvd.h" +#pragma warning( pop ) + +//BEGIN_OSGGRAPHICS_NAMESPACE; + +CDrawTvd::CDrawTvd(void) +{ +// m_NODETYPE=TVDTYPE; + //Tvd + m_Lscx=NULL; + m_PointNum=0; + //Tvd + m_PointNum=0; + m_nVertRatio=1.0; + m_DepthScale=20; + m_nHoriRatio=1; + objViewInfo=NULL; + sFilePath=""; + //属性信息 + m_pViewInfo = new CViewInfo(); + objViewInfo = m_pViewInfo; + GetProperty(); + + for(int i=0;i<5;i++) + { + IsVert[i]=0; + vFormat[i]=CENTER; + } + ShowHComb=0; + ShowVComb=0; + ShowVertCheck=0; + for(int i=0;i<5;i++) + { + IsVert[i]=0;//字符串方向是否垂直(1) + hFormat[i]=CENTER; + vFormat[i]=CENTER;//水平、垂直对齐方式 + } + //xscale=1.; + //yscale=1.; + /* m_Title_table="井连续井斜仪测量数据表"; + m_Title_cst="井井眼侧视图"; + m_Title_fst="井井眼俯视图"; + m_Title_ltgj="井井身立体空间轨迹图";*/ + m_TableName="LSCX_DATA"; + // SetName("LSCX_DATA"); + m_Bottom=1.; + m_Left=1.; + m_Right=1.; + m_Top=1.; + m_Width=16;//30.; + m_Height=16;//300.; + Xmax=-9999.; + Xmin=9999.; + Ymax=-9999.; + Ymin=9999.; + + QString ConfigName = ::GetConfPath()+"TvdTable.ini"; + QFile file(ConfigName); + TPar.ZdNum=0; + if(file.open(QIODevice::ReadOnly )) + { + QTextStream textstream( &file ); + while(!textstream.atEnd()) + { + QString line = textstream.readLine(); + TPar.ZdNum=line.toInt(); + if(TPar.ZdNum<=0||TPar.ZdNum>12) + { + TPar.ZdNum=0; + file.close(); + break; + } + line = textstream.readLine(); + for(int i=0;iReadData(); + +} + +void CDrawTvd::ReadData() +{ + if(sFilePath.isEmpty()) return; + if(sFilePath.indexOf("@")>-1) + { + int ind=sFilePath.indexOf("@"); + m_TableName = sFilePath.left(ind); + //if(m_pWellLog)m_pWellLog->SetName(m_TableName); + sFilePath=sFilePath.mid(ind+1); + } + if(m_Lscx) { + delete [] m_Lscx; + m_Lscx=NULL; + m_PointNum=0; + } + CMemRdWt mrw; + QString filename=sFilePath; + if(m_TableName=="AC"|| m_TableName=="") m_TableName="LSCX_DATA"; + if ( mrw.Open(filename.toStdString().c_str(),CSlfIO::modeRead) ) // 打开井文件 + { + int index=mrw.OpenTable(m_TableName.toStdString().c_str()); + if(index>=0) + { + m_PointNum=mrw.GetTableRecordCount(index); + m_Lscx=new LSCX_DATA[m_PointNum+1]; + Xmax=-999999.; + Xmin=999999.; + Ymax=-999999.; + Ymin=999999.; + float tmax=0.;//水平位移 + float tvdmax=-999999; + float tvdmin=999999; + for(int i=0;i=div/10.&&max0) + Xmax=((int)(Xmax/div)+1)*div; + else Xmax=((int)(Xmax/div))*div; + if(Ymax>0) + Ymax=((int)(Ymax/div)+1)*div; + else Ymax=((int)(Ymax/div))*div; + if(Xmin>0) + Xmin=((int)(Xmin/div))*div; + else Xmin=((int)(Xmin/div)-1)*div; + if(Ymin>0) + Ymin=((int)(Ymin/div))*div; + else Ymin=((int)(Ymin/div)-1)*div; + if(Xmax>0&&Xmin>0)Xmin=0; + if(Ymax>0&&Ymin>0)Ymin=0; + if(Xmax<0&&Xmin<0)Xmax=0; + if(Ymax<0&&Ymin<0)Ymax=0; + delt=div; + //設置图件属性 +/* + + + if(objViewInfo->m_MinXe==-100.)objViewInfo->m_MinXe=Xmin; + if(objViewInfo->m_MaxXe==100.)objViewInfo->m_MaxXe=Xmax; + if(objViewInfo->m_MinYn==-100.)objViewInfo->m_MinYn=Ymin; + if(objViewInfo->m_MaxYn==100)objViewInfo->m_MaxYn=Ymax; +*/ + FPar.MinXe=objViewInfo->m_MinXe; + FPar.MaxXe=objViewInfo->m_MaxXe; + FPar.MinYn=objViewInfo->m_MinYn; + FPar.MaxYn=objViewInfo->m_MaxYn; +/* + if(objViewInfo->m_MaxWy==100)objViewInfo->m_MaxWy=Xmax; + if(objViewInfo->m_MinWy==-100)objViewInfo->m_MinWy=-Xmax; + if(objViewInfo->m_MaxTVD==10000)objViewInfo->m_MaxTVD=tvdmax; + if(objViewInfo->m_MinTVD==0)objViewInfo->m_MinTVD=tvdmin; +*/ + CPar.MaxWys=tmax; + CPar.MaxWy=objViewInfo->m_MaxWy; + CPar.MinWy=objViewInfo->m_MinWy; + CPar.MaxTVD=objViewInfo->m_MaxTVD; + CPar.MinTVD=objViewInfo->m_MinTVD; +/* + if(objViewInfo->m_MaxWy_HOFF==100)objViewInfo->m_MaxWy_HOFF=Xmax; + if(objViewInfo->m_MinWy_HOFF==-100)objViewInfo->m_MinWy_HOFF=-Xmax; + if(objViewInfo->m_MaxTVD_HOFF==10000)objViewInfo->m_MaxTVD_HOFF=tvdmax; + if(objViewInfo->m_MinTVD_HOFF==0)objViewInfo->m_MinTVD_HOFF=tvdmin; +*/ + CPar_HOFF.MaxWys=tmax; + CPar_HOFF.MaxWy=objViewInfo->m_MaxWy_HOFF; + CPar_HOFF.MinWy=objViewInfo->m_MinWy_HOFF; + CPar_HOFF.MaxTVD=objViewInfo->m_MaxTVD_HOFF; + CPar_HOFF.MinTVD=objViewInfo->m_MinTVD_HOFF; + +// CPar_HOFF=CPar; +/* + if(objViewInfo->m_MaxWy_YN==100)objViewInfo->m_MaxWy_YN=Xmax; + if(objViewInfo->m_MinWy_YN==-100)objViewInfo->m_MinWy_YN=-Xmax; + if(objViewInfo->m_MaxTVD_YN==10000)objViewInfo->m_MaxTVD_YN=tvdmax; + if(objViewInfo->m_MinTVD_YN==0)objViewInfo->m_MinTVD_YN=tvdmin; +*/ + CPar_YN.MaxWys=tmax; + CPar_YN.MaxWy=objViewInfo->m_MaxWy_YN; + CPar_YN.MinWy=objViewInfo->m_MinWy_YN; + CPar_YN.MaxTVD=objViewInfo->m_MaxTVD_YN; + CPar_YN.MinTVD=objViewInfo->m_MinTVD_YN; +// CPar_YN=CPar; + +// if(objViewInfo->m_MaxWy_XE==100)objViewInfo->m_MaxWy_XE=Xmax; +// if(objViewInfo->m_MinWy_XE==-100)objViewInfo->m_MinWy_XE=-Xmax; +// if(objViewInfo->m_MaxTVD_XE==10000)objViewInfo->m_MaxTVD_XE=tvdmax; +// if(objViewInfo->m_MinTVD_XE==0)objViewInfo->m_MinTVD_XE=tvdmin; + + CPar_XE.MaxWys=tmax; + CPar_XE.MaxWy=objViewInfo->m_MaxWy_XE; + CPar_XE.MinWy=objViewInfo->m_MinWy_XE; + CPar_XE.MaxTVD=objViewInfo->m_MaxTVD_XE; + CPar_XE.MinTVD=objViewInfo->m_MinTVD_XE; + LPar.MaxWy=objViewInfo->m_MaxWy1; + //更新可视化参数 + } + //读靶心信息表 + int index_Tvd=mrw.OpenTable("TVD_BXINF"); + Tvd_BxInf.BxNum=0; + if(index_Tvd>=0) + { + int FieldCount=mrw.GetTableFieldCount(index_Tvd); + if(FieldCount==14) + { + Tvd_BxInf.BxNum=mrw.GetTableRecordCount(index_Tvd); + for(int i=0;i(m_pViewInfo); + //Tvd + // objViewInfo->m_TableName=m_TableName; + objViewInfo->m_AliasName=m_AliasName; + objViewInfo->m_IsDrawBxcs=m_IsDrawBxcs; + objViewInfo->m_IsDrawTable=m_IsDrawTable; + objViewInfo->m_IsDrawFst=m_IsDrawFst; + objViewInfo->m_IsDrawCst=m_IsDrawCst; + objViewInfo->m_IsDrawLtgjt=m_IsDrawLtgjt; + objViewInfo->m_AliasWellName=m_AliasWellName; + objViewInfo->m_XScale=xscale; + objViewInfo->m_YScale=yscale; + // 5-边框,格线,轨迹线,靶心半径,靶心连线的宽度、类型和颜色 + objViewInfo->m_FrameWidth=m_FrameWidth; + objViewInfo->m_FrameColor=m_FrameColor; + objViewInfo->m_GridWidth=m_GridWidth; + objViewInfo->m_GridColor=m_GridColor; + objViewInfo->m_GuijiWidth=m_GuijiWidth; + objViewInfo->m_GuijiColor=m_GuijiColor; + objViewInfo->m_BxbjWidth=m_BxbjWidth; + objViewInfo->m_BxbjColor=m_BxbjColor; + objViewInfo->m_BxlxWidth=m_BxlxWidth; + objViewInfo->m_BxlxColor=m_BxlxColor; + //道头(井眼轨迹)、标题(三图一表的标题)、数据表、刻度、注释的字体属性 + objViewInfo->m_HeadColor=m_HeadColor; + objViewInfo->m_HeadFont=m_HeadFont; + objViewInfo->m_TitleColor=m_TitleColor; + objViewInfo->m_TitleFont=m_TitleFont; + objViewInfo->m_TableColor=m_TableColor; + objViewInfo->m_TableFont=m_TableFont; + objViewInfo->m_ScaleColor=m_ScaleColor; + objViewInfo->m_ScaleFont=m_ScaleFont; + objViewInfo->m_NoteColor=m_NoteColor; + objViewInfo->m_NoteFont=m_NoteFont; + //井斜数据表参数 + objViewInfo->m_Title_table=m_Title_table; + objViewInfo->m_Head_Height=TPar.Head_Height; + objViewInfo->m_Rec_Height=TPar.Rec_Height; + objViewInfo->m_Title_fst=m_Title_fst; + objViewInfo->m_MinXe=FPar.MinXe; + objViewInfo->m_MaxXe=FPar.MaxXe; + objViewInfo->m_MinYn=FPar.MinYn; + objViewInfo->m_MaxYn=FPar.MaxYn; + objViewInfo->m_bPlotBhx=m_bPlotBhx; + objViewInfo->m_Title_cst=m_Title_cst; + objViewInfo->m_CsAngle=CPar.CsAngle; + + objViewInfo->m_MaxWy=CPar.MaxWy; + objViewInfo->m_MinWy=CPar.MinWy; + objViewInfo->m_MaxTVD=CPar.MaxTVD; + objViewInfo->m_MinTVD=CPar.MinTVD; + + objViewInfo->m_MaxWy_HOFF=CPar_HOFF.MaxWy; + objViewInfo->m_MinWy_HOFF=CPar_HOFF.MinWy; + objViewInfo->m_MaxTVD_HOFF=CPar_HOFF.MaxTVD; + objViewInfo->m_MinTVD_HOFF=CPar_HOFF.MinTVD; + + objViewInfo->m_MaxWy_XE=CPar_XE.MaxWy; + objViewInfo->m_MinWy_XE=CPar_XE.MinWy; + objViewInfo->m_MaxTVD_XE=CPar_XE.MaxTVD; + objViewInfo->m_MinTVD_XE=CPar_XE.MinTVD; + + objViewInfo->m_MaxWy_YN=CPar_YN.MaxWy; + objViewInfo->m_MinWy_YN=CPar_YN.MinWy; + objViewInfo->m_MaxTVD_YN=CPar_YN.MaxTVD; + objViewInfo->m_MinTVD_YN=CPar_YN.MinTVD; + + objViewInfo->m_DepSpace=CPar.DepSpace; + objViewInfo->m_Title_ltgj=m_Title_ltgj; + objViewInfo->m_MaxWy1=LPar.MaxWy; + objViewInfo->m_DepSpace1=LPar.DepSpace; + objViewInfo->m_LttAngle=LPar.CsAngle; + //Tvd +} +void CDrawTvd::GetProperty() +{ + objViewInfo = dynamic_cast(m_pViewInfo); + if(objViewInfo) + { + //Tvd + sFilePath=objViewInfo->m_WellName; + if(sFilePath.indexOf("@")>-1) + { + int ind=sFilePath.indexOf("@"); + m_TableName = sFilePath.left(ind); + if(m_TableName=="AC") m_TableName="LSCX_DATA"; + sFilePath=sFilePath.mid(ind+1); + objViewInfo->m_WellName=m_TableName+"@"+sFilePath; + } + // m_TableName=objViewInfo->m_TableName; + m_AliasName=objViewInfo->m_AliasName; + m_IsDrawBxcs=objViewInfo->m_IsDrawBxcs; + m_IsDrawTable=objViewInfo->m_IsDrawTable; + m_IsDrawFst=objViewInfo->m_IsDrawFst; + m_IsDrawCst=objViewInfo->m_IsDrawCst; + m_IsDrawLtgjt=objViewInfo->m_IsDrawLtgjt; + xscale=objViewInfo->m_XScale; + yscale=objViewInfo->m_YScale; + m_AliasWellName=objViewInfo->m_AliasWellName; +// if(m_AliasWellName==""&&m_pWellLog) +// { +// CObjWell *well=m_pWellLog->GetWell(); +// m_AliasWellName=well->GetName(); +// objViewInfo->m_AliasWellName=m_AliasWellName; +// } + // 6-边框,格线,轨迹线,靶心半径,靶心连线的宽度、类型和颜色 + m_FrameWidth=objViewInfo->m_FrameWidth; + m_GridWidth=objViewInfo->m_GridWidth; + m_GuijiWidth=objViewInfo->m_GuijiWidth; + m_BxbjWidth=objViewInfo->m_BxbjWidth; + m_BxlxWidth=objViewInfo->m_BxlxWidth; + + m_FrameColor=objViewInfo->m_FrameColor; + m_GridColor=objViewInfo->m_GridColor; + m_GuijiColor=objViewInfo->m_GuijiColor; + m_BxbjColor=objViewInfo->m_BxbjColor; + m_BxlxColor=objViewInfo->m_BxlxColor; + //道头(井眼轨迹)、标题(三图一表的标题)、数据表、刻度、注释的字体属性 + m_HeadColor=objViewInfo->m_HeadColor; + m_HeadFont=objViewInfo->m_HeadFont; + m_TitleColor=objViewInfo->m_TitleColor; + m_TitleFont=objViewInfo->m_TitleFont; + m_TableColor=objViewInfo->m_TableColor; + m_TableFont=objViewInfo->m_TableFont; + m_ScaleColor=objViewInfo->m_ScaleColor; + m_ScaleFont=objViewInfo->m_ScaleFont; + m_NoteColor=objViewInfo->m_NoteColor; + m_NoteFont=objViewInfo->m_NoteFont; + + //井斜数据表参数 + m_Title_table=objViewInfo->m_Title_table; + TPar.Head_Height=objViewInfo->m_Head_Height; + TPar.Rec_Height=objViewInfo->m_Rec_Height; + m_Title_fst=objViewInfo->m_Title_fst; + FPar.MinXe=objViewInfo->m_MinXe; + FPar.MaxXe=objViewInfo->m_MaxXe; + FPar.MinYn=objViewInfo->m_MinYn; + FPar.MaxYn=objViewInfo->m_MaxYn; + m_bPlotBhx=objViewInfo->m_bPlotBhx; + + m_Title_cst=objViewInfo->m_Title_cst; + + CPar.CsAngle=objViewInfo->m_CsAngle; + + CPar.MaxWy=objViewInfo->m_MaxWy; + CPar.MinWy=objViewInfo->m_MinWy; + CPar.MaxTVD=objViewInfo->m_MaxTVD; + CPar.MinTVD=objViewInfo->m_MinTVD; + + CPar_HOFF.MaxWy=objViewInfo->m_MaxWy_HOFF; + CPar_HOFF.MinWy=objViewInfo->m_MinWy_HOFF; + CPar_HOFF.MaxTVD=objViewInfo->m_MaxTVD_HOFF; + CPar_HOFF.MinTVD=objViewInfo->m_MinTVD_HOFF; + + CPar_XE.MaxWy=objViewInfo->m_MaxWy_XE; + CPar_XE.MinWy=objViewInfo->m_MinWy_XE; + CPar_XE.MaxTVD=objViewInfo->m_MaxTVD_XE; + CPar_XE.MinTVD=objViewInfo->m_MinTVD_XE; + + CPar_YN.MaxWy=objViewInfo->m_MaxWy_YN; + CPar_YN.MinWy=objViewInfo->m_MinWy_YN; + CPar_YN.MaxTVD=objViewInfo->m_MaxTVD_YN; + CPar_YN.MinTVD=objViewInfo->m_MinTVD_YN; + + CPar.DepSpace=objViewInfo->m_DepSpace; + CPar_HOFF.DepSpace=objViewInfo->m_DepSpace; + CPar_XE.DepSpace=objViewInfo->m_DepSpace; + CPar_YN.DepSpace=objViewInfo->m_DepSpace; + + m_Title_ltgj=objViewInfo->m_Title_ltgj; + + LPar.MaxWy=objViewInfo->m_MaxWy1; + LPar.DepSpace=objViewInfo->m_DepSpace1; + LPar.CsAngle=objViewInfo->m_LttAngle; + //Tvd + sName=objViewInfo->m_sName; + sFilePath=objViewInfo->m_WellName; +// if(sFilePath.isEmpty()) +// { +// sFilePath = m_pWellLog->GetSlfFileName(); +// if(m_pWellLog->GetName()=="AC"||m_pWellLog->GetName()=="") +// { +// m_pWellLog->SetName(m_TableName); +// } +// objViewInfo->m_WellName=sFilePath; +// if(!sFilePath.isEmpty())Refurbish(); +// } + } +} + + +void CDrawTvd::DrawHead(QPainter *pdc,QRectF rt,QRectF trect) +{ +// if(!m_pWellSceneManager) return; +// if(objViewInfo&&!objViewInfo->m_DrawBox()) return; +// CDrawBase::DrawHead(pdc,rt,trect); +// if(m_pWellSceneManager->GetIsColorPrint()) pdc->setPen(m_HeadColor); +// else pdc->setPen(QColor(0,0,0)); +// pdc->setFont(m_pWellSceneManager->GetZoomedFont(m_HeadFont)); +// pdc->drawText(rt,Qt::AlignCenter |Qt::AlignTop,m_AliasWellName+m_AliasName);//for tvd sName); +// if(!(pdc->device()&&(pdc->device()->devType()==QInternal::Printer|| +// pdc->device()->devType()==QInternal::Image) +// )&&IsSelected()) +// { +// pdc->setPen(selectPen); +// pdc->setBrush(Qt::NoBrush); +// QRectF rtt=rt; +// rtt.adjust(2,1,-2,-2); +// pdc->drawRect(rtt); +// } +} +/** +* @brief 绘制曲线体 +*/ +void CDrawTvd::DrawSidelines(QPainter* pdc,QRectF mrt) +{ +} +void CDrawTvd::DrawClient(QPainter* pdc,QRectF mrt) +{ +// if(m_pWellSceneManager->GetCurveDrawType()==DRAWHEAD) +// { +// DrawHead(pdc,mrt); +// return; +// } + DrawTvd(pdc,mrt); +} + +double GetPixelPerCm() +{ + double g_logicalDpi; + double g_dPixelPerCm = 1;//每厘米像素数 + + // 获取当前屏幕 + QScreen *screen = QGuiApplication::primaryScreen(); + if (screen) { + // 获取逻辑DPI + g_logicalDpi = screen->logicalDotsPerInch(); + qDebug() << "Logical DPI:" << QString::number(g_logicalDpi); + + if(g_logicalDpi==0) + { + // 获取物理DPI + double physicalDpi = screen->physicalDotsPerInch(); + qDebug() << "Physical DPI:" << QString::number(physicalDpi); + g_logicalDpi = physicalDpi; + } + + //每厘米像素数 + g_dPixelPerCm = g_logicalDpi/2.54; + } else { + qDebug() << "No screen available"; + } + return g_dPixelPerCm; +} + +void CDrawTvd::DrawTvd(QPainter* pDC,QRectF mrt) +{ +// CQtWellTrackNode *pWellNode = GetWellTrackNode(); +// if(!pWellNode) return ; + float sdep,edep,sdepc,edepc; + int y_Start=mrt.top(); + static int first=0; + static float h=0; + +// QRectF rt;//=mrt; + // GetDepth(NULL,mrt,rt,sdep,edep,sdepc,edepc); +// sdepc=pWellNode->m_curSdep; +// edepc=pWellNode->m_curEdep; + +// int vsrc=m_pWellSceneManager->GetVecViwer()->GetVScroll()->value(); +// if(m_pWellSceneManager->IsWellSectonFixHeader()){ +// y_Start=-vsrc; +// } +// else { +// if(y_Start==0) { +// if(pDC->device()->devType()==QInternal::Image||pDC->device()->devType()==QInternal::Printer) { +// float a=m_pWellSceneManager->GetVecViwer()->GetPageHeight()*GetPixelPerCm(); +// int temp=vsrc/a+0.0001; +// temp*=a; +// if(tempIsWellSectonHorizonLayout(); +// float y1=ConvertY( eCoord_GEO,pWellNode->m_curSdep,eCoord_GDIPixel ); +// CWellSectionWindowDocument *pDoc=dynamic_cast(m_pWellSceneManager->GetDocument()); +// if(pDoc) { +// if(m_pWellSceneManager->IsWellSectonFixHeader()){ +// y_Start+=pDoc->GetHeadHeight()+pDoc->GetCurveHeadHeight(); +// } +// else { +// // y_Start+=pDoc->GetHeadHeight(); +// } +// } + +// if(pDC->device()&&(pDC->device()->devType()==QInternal::Printer||pDC->device()->devType()==QInternal::Image)) +// { +// if(y1&&h==0) { +// first=0; +// h=y1; +// } +// else first=1; +// if(first){ +// y_Start+=h; +// } +// } +// else h=0; + + m_Width=mrt.width()/GetPixelPerCm()-3; + m_Height=mrt.width()/GetPixelPerCm()-3; + sdep=m_SDep; + edep=m_EDep; + + sdepc=m_SDep; + edepc=m_EDep; + int fbl=1; + //if(!m_Lscx||m_PointNum<=0) + { + ReadData(); + if(!m_Lscx||m_PointNum<=0)return; + } + xfactor=xscale*m_nHoriRatio; + yfactor=yscale*m_nVertRatio; + +// TableFont=m_pWellSceneManager->GetZoomedFont(m_TableFont); +// ScaleFont=m_pWellSceneManager->GetZoomedFont(m_ScaleFont); +// NoteFont=m_pWellSceneManager->GetZoomedFont(m_NoteFont); +// TitleFont=m_pWellSceneManager->GetZoomedFont(m_TitleFont); + m_FstPlotBx=objViewInfo->m_IsDrawBX; + m_CstPlotBx=m_FstPlotBx; + m_LtgjtPlotBx=m_FstPlotBx; + m_PlotBxlx=m_FstPlotBx; + + QFontMetrics fm1(TableFont); + QFontMetrics fm2(ScaleFont); + QFontMetrics fm3(NoteFont); + QFontMetrics fm4(TitleFont); + + TableFontWidth=fm1.height()/2.0; + ScaleFontWidth=ScaleFontHeight=fm2.height()/2.0; + + NoteFontWidth=NoteFontHeight=fm3.height()/2.0; + + TitleFontWidth=TitleFontHeight=fm4.height()/2.0; + + XCenter=mrt.left()+m_Left*100.+(mrt.width()-(m_Left+m_Right)*100.)/2.; + if(1) { + //if(m_pWellSceneManager->GetIsColorPrint()) { + m_GuiJiPen=QPen(m_GuijiColor,m_GuijiWidth*(int)(fbl/2.+0.5)); + m_FramePen=QPen(m_FrameColor,m_FrameWidth*(int)(fbl/2.+0.5));; + m_GridPen=QPen(m_GridColor,m_GridWidth*(int)(fbl/2.+0.5));; + m_BxbjPen=QPen(m_BxbjColor,m_BxbjWidth*(int)(fbl/2.+0.5));; + m_BxlxPen=QPen(m_BxlxColor,m_BxlxWidth*(int)(fbl/2.+0.5)); + m_ScBxPointMessage.Color=qRgb(255,0,0); + m_SjBxPointMessage.Color=qRgb(255,0,0); + } + else { + m_GuiJiPen=QPen(QColor(0,0,0),m_GuijiWidth*(int)(fbl/2.+0.5)); + m_FramePen=QPen(QColor(0,0,0),m_FrameWidth*(int)(fbl/2.+0.5));; + m_GridPen=QPen(QColor(0,0,0),m_GridWidth*(int)(fbl/2.+0.5));; + m_BxbjPen=QPen(QColor(0,0,0),m_BxbjWidth*(int)(fbl/2.+0.5));; + m_BxlxPen=QPen(QColor(0,0,0),m_BxlxWidth*(int)(fbl/2.+0.5));; + m_ScBxPointMessage.Color=qRgb(0,0,0); + m_SjBxPointMessage.Color=qRgb(0,0,0); + } + if(objViewInfo->m_IsDrawProperty) + { + if(!rgbList.size()){ + rgbList.append(QRgb(4294967295)); + rgbList.append(QRgb(4294966617)); + rgbList.append(QRgb(4294944512)); + rgbList.append(QRgb(4293345792)); + rgbList.append(QRgb(4288741473)); + rgbList.append(QRgb(4278190080)); + +// PaiColorTableData *m_pColorTable=new PaiColorTableData("Color Scheme",true); +// m_pColorTable->LoadScheme(); +// m_pColorTable->SetCurrentSchemeIndex(objViewInfo->m_ColorTableIndex()); +// m_pColorTable->ChangeColorNum(256); +// rgbList=m_pColorTable->GetRgb(); +// delete m_pColorTable; + } + } + int j=0; + float y_Start1=0, + y_Start2=0, + y_Start3=0, + y_Start4=0, + y_Start5=0, + y_Start6=0, + y_Start7=0, + y_Start8=0; + m_IsDrawCst1=objViewInfo->m_IsDrawCst1; + m_IsDrawCst2=objViewInfo->m_IsDrawCst2; + m_IsDrawCst3=objViewInfo->m_IsDrawCst3; + if(m_IsDrawFst) + { + y_Start1=DrawFst(y_Start, pDC,mrt);//井眼俯视图 + } + else y_Start1=y_Start; + if(m_IsDrawCst1) + { + CPar_HOFF.CsAngle=0; + y_Start2=DrawCst(y_Start1, pDC,mrt,CPar_HOFF,0);//侧视图-最大位移 + } + else y_Start2=y_Start1; + if(m_IsDrawCst2){ + CPar_XE.CsAngle=90; + y_Start3=DrawCst(y_Start2, pDC,mrt,CPar_XE,1);//侧视图-XE向东 + } + else y_Start3=y_Start2; + if(m_IsDrawCst3){ + CPar_YN.CsAngle=0; + y_Start4=DrawCst(y_Start3, pDC,mrt,CPar_YN,2);//侧视图-YN向北 + } + else y_Start4=y_Start3; + if(m_IsDrawCst){ + CPar.CsAngle=90; + y_Start5=DrawCst(y_Start4, pDC,mrt,CPar);//侧视图-90度 + } + + else y_Start5=y_Start4; + if(m_IsDrawLtgjt){ + y_Start6=DrawLtgjt(y_Start5, pDC,mrt);//立体图 + } + else y_Start6=y_Start5; + if(m_IsDrawBxcs){ + y_Start7=DrawBxcs(y_Start6, pDC,mrt);//补心参数表 + } + else y_Start7=y_Start6; + if(m_IsDrawTable){ + y_Start8=DrawTable(y_Start7, pDC,mrt);//轨迹参数表 + } + else y_Start8=y_Start7; + pDC->drawLine(XCenter-10,y_Start8+GetLineWidth(pDC,5.0f),XCenter+2,y_Start8+GetLineWidth(pDC,5.0f)); +} + +int CDrawTvd::DrawTable(int y_Start, QPainter* pDC,QRectF mrt) +{ + CMemRdWt MemRdWt(sFilePath.toStdString().c_str()); + + struct INC_STRU INC={6,"TVDD XE YN HOFS HOAZ TVD"}; + struct INP_STRU INP; + struct CONC_STRU CONC={0}; + struct HD_STRU HD={0,0,0,0,0,0,0,"JxProcess.inp","JxProcess.tpl"}; + struct CON_STRU CON={-1.,-3.17,-1.,-1.,25.,0.,0.,0.,30.0,0.,8.0,50.0,8.5,0,0.125}; + CONC.Noc=16; + strcpy(CONC.Name,"VDEP MAGD HBXG JSTG TLEVEL XE0 YN0 WELLTYPE GLDLEN CONANG HBITS VBITS BITS DDEP RLEV HO"); + strcpy(CONC.Script,"起始垂深;磁偏角;补芯高;套管深度;列表深度间隔;起始东西位移;起始南北位移;井类型(0-斜直井,1-水平井);狗腿度单位长度;子午线收敛角;水平视钻头尺寸;垂直视钻头尺寸;实际钻头尺寸;井斜表起始取整深度;点测井斜重采样;水平位移"); + strcpy(CONC.Options,";;;;;;;斜直井,水平井;;;;;;;;"); + MemRdWt.SetStruct(&INC,NULL,&INP,NULL,&CONC,&CON,&HD,NULL); + HD.Sdep=0; + HD.Edep=0; + HD.Dep=0; + MemRdWt.Const(); + MemRdWt.Close(); + // + TPar.Rec_Height=objViewInfo->m_Rec_Height; + float Head_Height=TPar.Head_Height*GetPixelPerCm(); + float Rec_Height=TPar.Rec_Height*GetPixelPerCm(); + int x,y,y0; + float w[20],width=0;//m_Width; + for(int i=0;i0)width++; + y0=y_Start; + //数据表 + QString value; + if(m_Title_table!="") + { + value=m_AliasWellName+m_Title_table; + y=y_Start; + //CRect rt=m_ClientRect; + QRectF rt=mrt; + rt.setLeft(XCenter-width/2); + rt.setRight(XCenter+width/2); + rt.setTop(y_Start); + rt.setBottom(rt.top()+TitleFontWidth*2); + pDC->setPen(m_TitleColor); + pDC->setFont(TitleFont); + pDC->drawText(rt,Qt::AlignCenter,value); + y0+=2*TitleFontWidth*yfactor; + } + // draw grid + int x0=XCenter-width/2; + pDC->setPen(m_FramePen); + pDC->drawLine(x0,y0,x0+width,y0); + y0+=Head_Height*yfactor; + pDC->setPen(m_FramePen); + for(int i=0;i<=m_PointNum;i++) + { + if(i==m_PointNum)pDC->setPen(m_FramePen); + else pDC->setPen(m_GridPen); + y=y0+i*Rec_Height*yfactor; + pDC->drawLine(x0,y,x0+width,y); + } + pDC->drawLine(x0,(y0-Head_Height*yfactor),x0,y); + x=x0; + QRect rec; + char strformat[20][8]; + int index[20]; + pDC->setFont(TableFont); + for( int i=0;isetPen(m_FramePen); + else pDC->setPen(m_GridPen); + rec.setLeft(x);//+0.5*TableFontWidth; + x+=w[i]; + rec.setRight(x-0.5*TableFontWidth); + rec.setTop(y0-Head_Height*yfactor*3/4-TableFontWidth); + rec.setBottom(y0-Head_Height*yfactor*3/4+TableFontWidth); + pDC->drawLine(x,(y0-Head_Height*yfactor),x,y); + value=TPar.Zd_Inf[i].aliasname; + pDC->setPen(m_TableColor); + pDC->drawText(rec,Qt::AlignCenter,value);//,m_TableFont,m_TableColor,1,0,0,0,0,1);; + rec.setTop(y0-Head_Height*yfactor/4-TitleFontWidth); + rec.setBottom(y0-Head_Height*yfactor/4+TitleFontWidth); + value=TPar.Zd_Inf[i].unit; + if(strcmp(TPar.Zd_Inf[i].name,"GLD")==0) + { + QString str=toString(CON.yy[8]); + value.replace("25",str); + } + //pDC->DrawText(value,value.length(),&rec,DT_CENTER); + pDC->drawText(rec,Qt::AlignCenter,value); + sprintf(strformat[i],"%%%d.%df",TPar.Zd_Inf[i].num,TPar.Zd_Inf[i].dnum); + if(strcmp(TPar.Zd_Inf[i].name,"NO")==0)index[i]=0; + else if(strcmp(TPar.Zd_Inf[i].name,"DEPTH")==0)index[i]=1; + else if(strcmp(TPar.Zd_Inf[i].name,"TVD")==0)index[i]=2; + else if(strcmp(TPar.Zd_Inf[i].name,"DEVI")==0)index[i]=3; + else if(strcmp(TPar.Zd_Inf[i].name,"AZIM")==0)index[i]=4; + else if(strcmp(TPar.Zd_Inf[i].name,"AZZ")==0)index[i]=5; + else if(strcmp(TPar.Zd_Inf[i].name,"XE")==0)index[i]=6; + else if(strcmp(TPar.Zd_Inf[i].name,"YN")==0)index[i]=7; + else if(strcmp(TPar.Zd_Inf[i].name,"HOFS")==0)index[i]=8; + else if(strcmp(TPar.Zd_Inf[i].name,"HOAZ")==0)index[i]=9; + else if(strcmp(TPar.Zd_Inf[i].name,"GLD")==0)index[i]=10; + } + // write table + char str[256]; + float val[20]; + pDC->setPen(m_TableColor); + for( int i=0;idrawText(rec,Qt::AlignCenter,value); + } + } + y+=2*GetPixelPerCm()*yfactor; + return y; +} +int CDrawTvd::DrawFst(int y_Start1, QPainter* pDC,QRectF mrt) +{ + int x,y,xa,ya,x0,y0;//xa,ya刻度0点,x0,y0中心点 + int width=m_Width*GetPixelPerCm()*xfactor; + int height=m_Height*GetPixelPerCm()*yfactor; + QString value; + value=m_AliasWellName+m_Title_fst; + y_Start1+=1*GetPixelPerCm(); + y=y_Start1; + // QRect rt=m_ClientRect; + QRectF rt=mrt; + rt.setLeft(XCenter-width/2); + rt.setRight(XCenter+width/2); + rt.setTop(y_Start1); + rt.setBottom(rt.top()+TitleFontWidth*2); + pDC->setPen(m_TitleColor); + pDC->setFont(TitleFont); + pDC->drawText(rt,Qt::AlignCenter,value); + + pDC->setPen(m_NoteColor); + pDC->setFont(NoteFont); + + y_Start1=y_Start1+TitleFontHeight*3; + +// y_Start1=y_Start1+TitleFontWidth*1.5; +// y_Start1+=TitleFontWidth*1.5*yfactor; + ///设定x0,y0为图的中心位置 + x0=XCenter; + y0=y_Start1+height/2; + + // draw fram + pDC->setPen(m_FramePen); + pDC->setBrush(Qt::NoBrush); + pDC->drawRect(x0-width/2,(y0-height/2),width,height); + + int xleft=x0-width/2; + xa=xleft-((FPar.MinXe)*width)/(FPar.MaxXe-FPar.MinXe); + int ytop=y0-height/2; + ya=ytop-((FPar.MinYn)*height)/(FPar.MaxYn-FPar.MinYn); + + //draw 正北标示 + x=xa+width/30.; + y=y_Start1+height/30.; + pDC->drawLine(x,(y+height/30),x,y); + pDC->drawLine(x,y,x-width/120.,(y+height/60.)); + pDC->drawLine(x,y,x+width/120.,(y+height/60.)); + rt=QRect(x-6*xfactor,(y_Start1+4*yfactor),ScaleFontWidth*2,ScaleFontHeight*2); + pDC->setPen(m_ScaleColor); + pDC->drawText(rt,Qt::AlignCenter,"北"); + + //draw grid 20x20等分 + pDC->setPen(m_GridPen); + pDC->setPen(m_GridColor); + for(float i=-9;i<=9;i++) + { + x=x0+i*width/20.; + y=y0+i*height/20.; + pDC->drawLine(x0-width/2,y,x0+width/2,y); + pDC->drawLine(x,(y0-height/2),x,(y0+height/2)); + } + + //画刻度坐标线 + // write scale--value + float deltx=(FPar.MaxXe-FPar.MinXe)/20.; + float delty=(FPar.MaxYn-FPar.MinYn)/20.; + + pDC->setPen(m_ScaleColor); + pDC->setFont(ScaleFont); + + for(int i=0;i<=20;i=i+2) + { + x=x0+(i-10.)*width/20.; + y=y0-(i-10.)*height/20.-ScaleFontHeight/2; + float val=FPar.MinXe+fabs((float)i)*deltx; + + value=QString::number(val,'f',0); + float xfont=ScaleFontWidth*(value.length()+1); + rt=QRect(x-xfont/2,(y0+height/2+ScaleFontHeight),xfont,ScaleFontHeight*2.); + + pDC->drawText(rt,Qt::AlignLeft|Qt::AlignVCenter,value); + + val=FPar.MinYn+fabs((float)i)*delty; + value=QString::number(val,'f',0); + xfont=ScaleFontWidth*(value.length()+1); + rt=QRect(x0-width/2-xfont,y-ScaleFontHeight/2,xfont,ScaleFontHeight*2.); + + pDC->drawText(rt,Qt::AlignCenter,value); + } + + value="东西位移(米)"; + y=y0+height/2+ScaleFontHeight*3.5; + rt=QRect(x0-width/2,y,width,2*ScaleFontHeight); + pDC->drawText(rt,Qt::AlignCenter,value); + value="南北位移(米)"; + x=x0-width/2-5*ScaleFontWidth; + y=y0-value.toLocal8Bit().length()/2*sin(.017453)*ScaleFontWidth; + pDC->translate(x,y); // 第1步:变换旋转中心到所绘制文字左下角 + pDC->rotate(270); // 第2步: 旋转一定角度 + pDC->drawText(0,0, value); // 第3步: 绘制文字 + pDC->resetMatrix(); + + pDC->setPen(m_GuiJiPen); + + CMemRdWt MemRdWt(sFilePath.toStdString().c_str()); + + struct INC_STRU INC={6,"TVDD XE YN HOFS HOAZ TVD"}; + struct INP_STRU INP; + struct CONC_STRU CONC={0}; + struct HD_STRU HD={0,0,0,0,0,0,0,"JxProcess.inp","JxProcess.tpl"}; + struct CON_STRU CON={-1.,-3.17,-1.,-1.,25.,0.,0.,0.,30.0,0.,8.0,50.0,8.5,0,0.125}; + CONC.Noc=16; + strcpy(CONC.Name,"VDEP MAGD HBXG JSTG TLEVEL XE0 YN0 WELLTYPE GLDLEN CONANG HBITS VBITS BITS DDEP RLEV HO"); + strcpy(CONC.Script,"起始垂深;磁偏角;补芯高;套管深度;列表深度间隔;起始东西位移;起始南北位移;井类型(0-斜直井,1-水平井);狗腿度单位长度;子午线收敛角;水平视钻头尺寸;垂直视钻头尺寸;实际钻头尺寸;井斜表起始取整深度;点测井斜重采样;水平位移"); + strcpy(CONC.Options,";;;;;;;斜直井,水平井;;;;;;;;"); + MemRdWt.SetStruct(&INC,NULL,&INP,NULL,&CONC,&CON,&HD,NULL); + HD.Sdep=0; + HD.Edep=0; + HD.Dep=0; + MemRdWt.Const(); + HD.Sdep=m_Lscx[0].DEPTH; + HD.Edep=m_Lscx[m_PointNum-1].DEPTH; + HD.Dep=HD.Sdep; + HD.StartDep=HD.Sdep; + HD.EndDep=HD.Edep; + MemRdWt.In(); + int num=(m_Lscx[m_PointNum-1].DEPTH-m_Lscx[0].DEPTH)/HD.Rlev+1.5; + if(numm_Rlev; + if(DRlev<=0) DRlev=1; + float sss=height/dcount; + if(sss<1) sss=1; + DRlev=(height/sss-1.5)/((m_Lscx[m_PointNum-1].DEPTH-m_Lscx[0].DEPTH)); + if(DRlevm_Rlev) DRlev=objViewInfo->m_Rlev; + + //plot + QPoint *mpoint=new QPoint[dcount+1]; + float xfac=(float)width/(FPar.MaxXe-FPar.MinXe);//(Xmax-Xmin); + float yfac=(float)height/(FPar.MaxYn-FPar.MinYn);//(Ymax-Ymin); + int j=0; + for(float dep=m_Lscx[0].DEPTH;dep<=m_Lscx[m_PointNum-1].DEPTH;dep+=DRlev) + { + MemRdWt.In(dep); + x=x0-width/2+(INP.yy[1]-FPar.MinXe)*xfac; + y=y0+height/2-(INP.yy[2]-FPar.MinYn)*yfac; + if(xx0+width/2) continue; + if(yy0+height/2) continue; + mpoint[j]=QPoint(x,y); + j++; + } + pDC->drawPolyline(mpoint,j); + if (m_bPlotBhx&&j)pDC->drawLine(mpoint[j-1],mpoint[0]);//画闭合线 + if(j) + { + pDC->setPen(m_FramePen); + pDC->drawLine(x0-width/2,mpoint[0].y(),x0+width/2,mpoint[0].y()); + pDC->drawLine(mpoint[0].x(),(y0-height/2),mpoint[0].x(),(y0+height/2)); + } + + delete []mpoint; + x=x0-width/2+0.1*width/20+TitleFontWidth*2; + y=y_Start1+height/20; + float xe=m_Lscx[m_PointNum-1].XE; + float yn=m_Lscx[m_PointNum-1].YN; + if(objViewInfo->m_isDrawNote) + { + if(xe>0)value="井底东西位移:"+QString::number(xe,'f',3)+"东"; + else value="井底东西位移:"+QString::number(xe,'f',3)+"西";//"井底东西位移:%7.3f西",xe); + rt=QRect(x,y,NoteFontWidth*(value.toLocal8Bit().length()+3),2*NoteFontHeight); + pDC->setPen(m_NoteColor); + pDC->setFont(NoteFont); + pDC->drawText(rt,Qt::AlignCenter,value); + y+=2.5*NoteFontHeight;//height/16; + if(yn>0)value="井底南北位移:"+QString::number(yn,'f',3)+"北";//"井底南北位移:%7.3f北",yn); + else value="井底南北位移:"+QString::number(yn,'f',3)+"南";//"井底南北位移:%7.3f南",yn); + rt=QRect(x,y,NoteFontWidth*(value.toLocal8Bit().length()+3),2*NoteFontHeight); + pDC->drawText(rt,Qt::AlignCenter,value); + y+=2.5*NoteFontHeight; + value="井底闭合位移:"+QString::number(m_Lscx[m_PointNum-1].HOFS,'f',3)+"米"; + rt=QRect(x,y,NoteFontWidth*(value.toLocal8Bit().length()+3),2*NoteFontHeight); + pDC->drawText(rt,Qt::AlignCenter,value); + y+=2.5*NoteFontHeight; + value="井底闭合方位:"+QString::number(m_Lscx[m_PointNum-1].HOAZ,'f',3)+"度"; + rt=QRect(x,y,NoteFontWidth*(value.toLocal8Bit().length()+3),2*NoteFontHeight); + pDC->drawText(rt,Qt::AlignCenter,value); + } + if(m_FstPlotBx) + { + //画靶心深度标示 + pDC->setBackground(QBrush(Qt::black));//RGB(255,255,255)); + for(int ii=0;iisetPen(mPen); + if(m_ScBxPointMessage.Style==0) + { + QBrush m_Brush(m_ScBxPointMessage.Color); + pDC->setBrush(m_Brush); + pDC->drawEllipse(QPointF(xsc,ysc),m_ScBxPointMessage.Size,m_ScBxPointMessage.Size); + } + else if(m_ScBxPointMessage.Style==1) + { + pDC->drawLine(xsc-m_ScBxPointMessage.Size,ysc+1,xsc+m_ScBxPointMessage.Size,ysc+1); + pDC->drawLine(xsc+1,ysc-m_ScBxPointMessage.Size,xsc+1,ysc+m_ScBxPointMessage.Size); + } + else + { + pDC->drawLine(xsc-m_ScBxPointMessage.Size,ysc+1,xsc+m_ScBxPointMessage.Size,ysc+1); + pDC->drawLine(xsc+1,ysc-m_ScBxPointMessage.Size,xsc+1,ysc+m_ScBxPointMessage.Size); + pDC->drawLine(xsc-m_ScBxPointMessage.Size+1,ysc-m_ScBxPointMessage.Size,xsc+m_ScBxPointMessage.Size,ysc+m_ScBxPointMessage.Size); + pDC->drawLine(xsc-m_ScBxPointMessage.Size+1,ysc+m_ScBxPointMessage.Size,xsc+m_ScBxPointMessage.Size,ysc-m_ScBxPointMessage.Size); + } + // 绘制设计靶心 + x=x0-width/2+(Tvd_BxInf.Tvd_BxPar[ii].BxWy*sin(Tvd_BxInf.Tvd_BxPar[ii].BxFw*.017453)-FPar.MinXe)*xfac; + y=y0+height/2-(Tvd_BxInf.Tvd_BxPar[ii].BxWy*cos(Tvd_BxInf.Tvd_BxPar[ii].BxFw*.017453)-FPar.MinYn)*yfac; + int x1=x-(Tvd_BxInf.Tvd_BxPar[ii].BxBj)*xfac; + int y1=y-(Tvd_BxInf.Tvd_BxPar[ii].BxBj)*yfac; + int x2=x+(Tvd_BxInf.Tvd_BxPar[ii].BxBj)*xfac; + int y2=y+(Tvd_BxInf.Tvd_BxPar[ii].BxBj)*yfac; + //绘制靶心半径 + pDC->setPen(m_BxbjPen); + //pDC->drawArc(Arc(x1,y1,x2,y2,x1,y1,x1,y1); + pDC->setBrush(Qt::NoBrush); + pDC->drawEllipse(QPointF(x,y),Tvd_BxInf.Tvd_BxPar[ii].BxBj*xfac,Tvd_BxInf.Tvd_BxPar[ii].BxBj*xfac); + QPen mPen2(m_SjBxPointMessage.Color); + mPen2.setWidth(2); + pDC->setPen(mPen2); + if(m_SjBxPointMessage.Style==0) + { + QBrush m_Brush(m_SjBxPointMessage.Color); + pDC->setBrush(m_Brush); + pDC->drawEllipse(QPointF(x,y),m_SjBxPointMessage.Size,m_SjBxPointMessage.Size); + } + else if(m_SjBxPointMessage.Style==1) + { + pDC->drawLine(x-m_SjBxPointMessage.Size,y+1,x+m_SjBxPointMessage.Size,y+1); + pDC->drawLine(x+1,y-m_SjBxPointMessage.Size,x+1,y+m_SjBxPointMessage.Size); + } + else + { + pDC->drawLine(x-m_SjBxPointMessage.Size,y+1,x+m_SjBxPointMessage.Size,y+1); + pDC->drawLine(x+1,y-m_SjBxPointMessage.Size,x+1,y+m_SjBxPointMessage.Size); + pDC->drawLine(x-m_SjBxPointMessage.Size+1,y-m_SjBxPointMessage.Size,x+m_SjBxPointMessage.Size,y+m_SjBxPointMessage.Size); + pDC->drawLine(x-m_SjBxPointMessage.Size+1,y+m_SjBxPointMessage.Size,x+m_SjBxPointMessage.Size,y-m_SjBxPointMessage.Size); + } + if(m_PlotBxlx) + { + pDC->setPen(m_BxlxPen); + pDC->drawLine(xsc,ysc,x,y); + } + //写靶心描述 + int xadd=1,yadd=1; + if(xsc0)xadd=0; + if(yadd<0)yadd=0; + char ScMiaoShu[16],SjMiaoShu[16]; + strcpy(ScMiaoShu,m_ScBxPointMessage.MiaoShu); + strcpy(SjMiaoShu,m_SjBxPointMessage.MiaoShu); + //实测 + if(m_ScBxPointMessage.MiaoShu[0]=='A')ScMiaoShu[0]+=ii; + else if(ii>0) + { + char ss[4]; + itoa(ii,ss,10); + strcat(ScMiaoShu,ss); + } + int h=strlen(ScMiaoShu); + pDC->setPen(m_ScBxPointMessage.Color); + pDC->drawText(xsc+xadd*strlen(ScMiaoShu)*NoteFontWidth,ysc+yadd*NoteFontHeight,QString::fromLocal8Bit(ScMiaoShu)); + //设计 + if(m_SjBxPointMessage.MiaoShu[0]=='A')SjMiaoShu[0]+=ii; + else if(ii>0) + { + char ss[4]; + itoa(ii,ss,10); + strcat(SjMiaoShu,ss); + } + pDC->setPen(m_SjBxPointMessage.Color); + if(0) + //if(!m_pWellSceneManager->GetIsColorPrint()) + { + pDC->setPen(QColor(0,0,0)); + } + pDC->drawText(x+xadd*strlen(SjMiaoShu)*NoteFontWidth,y+yadd*NoteFontHeight,QString::fromLocal8Bit(SjMiaoShu)); + } + + //结束 + } + y=y0+height/2.; + y+=2*GetPixelPerCm()*yfactor; + return y; +} +int CDrawTvd::DrawCst(int y_Start1, QPainter* pDC,QRectF mrt,CST_PAR CPar,int no) +{ + int x,y,x0,y0; + float sdep=CPar.MinTVD; + float edep=CPar.MaxTVD; + int iy=(edep-sdep)/CPar.DepSpace; + if(iy<=0) iy=1; + if(objViewInfo->m_DepSpaceN) { + iy=objViewInfo->m_DepSpaceN; + if(iy<=0) iy=1; + CPar.DepSpace=(edep-sdep)/iy; + } + + int width=m_Width*GetPixelPerCm()*xfactor; + int height=(edep-sdep)/CPar.DepSpace*40*yfactor; + if(objViewInfo->m_heqw) + { + height=width; + } + // draw 标题 + QString value,value1; + value=m_AliasWellName+m_Title_cst; + y=y_Start1; + // QRect rt=m_ClientRect; + QRectF rt=mrt; + rt.setLeft(XCenter-width/2); + rt.setRight(XCenter+width/2); + rt.setTop(y_Start1); + rt.setBottom(rt.top()+TitleFontHeight*2); + pDC->setPen(m_TitleColor); + pDC->setFont(TitleFont); + pDC->drawText(rt,Qt::AlignCenter,value); + + y_Start1+=TitleFontWidth*3.5;//+侧视图图头高度 + pDC->setPen(m_NoteColor); + pDC->setFont(NoteFont); + + if(!no) value="水平位移(米)"; + else if(no==1) + { + value="向东位移"; + } + else if(no==2) + { + value="向北位移"; + } + else value="侧视角"+QString::number((int)CPar.CsAngle)+"度)"; + QString hiscale=value; + x=XCenter-ScaleFontWidth*(value.toLocal8Bit().length())/2; + y=y_Start1; + rt.setTop(y); + rt.setBottom(rt.top()+ScaleFontHeight*2);//*yfactor + pDC->setPen(m_ScaleColor); + pDC->setFont(ScaleFont); + pDC->drawText(rt,Qt::AlignHCenter|Qt::AlignBottom,value); + + if(CPar.CsAngle==0){ + value="北"; + value1="南"; + } + else if(CPar.CsAngle==90){ + value="东"; + value1="西"; + } + else { + value="北偏东"+QString::number((int)CPar.CsAngle)+"度"; + value1="南偏西"+QString::number((int)CPar.CsAngle)+"度"; + } + if(no!=0&&no!=1&&no!=2) { + x=XCenter+width/2.-ScaleFontWidth*(value.toLocal8Bit().length()); + rt.setLeft(x); + rt.setRight(rt.left()+ScaleFontWidth*(value.toLocal8Bit().length())); + pDC->drawText(rt,Qt::AlignHCenter|Qt::AlignBottom,value); + + x=XCenter-width/2.; + rt.setLeft(x); + rt.setRight(rt.left()+ScaleFontWidth*(value.toLocal8Bit().length())); + pDC->drawText(rt,Qt::AlignHCenter|Qt::AlignBottom,value1); + } + // draw fram + x0=XCenter; + y0=y_Start1+ScaleFontHeight*3.5*2;//*yfactor*scaley; + + pDC->setPen(m_FramePen); + pDC->setBrush(Qt::NoBrush); + pDC->drawRect(x0-width/2,y0,width,height); +// pDC->setPen(m_FramePen); +// pDC->drawLine(x0,y0,x0,(y0+height)); + pDC->setPen(m_GridPen); + + for(int i=-9;i<=9;i++) + { + x=x0+i*width/20.; + pDC->drawLine(x,y0,x,(y0+height)); + } + pDC->setPen(m_ScaleColor); + pDC->setFont(ScaleFont); + float delt=(CPar.MaxWy-CPar.MinWy)/20.; + int xleft=x0-width/2; + float xa=xleft-(CPar.MinWy*width)/(CPar.MaxWy-CPar.MinWy); + float xx0=0; + for(int i=0;i<=20;i=i+2) + { + x=x0+(i-10)*width/20.; + float val=CPar.MinWy+abs(i)*delt; + if(fabs(CPar.MinWy)!=fabs(CPar.MaxWy)) + { + if(i==0) xx0=x; + } + else if(i==10) xx0=x; + if(delt>=10)value=QString::number(val,'f',0); + else value=toString(QString::number(val,'f',1)); + + float xfont=ScaleFontWidth*(value.length()+1); + x-=xfont/2; + rt.setLeft(x); + rt.setRight(rt.left()+ScaleFontWidth*value.length()); + rt.setTop((y0-2*ScaleFontHeight)); + rt.setBottom(rt.top()+ScaleFontHeight*2); + pDC->drawText(rt,Qt::AlignCenter,value); + + rt.setTop((y0+height+ScaleFontHeight*1.5)); + rt.setBottom(rt.top()+ScaleFontHeight*2.5); + pDC->drawText(rt,Qt::AlignCenter,value); + } + if(objViewInfo->m_DepthLeft)xx0-=width/2; + for(int i=0;iheight) continue; + else y=y0+i*height/iy; + pDC->setPen(m_GridPen); + pDC->drawLine(x0-width/2,y,x0+width/2,y); + //if(fmod((float)i,(float)2)==0) + { + pDC->setPen(m_ScaleColor); + value=QString::number(sdep+i*CPar.DepSpace,'f',0); + rt.setLeft(xx0-ScaleFontWidth*(value.length()+1));//+0.1*width/20.); + rt.setTop(y); + rt.setRight(xx0); + rt.setBottom(rt.top()+ScaleFontHeight*2); + pDC->drawText(rt,Qt::AlignCenter,value); + } + } + pDC->setPen(m_FramePen); + pDC->drawLine(xx0,y0,xx0,(y0+height));//画中心垂线(实线) + value=hiscale;//"侧视方向位移(米)"; + x=x0-ScaleFontWidth*(value.toLocal8Bit().length())/2; + y=y0+height+4*ScaleFontHeight; + rt=QRect(x,y,ScaleFontWidth*value.toLocal8Bit().length(),ScaleFontHeight*2); + pDC->setPen(m_ScaleColor); + pDC->drawText(rt,Qt::AlignCenter,value); + + value="垂直深度(米)"; + x=x0-width/2-5*ScaleFontWidth; + y=y0+height/2-value.toLocal8Bit().length()/2*sin(.017453)*ScaleFontWidth; + pDC->translate(x,y); // 第1步:变换旋转中心到所绘制文字左下角 + pDC->rotate(270); // 第2步: 旋转一定角度 + pDC->drawText(0,0, value); // 第3步: 绘制文字 + pDC->resetMatrix(); + + //plot + pDC->setPen(m_GuiJiPen); + float xfac=(float)width/(CPar.MaxWy-CPar.MinWy); + float yfac=(float)height/(edep-sdep); + + CMemRdWt MemRdWt(sFilePath.toStdString().c_str()); + + struct INC_STRU INC={6,"TVDD XE YN HOFS HOAZ TVD"}; + struct INP_STRU INP; + struct CONC_STRU CONC={0}; + struct HD_STRU HD={0,0,0,0,0,0,0,"JxProcess.inp","JxProcess.tpl"}; + struct CON_STRU CON={-1.,-3.17,-1.,-1.,25.,0.,0.,0.,30.0,0.,8.0,50.0,8.5,0,0.125}; + CONC.Noc=16; + strcpy(CONC.Name,"VDEP MAGD HBXG JSTG TLEVEL XE0 YN0 WELLTYPE GLDLEN CONANG HBITS VBITS BITS DDEP RLEV HO"); + strcpy(CONC.Script,"起始垂深;磁偏角;补芯高;套管深度;列表深度间隔;起始东西位移;起始南北位移;井类型(0-斜直井,1-水平井);狗腿度单位长度;子午线收敛角;水平视钻头尺寸;垂直视钻头尺寸;实际钻头尺寸;井斜表起始取整深度;点测井斜重采样;水平位移"); + strcpy(CONC.Options,";;;;;;;斜直井,水平井;;;;;;;;"); + MemRdWt.SetStruct(&INC,NULL,&INP,NULL,&CONC,&CON,&HD,NULL); + HD.Sdep=0; + HD.Edep=0; + HD.Dep=0; + MemRdWt.Const(); + HD.Sdep=m_Lscx[0].DEPTH; + HD.Edep=m_Lscx[m_PointNum-1].DEPTH; + HD.Dep=HD.Sdep; + HD.StartDep=HD.Sdep; + HD.EndDep=HD.Edep; + MemRdWt.In(); + int ind=0,m=0; + int num=(m_Lscx[m_PointNum-1].DEPTH-m_Lscx[0].DEPTH)/HD.Rlev+1.5; + + if(numm_Rlev; + if(DRlev<=0) DRlev=1; + float sss=height/dcount; + if(sss<1) sss=1; + DRlev=(height/sss-1.5)/((m_Lscx[m_PointNum-1].DEPTH-m_Lscx[0].DEPTH)); + if(DRlevm_Rlev) DRlev=objViewInfo->m_Rlev; + + for(float dep=m_Lscx[0].DEPTH;dep<=m_Lscx[m_PointNum-1].DEPTH;dep+=DRlev) + { + MemRdWt.In(dep); + if(INP.yy[0]CPar.MaxTVD) { + continue; + } + if(no==0) x=xa+INP.yy[3]*xfac;//HOFS + else if(no==1) x=xa+INP.yy[1]*xfac;//xe + else if(no==2) x=xa+INP.yy[2]*xfac;//yn + else { + angle=INP.yy[4]-CPar.CsAngle;//HOAZ + x=xa+INP.yy[3]*xfac*cos(angle*.017453);//HOFS + } + y=y0+(INP.yy[0]-sdep)*yfac;//TVD +// if(x>x0+width/2||x0)pDC->drawLine(mpoint[j-1],mpoint[j]); + j++; + } + if(j>0)pDC->drawPolyline(mpoint,j); + delete []mpoint; + MemRdWt.Close(); + //////////////////////////////////// + if(m_CstPlotBx&&no!=0&&no!=1&&no!=2) + { + //画靶心深度标示 + //pDC->SelectStockObject(BLACK_BRUSH); + pDC->setBackground(QBrush(Qt::black)); + for(int i=0;isetPen(mPen); + if(m_ScBxPointMessage.Style==0) + { + QBrush m_Brush(m_ScBxPointMessage.Color); + pDC->setBrush(m_Brush); + pDC->drawEllipse(QPointF(x,y),m_ScBxPointMessage.Size,m_ScBxPointMessage.Size); + } + else if(m_ScBxPointMessage.Style==1) + { + pDC->drawLine(x-m_ScBxPointMessage.Size,y+1,x+m_ScBxPointMessage.Size,y+1); + pDC->drawLine(x+1,y-m_ScBxPointMessage.Size,x+1,y+m_ScBxPointMessage.Size); + } + else + { + pDC->drawLine(x-m_ScBxPointMessage.Size,y+1,x+m_ScBxPointMessage.Size,y+1); + pDC->drawLine(x+1,y-m_ScBxPointMessage.Size,x+1,y+m_ScBxPointMessage.Size); + pDC->drawLine(x-m_ScBxPointMessage.Size+1,y-m_ScBxPointMessage.Size,x+m_ScBxPointMessage.Size,y+m_ScBxPointMessage.Size); + pDC->drawLine(x-m_ScBxPointMessage.Size+1,y+m_ScBxPointMessage.Size,x+m_ScBxPointMessage.Size,y-m_ScBxPointMessage.Size); + } + int xsc=x,ysc=y; + // 绘制设计靶心 + float r=Tvd_BxInf.Tvd_BxPar[i].BxBj*xfac; + x=xa+(Tvd_BxInf.Tvd_BxPar[i].BxWy*cos((Tvd_BxInf.Tvd_BxPar[i].BxFw-CPar.CsAngle)*.017453)-CPar.MinWy)*xfac; + y=y0+(Tvd_BxInf.Tvd_BxPar[i].BxDep-sdep)*yfac; + int x1=x-r; + int y1=y-r; + int x2=x+r; + int y2=y+r; + + //绘制靶心半径 + pDC->setPen(m_BxbjPen); + pDC->setBrush(Qt::NoBrush); + pDC->drawEllipse(QPointF(x,y),r,r);//pDC->Arc(x1,y1,x2,y2,x1,y1,x1,y1); + QPen mPen2(m_SjBxPointMessage.Color); + mPen2.setWidth(2); + pDC->setPen(mPen2); + if(m_SjBxPointMessage.Style==0) + { + QBrush m_Brush(m_SjBxPointMessage.Color); + pDC->setBrush(m_Brush); + pDC->drawEllipse(QPointF(x,y),m_SjBxPointMessage.Size,m_SjBxPointMessage.Size); + } + else if(m_SjBxPointMessage.Style==1) + { + + pDC->drawLine(x-m_SjBxPointMessage.Size,y+1,x+m_SjBxPointMessage.Size,y+1); + pDC->drawLine(x+1,y-m_SjBxPointMessage.Size,x+1,y+m_SjBxPointMessage.Size); + } + else + { + + pDC->drawLine(x-m_SjBxPointMessage.Size,y+1,x+m_SjBxPointMessage.Size,y+1); + pDC->drawLine(x+1,y-m_SjBxPointMessage.Size,x+1,y+m_SjBxPointMessage.Size); + pDC->drawLine(x-m_SjBxPointMessage.Size+1,y-m_SjBxPointMessage.Size,x+m_SjBxPointMessage.Size,y+m_SjBxPointMessage.Size); + pDC->drawLine(x-m_SjBxPointMessage.Size+1,y+m_SjBxPointMessage.Size,x+m_SjBxPointMessage.Size,y-m_SjBxPointMessage.Size); + } + if(m_PlotBxlx) + { + pDC->setPen(m_BxlxPen); + pDC->drawLine(xsc,ysc,x,y); + } + //写靶心描述 + int xadd=1,yadd=1; + if(xsc0)xadd=0; + if(yadd<0)yadd=0; + char ScMiaoShu[16],SjMiaoShu[16]; + strcpy(ScMiaoShu,m_ScBxPointMessage.MiaoShu); + strcpy(SjMiaoShu,m_SjBxPointMessage.MiaoShu); + //实测 + if(m_ScBxPointMessage.MiaoShu[0]=='A')ScMiaoShu[0]+=i; + else if(i>0) + { + char ss[4]; + itoa(i,ss,10); + strcat(ScMiaoShu,ss); + } + int h=strlen(ScMiaoShu); + pDC->setPen(m_ScBxPointMessage.Color); + pDC->drawText(xsc+xadd*strlen(ScMiaoShu)*NoteFontWidth,ysc+yadd*NoteFontHeight,QString::fromLocal8Bit(ScMiaoShu)); + //设计 + if(m_SjBxPointMessage.MiaoShu[0]=='A')SjMiaoShu[0]+=i; + else if(i>0) + { + char ss[4]; + itoa(i,ss,10); + strcat(SjMiaoShu,ss); + } + pDC->setPen(m_SjBxPointMessage.Color); + pDC->drawText(x+xadd*strlen(SjMiaoShu)*NoteFontWidth,y+yadd*NoteFontHeight,QString::fromLocal8Bit(SjMiaoShu)); + } + } + //////////////////////////////////////// + x=x0-width/2+1.1*width/20; + y=y0+1.1*height/20; + float xe=m_Lscx[m_PointNum-1].XE; + float yn=m_Lscx[m_PointNum-1].YN; + if(objViewInfo->m_isDrawNote) + { + if(xe>0)value="井底东西位移:"+QString::number(xe,'f',3)+"东"; + else value="井底东西位移:"+QString::number(xe,'f',3)+"西"; + rt=QRect(x,y,NoteFontWidth*(value.toLocal8Bit().length()+2),2*NoteFontHeight); + pDC->setPen(m_NoteColor); + pDC->setFont(NoteFont); + pDC->drawText(rt,Qt::AlignCenter |Qt::AlignTop,value); + y+=2.5*NoteFontHeight; + if(yn>0)value="井底南北位移:"+QString::number(yn,'f',3)+"北"; + else value="井底南北位移:"+QString::number(yn,'f',3)+"南"; + rt=QRect(x,y,NoteFontWidth*(value.toLocal8Bit().length()+2),2*NoteFontHeight); + pDC->drawText(rt,Qt::AlignCenter |Qt::AlignTop,value); + y+=2.5*NoteFontHeight; + value="井底闭合位移:"+QString::number(m_Lscx[m_PointNum-1].HOFS,'f',3)+"米"; + rt=QRect(x,y,NoteFontWidth*(value.toLocal8Bit().length()+2),2*NoteFontHeight); + pDC->drawText(rt,Qt::AlignCenter |Qt::AlignTop,value); + y+=2.5*NoteFontHeight;; + value="井底闭合方位:"+QString::number(m_Lscx[m_PointNum-1].HOAZ,'f',3)+"度"; + rt=QRect(x,y,NoteFontWidth*(value.toLocal8Bit().length()+2),2*NoteFontHeight); + pDC->drawText(rt,Qt::AlignCenter |Qt::AlignTop,value); + } + y=y0+height; + y+=2*GetPixelPerCm()*yfactor; + + return y; +} +QPoint CDrawTvd::ComputeXY(float val_x,float val_y,float val_z,float angle_x,float angle_y,float angle_z,float x0,float y0,float xfac,float yfac) +{ + float PI=3.1415926/180; + float T6=sin(angle_x*PI); + float T7=cos(angle_x*PI); + float U6=sin(angle_y*PI); + float U7=cos(angle_y*PI); + float V6=sin(angle_z*PI); + float V7=cos(angle_z*PI); + float X,Y,TVD; + val_x*=xfac; + val_y*=xfac; + val_z*=yfac; + ////////////////////////////////////////////////////////////////////////// + //draw x轴 + X=(val_x*U7*V7)+(val_z*(-V6*U7))+(val_y*U6); + Y=(val_x*(V7*(-U6)*(-T6)+V6*V7))+(val_z*(-V6*(-U6)*(-T6)+V7*T7))+(val_y*(U7*(-T6))); + X+=x0; + Y+=y0; + return QPoint(X,Y); +} +int CDrawTvd::DrawLtgjt(int y_Start1, QPainter* pDC,QRectF mrt) +{ + int x,y,x0,y0; + x0=XCenter; + float angle_x=objViewInfo->m_LttAngle_X; + float angle_y=LPar.CsAngle; + float angle_z=objViewInfo->m_LttAngle_Z; + float sdep=objViewInfo->m_LTTTVD; + float edep=m_Lscx[m_PointNum-1].TVD;//DEPTH;如果刻度到DEPTH,图形不封闭 + int width=m_Width*GetPixelPerCm()/(1.+sin(30*PI/180))*xfactor+0.5; + int height=m_Width*0.6*GetPixelPerCm()*xfactor+0.5; + int theight=width*sin(45*.017453)+0.5;//投影图高度 + int iy=(edep-sdep)/LPar.DepSpace; + if(iy<1) iy=1; + float xfac=(float)width/(2.*LPar.MaxWy);//(Xmax-Xmin); + float yfac=(float)height/(edep-sdep); + + // draw 标题 + QString value; + value=m_AliasWellName+m_Title_ltgj; + y=y_Start1; + QRectF rt=mrt; + rt.setLeft(XCenter-width); + rt.setRight(XCenter+width); + rt.setTop(y_Start1); + rt.setBottom(rt.top()+TitleFontWidth*2); + pDC->setPen(m_TitleColor); + pDC->setFont(NoteFont); + pDC->drawText(rt,Qt::AlignCenter |Qt::AlignTop,value); + y_Start1+=TitleFontWidth*2.5*yfactor;//*yfactor*scaley;//+侧视图图头高度 + int jw=12*xfactor; + int jh=72*yfactor; + y0=y_Start1+jh; + float val_x,val_y,val_z; + + val_x=0,val_y=LPar.MaxWy,val_z=0; + QPoint temp=ComputeXY(val_x,val_y,val_z,angle_x,0,angle_z,x0,y0,xfac,yfac); + int dy=temp.y()-y0; + y0-=dy; + y_Start1-=dy; + //画井架 + pDC->setPen(m_FramePen); + + for(int i=1;i<=3;i++) + { + pDC->drawLine(XCenter-i*jw/3,(y_Start1+i*jh/3),XCenter+i*jw/3,(y_Start1+i*jh/3)); + } + pDC->drawLine(XCenter,y_Start1,XCenter-jw,(y_Start1+jh)); + pDC->drawLine(XCenter,y_Start1,XCenter+jw,(y_Start1+jh)); + for(int i=1;i<=2;i++) + { + pDC->drawLine(XCenter-i*jw/3,(y_Start1+i*jh/3),XCenter+(i+1)*jw/3,(y_Start1+(i+1)*jh/3)); + pDC->drawLine(XCenter+i*jw/3,(y_Start1+i*jh/3),XCenter-(i+1)*jw/3,(y_Start1+(i+1)*jh/3)); + } + //plot frame + int y00=y0+height; + + float X,Y,TVD=m_Lscx[m_PointNum-1].TVD-sdep; + float XE,YN; + QPoint*points=new QPoint[m_PointNum]; + ////////////////////////////////////////////////////////////////////////// + //draw x轴 + for(int j=0;j<2;j++) + { + for(int i=-objViewInfo->m_YD/2;i<=objViewInfo->m_YD/2;i++){ + if(j==0&&i) continue; + val_x=-LPar.MaxWy,val_y=i*LPar.MaxWy/(objViewInfo->m_YD/2),val_z=(j==0?0:TVD); + points[0]=ComputeXY(val_x,val_y,val_z,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + val_x=LPar.MaxWy,val_y=i*LPar.MaxWy/(objViewInfo->m_YD/2),val_z=(j==0?0:TVD); + points[1]=ComputeXY(val_x,val_y,val_z,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + if(i==0||i==-objViewInfo->m_YD/2||i==objViewInfo->m_YD/2){ + QPen pen=m_FramePen; + pen.setStyle(Qt::DotLine); + pDC->setPen(pen); + } + else { + pDC->setPen(m_GridPen); + } + if(!objViewInfo->m_is3DFrame&&j==0&&i==0); + else pDC->drawLine(points[0],points[1]); + float ty=sin(angle_y*PI/180); + float tx=cos(angle_y*PI/180); + if(!objViewInfo->m_is3DFrame&&j==0&&i==0); + else if(i==0) + { + pDC->setFont(NoteFont); + pDC->setPen(m_NoteColor); + value="西 "; + QPoint pt(points[0].x()-tx*value.length()*NoteFontWidth,points[0].y()-NoteFontHeight*value.length()*ty); + pDC->resetMatrix(); + pDC->translate(pt.x(),pt.y()); // 第1步:变换旋转中心到所绘制文字左下角 + pDC->drawText(0,0,value); + pDC->resetMatrix(); + value="东"; + QPoint pt1(points[1].x()+tx*NoteFontWidth*value.length(),points[1].y()+NoteFontHeight/2.0*ty); + pDC->resetMatrix(); + pDC->translate(pt1.x(),pt1.y()); // 第1步:变换旋转中心到所绘制文字左下角 + pDC->drawText(0,0, value); + pDC->resetMatrix(); + } + pDC->setFont(ScaleFont); + pDC->setPen(m_ScaleColor); + value=QString::number(i*LPar.MaxWy/(objViewInfo->m_YD/2)); + QPoint pt(points[0].x()-tx*value.length()*NoteFontWidth,points[0].y()-NoteFontHeight*value.length()*ty); + pDC->resetMatrix(); + pDC->translate(pt.x(),pt.y()); // 第1步:变换旋转中心到所绘制文字左下角 + pDC->rotate(angle_y); + if(j)pDC->drawText(0,0,value); + pDC->resetMatrix(); + } + } + ////////////////////////////////////////////////////////////////////////// + //draw y轴 + + for(int j=0;j<2;j++) + { + for(int i=-objViewInfo->m_XD/2;i<=objViewInfo->m_XD/2;i++){ + if(j==0&&i) continue; + val_x=i*LPar.MaxWy/(objViewInfo->m_XD/2),val_y=-LPar.MaxWy,val_z=(j==0?0:TVD); + points[0]=ComputeXY(val_x,val_y,val_z,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + val_x=i*LPar.MaxWy/(objViewInfo->m_XD/2),val_y=LPar.MaxWy,val_z=(j==0?0:TVD); + points[1]=ComputeXY(val_x,val_y,val_z,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + if(i==0||i==-objViewInfo->m_XD/2||i==objViewInfo->m_XD/2){ + QPen pen=m_FramePen; + pen.setStyle(Qt::DotLine); + pDC->setPen(pen); + } + else { + pDC->setPen(m_GridPen); + } + if(!objViewInfo->m_is3DFrame&&j==0&&i==0); + else pDC->drawLine(points[0],points[1]); + float ty=sin(angle_y*PI/180); + float tx=cos(angle_y*PI/180); + if(!objViewInfo->m_is3DFrame&&j==0&&i==0); + else if(i==0) + { + pDC->setFont(NoteFont); + pDC->setPen(m_NoteColor); + QPoint pt(points[0].x()-tx*NoteFontWidth,points[0].y()-ty*NoteFontHeight*1); + pDC->resetMatrix(); + pDC->translate(pt.x(),pt.y()); // 第1步:变换旋转中心到所绘制文字左下角 + pDC->drawText(0,0, "南"); + pDC->resetMatrix(); + QPoint pt1(points[1].x()-tx*NoteFontWidth,points[1].y()-ty*NoteFontHeight*1); + pDC->resetMatrix(); + pDC->translate(pt1.x(),pt1.y()); // 第1步:变换旋转中心到所绘制文字左下角 + pDC->drawText(0,0, "北"); + pDC->resetMatrix(); + } + pDC->setFont(ScaleFont); + pDC->setPen(m_ScaleColor); + value=QString::number(i*LPar.MaxWy/(objViewInfo->m_XD/2)); +// QPoint pt(points[0].x()-tx*NoteFontWidth,points[0].y()+ty*NoteFontHeight); + QPoint pt(points[0].x()-ScaleFontWidth*value.length()/2.0*(1+ty),points[0].y()+ScaleFontHeight*2*(1+tx)); +// pDC->resetMatrix(); +// pDC->translate(pt.x(),pt.y()); // 第1步:变换旋转中心到所绘制文字左下角 +// pDC->rotate(angle_y+30); // 第2步: 旋转一定角度 +// if(j)pDC->drawText(0,0, value); +// pDC->resetMatrix(); + if(j)pDC->drawText(pt, value); + } + } + ////////////////////////////////////////////////////////////////////////// + //draw z轴 + QPen pen=m_FramePen; + pen.setStyle(Qt::DotLine); + pDC->setPen(pen); + val_x=0,val_y=0,val_z=0; + points[0]=ComputeXY(val_x,val_y,val_z,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + val_x=0,val_y=0,val_z=TVD; + points[1]=ComputeXY(val_x,val_y,val_z,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawLine(points[0],points[1]); + + if(objViewInfo->m_is3DFrame) + { + //前面 + points[0]=ComputeXY(LPar.MaxWy,-LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[1]=ComputeXY(LPar.MaxWy,-LPar.MaxWy,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[2]=ComputeXY(-LPar.MaxWy,-LPar.MaxWy,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[3]=ComputeXY(-LPar.MaxWy,-LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[4]=ComputeXY(LPar.MaxWy,-LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPolyline(points,5); + //后面 + points[0]=ComputeXY(LPar.MaxWy,LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[1]=ComputeXY(LPar.MaxWy,LPar.MaxWy,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[2]=ComputeXY(-LPar.MaxWy,LPar.MaxWy,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[3]=ComputeXY(-LPar.MaxWy,LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[4]=ComputeXY(LPar.MaxWy,LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPolyline(points,5); + //上左 + points[0]=ComputeXY(-LPar.MaxWy,-LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[1]=ComputeXY(-LPar.MaxWy,LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPolyline(points,2); + //上右 + points[0]=ComputeXY(LPar.MaxWy,-LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[1]=ComputeXY(LPar.MaxWy,LPar.MaxWy,0,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPolyline(points,2); + //下左 + points[0]=ComputeXY(-LPar.MaxWy,-LPar.MaxWy,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[1]=ComputeXY(-LPar.MaxWy,LPar.MaxWy,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPolyline(points,2); + //下右 + points[0]=ComputeXY(LPar.MaxWy,-LPar.MaxWy,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + points[1]=ComputeXY(LPar.MaxWy,LPar.MaxWy,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPolyline(points,2); + } + pDC->setPen(m_GridPen); + pDC->setFont(ScaleFont); + int j=0; + int flag=0; + if(m_PointNum) + { + if(m_Lscx[m_PointNum-1].XE>0&&m_Lscx[m_PointNum-1].YN>0) flag=1; + else if(m_Lscx[m_PointNum-1].XE<0&&m_Lscx[m_PointNum-1].YN<0) flag=0; + } + for(int i=1;isetPen(m_GridPen); + pDC->drawLine(points1,points2); + points2.setY(points1.y()+ScaleFontHeight/2); + value=QString::number(TVD+sdep); + if(flag) points2.setX(points1.x()-(value.length()+1)*ScaleFontWidth); + else points2.setX(points1.x()+0.3*GetPixelPerCm()); + pDC->setPen(m_ScaleColor); + pDC->setFont(ScaleFont); + pDC->drawText(points2,value); + } + /////////画三维井径图或成像图 + pDC->setPen(m_GuiJiPen); + j=0; + float XE1,YN1; + int k=0; + int wval=0; + int Num_CAL=0,Num_Wave=0; + Slf_WAVE waveinf; + Slf_CURVE curveinf; + memset(&waveinf,0,sizeof(Slf_WAVE)); + memset(&curveinf,0,sizeof(Slf_CURVE)); + if(objViewInfo->m_IsDrawProperty) + { + QString cs=objViewInfo->m_CurveName1; + QString slffilen,curvename; + int ind=cs.indexOf("@"); + if(ind>-1) + { + curvename=cs.left(ind); + slffilen=cs.mid(ind+1); + } + if(!slffilen.isEmpty()&&!curvename.isEmpty()) + { + CLogIO slf; + if(slf.Open(slffilen.toStdString().c_str(),CSlfIO::modeRead)) + { + int index=slf.OpenCurve(curvename.toStdString().c_str()); + if(index>-1) + { + slf.GetCurveInfo(index,&curveinf); + int len=(curveinf.EndDepth-curveinf.StartDepth)/curveinf.DepLevel+1.5; + Num_CAL=len; + } + } + slf.Close(); + } + if(objViewInfo->m_IsDrawProperty==3) + { + QString cs=objViewInfo->m_CurveName2; + QString slffilen,curvename; + int ind=cs.indexOf("@"); + if(ind>-1) + { + curvename=cs.left(ind); + slffilen=cs.mid(ind+1); + } + if(!slffilen.isEmpty()&&!curvename.isEmpty()) + { + CLogIO slf; + if(slf.Open(slffilen.toStdString().c_str(),CSlfIO::modeRead)) + { + int index=slf.OpenWave(curvename.toStdString().c_str()); + if(index>-1) + { + slf.GetWaveInfo(index,&waveinf); + int len=(waveinf.EndDepth-waveinf.StartDepth)/waveinf.DepLevel+1.5; + Num_Wave=len; + wval=1; + } + } + slf.Close(); + } + } + } + int ind1=0; + float val=0; + bool flg=0; + QPoint *points1=new QPoint[360]; + QPoint *points2=new QPoint[360]; + j=0; + /////画轨迹 +/* + for(int i=0;iLPar.MaxWy) continue; + if(XE>LPar.MaxWy) continue; + if(YN>LPar.MaxWy) continue; + TVD=m_Lscx[i].TVD-sdep; + points[j]=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + j++; + } + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + if(j) pDC->drawPolyline(points,j); +*/ + CMemRdWt MemRdWt(sFilePath.toStdString().c_str()); + + struct INC_STRU INC={4,"TVDD GLD XE YN "}; + struct INP_STRU INP; + struct CONC_STRU CONC={0}; + struct HD_STRU HD={0,0,0,0,0,0,0,"JxProcess.inp","JxProcess.tpl"}; + struct CON_STRU CON={-1.,-3.17,-1.,-1.,25.,0.,0.,0.,30.0,0.,8.0,50.0,8.5,0,0.125}; + CONC.Noc=16; + strcpy(CONC.Name,"VDEP MAGD HBXG JSTG TLEVEL XE0 YN0 WELLTYPE GLDLEN CONANG HBITS VBITS BITS DDEP RLEV HO"); + strcpy(CONC.Script,"起始垂深;磁偏角;补芯高;套管深度;列表深度间隔;起始东西位移;起始南北位移;井类型(0-斜直井,1-水平井);狗腿度单位长度;子午线收敛角;水平视钻头尺寸;垂直视钻头尺寸;实际钻头尺寸;井斜表起始取整深度;点测井斜重采样;水平位移"); + strcpy(CONC.Options,";;;;;;;斜直井,水平井;;;;;;;;"); + QStringList DEVIS=GetSimilarCurves("DEVI"); + int idevi=-1; + for(int i=0;i-1) + { + strcat(INC.Name,DEVIS[i].toStdString().c_str()); + strcat(INC.Name," "); + INC.Noi++; + idevi=1; + break; + } + } + if(idevi<0) { + strcat(INC.Name,"DEVI"); + INC.Noi++; + } + { + QString cs=objViewInfo->m_CurveName1; + QString slffilen,curvename; + int ind=cs.indexOf("@"); + if(ind>-1) + { + curvename=cs.left(ind); + slffilen=cs.mid(ind+1); + strcat(INC.Name,curvename.toStdString().c_str()); + strcat(INC.Name," "); + INC.Noi++; + } + } + { + QString cs=objViewInfo->m_CurveName2; + QString slffilen,curvename; + int ind=cs.indexOf("@"); + if(ind>-1) + { + curvename=cs.left(ind); + slffilen=cs.mid(ind+1); + strcat(INC.Name,curvename.toStdString().c_str()); + strcat(INC.Name," "); + INC.Noi++; + } + } + + MemRdWt.SetStruct(&INC,NULL,&INP,NULL,&CONC,&CON,&HD,NULL); + HD.Sdep=0; + HD.Edep=0; + HD.Dep=0; + MemRdWt.Const(); + HD.Sdep=m_Lscx[0].DEPTH; + HD.Edep=m_Lscx[m_PointNum-1].DEPTH; + HD.Dep=HD.Sdep; + HD.StartDep=HD.Sdep; + HD.EndDep=HD.Edep; + MemRdWt.In(); + float DEVI=0; + float DRlev=objViewInfo->m_Rlev; + if(DRlev<=0) DRlev=1; + int num=(m_Lscx[m_PointNum-1].DEPTH-m_Lscx[0].DEPTH)/DRlev+1.5; + float sss=height/num; + if(sss<1) sss=1; + DRlev=(height/sss-1.5)/((m_Lscx[m_PointNum-1].DEPTH-m_Lscx[0].DEPTH)); + if(DRlevm_Rlev) DRlev=objViewInfo->m_Rlev; + int ind=0,m=0; + delete []points; + if(numm_CalLineProperty(); +// TranslateOSGLineStyleToQtPenStyle(pr,lp1.GetLineStyle()); +// pr.setWidthF(GetLineWidth(pDC,lp1.GetLineWidth())); +// osg::Vec4f vco(0,0,0,1); +// vco=lp1.GetLineColor(); + +// QColor co=QColor::fromRgb(vco[0]*255,vco[1]*255,vco[2]*255,vco[3]*255); +// pr.setColor(co);// + + float minval=objViewInfo->m_baseval,maxval=objViewInfo->m_maxval; + for(float dep=m_Lscx[0].DEPTH;depLPar.MaxWy) continue; + if(XE>LPar.MaxWy) continue; + if(YN>LPar.MaxWy) continue; + TVD=INP.yy[0]-sdep;//m_Lscx[i].TVD-sdep; + if(TVD<0) continue; + points[j]=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + j++; + + if(!objViewInfo->m_IsDrawProperty) + { + if(j>1) + { + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + pDC->drawLine(points[j-2],points[j-1]);//j); + } + continue; + } + else if(objViewInfo->m_IsDrawProperty==1) val=INP.yy[1];//m_Lscx[i].GLD; + else if(objViewInfo->m_IsDrawProperty) + { +// if(!curveinf.DepLevel) continue; +// ind=(dep-curveinf.StartDepth)/curveinf.DepLevel+0.5; +// if(ind<0||ind>=Num_CAL) continue; + val=INP.yy[5];//cal[ind1]; + if(val==-9999.0||val==-99999||val==-999.25) + { + if(j>1) + { + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + pDC->drawLine(points[j-2],points[j-1]);//j); + } + continue; + } + if(objViewInfo->m_IsDrawProperty==3) + { + if(!waveinf.DepLevel) { + if(j>1) + { + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + pDC->drawLine(points[j-2],points[j-1]);//j); + } + continue; + } + ind=(dep-waveinf.StartDepth)/waveinf.DepLevel+0.5; + if(ind<0||ind>=Num_Wave) { + if(j>1) + { + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + pDC->drawLine(points[j-2],points[j-1]);//j); + } + continue; + } + } + } + val*=objViewInfo->m_calscale; + k=0; + DEVI=INP.yy[4];//m_Lscx[i].DEVI; + if(DEVI==-9999.0||DEVI==-99999||DEVI==-999.25) { + if(j>1) + { + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + pDC->drawLine(points[j-2],points[j-1]);//j); + } + continue; + } + for(int n=0;n<360;n+=1) + { + XE1=XE+val*cos(n*PI/180)*cos(DEVI*PI/180); + YN1=YN+val*sin(n*PI/180)*sin(DEVI*PI/180); + points1[k]=ComputeXY(XE1,YN1,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + k++; + } + if(objViewInfo->m_IsDrawProperty!=3) { + pDC->setBrush(Qt::NoBrush); + m=(val-minval)/(maxval-minval)*rgbList.size(); + if(m>=rgbList.size()) m=rgbList.size()-1; + if(m<0) m=0; + pr.setColor(rgbList.at(m)); + + pDC->setPen(pr); + pDC->drawPolyline(points1,k); + if(j>1) + { + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + pDC->drawLine(points[j-2],points[j-1]);//j); + } + continue; + } + if(!flg) { + flg=1; + } + else { + if(INP.yy[INP.InpPos[6]]==-9999.0|| + INP.yy[INP.InpPos[6]]==-99999|| + INP.yy[INP.InpPos[6]]==-999.25) { + if(j>1) + { + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + pDC->drawLine(points[j-2],points[j-1]);//j); + } + continue; + } + for(int n=k-1;n>0;n--) + { + m=(n-1)*INP.InpLen[6]/(float)k; + if(m<0||m>=INP.InpLen[6]) continue; + m=(INP.yy[INP.InpPos[6]+m]-minval)/(maxval-minval)*rgbList.size(); + if(m>=rgbList.size()) m=rgbList.size()-1; + if(m<0) m=0; + if(!objViewInfo->m_isBlock) + { + pDC->setBrush(Qt::NoBrush);//QColor(rgbList.at(m))); + pr.setColor(rgbList.at(m)); + pDC->setPen(pr);//Qt::NoPen); + pDC->drawLine(points2[n-1],points2[n]); + } + else { + pDC->setPen(Qt::NoPen); + pDC->setBrush(QColor(rgbList.at(m))); + QVectorpoints3; + points3.append(points2[n-1]); + points3.append(points2[n]); + points3.append(points1[n]); + points3.append(points1[n-1]); + points3.append(points2[n-1]); + pDC->drawPolygon(points3); + } + if(n==180&&j>1) + { + pDC->setBrush(Qt::NoBrush); + pDC->setPen(m_GuiJiPen); + pDC->drawLine(points[j-2],points[j-1]);//j); + } + } + } + for (int n=0;nm_LineProperty(); +// TranslateOSGLineStyleToQtPenStyle(pen1,lp.GetLineStyle()); +// pen1.setWidthF(GetLineWidth(pDC,lp.GetLineWidth())); +// osg::Vec4f vco1(0,0,0,1); +// vco1=objViewInfo->m_LineProperty().GetLineColor(); + +// QColor co1=QColor::fromRgb(vco1[0]*255,vco1[1]*255,vco1[2]*255,vco1[3]*255); +// pen1.setColor(co1);// + + pDC->setPen(pen1); + //底部轨迹投影线 + j=0; + for(int i=0;iLPar.MaxWy) continue; + if(YN>LPar.MaxWy) continue; + TVD=m_Lscx[m_PointNum-1].TVD-sdep; + points[j]=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + j++; + } + if(j) { + pDC->drawPolyline(points,j); + } + //顶-底轨迹投影线 + j=0; + int xda=objViewInfo->m_LttxDela; + if(xda<=0) xda=5; + pDC->setPen(m_GridPen); + for(int i=0;iLPar.MaxWy) continue; + if(YN>LPar.MaxWy) continue; + TVD=m_Lscx[i].TVD-sdep; + points[0]=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + TVD=m_Lscx[m_PointNum-1].TVD-sdep; + points[1]=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPolyline(points,2); + } + delete []points; + float ZbAngle=angle_z; + if(m_FstPlotBx) + { + int j=0; + QPoint *points1=new QPoint[36]; + for(int k=0;ksetPen(mPen); + pDC->drawPolyline(points1,j); + + XE=Tvd_BxInf.Tvd_BxPar[k].BxScWy*sin(Tvd_BxInf.Tvd_BxPar[k].BxScFw*PI/180)+0*cos(0*PI/180); + YN=Tvd_BxInf.Tvd_BxPar[k].BxScWy*cos(Tvd_BxInf.Tvd_BxPar[k].BxScFw*PI/180)+0*sin(0*PI/180); + points1[0]=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPoint(points1[0]); + QString name=Tvd_BxInf.Tvd_BxPar[k].BNAME; + name+='\''; + pDC->setFont(NoteFont); + pDC->drawText(points1[0],name); + j=0; + for(int i=0;i<360;i+=10) + { + TVD=Tvd_BxInf.Tvd_BxPar[k].BxDep-sdep; + XE=Tvd_BxInf.Tvd_BxPar[k].BxWy*sin(Tvd_BxInf.Tvd_BxPar[k].BxFw*PI/180)+Tvd_BxInf.Tvd_BxPar[k].BxBj*cos(i*PI/180); + YN=Tvd_BxInf.Tvd_BxPar[k].BxWy*cos(Tvd_BxInf.Tvd_BxPar[k].BxFw*PI/180)+Tvd_BxInf.Tvd_BxPar[k].BxBj*sin(i*PI/180); + points1[j]=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + j++; + } + QPen nPen(m_SjBxPointMessage.Color); + nPen.setWidth(2); + pDC->setPen(nPen); + pDC->drawPolyline(points1,j); + XE=Tvd_BxInf.Tvd_BxPar[k].BxWy*sin(Tvd_BxInf.Tvd_BxPar[k].BxFw*PI/180)+0*cos(0*PI/180); + YN=Tvd_BxInf.Tvd_BxPar[k].BxWy*cos(Tvd_BxInf.Tvd_BxPar[k].BxFw*PI/180)+0*sin(0*PI/180); + points1[0]=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac); + pDC->drawPoint(points1[0]); + pDC->setFont(NoteFont); + pDC->drawText(points1[0],Tvd_BxInf.Tvd_BxPar[k].BNAME); + } + delete points1; + } + y=y00-dy+ScaleFontHeight*4; + y+=2*GetPixelPerCm()*yfactor; + return y; +} +int CDrawTvd::DrawBxcs(int y_Start1, QPainter* pDC,QRectF mrt) +{ + if(Tvd_BxInf.BxNum<=0)return y_Start1; + TPar.Rec_Height=objViewInfo->m_Rec_Height; + + float Rec_Height=TPar.Rec_Height*GetPixelPerCm(); + int x,y,y0; + float width=m_Width*GetPixelPerCm()*xfactor; + float height;; + //判断是否绘制了数据表,如果有,按边宽度 + if(m_IsDrawTable) + { + float w[20]; + width=0; + for(int i=0;i0)width++; + } + y0=y_Start1; + // draw grid + //横线 + int x0=XCenter-width/2; + pDC->setPen(m_FramePen); + pDC->drawLine(x0,y0,x0+width,y0); + for(int i=0;i<=Tvd_BxInf.BxNum;i++) + { + if(i==Tvd_BxInf.BxNum)pDC->setPen(m_FramePen); + else pDC->setPen(m_GridPen); + y=y0+(i+1)*Rec_Height*yfactor; + pDC->drawLine(x0,y,x0+width,y); + } + //纵线 + int ZdNum=9;//显示靶心参数个数,如果是斜直井,显示9个参数;如果是水平井,显示12个参数;判断井类型标准:靶半高、靶半宽参数不为0 + if((Tvd_BxInf.Tvd_BxPar[0].BBG>0)&&(Tvd_BxInf.Tvd_BxPar[0].BBK>0))ZdNum=12; + for(int i=0;i<=ZdNum;i++) + { + if(i==0||i==ZdNum)pDC->setPen(m_FramePen); + else pDC->setPen(m_GridPen); + x=x0+i*width/ZdNum; + pDC->drawLine(x,y0,x,y); + } + QRect rec0(QPoint(x0,y0),QPoint(x0+width/ZdNum,y0+Rec_Height*yfactor)); + QString ss[9]={"靶心序号","设计垂深","对应斜深","设计方位","实测方位","设计位移","实测位移","靶心半径","靶心距"};//,"垂深","方位","位移","井斜角"}; + QString ss1[12]={"靶心序号","设计垂深","实测垂深","对应斜深","设计方位","实测方位","设计位移","实测位移","靶半宽","靶心距","靶半高","垂直距离"}; + QString value; + pDC->setPen(m_TableColor); + pDC->setFont(TableFont); + for(int i=0;idrawText(rec,Qt::AlignCenter |Qt::AlignTop,ss[i]); + else pDC->drawText(rec,Qt::AlignCenter |Qt::AlignTop,ss1[i]); + for(int j=0;jdrawText(rtt,Qt::AlignCenter |Qt::AlignTop,value); + } + } + + y+=20*yfactor; + return y; +} +//void CDrawTvd::_Update( eUpdateEvent e,CObjectEventParam *pEventParam ) +//{ +// GetProperty(); +// if( e == eUpdate_ViewInfo&&pEventParam&&pEventParam->strPropertyIDName=="WellName" )//切换数据 +// { +// objViewInfo = dynamic_cast(m_pViewInfo); +// if(objViewInfo) +// { +// //Tvd +// sFilePath=objViewInfo->m_WellName; +// if(sFilePath.indexOf("@")>-1) +// { +// int ind=sFilePath.indexOf("@"); +// m_TableName = sFilePath.left(ind); +// //if(m_pWellLog)m_pWellLog->SetName(m_TableName); +// sFilePath=sFilePath.mid(ind+1); +// } +// ReadData(); +// } +// } +//} +//BEGIN_REGISTER_OBJECT(CObjDrawTvd) +// QUuid(GetClassID_ObjDrawTvd()) +// END_REGISTER_OBJECT( CObjDrawTvd ); + +//BEGIN_REGISTER_OBJECTVIEWINFO(CViewInfo) +// sOSGObjectViewInfoKey( GetClassID_ObjDrawTvd(),GetWindowTypeID_QtGeoGuideSection() ), +// sOSGObjectViewInfoKey( GetClassID_ObjDrawTvd(),GetWindowTypeID_QtMultiWellSection() ), +// sOSGObjectViewInfoKey( GetClassID_ObjDrawTvd(),GetWindowTypeID_QtWellSection() ) +// END_REGISTER_OBJECTVIEWINFO( CViewInfo ); + +//BEGIN_REGISTER_NODEBUILDER(CDrawTvd) +// sVecNodebuiderKey( GetClassID_ObjDrawTvd(),GetWindowTypeID_QtWellSection()), +// sVecNodebuiderKey( GetClassID_ObjDrawTvd(),GetWindowTypeID_QtMultiWellSection() ), +// sVecNodebuiderKey( GetClassID_ObjDrawTvd(),GetWindowTypeID_QtGeoGuideSection() ) +// END_REGISTER_NODEBUILDER( CDrawTvd ); + +//END_OSGGRAPHICS_NAMESPACE diff --git a/logPlus/DrawTvd.h b/logPlus/DrawTvd.h new file mode 100644 index 0000000..fc86866 --- /dev/null +++ b/logPlus/DrawTvd.h @@ -0,0 +1,215 @@ +#ifndef DrawTvd_H +#define DrawTvd_H + +#include +#include +#include +//#include "QtNodeBuilder.h" +//#include "QtWellTrackNode.h" +//#include "QtWellSceneManager.h" +//#include "ObjWelllog.h" +//#include "WellSectionConst.h" +//#include "WellSheetItem.h" +//#include "ObjWellLogWavefile.h" +#include "ViewInfo.h" +//#include "Graphics2D/palettecolor/PaiColorTableData.h" +#include "DrawBase.h" + +//BEGIN_OSGGRAPHICS_NAMESPACE; + +#define GetClassID_ObjDrawTvd() "{98EB165F-1371-4D9F-9476-E4F5C19869B7}" +typedef struct BxPointMessage +{ + int Style; + int Size; + QColor Color; + char MiaoShu[16]; +}; +struct LSCX_DATA +{ + int NO;// 序号 NONE INT 4 + float DEPTH;// 深度 m FLOAT 4 + float TVD ;// 垂直深度 m FLOAT 4 + float DEVI ;// 井斜角 G FLOAT 4 + float AZIM ;// 井斜方位 G FLOAT 4 + float AZZ ;// 真方位 G FLOAT 4 + float XE ;// 东西位移 m FLOAT 4 + float YN ;// 南北位移 m FLOAT 4 + float HOFS ;// 水平位移 m FLOAT 4 + float HOAZ ;// 闭合方位 G FLOAT 4 + float GLD ;// 狗腿度 NONE FLOAT 4 +}; +struct TVD_BXPAR +{ + int NO;;//靶心号 + float BxDep;//设计垂深 + float BxFw;//设计方位 + float BxWy;//设计位移 + float BxBj;//靶心半径 + float BBG;//靶半高 + float BBK;//靶半宽 + char BNAME[16]; + float BxScTDep;//实测垂深 + float BxXDep;//对应斜深 + float BxScFw;//实测方位 + float BxScWy;//实测位移 + float BxJ;//靶心距 + float BxCzJ;//靶垂直距离 +}; +struct TVD_BXINF +{ + int BxNum; + TVD_BXPAR Tvd_BxPar[10]; +}; +struct TABLE_ZD_INF +{ + char name[16]; + char aliasname[32];//字段别名 + char unit[16];//单位 + int w;//打印宽度(字符数) + int num;//数据位数 + int dnum;//小数位数 + int mode;//对齐方式 +}; +struct TABLE_PAR +{ + float Head_Height; + float Rec_Height; + int ZdNum;//字段个数 + TABLE_ZD_INF Zd_Inf[12]; +}; +struct FST_PAR +{ + float MinXes; + float MaxXes; + float MinYns; + float MaxYns; + float MinXe; + float MaxXe; + float MinYn; + float MaxYn; +}; +struct CST_PAR +{ + float MaxWys; + float MaxTVD; + float MinTVD; + float MaxWy; + float MinWy; + float DepSpace; + float CsAngle; +}; +struct LTGJT_PAR +{ + float MaxWys; + float MaxWy; + float DepSpace; + float PrintDepSpace; + float CsAngle; +}; + +//class CObjDrawTvd :public CObjWellLog +//{ +//public: +// CObjDrawTvd(){}; +// virtual ~CObjDrawTvd(){}; +// virtual QUuid GetTypeID()const{return GetClassID_ObjDrawTvd();}; +//}; + +class CDrawTvd:public CDrawBase +{ +public: + CDrawTvd(void); + virtual ~CDrawTvd(void); + virtual void ReadData(); + //virtual void SaveData(); + virtual void Refurbish(); + virtual void InitProperty(); + virtual void GetProperty(); + //virtual void _Update( eUpdateEvent e,CObjectEventParam *pEventParam ); + int m_PointNum; + CViewInfo* objViewInfo; + CViewInfo* m_pViewInfo; + + // 以下变量需保存在模板里 + //Tvd + QString m_TableName; + QString m_AliasName; + QString m_AliasWellName;//显示井名 + bool m_IsDrawBxcs; + bool m_IsDrawTable; + bool m_IsDrawFst; + bool m_IsDrawCst; + bool m_IsDrawCst1; + bool m_IsDrawCst2; + bool m_IsDrawCst3; + bool m_IsDrawLtgjt; + LSCX_DATA *m_Lscx; + + int DrawTable(int y_Start, QPainter* pDC,QRectF mrt); + int DrawFst(int y_Start, QPainter* pDC,QRectF mrt); + int DrawCst(int y_Start, QPainter* pDC,QRectF mrt,CST_PAR CPar,int no=3); + int DrawLtgjt(int y_Start, QPainter* pDC,QRectF mrt); + int DrawBxcs(int y_Start, QPainter* pDC,QRectF mrt); + // 4-边框,格线,轨迹线,靶心半径,靶心连线的宽度、类型和颜色 + int m_FrameWidth,m_GridWidth,m_GuijiWidth,m_BxbjWidth,m_BxlxWidth; + QColor m_FrameColor,m_GridColor,m_GuijiColor,m_BxbjColor,m_BxlxColor; + //道头(井眼轨迹)、标题(三图一表的标题)、数据表、刻度、注释的字体属性 + QFont m_HeadFont,m_TitleFont,m_TableFont,m_ScaleFont,m_NoteFont; + QColor m_HeadColor,m_TitleColor,m_TableColor,m_ScaleColor,m_NoteColor; + int m_FontAngle[5]; + BOOL IsVert[5];//字符串方向是否垂直(1) + int hFormat[5],vFormat[5];//水平、垂直对齐方式 + BOOL ShowHComb,ShowVComb,ShowVertCheck;//水平、垂直对齐方式设置组件、字符串方向(垂直)设置 + QFont *Font1,*Font2,*FontTable; + QPen m_GuiJiPen,m_FramePen,m_GridPen,m_BxbjPen,m_BxlxPen; + QString m_Title_table,m_Title_cst,m_Title_fst,m_Title_ltgj; + float Xmax,Xmin,Ymax,Ymin,delt;//刻度最大最小值 + float Xmaxs,Xmins,Ymaxs,Ymins;//实际最大最小值 + float BxDep,BxDep2,BxBj,BxBj2,BxFw,BxFw2,BxWy,BxWy2; + float xfactor,yfactor,xscale,yscale; + int TableFontWidth,ScaleFontWidth,ScaleFontHeight,NoteFontWidth,NoteFontHeight; + int TitleFontWidth,TitleFontHeight; + float m_Width; + float m_Height; + float m_Bottom; + float m_Left; + float m_Right; + float m_Top; + int XCenter; + int flag; + TVD_BXINF Tvd_BxInf,Tvd_BxInf_Int; + FST_PAR FPar; + TABLE_PAR TPar; + CST_PAR CPar; + CST_PAR CPar_HOFF; + CST_PAR CPar_XE; + CST_PAR CPar_YN; + LTGJT_PAR LPar; + // 2013.6.8 add for 绘制靶心 + BxPointMessage m_SjBxPointMessage,m_ScBxPointMessage;//设计靶心点信息,实测靶心点信息 + BOOL m_FstPlotBx; + BOOL m_CstPlotBx; + BOOL m_LtgjtPlotBx; + BOOL m_PlotBxlx; + BOOL m_bPlotBhx; //绘制闭合线 + //Tvd + void DrawTvd(QPainter* pdc,QRectF mrt); + /** + * @brief 绘制曲线道头 + */ + virtual void DrawHead(QPainter *pPainter,QRectF rect,QRectF trect=QRectF()); + /** + * @brief 绘制曲线体 + */ + virtual void DrawClient(QPainter *pPainter,QRectF rt); + virtual void DrawSidelines(QPainter *pPainter,QRectF rt); + QPoint ComputeXY(float val_x,float val_y,float val_z,float angle_x,float angle_y,float angle_z,float x0,float y0,float xfac,float yfac); + QFont TableFont; + QFont ScaleFont; + QFont NoteFont; + QFont TitleFont; + QList rgbList; +}; +//END_OSGGRAPHICS_NAMESPACE +#endif // DrawTvd_H diff --git a/logPlus/ViewInfo.cpp b/logPlus/ViewInfo.cpp new file mode 100644 index 0000000..a628ec8 --- /dev/null +++ b/logPlus/ViewInfo.cpp @@ -0,0 +1,95 @@ +#include "ViewInfo.h" + +CViewInfo::CViewInfo() +{ + m_sName="井斜三图一表"; + //tvd + m_AliasName="井斜三图一表"; + m_AliasWellName=""; + m_XScale=1; + m_YScale=1; + m_heqw=0; + m_DepSpaceN=0; + // 2-边框,格线,轨迹线,靶心半径,靶心连线的宽度、类型和颜色 + m_FrameWidth=3; + m_GridWidth=1; + m_GuijiWidth=m_BxbjWidth=m_BxlxWidth=2; + m_FrameColor=m_GuijiColor=qRgb(0,0,0); + m_GridColor=qRgb(127,127,127); + m_BxbjColor=m_BxlxColor=qRgb(255,0,0); + m_Title_table="井连续井斜仪测量数据表"; + m_Title_cst="井井眼侧视图"; + m_DepthLeft=false; + m_Title_fst="井井眼俯视图"; + m_Title_ltgj="井井身立体空间轨迹图"; + //tvd + + m_IsDrawBxcs=1; + m_IsDrawTable=1; + m_IsDrawFst=1; + m_IsDrawCst=0; + m_IsDrawCst1=1; + m_IsDrawCst2=1; + m_IsDrawCst3=1; + m_IsDrawLtgjt=1; + m_FrameWidth=3; + m_FrameColor=qRgb(0,0,0); + m_HeadFont=m_TitleFont=QFont("黑体",16); + m_TableFont=m_NoteFont=QFont("黑体",10); + m_ScaleFont=QFont("黑体",8); + m_HeadColor=m_TitleColor=m_TableColor=m_ScaleColor=m_NoteColor=qRgb(0,0,0); + m_Head_Height=1.6; + m_Rec_Height=0.8; + m_MinXe=-100.; + m_MaxXe=100.; + m_MinYn=-100.; + m_MaxYn=100.; + m_CsAngle=90.; + m_DepSpace=100.; + + m_MaxWy=100.; + m_MinWy=-100.; + m_MinTVD=0; + m_MaxTVD=10000; + m_LttxDela=5; + m_MaxWy_HOFF=100.; + m_MinWy_HOFF=-100.; + m_MinTVD_HOFF=0; + m_MaxTVD_HOFF=10000; + + m_MaxWy_XE=100.; + m_MinWy_XE=-100.; + m_MinTVD_XE=0; + m_MaxTVD_XE=10000; + m_isDrawNote=true; + m_MaxWy_YN=100.; + m_MinWy_YN=-100.; + m_MinTVD_YN=0; + m_MaxTVD_YN=10000; + + m_LttAngle=45; + m_LttAngle_X=10; + m_LttAngle_Z=0; + m_is3DFrame=true; + m_DepSpace1=100.; + m_MaxWy1=100.; + m_bPlotBhx = 0; + m_heqw=false; + m_XD=20; + m_YD=20; + m_LTTTVD=0; + m_IsDrawBX=true; + m_IsDrawProperty=0; + m_CurveName1=""; + m_CurveName2=""; + m_calscale=1; + m_baseval=0; + m_maxval=500; + m_Rlev=5; + + m_isBlock=false; + m_DrawBox=true; +} +CViewInfo::~CViewInfo() +{ +} diff --git a/logPlus/ViewInfo.h b/logPlus/ViewInfo.h new file mode 100644 index 0000000..d738d39 --- /dev/null +++ b/logPlus/ViewInfo.h @@ -0,0 +1,135 @@ +/** +* @file ViewInfo.h +* @brief 井斜三图一表 +* @date +* @author: +*/ +#ifndef PAI_FRAME_VIEWINFO_H +#define PAI_FRAME_VIEWINFO_H + +#include +#include +#include + +class CViewInfo : public QObject +{ + Q_OBJECT +public: + CViewInfo(); + virtual ~CViewInfo(); + + //通常-井名 + QString m_sName; + QString m_WellName; + bool m_DrawBox; + double m_hHeight; + //tvd + bool m_IsDrawBxcs; + bool m_IsDrawTable; + bool m_IsDrawFst; + bool m_IsDrawCst; + bool m_IsDrawCst1; + bool m_IsDrawCst2; + bool m_IsDrawCst3; + bool m_DepthLeft; + + bool m_IsDrawLtgjt; + bool m_IsDrawBX; + QString m_AliasName; + QString m_AliasWellName; + float m_XScale; + float m_YScale; + // 1-边框,格线,轨迹线,靶心半径,靶心连线的宽度、类型和颜色 + int m_FrameWidth; + int m_GridWidth; + int m_GuijiWidth; + int m_BxbjWidth; + int m_BxlxWidth; + //color + QColor m_FrameColor; + QColor m_GridColor; + QColor m_GuijiColor; + QColor m_BxbjColor; + QColor m_BxlxColor; + bool m_isDrawNote; +//道头(井眼轨迹)、标题(三图一表的标题)、数据表、刻度、注释的字体属性 + //font + QFont m_HeadFont; + QFont m_TitleFont; + QFont m_TableFont; + QFont m_ScaleFont; + QFont m_NoteFont; + //color + QColor m_HeadColor; + QColor m_TitleColor; + QColor m_TableColor; + QColor m_ScaleColor; + QColor m_NoteColor; +//井斜数据表参数 + QString m_Title_table; + float m_Head_Height; + float m_Rec_Height; +//俯视图参数 + QString m_Title_fst; + double m_MinXe; + double m_MaxXe; + double m_MinYn; + double m_MaxYn; + //绘制闭合线 + bool m_bPlotBhx; +//侧视图参数 + QString m_Title_cst; + bool m_heqw; + double m_MaxWy; + double m_MinWy; + double m_MaxTVD; + double m_MinTVD; + +//// 水平位移 + double m_MaxWy_HOFF; + double m_MinWy_HOFF; + double m_MaxTVD_HOFF; + double m_MinTVD_HOFF; + + ////////////////////////////////////////////////////////////////////////// + ///向东 + double m_MaxWy_XE; + double m_MinWy_XE; + double m_MaxTVD_XE; + double m_MinTVD_XE; +//向北 + double m_MaxWy_YN; + double m_MinWy_YN; + double m_MaxTVD_YN; + double m_MinTVD_YN; + double m_DepSpace; + double m_DepSpaceN; + double m_CsAngle; + +//立体轨迹图参数 + QString m_Title_ltgj; + double m_MaxWy1; + double m_LTTTVD; + double m_DepSpace1; + double m_LttAngle; + double m_LttAngle_X; + double m_LttAngle_Z; + bool m_is3DFrame; + double m_LttxDela; + + double m_XD; + double m_YD; + int m_IsDrawProperty; + QString m_CurveName1; + QString m_CurveName2; + + int m_ColorTableIndex; + double m_calscale; + double m_baseval; + double m_maxval; + double m_Rlev; + bool m_isBlock; + //tvd +}; +#endif + diff --git a/logPlus/formdraw.cpp b/logPlus/formdraw.cpp index f8e3a12..313f350 100644 --- a/logPlus/formdraw.cpp +++ b/logPlus/formdraw.cpp @@ -14,6 +14,7 @@ #include "ObjGeostratums.h" #include "ObjTextResult.h" #include "DrawNrad.h" +#include "formline.h" //以下参数从配置文件读取 extern int g_iIndex; @@ -1276,6 +1277,61 @@ void FormDraw::s_addDrawImage(QString strUuid, QString strSlfName, QString strWe //斜井三图一表 void FormDraw::s_addSantuyibiao(QString strUuid, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, int nW) { + //井名&道名不一致 + if(strUuid == m_strUuid && m_strWellName == strWellName && m_strTrackName == strTrackName) + { + } + else + { + return; + } + + if(m_listLineName.contains(strLineName)) + { + qDebug() << "FormDraw strLineName already exist! " << strLineName; + return; + } + // + FormLine *curv = new FormLine(this, strSlfName, strWellName, strTrackName, strLineName); + curv->m_strUuid = m_strUuid; + //背景设置成透明色 +// curv->setBackground(Qt::transparent); +// curv->setStyleSheet("background: transparent;"); + + double dHight = 0; + dHight = (g_iY2-g_iY1)*100.0/(double)g_iScale * g_dPixelPerCm; + if(g_iShow==1) + { + //显示刻度 + dHight = dHight+30; + } + qDebug() << "FormDraw dHight=" << QString::number((int)dHight); + if(dHight>32767) + { + dHight = 32767; + } + curv->setGeometry(0, 0, g_iOneWidth, (int)dHight); + curv->show(); + + //斜井三图一表 + QString strWaveName = ""; + int _nSamples = 0; + curv->DrawTvd(); + +// // +// connect(curv, SIGNAL(mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*))); + + // + m_listLineName.push_back(strLineName); + + QString strAliasName = "斜井三图一表"; + QString strUnit = ""; + QColor newlineColor=QColor(0,0,0); + double width=2; + QString strScaleType = ""; + //道-对象 + m_formTrack->Add(strSlfName, m_strWellName, m_strTrackName, strWaveName, strAliasName, strUnit, newlineColor, width, _nSamples, 0, strScaleType, "SantuyibiaoObject"); + } //裂痕 diff --git a/logPlus/formline.cpp b/logPlus/formline.cpp index d61682e..41ee2ec 100644 --- a/logPlus/formline.cpp +++ b/logPlus/formline.cpp @@ -1,15 +1,56 @@ #include "formline.h" #include "ui_formline.h" +#include +#include "DrawTvd.h" //demo画线,暂时不用 -FormLine::FormLine(QWidget *parent) : +FormLine::FormLine(QWidget *parent, QString strSlfName, QString strWellName, QString strTrackName, QString strLineName) : QWidget(parent), ui(new Ui::FormLine) { ui->setupUi(this); + + m_strSlfName = strSlfName; + m_strWellName = strWellName; + m_strTrackName = strTrackName; + m_strLineName = strLineName; +} + +void FormLine::DrawTvd() +{ + // + QPainter painter(this); + QRect rect = this->rect(); + //背景透明 + painter.fillRect(rect.left(), rect.top(), rect.width(), rect.height(), QColor(0, 0, 0, 0)); //QColor(67, 67, 67, 100) + + CDrawTvd *drawTvd = new CDrawTvd(); + drawTvd->sFilePath = m_strSlfName; + drawTvd->DrawTvd(&painter, rect); } FormLine::~FormLine() { delete ui; } + +void FormLine::paintEvent(QPaintEvent*) +{ +// QPainter painter(this); +// QRect rect = this->rect(); +// //背景透明 +// painter.fillRect(rect.left(), rect.top(), rect.width(), rect.height(), QColor(0, 0, 0, 0)); //QColor(67, 67, 67, 100) + +// painter.setPen(QPen(Qt::green,2,Qt::DashLine)); +// //painter.setBrush(QBrush(Qt::red,Qt::SolidPattern)); + +// QFont font1("微软雅黑", 10, false, false); //fontSize 10 +// painter.setFont(font1); +// painter.setPen(QColor(0, 0, 0)); // fontColor QColor(220, 220, 220) +// painter.drawText(rect.left() + 10, 10, ("画图")); // titleBarText QStringLiteral("动画") + + +// QRect rectRound(rect.left()+2,rect.top()+4, rect.width()-3, rect.height()-4); +// painter.drawRoundRect(rectRound); + +} diff --git a/logPlus/formline.h b/logPlus/formline.h index e603083..59937b0 100644 --- a/logPlus/formline.h +++ b/logPlus/formline.h @@ -13,11 +13,25 @@ class FormLine : public QWidget Q_OBJECT public: - explicit FormLine(QWidget *parent = nullptr); + explicit FormLine(QWidget *parent = nullptr, QString strSlfName="", QString strWellName="", QString strTrackName="", QString strLineName=""); ~FormLine(); private: Ui::FormLine *ui; + +protected: + void paintEvent(QPaintEvent *event); + +public: + QString m_strUuid; + QString m_strSlfName; + QString m_strWellName; + QString m_strTrackName; + QString m_strLineName; + +public: + void DrawTvd(); + }; #endif // FORMLINE_H diff --git a/logPlus/formline.ui b/logPlus/formline.ui index d55750d..9b26244 100644 --- a/logPlus/formline.ui +++ b/logPlus/formline.ui @@ -26,42 +26,6 @@ 0 - - - - QTableCornerButton::section -{ - background-color: #FF0000; - color:#FFFFFF; - border:1px solid #FF0000; -} - -QTableWidget -{ - color: #FFFFFF; - gridline-color: #1d6382; - border: 1px solid #FF0000 ; - background-color: #FF0000; -} - - -QTableWidget::item -{ - padding-left:5px -} -QTableWidget::item:hover,QListView::item:hover,QTreeView::item:hover,QHeaderView,QHeaderView::section,QTableCornerButton:section{ - color:#FFFFFF; - background:#FF0000; -} - -QTableWidget::item:selected -{ - background-color: #FF0000; - color:#FFFFFF; -} - - - diff --git a/logPlus/formwell.cpp b/logPlus/formwell.cpp index 0eb9342..295e866 100644 --- a/logPlus/formwell.cpp +++ b/logPlus/formwell.cpp @@ -69,7 +69,9 @@ void FormWell::s_NewTrack(QString strUuid, QString strWellName, QString strSlfNa } if(nW <= 0) + { nW = g_iOneWidth; + } //因为tableWidget需要提前规定好行数与列数 int rowcount = 3; //总行数 diff --git a/logPlus/logPlus.pro b/logPlus/logPlus.pro index 4ac57f1..35bff4f 100644 --- a/logPlus/logPlus.pro +++ b/logPlus/logPlus.pro @@ -32,6 +32,7 @@ SOURCES += \ ConsoleOutputWidget.cpp \ DrawFac.cpp \ DrawNrad.cpp \ + DrawTvd.cpp \ GeoIndicatorGenerator.cpp \ Gradient.cpp \ InDefTableDlg.cpp \ @@ -52,6 +53,7 @@ SOURCES += \ TransparentDraggableRect.cpp \ TransparentDraggableResult.cpp \ TransparentDraggableSwallCore.cpp \ + ViewInfo.cpp \ backgrounddelegate.cpp \ customtabbar.cpp \ customtabwidget.cpp \ @@ -86,6 +88,7 @@ HEADERS += \ DraggablePixmap.h \ DrawFac.h \ DrawNrad.h \ + DrawTvd.h \ GeoIndicatorGenerator.h \ Gradient.h \ InDefTableDlg.h \ @@ -106,6 +109,7 @@ HEADERS += \ TransparentDraggableRect.h \ TransparentDraggableResult.h \ TransparentDraggableSwallCore.h \ + ViewInfo.h \ backgrounddelegate.h \ customtabbar.h \ customtabwidget.h \ @@ -184,6 +188,7 @@ INCLUDEPATH += ../../OSGDataModel/include INCLUDEPATH += ../../OSGFramework/include INCLUDEPATH += ../../DataOutput/include INCLUDEPATH += ../../DataMgr/include +INCLUDEPATH += ../../DrawBase/include CONFIG(debug, debug|release){ LIBS += -L../../Bin -lBaseFund @@ -195,6 +200,7 @@ CONFIG(debug, debug|release){ LIBS += -L../../Bin -lDataOutputd LIBS += -L../../Bin/ -lCallPlugind -lHPluginManaged LIBS += -L../../Bin/ -lDataMgrd + LIBS += -L../../Bin/ -lDrawBased #-lCallManaged } else { LIBS += -L../../Bin -lBaseFun @@ -206,5 +212,6 @@ CONFIG(debug, debug|release){ LIBS += -L../../Bin -lDataOutput LIBS += -L../../Bin/ -lCallPlugin -lHPluginManage LIBS += -L../../Bin/ -lDataMgr + LIBS += -L../../Bin/ -lDrawBase #-lCallManage } diff --git a/logPlus/mainwindowcurve.cpp b/logPlus/mainwindowcurve.cpp index 4aa0f44..f7ce6ce 100644 --- a/logPlus/mainwindowcurve.cpp +++ b/logPlus/mainwindowcurve.cpp @@ -102,7 +102,7 @@ MainWindowCurve::MainWindowCurve(QWidget *parent) : ui->tableWidget_3->horizontalHeader()->hide(); - connect(this, SIGNAL(sig_NewTrackChangeWidth(QString)), this, SLOT(s_NewTrackChangeWidth(QString))); + connect(this, SIGNAL(sig_NewTrackChangeWidth(QString, int)), this, SLOT(s_NewTrackChangeWidth(QString, int))); //connect(this, SIGNAL(sig_NewWell(QString, QString)), this, SLOT(s_NewWell(QString, QString))); connect(CallManage::getInstance(), SIGNAL(sig_mouseWheel(QWheelEvent*)), this, SLOT(s_mouseWheel(QWheelEvent*))); @@ -1005,7 +1005,7 @@ void MainWindowCurve::s_NewSantuyibiao() return; //新建井+道+曲线(首条) - NewWellAndTrack(sret.at(0), sret.at(1), "", "SantuyibiaoObject"); + NewWellAndTrack(sret.at(0), sret.at(1), "Santuyibiao", "SantuyibiaoObject"); } //裂缝 @@ -1347,7 +1347,7 @@ void MainWindowCurve::s_NewTDT() NewWellAndTrack(sret.at(0), sret.at(1), "", "TDTObject"); } -void MainWindowCurve::s_NewTrackChangeWidth(QString strWellName) +void MainWindowCurve::s_NewTrackChangeWidth(QString strWellName, int nW) { qDebug() << "MainWindowCurve s_NewTrackChangeWidth"; @@ -1367,7 +1367,14 @@ void MainWindowCurve::s_NewTrackChangeWidth(QString strWellName) if(strWellNameTemp==strWellName) { int iWidth = ui->tableWidget_2->columnWidth(i);//设置列宽 - ui->tableWidget_2->setColumnWidth(i, iWidth+g_iOneWidth+6); + if(nW<=0) + { + ui->tableWidget_2->setColumnWidth(i, iWidth+g_iOneWidth+6); + } + else + { + ui->tableWidget_2->setColumnWidth(i, iWidth+nW+6); + } } } } @@ -1389,14 +1396,21 @@ void MainWindowCurve::s_AddLine_Property(QString strSlfName, QString strWellName //新建井+道+曲线(首条) void MainWindowCurve::NewWellAndTrack(QString strWellName, QString strSlfName, QString strLineName, QString strType) { + int nW = 0; + if(strType=="SantuyibiaoObject") + { + //斜井三图一表 + nW = g_iOneWidth*2; + } + // if(m_listWell.contains(strWellName)) { //不在道里,新建道+曲线 //新建道+曲线 - emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, strLineName, strType); + emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, strLineName, strType, nW); //改变井宽 - emit sig_NewTrackChangeWidth(strWellName); + emit sig_NewTrackChangeWidth(strWellName, nW); } else { @@ -1406,7 +1420,7 @@ void MainWindowCurve::NewWellAndTrack(QString strWellName, QString strSlfName, Q m_listWell.push_back(strWellName); //新建道+曲线 - emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, strLineName, strType); + emit CallManage::getInstance()->sig_NewTrack(m_strUuid, strWellName, strSlfName, strLineName, strType, nW); } } diff --git a/logPlus/mainwindowcurve.h b/logPlus/mainwindowcurve.h index 3ad3164..408d5fd 100644 --- a/logPlus/mainwindowcurve.h +++ b/logPlus/mainwindowcurve.h @@ -100,12 +100,12 @@ public: QJsonObject makeJson(); signals: - void sig_NewTrackChangeWidth(QString strWellName);//新建道后,改变井宽 + void sig_NewTrackChangeWidth(QString strWellName, int nW=0);//新建道后,改变井宽 void sig_NewWell(QString strWellName); public slots: void s_NewWell(QString strWellName, QString strSlfName);//新建井 - void s_NewTrackChangeWidth(QString strWellName);//新建道后,改变井宽 + void s_NewTrackChangeWidth(QString strWellName, int nW=0);//新建道后,改变井宽 void s_NewTrack_No_Line(QString strWellName, QString strTrackName);//新建空白道,没有曲线 void s_AddLine_Property(QString strSlfName, QString strWellName, QString strTrackName, QString strLineName, double newLeftScale, double newRightScale, QString strScaleType, QColor lineColor, double width, Qt::PenStyle lineStyle);//新建曲线,带属性