logplus/logPlus/DrawTvd.cpp
2026-01-16 09:04:49 +08:00

2412 lines
90 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma warning( push ,0)
#include <math.h>
#include <cassert>
#include <QApplication>
#include <QDebug>
#include <QGraphicsWidget>
#include <QScreen>
#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;i<TPar.ZdNum;i++)
{
line = textstream.readLine();
QStringList List=line.split(",");
sprintf(TPar.Zd_Inf[i].name,"%s",List.at(0).toStdString().c_str());
sprintf(TPar.Zd_Inf[i].aliasname,"%s",List.at(1).toStdString().c_str());
sprintf(TPar.Zd_Inf[i].unit,"%s",List.at(2).toStdString().c_str());
TPar.Zd_Inf[i].w=List.at(3).toInt();
TPar.Zd_Inf[i].num=List.at(4).toInt();
TPar.Zd_Inf[i].dnum=List.at(5).toInt();
TPar.Zd_Inf[i].mode=List.at(6).toInt();
}
file.close();
}
}
if(TPar.ZdNum==0)
{
TPar.ZdNum=11;
char name[11][16]={"NO","DEPTH","TVD","DEVI","AZIM","AZZ","XE","YN","HOFS","HOAZ","GLD"};
char aliasname[11][32]={"","测量深度","垂直深度","井斜角","井斜方位","真方位","东西位移","南北位移","水平位移","闭合方位","狗腿度"};
char unit[11][16]={"","(m)","(m)","(度)","(度)","(度)","(m)","(m)","(m)","(度)","(度/25米)"};
int w[11]={5,10,10,9,9,9,9,9,9,9,9};//打印宽度(字符数)
int num[11]={3,9,9,8,8,8,8,8,8,8,8};//数据位数
int dnum[11]={0,3,3,3,3,3,3,3,3,3,3};//小数位数
int mode[11]={0,0,0,0,0,0,0,0,0,0,0};//对齐方式
int i;
for(int i=0;i<TPar.ZdNum;i++)
{
strcpy(TPar.Zd_Inf[i].name,name[i]);
strcpy(TPar.Zd_Inf[i].aliasname,aliasname[i]);
strcpy(TPar.Zd_Inf[i].unit,unit[i]);
TPar.Zd_Inf[i].w=w[i];
TPar.Zd_Inf[i].num=num[i];
TPar.Zd_Inf[i].dnum=dnum[i];
TPar.Zd_Inf[i].mode=mode[i];
}
}
m_SjBxPointMessage.Color=qRgb(255,0,0);
m_SjBxPointMessage.Size=3;
m_SjBxPointMessage.Style=0;
strcpy(m_SjBxPointMessage.MiaoShu,"A");
m_ScBxPointMessage.Color=qRgb(255,0,0);
m_ScBxPointMessage.Size=3;
m_ScBxPointMessage.Style=0;
strcpy(m_ScBxPointMessage.MiaoShu,"A'");
m_FstPlotBx=1;
m_CstPlotBx=m_FstPlotBx;
m_LtgjtPlotBx=m_FstPlotBx;
m_PlotBxlx=m_FstPlotBx;
LPar.CsAngle=30.;
}
CDrawTvd::~CDrawTvd(void)
{
if(m_Value) delete []m_Value;
if(m_Lscx)delete []m_Lscx;
}
void CDrawTvd::Refurbish()
{
// if we are in the valid range for the property
// set the new property value
// update the property
// let the control know that the property has changed
this->ReadData();
}
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<m_PointNum;i++)
{
mrw.ReadTable(index,i+1,&m_Lscx[i]);
Xmax=__max(Xmax,m_Lscx[i].XE);
Ymax=__max(Ymax,m_Lscx[i].YN);
Xmin=__min(Xmin,m_Lscx[i].XE);
Ymin=__min(Ymin,m_Lscx[i].YN);
tvdmin=__min(tvdmin,m_Lscx[i].TVD);
tvdmax=__max(tvdmax,m_Lscx[i].TVD);
if(tmax<m_Lscx[i].HOFS)tmax=m_Lscx[i].HOFS;
}
mrw.CloseTable(index);
m_SDep=m_Lscx[0].DEPTH;
m_EDep=m_Lscx[m_PointNum-1].DEPTH;
FPar.MaxXes=Xmax;
FPar.MinXes=Xmin;
FPar.MaxYns=Ymax;
FPar.MinYns=Ymin;
float max;
max=__max(Xmax,Ymax);
max=__max(max,fabs(Xmin));
max=__max(max,fabs(Ymin));
Xmax=max;
Xmin=-max;
Ymax=max;
Ymin=-max;
if(max<1)
{
Xmax=1;
Xmin=-1;
Ymax=1;
Ymin=-1;
}
float div=1.;
while(1&&max)
{
if(max>=div/10.&&max<div)break;
div*=10;
}
div/=10;
if(Xmax>0)
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<Tvd_BxInf.BxNum;i++){
mrw.ReadTable(index_Tvd,Tvd_BxInf.BxNum,&Tvd_BxInf.Tvd_BxPar[i]);
}
}
mrw.CloseTable(index_Tvd);
}
else Tvd_BxInf.BxNum=0;
}
mrw.Close(); //关闭井文件
}
void CDrawTvd::InitProperty()
{
objViewInfo = dynamic_cast<CViewInfo*>(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<CViewInfo*>(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(temp<vsrc) temp+=a;
// vsrc=temp;
// }
// y_Start=-vsrc;
// }
// }
// int isHorizonLayout=m_pWellSceneManager->IsWellSectonHorizonLayout();
// float y1=ConvertY( eCoord_GEO,pWellNode->m_curSdep,eCoord_GDIPixel );
// CWellSectionWindowDocument *pDoc=dynamic_cast<CWellSectionWindowDocument *>(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;i<TPar.ZdNum;i++)
{
w[i]=TPar.Zd_Inf[i].w*TableFontWidth;
width+=w[i];
}
if(fmod(width,2)>0)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;i<TPar.ZdNum;i++)
{
if(i==TPar.ZdNum-1)pDC->setPen(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;i<m_PointNum;i++)
{
sprintf(str,"%3d %9.3f%9.3f%9.3f%9.3f%9.3f%9.3f%9.3f%9.3f%9.3f%9.3f",
m_Lscx[i].NO/*i+1*/,m_Lscx[i].DEPTH,m_Lscx[i].TVD,m_Lscx[i].DEVI,
m_Lscx[i].AZIM,m_Lscx[i].AZZ,m_Lscx[i].XE,
m_Lscx[i].YN,m_Lscx[i].HOFS,m_Lscx[i].HOAZ,m_Lscx[i].GLD);
sscanf(str,"%f%f%f%f%f%f%f%f%f%f%f",&val[0],&val[1],&val[2],&val[3],&val[4],&val[5],&val[6],&val[7],&val[8],&val[9],&val[10]);
y=y0+i*Rec_Height*yfactor;
x=x0;
rec.setTop(y+Rec_Height*yfactor/2-TableFontWidth);
rec.setBottom(y+Rec_Height*yfactor/2+TableFontWidth);
for( int j=0;j<TPar.ZdNum;j++)
{
rec.setLeft(x);//+0.5*TableFontWidth;
x+=w[j];
rec.setRight(x-0.5*TableFontWidth);
char temp[256];
sprintf(temp,strformat[j],val[index[j]]);
value=temp;
value=value.trimmed();
int hformat=1;
if(TPar.Zd_Inf[j].mode==0)hformat=1;
else if(TPar.Zd_Inf[j].mode==1)hformat=0;
else hformat=2;
pDC->drawText(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(num<m_PointNum) num=m_PointNum;
int dcount=(m_Lscx[m_PointNum-1].DEPTH-m_Lscx[0].DEPTH)/HD.Rlev+1.5;
if(dcount<1) dcount=1;
float DRlev=objViewInfo->m_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(DRlev<objViewInfo->m_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(x<x0-width/2) continue;
if(x>x0+width/2) continue;
if(y<y0-height/2) continue;
if(y>y0+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;ii<Tvd_BxInf.BxNum;ii++)
{
// 绘制实测靶心
//x=x0-width/2+(m_Lscx[ii].XE-FPar.MinXe)*xfac;
//y=y0+height/2-(m_Lscx[ii].YN-FPar.MinYn)*yfac;
int xsc=x0-width/2+(Tvd_BxInf.Tvd_BxPar[ii].BxScWy*sin(Tvd_BxInf.Tvd_BxPar[ii].BxScFw*.017453)-FPar.MinXe)*xfac;//Tvd_BxInf.Tvd_BxPar[ii].BxScWy*sin(Tvd_BxInf.Tvd_BxPar[ii].BxScFw*.017453)*xfac;
int ysc=y0+height/2-(Tvd_BxInf.Tvd_BxPar[ii].BxScWy*cos(Tvd_BxInf.Tvd_BxPar[ii].BxScFw*.017453)-FPar.MinYn)*yfac;//Tvd_BxInf.Tvd_BxPar[ii].BxScWy*cos(Tvd_BxInf.Tvd_BxPar[ii].BxScFw*.017453)*yfac;
QPen mPen(m_ScBxPointMessage.Color);
mPen.setWidth(2);
pDC->setPen(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(xsc<x)xadd=-1;
if(xsc<y)yadd=-1;
if(xadd>0)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;i<iy+1;i++)
{
if(i*height/iy>height) 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(num<m_PointNum) num=m_PointNum;
QPoint *mpoint=new QPoint[num+1];
float angle=0;
int j=0;
int dcount=(m_Lscx[m_PointNum-1].DEPTH-m_Lscx[0].DEPTH)/HD.Rlev+1.5;
if(dcount<1) dcount=1;
float DRlev=objViewInfo->m_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(DRlev<objViewInfo->m_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.MinTVD||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||x<x0-width/2) continue;
mpoint[j]=QPoint(x,y);
// if(j>0)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;i<Tvd_BxInf.BxNum;i++)
{
x=xa+(Tvd_BxInf.Tvd_BxPar[i].BxScWy*cos((Tvd_BxInf.Tvd_BxPar[i].BxScFw-CPar.CsAngle)*.017453)-CPar.MinWy)*xfac;
y=y0+(Tvd_BxInf.Tvd_BxPar[i].BxScTDep-sdep)*yfac;
QPen mPen(m_ScBxPointMessage.Color);
mPen.setWidth(2);
pDC->setPen(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(xsc<x)xadd=-1;
if(xsc<y)yadd=-1;
if(xadd>0)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;i<iy;i++)//垂深方向
{
XE=0;
YN=0;
TVD=i*LPar.DepSpace;
QPoint points1=ComputeXY(XE,YN,TVD,angle_x,angle_y,angle_z,x0,y0,xfac,yfac);
QPoint points2=points1;
points2.setX(points1.x()+0.2*GetPixelPerCm());
pDC->setPen(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;i<m_PointNum;i++)//轨迹
{
XE=m_Lscx[i].XE;
YN=m_Lscx[i].YN;
if(m_Lscx[i].TVD<sdep) continue;
if(YN>LPar.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<DEVIS.size();i++)
{
if(MemRdWt.FindObjectName((char*)DEVIS[i].toStdString().c_str())>-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(DRlev<objViewInfo->m_Rlev) DRlev=objViewInfo->m_Rlev;
int ind=0,m=0;
delete []points;
if(num<m_PointNum) num=m_PointNum;
points=new QPoint[num];
j=0;
QPen pr=m_GuiJiPen;
// CLineProperty &lp1=objViewInfo->m_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;dep<m_Lscx[m_PointNum-1].DEPTH;dep+=DRlev)
{
MemRdWt.In(dep);
XE=INP.yy[2];//m_Lscx[i].XE;
YN=INP.yy[3];//m_Lscx[i].YN;
if(YN>LPar.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)));
QVector<QPoint>points3;
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;n<k;n++)
{
points2[n]=points1[n];
}
}
delete points2;
QPen pen1=m_GuiJiPen;
// CLineProperty &lp=objViewInfo->m_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;i<m_PointNum;i++)
{
XE=m_Lscx[i].XE;
YN=m_Lscx[i].YN;
if(m_Lscx[i].TVD<sdep) continue;
if(XE>LPar.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;i<m_PointNum;i+=xda)
{
XE=m_Lscx[i].XE;
YN=m_Lscx[i].YN;
if(m_Lscx[i].TVD<sdep) continue;
if(XE>LPar.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;k<Tvd_BxInf.BxNum;k++)
{
j=0;
for(int i=0;i<360;i+=10)
{
TVD=Tvd_BxInf.Tvd_BxPar[k].BxScTDep-sdep;
XE=Tvd_BxInf.Tvd_BxPar[k].BxScWy*sin(Tvd_BxInf.Tvd_BxPar[k].BxScFw*PI/180)+Tvd_BxInf.Tvd_BxPar[k].BxBj*cos(i*PI/180);
YN=Tvd_BxInf.Tvd_BxPar[k].BxScWy*cos(Tvd_BxInf.Tvd_BxPar[k].BxScFw*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 mPen(m_ScBxPointMessage.Color);
mPen.setWidth(2);
mPen.setStyle(Qt::DotLine);
pDC->setPen(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;i<TPar.ZdNum;i++)
{
w[i]=TPar.Zd_Inf[i].w*TableFontWidth;
width+=w[i];
}
if(fmod(width,2)>0)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;i<ZdNum;i++)
{
QRect rtt=rec0;
rtt.setLeft(rec0.left()+i*width/ZdNum);
rtt.setRight(rec0.right()+i*width/ZdNum);
QRect rec=rtt;
if(ZdNum==9)pDC->drawText(rec,Qt::AlignCenter |Qt::AlignTop,ss[i]);
else pDC->drawText(rec,Qt::AlignCenter |Qt::AlignTop,ss1[i]);
for(int j=0;j<Tvd_BxInf.BxNum;j++)
{
rtt.setTop(rtt.top()+Rec_Height*yfactor);
rtt.setBottom(rtt.bottom()+Rec_Height*yfactor);
if(ZdNum==9)//斜直井
{
if(i==0)value="靶心"+QString::number(j+1);
else if(i==1)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxDep,'f',1);
else if(i==2)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxXDep,'f',1);
else if(i==3)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxFw,'f',1);
else if(i==4)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxScFw,'f',1);//BxTotf,'f',1);
else if(i==5)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxWy,'f',1);
else if(i==6)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxScWy,'f',1);//BxTots,'f',1);
else if(i==7)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxBj,'f',2);
else if(i==8)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxJ,'f',2);
}
else
{
if(i==0)value="靶心"+QString::number(j+1);
else if(i==1)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxDep,'f',1);
else if(i==2)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxScTDep,'f',1);
else if(i==3)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxXDep,'f',1);
else if(i==4)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxFw,'f',1);
else if(i==5)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxScFw,'f',1);
else if(i==6)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxWy,'f',1);
else if(i==7)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxScWy,'f',1);
else if(i==8)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BBK,'f',2);
else if(i==9)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxJ,'f',2);
else if(i==10)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BBG,'f',2);
else if(i==11)value=QString::number(Tvd_BxInf.Tvd_BxPar[j].BxCzJ,'f',2);
}
pDC->drawText(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<CViewInfo*>(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