2412 lines
90 KiB
C++
2412 lines
90 KiB
C++
#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
|