#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 ) extern int g_iY1; extern int g_iY2; //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.; // m_SDep = -g_iY2; m_EDep = -g_iY1; rgbList.append(QRgb(4294967295)); rgbList.append(QRgb(4294966617)); rgbList.append(QRgb(4294944512)); rgbList.append(QRgb(4293345792)); rgbList.append(QRgb(4288741473)); rgbList.append(QRgb(4278190080)); QString ConfigName = ::GetConfPath()+"TvdTable.ini"; QFile file(ConfigName); TPar.ZdNum=0; if(file.open(QIODevice::ReadOnly )) { QTextStream textstream( &file ); textstream.setCodec("UTF-8"); // 设置UTF-8编码 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(); // m_Height=mrt.width()/GetPixelPerCm(); 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(0) { //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