logplus/logPlus/DrawTvd.cpp

2412 lines
90 KiB
C++
Raw Normal View History

#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 )
2026-01-23 18:20:18 +08:00
//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.;
//
2026-01-23 18:20:18 +08:00
m_SDep = 0;//-g_iY2;
m_EDep = 0;//-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()
{
2026-01-23 14:53:34 +08:00
double logicalDpi;
double dPixelPerCm = 1;//每厘米像素数
// 获取当前屏幕
QScreen *screen = QGuiApplication::primaryScreen();
if (screen) {
// 获取逻辑DPI
2026-01-23 14:53:34 +08:00
logicalDpi = screen->logicalDotsPerInch();
qDebug() << "Logical DPI:" << QString::number(logicalDpi);
2026-01-23 14:53:34 +08:00
if(logicalDpi==0)
{
// 获取物理DPI
double physicalDpi = screen->physicalDotsPerInch();
qDebug() << "Physical DPI:" << QString::number(physicalDpi);
2026-01-23 14:53:34 +08:00
logicalDpi = physicalDpi;
}
//每厘米像素数
2026-01-23 14:53:34 +08:00
dPixelPerCm = logicalDpi/2.54;
} else {
qDebug() << "No screen available";
}
2026-01-23 14:53:34 +08:00
return 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.;
2026-03-18 16:16:11 +08:00
if(1) {
//if(m_pWellSceneManager->GetIsColorPrint()) {
m_GuiJiPen=QPen(m_GuijiColor,m_GuijiWidth*(int)(fbl/2.+0.5));
m_FramePen=QPen(m_FrameColor,m_FrameWidth*(int)(fbl/2.+0.5));;
m_GridPen=QPen(m_GridColor,m_GridWidth*(int)(fbl/2.+0.5));;
m_BxbjPen=QPen(m_BxbjColor,m_BxbjWidth*(int)(fbl/2.+0.5));;
m_BxlxPen=QPen(m_BxlxColor,m_BxlxWidth*(int)(fbl/2.+0.5));
m_ScBxPointMessage.Color=qRgb(255,0,0);
m_SjBxPointMessage.Color=qRgb(255,0,0);
}
else {
m_GuiJiPen=QPen(QColor(0,0,0),m_GuijiWidth*(int)(fbl/2.+0.5));
m_FramePen=QPen(QColor(0,0,0),m_FrameWidth*(int)(fbl/2.+0.5));;
m_GridPen=QPen(QColor(0,0,0),m_GridWidth*(int)(fbl/2.+0.5));;
m_BxbjPen=QPen(QColor(0,0,0),m_BxbjWidth*(int)(fbl/2.+0.5));;
m_BxlxPen=QPen(QColor(0,0,0),m_BxlxWidth*(int)(fbl/2.+0.5));;
m_ScBxPointMessage.Color=qRgb(0,0,0);
m_SjBxPointMessage.Color=qRgb(0,0,0);
}
if(objViewInfo->m_IsDrawProperty)
{
if(!rgbList.size()){
rgbList.append(QRgb(4294967295));
rgbList.append(QRgb(4294966617));
rgbList.append(QRgb(4294944512));
rgbList.append(QRgb(4293345792));
rgbList.append(QRgb(4288741473));
rgbList.append(QRgb(4278190080));
// PaiColorTableData *m_pColorTable=new PaiColorTableData("Color Scheme",true);
// m_pColorTable->LoadScheme();
// m_pColorTable->SetCurrentSchemeIndex(objViewInfo->m_ColorTableIndex());
// m_pColorTable->ChangeColorNum(256);
// rgbList=m_pColorTable->GetRgb();
// delete m_pColorTable;
}
}
int j=0;
float y_Start1=0,
y_Start2=0,
y_Start3=0,
y_Start4=0,
y_Start5=0,
y_Start6=0,
y_Start7=0,
y_Start8=0;
m_IsDrawCst1=objViewInfo->m_IsDrawCst1;
m_IsDrawCst2=objViewInfo->m_IsDrawCst2;
m_IsDrawCst3=objViewInfo->m_IsDrawCst3;
if(m_IsDrawFst)
{
y_Start1=DrawFst(y_Start, pDC,mrt);//井眼俯视图
}
else y_Start1=y_Start;
if(m_IsDrawCst1)
{
CPar_HOFF.CsAngle=0;
y_Start2=DrawCst(y_Start1, pDC,mrt,CPar_HOFF,0);//侧视图-最大位移
}
else y_Start2=y_Start1;
if(m_IsDrawCst2){
CPar_XE.CsAngle=90;
y_Start3=DrawCst(y_Start2, pDC,mrt,CPar_XE,1);//侧视图-XE向东
}
else y_Start3=y_Start2;
if(m_IsDrawCst3){
CPar_YN.CsAngle=0;
y_Start4=DrawCst(y_Start3, pDC,mrt,CPar_YN,2);//侧视图-YN向北
}
else y_Start4=y_Start3;
if(m_IsDrawCst){
CPar.CsAngle=90;
y_Start5=DrawCst(y_Start4, pDC,mrt,CPar);//侧视图-90度
}
else y_Start5=y_Start4;
if(m_IsDrawLtgjt){
y_Start6=DrawLtgjt(y_Start5, pDC,mrt);//立体图
}
else y_Start6=y_Start5;
if(m_IsDrawBxcs){
y_Start7=DrawBxcs(y_Start6, pDC,mrt);//补心参数表
}
else y_Start7=y_Start6;
if(m_IsDrawTable){
y_Start8=DrawTable(y_Start7, pDC,mrt);//轨迹参数表
}
else y_Start8=y_Start7;
pDC->drawLine(XCenter-10,y_Start8+GetLineWidth(pDC,5.0f),XCenter+2,y_Start8+GetLineWidth(pDC,5.0f));
}
int CDrawTvd::DrawTable(int y_Start, QPainter* pDC,QRectF mrt)
{
CMemRdWt MemRdWt(sFilePath.toStdString().c_str());
struct INC_STRU INC={6,"TVDD XE YN HOFS HOAZ TVD"};
struct INP_STRU INP;
struct CONC_STRU CONC={0};
struct HD_STRU HD={0,0,0,0,0,0,0,"JxProcess.inp","JxProcess.tpl"};
struct CON_STRU CON={-1.,-3.17,-1.,-1.,25.,0.,0.,0.,30.0,0.,8.0,50.0,8.5,0,0.125};
CONC.Noc=16;
strcpy(CONC.Name,"VDEP MAGD HBXG JSTG TLEVEL XE0 YN0 WELLTYPE GLDLEN CONANG HBITS VBITS BITS DDEP RLEV HO");
strcpy(CONC.Script,"起始垂深;磁偏角;补芯高;套管深度;列表深度间隔;起始东西位移;起始南北位移;井类型0-斜直井1-水平井);狗腿度单位长度;子午线收敛角;水平视钻头尺寸;垂直视钻头尺寸;实际钻头尺寸;井斜表起始取整深度;点测井斜重采样;水平位移");
strcpy(CONC.Options,";;;;;;;斜直井,水平井;;;;;;;;");
MemRdWt.SetStruct(&INC,NULL,&INP,NULL,&CONC,&CON,&HD,NULL);
HD.Sdep=0;
HD.Edep=0;
HD.Dep=0;
MemRdWt.Const();
MemRdWt.Close();
//
TPar.Rec_Height=objViewInfo->m_Rec_Height;
float Head_Height=TPar.Head_Height*GetPixelPerCm();
float Rec_Height=TPar.Rec_Height*GetPixelPerCm();
int x,y,y0;
float w[20],width=0;//m_Width;
for(int i=0;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