logplus/OSGDataModel/src/ObjWell.cpp
2025-11-26 10:21:39 +08:00

1442 lines
43 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

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

#pragma warning( push ,0)
#include <cassert>
#include "ObjWell.h"
#include "ObjWelllog.h"
#include "ObjWelllogRound.h"
// #include "ObjWellTrack.h"
// #include "ObjectFolder.h"
// #include "ObjProject.h"
// #include "ViewInfoMetaProperty.h"
#include <QLibrary>
#include <QCoreApplication>
#include <QDir>
// #include "ObjectEvent.h"
#include <QSettings>
#include <QTextCodec>
#pragma warning( pop )
BEGIN_OSGDATAMODEL_NAMESPACE;
CObjWell *g_pObjWell(NULL);
CObjWell::CObjWell()
{
m_XYZRlev=0.125;
m_strWellImage = "well" + QString::number( qAbs( qrand()%11) ) + ".png";
// SetIconName( "well.png");
// AddChild(new CObjectFolder(GetClassID_SingleMethodFolder()) );//
// AddChild(new CObjectFolder(GetClassID_WorkflowFolder()) );//
// AddChild(new CObjectFolder(GetClassID_SingleWellMapFolder()) );//
m_StartDep=-9999.0,m_EndDep=-9999.0,m_Rlev=0.125;
m_XYZStartDep=-9999;
m_XYZEndDep=-9999;
m_pCurrentWelllogRound=NULL;
isFLAG=0;
// connect( (const QObject*)( &GetObjectEvent() ),SIGNAL(RefreshWellMessage(QString,QObject*)),this,SLOT(slotWellMessage(QString)));
}
// void CObjWell::slotWellMessage(QString slffile)
// {
// QString slf1=slffile;
// slf1.replace("\\","/");
// QString slf2=m_WellFileName;
// slf2.replace("\\","/");
// int index=slffile.lastIndexOf(".",-1,Qt::CaseInsensitive);
// if(index>-1) {
// slf1=slf1.left(index);
// }
// index=slf2.lastIndexOf(".",-1,Qt::CaseInsensitive);
// if(index>-1) {
// slf2=slf2.left(index);
// }
// slf2.toUpper();
// slf1.toUpper();
// if(slf1==slf2) {
// LoadXYZ(true);
// }
// }
// //根据folderid找到对应的folder如果没有则创建
// CObjectFolder* CObjWell::GetTragetFolder(QUuid aFolderTypeid)
// {
// CObjectFolder* target=dynamic_cast<CObjectFolder*>(GetChildByType(aFolderTypeid));
// if(target==NULL){
// target=new CObjectFolder(aFolderTypeid);
// CBaseObjectImpl::AddChild(target,true);
// }
// return target;
// }
//往井次下加入曲线时根据曲线的类型返回其对应的目录id
QUuid CObjWell::GetTragetFolderID(QUuid aLogTypeid)
{
// if(aLogTypeid==GetClassID_WellLog()) return GetClassID_WellLogFolder();
// else
if(aLogTypeid==GetClassID_WellTrajectory()) return GetClassID_WellTrajectoryFolder();
// else if(aLogTypeid==GetClassID_WellLogWavefile()) return GetClassID_WellLogWavefileFolder();
// else if(aLogTypeid==GetClassID_WellLogBIN()) return GetClassID_WellLogBINFolder();
// else if(aLogTypeid==GetClassID_WellLogFMT()) return GetClassID_WellLogFMTFolder();
// else if(aLogTypeid==GetClassID_WellLogINP()) return GetClassID_WellLogINPFolder();
// else if(aLogTypeid==GetClassID_WellLogTABLE()) return GetClassID_WellLogTABLEFolder();
// else if(aLogTypeid==GetClassID_WellLogTDT()) return GetClassID_WellLogTDTFolder();
else return GetClassID_GeneralFolder();
}
// bool CObjWell::AddChild(PaiObject* pChild, bool mountNow )
// {
// if(!pChild) return false;
// if(GetTragetFolderID(pChild->GetTypeID())!=GetClassID_GeneralFolder())
// GetTragetFolder(GetTragetFolderID(pChild->GetTypeID()))->AddChild(pChild,mountNow);
// else
// CBaseObjectImpl::AddChild(pChild,true);
// return true;
// }
WellHead &CObjWell::GetWellHead()
{
return m_WellHead;
}
void CObjWell::SaveWellHead(QString wellfilename)
{
if(wellfilename.isEmpty()) return;
CLogIO * logio=new CLogIO();
if(!logio->Open(wellfilename.toStdString().c_str(),CSlfIO::modeRead))
{
if(!logio->Open(wellfilename.toStdString().c_str(),CSlfIO::modeCreate)) {
QString aa=wellfilename+"文件打开失败,请检查!";
return;
}
}
Slf_FILE_MESSAGE mssage;
logio->GetFileMessage(mssage);
mssage.azca=m_WellHead.azca;
mssage.Altitude=m_WellHead.earthEle;
mssage.Kelly=ConvertDataByString(QString::number(m_WellHead.dEle));
mssage.TVD=m_WellHead.tvd;
mssage.Xcoor=m_WellHead.x;
mssage.Ycoor=m_WellHead.y;
mssage.X0=m_WellHead.dxe;
mssage.Y0=m_WellHead.dyn;
mssage.Z0=m_WellHead.z;
mssage.StartDepth=m_WellHead.depth;
logio->SetFileMessage(mssage);
if(wellfilename.endsWith(".well",Qt::CaseInsensitive)){
m_DbWell.SetAsl(m_WellHead.earthEle);
m_DbWell.SetBsl(m_WellHead.dEle);
m_DbWell.SetXCode(m_WellHead.x);
m_DbWell.SetYCode(m_WellHead.y);
}
delete logio;
}
// int CObjWell::GetAllWellRound(QList<PaiObject*> &wellroundchildren)
// {
// this->GetObjectByType(wellroundchildren,GetClassID_WellLogRound());
// return wellroundchildren.size();
// }
// int CObjWell::GetWellRoundCount()
// {
// QList<pai::objectmodel::PaiObject*> wellroundchildren;
// this->GetObjectByType(wellroundchildren,GetClassID_WellLogRound());
// return wellroundchildren.size();
// }
void CObjWell::SetCurrentObjWellRound(CObjWelllogRound*pWellRound)
{
m_pCurrentWelllogRound=pWellRound;
}
CObjWelllogRound* CObjWell::GetCurrentObjWellRound()
{
/* QList<pai::objectmodel::PaiObject*> wellroundchildren;
GetObjectByType(wellroundchildren,GetClassID_WellLogRound());
if(!m_pCurrentWelllogRound) {
if(wellroundchildren.size()) {
m_pCurrentWelllogRound=(CObjWelllogRound*)wellroundchildren[0];
return (CObjWelllogRound*)wellroundchildren[0];
}
else return NULL;
}
else */return m_pCurrentWelllogRound;
}
CObjWell::~CObjWell()
{
if(g_pObjWell==this) g_pObjWell=NULL;
}
QUuid CObjWell::GetTypeID()const
{
return GetClassID_Well();
}
double CObjWell::GetTopWellLogDepth()
{
return m_StartDep;
}
// bool CObjWell::isExistsName(QString name)
// {
// QList<PaiObject*> objs;
// if(this->GetParent() != NULL)
// {
// GetParent()->GetChildren(objs);
// }else
// {
// GetProject()->GetWellsFolder(true)->GetPaiObject()->GetChildren(objs);
// }
// foreach(PaiObject* obj, objs)
// {
// CObjWell* pWell = dynamic_cast<CObjWell*>(obj);
// if(pWell != NULL && pWell != this && pWell->GetName().compare(name,Qt::CaseInsensitive)==0)
// {
// return true;
// }
// }
// return false;
// }
// void CObjWell::CopyFrom( CBaseObject *pOSGObjectOther )
// {
// CBaseObject::CopyFrom( pOSGObjectOther );
// CObjWell *pWell= dynamic_cast<CObjWell *>( pOSGObjectOther );
// if( pWell )
// {
// m_WellHead=pWell->GetWellHead();
// m_DbWell= pWell->m_DbWell ;
// }
// }
double CObjWell::GetBottomWellLogDepth()
{
return m_EndDep;
}
// bool CObjWell::Serialize( CObjectArchive &ar )
// {
// m_vX.Serialize(ar);
// m_vY.Serialize(ar);
// m_vZ.Serialize(ar);
// if(ar.IsStoring())
// {
// BEGIN_WRITE_OBJECT( ar,1 );
// BEGIN_WRITE_BLOCK( ar, 1);
// ar << m_strWellImage;
// ar << m_WellFileName;
// ar << m_WellCode;
// ar << m_StartDep;
// ar << m_EndDep;
// ar << m_Rlev;
// CBaseObjectImpl::Serialize( ar );
// END_WRITE_BLOCK( ar, 1 );
// END_WRITE_OBJECT( ar );
// }
// else
// {
// BEGIN_READ_OBJECT( ar,1 );
// BEGIN_READ_BLOCK( 1 );
// ar >> m_strWellImage;
// ar >> m_WellFileName;
// ar >> m_WellCode;
// ar >> m_StartDep;
// ar >> m_EndDep;
// ar >> m_Rlev;
// CBaseObjectImpl::Serialize( ar );
// END_READ_BLOCK( 1 );
// END_READ_OBJECT( ar );
// }
// return true;
// }
// bool CObjWell::GetXYZByMD(float fMD,double &x,double &y,double &z )
// {
// int nXSize = (int)m_vX.size();
// if(nXSize<1)
// {
// LoadXYZ();
// nXSize = (int)m_vX.size();
// }
// x=m_WellHead.x;
// y=m_WellHead.y;
// z=m_WellHead.z;
// if(nXSize<=1) return true;
// bool bSuccess(false);
// if(nXSize) {
// if(m_StartDep==-9999.0) {//离散数据
// // get m_vMD
// double dSum = 0;
// double old_dSum = 0;
// for( long i = 1 ;i<nXSize;++i )
// {
// double dx = m_vX.m_vProperty[i] - m_vX.m_vProperty[i-1];
// double dy = m_vY.m_vProperty[i] - m_vY.m_vProperty[i-1];
// double dz = m_vZ.m_vProperty[i] - m_vZ.m_vProperty[i-1];
// old_dSum=dSum;
// dSum +=sqrt(dx*dx + dy*dy + dz*dz ) ;
// if(dSum>fMD&&old_dSum<=fMD) {
// x=m_vX.m_vProperty[i];
// y=m_vY.m_vProperty[i];
// z=m_vZ.m_vProperty[i];
// return true;
// }
// }
// return bSuccess;
// }
// }
// int nIndex=(fMD-m_XYZStartDep)/m_XYZRlev;
// if(nIndex<0) nIndex=0;
// if(nIndex>=nXSize) nIndex=nXSize-1;
// if( nIndex < nXSize && nIndex>=0 )
// {
// x = m_vX.m_vProperty[nIndex];
// y = m_vY.m_vProperty[nIndex];
// z = m_vZ.m_vProperty[nIndex];
// bSuccess = true;
// }
// return bSuccess;
// }
void CObjWell::ClearXYZ()
{
m_vX.clear();
m_vY.clear();
m_vZ.clear();
}
// bool CObjWell::LoadXYZ(bool isreCreateXYZ)
// {
// if(m_WellFileName.isEmpty()) return false;
// CMemRdWt * logio=new CMemRdWt();
// if(!logio->Open(m_WellFileName.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio;
// QString aa=m_WellFileName+"文件打开失败,请检查!";
// return false;
// }
// Slf_FILE_MESSAGE mess;
// logio->GetFileMessage(mess);
// QString temp = ::GetConfPath()+"data.ini";
// QSettings settings(temp,QSettings::IniFormat,0);
// settings.setIniCodec(QTextCodec::codecForName("UTF-8"));
// QStringList serials=settings.value("wellType",0).toStringList();
// int type = serials.indexOf(mess.WellType);
// if(type>-1) m_strWellImage = "well" + QString::number(type) + ".png";
// logio->DiscardObject("DEVI");
// logio->DiscardObject("AZIM");
// //if(isreCreateXYZ)
// {
// QList<PaiObject*>childs;
// int rcount=GetAllWellRound(childs);
// int flag=0;
// for(int j=0;j<rcount;j++)//遍历该井下所有井次
// {
// CMemRdWt * logio1 = new CMemRdWt();
// CObjWelllogRound*pRound = dynamic_cast<CObjWelllogRound*>(childs[j]);
// if(!pRound) continue;
// QString slf = this->GetWellFileName();
// if(!logio1->Open(slf.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio1;
// delete logio;
// QString aa=m_WellFileName+"文件打开失败,请检查!";
// continue;
// }
// if(type<0){
// Slf_FILE_MESSAGE mess1;
// logio1->GetFileMessage(mess1);
// int type=serials.indexOf(mess1.WellType);
// if(type>-1) {
// m_strWellImage = "well" + QString::number(type) + ".png";
// strcpy(mess.WellType,mess1.WellType);
// logio->SetFileMessage(mess);
// }
// }
// int iAZIM = -1, iDev=-1, ishaveazim=0;
// {
// int iAZIM1=-1,iDev1=-1;
// QStringList azims=GetSimilarCurves("AZIM");
// QString azim;
// QString AZIM1;
// QString DEVI1;
// foreach(QString cname,azims)
// {
// iAZIM1=logio->OpenCurve(cname.toStdString().c_str());
// if(iAZIM1>-1) {
// AZIM1=cname;
// break;
// }
// }
// QStringList devis=GetSimilarCurves("DEVI");
// QString dev;
// foreach(QString cname,devis)
// {
// iDev1=logio->OpenCurve(cname.toStdString().c_str());
// if(iDev1>-1)
// {
// DEVI1/*AZIM1*/ = cname;
// break;
// }
// }
// ////
// foreach(QString cname, azims)
// {
// iAZIM = logio1->OpenCurve(cname.toStdString().c_str());
// if(iAZIM>-1) {
// azim=cname;
// break;
// }
// }
// foreach(QString cname, devis)
// {
// iDev = logio1->OpenCurve(cname.toStdString().c_str());
// if(iDev>-1) {
// dev=cname;
// break;
// }
// }
// if(iAZIM>-1){//井次中有方位
// if(iAZIM1<0) //井中没有方位
// logio->CopyFromFile(*logio1,(char *)azim.toStdString().c_str());
// else {//井中有方位
// iAZIM = logio->OpenCurve((char *)azim.toStdString().c_str());
// if(iAZIM<0) {
// logio->CopyFromFile(*logio1,(char *)azim.toStdString().c_str());
// iAZIM=logio->OpenCurve((char *)azim.toStdString().c_str());
// }
// if(iAZIM<0) {
// delete logio1;
// delete logio;
// return false;
// }
// Slf_CURVE curveinf;
// logio->GetCurveInfo(iAZIM,&curveinf);
// int count=(curveinf.EndDepth-curveinf.StartDepth)/curveinf.DepLevel+1.5;
// float *val=new float[count+1];
// logio->ReadCurve(iAZIM,curveinf.StartDepth,count,val);
// float sdep=curveinf.StartDepth;
// float edep=curveinf.EndDepth;
// for(int i=0;i<count;i++)
// {
// if(val[i]!=-9999&&val[i]!=-99999&&val[i]!=-999.25) {
// if(sdep==-9999) sdep=i*curveinf.DepLevel+curveinf.StartDepth;
// edep=i*curveinf.DepLevel+curveinf.StartDepth;
// }
// }
// logio1->CopyCurve(*logio,sdep,edep,sdep,(char *)azim.toStdString().c_str(),(char *)azim.toStdString().c_str());
// delete val;
// }
// //默认井中没有方位,需要从井次中获取
// //logio->CopyFromFile(*logio1,(char *)azim.toStdString().c_str());
// flag=1;
// }
// if(iDev>-1){
// if(iDev1<0)
// logio->CopyFromFile(*logio1,(char *)dev.toStdString().c_str());
// else {
// iDev=logio->OpenCurve((char *)dev.toStdString().c_str());
// if(iDev<0) {
// logio->CopyFromFile(*logio1,(char *)dev.toStdString().c_str());
// iDev=logio->OpenCurve((char *)dev.toStdString().c_str());
// }
// if(iDev<0) {
// delete logio1;
// delete logio;
// return false;
// }
// Slf_CURVE curveinf;
// logio->GetCurveInfo(iDev,&curveinf);
// int count=(curveinf.EndDepth-curveinf.StartDepth)/curveinf.DepLevel+1.5;
// float *val=new float[count+1];
// logio->ReadCurve(iDev,curveinf.StartDepth,count,val);
// float sdep=curveinf.StartDepth;
// float edep=curveinf.EndDepth;
// for(int i=0;i<count;i++)
// {
// if(val[i]!=-9999&&val[i]!=-99999&&val[i]!=-999.25) {
// if(sdep==-9999) sdep=i*curveinf.DepLevel+curveinf.StartDepth;
// edep=i*curveinf.DepLevel+curveinf.StartDepth;
// }
// }
// logio1->CopyCurve(*logio,sdep,edep,sdep,(char *)dev.toStdString().c_str(),(char *)dev.toStdString().c_str());
// delete val;
// }
// //默认井中没有井斜,需要从井次中获取
// //logio->CopyFromFile(*logio1,(char *)dev.toStdString().c_str());
// flag=1;
// }
// }
// delete logio1;
// }
// if(flag){
// logio->DiscardObject("X");
// logio->DiscardObject("Y");
// logio->DiscardObject("Z");
// if(ComputeTrajectory(this,m_WellFileName)<1) {
// return false;
// }
// }
// }
// int iX=logio->OpenCurve("X");
// int iY=-1;
// int iZ=-1;
// Slf_CURVE acurveinfo;
// memset(&acurveinfo,0,sizeof(Slf_CURVE));
// if(iX>-1) logio->GetCurveInfo(iX,&acurveinfo);
// if(iX<0||mess.Xcoor==0||mess.Ycoor==0)
// {
// CMemRdWt * logio1=new CMemRdWt();
// QString slf=this->GetWellFileName();
// if(!logio1->Open(slf.toStdString().c_str(),CSlfIO::modeRead))
// {
// delete logio1;
// delete logio;
// QString aa=m_WellFileName+"文件打开失败,请检查!";
// return false;
// }
// if(mess.Xcoor==0||mess.Ycoor==0)
// {
// logio1->GetFileMessage(mess);
// logio->SetFileMessage(mess);
// logio->DiscardObject(iX);
// logio->DiscardObject(iY);
// logio->DiscardObject(iZ);
// }
// delete logio;
// delete logio1;
// if(ComputeTrajectory(this,m_WellFileName)<1) {
// return false;
// }
// logio=new CMemRdWt();
// logio->Open(m_WellFileName.toStdString().c_str(),CSlfIO::modeRead);
// int iAZIM=-1,iDev=-1;
// {
// QStringList azims=GetSimilarCurves("AZIM");
// QString azim;
// foreach(QString cname,azims)
// {
// iAZIM=logio->OpenCurve(cname.toStdString().c_str());
// if(iAZIM>-1) {
// azim=cname;
// break;
// }
// }
// QStringList devis=GetSimilarCurves("DEVI");
// QString dev;
// foreach(QString cname,devis)
// {
// iDev=logio->OpenCurve(cname.toStdString().c_str());
// if(iDev>-1) {
// dev=cname;
// break;
// }
// }
// }
// if(iAZIM>-1&&iDev>-1)
// {
// iX=logio->OpenCurve("X");
// iY=logio->OpenCurve("Y");
// iZ=logio->OpenCurve("Z");
// logio->GetCurveInfo(iX,&acurveinfo);
// m_XYZRlev=acurveinfo.DepLevel;
// m_XYZStartDep=acurveinfo.StartDepth;
// m_XYZEndDep=acurveinfo.EndDepth;
// int point=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5;
// m_vX.resize(point);
// m_vY.resize(point);
// m_vZ.resize(point);
// if(acurveinfo.RepCode==REPR_DOUBLE) {
// logio->ReadCurve(iX,acurveinfo.StartDepth,point,(void *)&m_vX.m_vProperty[0]);
// logio->ReadCurve(iY,acurveinfo.StartDepth,point,(void *)&m_vY.m_vProperty[0]);
// logio->ReadCurve(iZ,acurveinfo.StartDepth,point,(void *)&m_vZ.m_vProperty[0]);
// }
// else if(acurveinfo.RepCode==REPR_FLOAT) {
// FLOATPROPERTY m_vX1;
// FLOATPROPERTY m_vY1;
// FLOATPROPERTY m_vZ1;
// m_vX1.resize(point);
// m_vY1.resize(point);
// m_vZ1.resize(point);
// logio->ReadCurve(iX,acurveinfo.StartDepth,point,(float *)&m_vX1.m_vProperty[0]);
// logio->ReadCurve(iY,acurveinfo.StartDepth,point,(float *)&m_vY1.m_vProperty[0]);
// logio->ReadCurve(iZ,acurveinfo.StartDepth,point,(float *)&m_vZ1.m_vProperty[0]);
// for(int i=0;i<point;i++) {
// m_vX.m_vProperty[i]=m_vX1.m_vProperty[i];
// m_vY.m_vProperty[i]=m_vY1.m_vProperty[i];
// m_vZ.m_vProperty[i]=m_vZ1.m_vProperty[i];
// }
// }
// delete logio;
// return true;
// }
// }
// iX=logio->OpenCurve("X");
// iY=logio->OpenCurve("Y");
// iZ=logio->OpenCurve("Z");
// double x=0,y=0;
// if(iX>=0&&iY>=0&&iZ>=0) {
// logio->GetCurveInfo(iX,&acurveinfo);
// if(acurveinfo.DepLevel==0||acurveinfo.DepLevel>=2.226e+008||acurveinfo.StartDepth==acurveinfo.EndDepth&&acurveinfo.DepLevel==acurveinfo.StartDepth)
// {
// mess.Xcoor=0;
// mess.Ycoor=0;
// goto next1;
// }
// m_XYZRlev=acurveinfo.DepLevel;
// m_XYZStartDep=acurveinfo.StartDepth;
// m_XYZEndDep=acurveinfo.EndDepth;
// int point=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5;
// if(point<1) point=1;
// m_vX.resize(point);
// m_vY.resize(point);
// m_vZ.resize(point);
// if(acurveinfo.RepCode==REPR_DOUBLE) {
// logio->ReadCurve(iX,acurveinfo.StartDepth,1,(double *)&m_vX.m_vProperty[0]);
// x=m_vX.m_vProperty[0];
// logio->ReadCurve(iY,acurveinfo.StartDepth,1,(double *)&m_vY.m_vProperty[0]);
// y=m_vY.m_vProperty[0];
// }
// else if(acurveinfo.RepCode==REPR_FLOAT) {
// float xx,yy;
// logio->ReadCurve(iX,acurveinfo.StartDepth,1,(float *)&xx);
// x=xx;
// logio->ReadCurve(iY,acurveinfo.StartDepth,1,(float *)&yy);
// y=yy;
// }
// if(x==y&&mess.Xcoor!=0&&mess.Ycoor!=0) {
// next1:
// logio->DiscardObject(iX);
// logio->DiscardObject(iY);
// logio->DiscardObject(iZ);
// delete logio;
// if(ComputeTrajectory(this,m_WellFileName)<1) {
// return false;
// }
// logio=new CMemRdWt();
// logio->Open(m_WellFileName.toStdString().c_str(),CSlfIO::modeRead);
// iX=logio->OpenCurve("X");
// iY=logio->OpenCurve("Y");
// iZ=logio->OpenCurve("Z");
// logio->GetCurveInfo(iX,&acurveinfo);
// m_XYZRlev=acurveinfo.DepLevel;
// m_XYZStartDep=acurveinfo.StartDepth;
// m_XYZEndDep=acurveinfo.EndDepth;
// }
// m_vX.resize(point);
// m_vY.resize(point);
// m_vZ.resize(point);
// if(acurveinfo.RepCode==REPR_DOUBLE) {
// logio->ReadCurve(iX,acurveinfo.StartDepth,point,(double *)&m_vX.m_vProperty[0]);
// logio->ReadCurve(iY,acurveinfo.StartDepth,point,(double *)&m_vY.m_vProperty[0]);
// logio->ReadCurve(iZ,acurveinfo.StartDepth,point,(double *)&m_vZ.m_vProperty[0]);
// }
// else if(acurveinfo.RepCode==REPR_FLOAT) {
// FLOATPROPERTY m_vX1;
// FLOATPROPERTY m_vY1;
// FLOATPROPERTY m_vZ1;
// m_vX1.resize(point);
// m_vY1.resize(point);
// m_vZ1.resize(point);
// logio->ReadCurve(iX,acurveinfo.StartDepth,point,(float *)&m_vX1.m_vProperty[0]);
// logio->ReadCurve(iY,acurveinfo.StartDepth,point,(float *)&m_vY1.m_vProperty[0]);
// logio->ReadCurve(iZ,acurveinfo.StartDepth,point,(float *)&m_vZ1.m_vProperty[0]);
// for(int i=0;i<point;i++) {
// m_vX.m_vProperty[i]=m_vX1.m_vProperty[i];
// m_vY.m_vProperty[i]=m_vY1.m_vProperty[i];
// m_vZ.m_vProperty[i]=m_vZ1.m_vProperty[i];
// }
// }
// if(m_XYZStartDep==m_XYZEndDep&&m_vX.m_vProperty[0]!=mess.Xcoor) m_vX.m_vProperty[0]=mess.Xcoor;
// if(m_XYZStartDep==m_XYZEndDep&&m_vY.m_vProperty[0]!=mess.Ycoor) m_vY.m_vProperty[0]=mess.Ycoor;
// }
// else {
// delete logio;
// return false;
// }
// delete logio;
// return true;
// }
// bool CObjWell::GetDXDYDZByMD(float fMD,double &x,double &y,double &z )
// {
// int nXSize = (int)m_vX.size();
// if(nXSize<1)
// {
// LoadXYZ();
// nXSize = (int)m_vX.size();
// }
// bool bSuccess(false);
// if(nXSize) {
// if(m_StartDep==-9999.0) {//离散数据
// // get m_vMD
// double dSum = 0;
// double old_dSum = 0;
// for( long i = 1 ;i<nXSize;++i )
// {
// double dx = m_vX.m_vProperty[i] - m_vX.m_vProperty[i-1];
// double dy = m_vY.m_vProperty[i] - m_vY.m_vProperty[i-1];
// double dz = m_vZ.m_vProperty[i] - m_vZ.m_vProperty[i-1];
// old_dSum=dSum;
// dSum +=sqrt(dx*dx + dy*dy + dz*dz ) ;
// if(dSum>fMD&&old_dSum<=fMD) {
// x=m_vX.m_vProperty[i]-m_vX.m_vProperty[0];
// y=m_vY.m_vProperty[i]-m_vY.m_vProperty[0];
// z=m_vZ.m_vProperty[i]-m_vZ.m_vProperty[0];
// return true;
// }
// }
// return bSuccess;
// }
// }
// int nIndex=(fMD-m_XYZStartDep)/m_XYZRlev;
// if( nIndex < nXSize && nIndex>=0 )
// {
// x = m_vX.m_vProperty[nIndex]-m_vX.m_vProperty[0];
// y = m_vY.m_vProperty[nIndex]-m_vY.m_vProperty[0];
// z = m_vZ.m_vProperty[nIndex]-m_vZ.m_vProperty[0];
// bSuccess = true;
// }
// return bSuccess;
// }
// void CObjWell::SetDepth(CObjWell *pWell)
// {
// if(pWell)
// {
// int roc=pWell->GetWellRoundCount();
// if(roc)
// {
// QList<PaiObject*>childs;
// pWell->GetAllWellRound(childs);
// double stardep=99999,enddep=-99999;
// float rlev=100;
// for(int i=0;i<roc;i++)
// {
// CObjWelllogRound* pWelllogRound=dynamic_cast<CObjWelllogRound*>(childs[i]);
// if(!pWelllogRound) continue;
// CLogIO * logio=new CLogIO();
// if(!logio->Open(pWelllogRound->GetSlfFileName().toStdString().c_str(),CSlfIO::modeReadWrite))
// {
// delete logio;
// break;
// }
// int curveCount=logio->GetObjectCount();
// for(int k1=0;k1<curveCount;k1++)
// {
// char buf[64];
// logio->GetObjectName(k1,buf);
// int a=logio->OpenCurve(buf);
// if(a>-1)
// {
// Slf_CURVE acurveinfo;
// logio->GetCurveInfo(a,&acurveinfo);
// if(acurveinfo.StartDepth<stardep) stardep=acurveinfo.StartDepth;
// if(acurveinfo.EndDepth>enddep) enddep=acurveinfo.EndDepth;
// if(rlev>acurveinfo.DepLevel) rlev=acurveinfo.DepLevel;
// }
// else {
// int a=logio->OpenWave(buf);
// if(a>-1)
// {
// Slf_WAVE acurveinfo;
// logio->GetWaveInfo(a,&acurveinfo);
// if(acurveinfo.StartDepth<stardep) stardep=acurveinfo.StartDepth;
// if(acurveinfo.EndDepth>enddep) enddep=acurveinfo.EndDepth;
// if(rlev>acurveinfo.DepLevel) rlev=acurveinfo.DepLevel;
// }
// }
// }
// if(rlev<=0) rlev=0.125;
// delete logio;
// }
// pWell->SetDepth(stardep,enddep,rlev);
// }
// }
// }
// int CObjWell::ComputeTrajectory(CObjWell *pWell,QString slffilename)
// {
// pWell->SetDepth(pWell);
// QLibrary Methodlib;
// QString PeModulePath=QCoreApplication::applicationDirPath() + QDir::separator() +"TrackPoints.dll";
// Methodlib.setFileName(PeModulePath);
// Methodlib.load();
// typedef int (* LPFNDLLFUNC1)(double azca,double tvd,double dxe,double dyn,double rlev0,double Gldddep,double hoff);
// LPFNDLLFUNC1 initTrackPoints;
// typedef int (* LPFNDLLFUNC2)(double nDevi,double nAzim,double rlev,double &XE,double &YN,double &ZD,double &HOFF0,double &HOAZ0,double &GTD0,double &AZIM0);
// LPFNDLLFUNC2 TrackPoints;
// QString initfname="initTrackPoints";
// QString funname="TrackPoints";
// initTrackPoints = (LPFNDLLFUNC1)(Methodlib.resolve(initfname.toStdString().c_str()));//strDLLFun.toStdString().c_str())
// TrackPoints = (LPFNDLLFUNC2)(Methodlib.resolve(funname.toStdString().c_str()));//strDLLFun.toStdString().c_str())
// QStringList CurveNames;
// int iDev=-1,iAZIM=-1,iX=-1,iY=-1,iZ=-1,iDepth=-1;
// Slf_FILE_MESSAGE mssage;
// CObjWelllogRound* pWelllogRound;
// CMemRdWt * logio=new CMemRdWt();
// if(!logio->Open(slffilename.toStdString().c_str(),CSlfIO::modeReadWrite))
// {
// delete logio;
// QString aa=slffilename+"文件打开失败,请检查!";
// // AppendConsole(pai::log::PAI_ERROR,aa);
// Methodlib.unload();
// return 0;
// }
// logio->GetFileMessage(mssage);
// QString path,wen,slfn;
// GetWellNameAndPath(slffilename,wen,path,slfn);
// if(slfn.indexOf(".well",0,Qt::CaseInsensitive)==-1)
// {
// QString slf;
// if(strlen(mssage.WellName)==0||mssage.WellName[0]==' ')
// {
// int len=slffilename.indexOf(".slf",0,Qt::CaseInsensitive);
// slf=slffilename.mid(0,len)+".well";
// }
// else slf=path+"/"+mssage.WellName+".well";
// CMemRdWt sf(slf.toStdString().c_str(),CSlfIO::modeReadWrite);
// Slf_FILE_MESSAGE sm;
// sf.GetFileMessage(sm);
// if(sm.Xcoor!=mssage.Xcoor)
// {
// if(sm.Xcoor>1&&(_finite(sm.Xcoor)&&!_isnan(sm.Xcoor))) mssage.Xcoor=sm.Xcoor;
// else if(mssage.Xcoor>1&&(_finite(mssage.Xcoor)&&!_isnan(mssage.Xcoor)))sm.Xcoor=mssage.Xcoor;
// if(sm.Ycoor>1&&(_finite(sm.Ycoor)&&!_isnan(sm.Ycoor))) mssage.Ycoor=sm.Ycoor;
// else if(mssage.Ycoor>1&&(_finite(mssage.Ycoor)&&!_isnan(mssage.Ycoor)))sm.Ycoor=mssage.Ycoor;
// if(sm.azca&&(_finite(sm.azca)&&!_isnan(sm.azca))) mssage.azca=sm.azca;
// else if(mssage.azca&&(_finite(mssage.azca)&&!_isnan(mssage.azca)))sm.azca=mssage.azca;
// if(sm.Altitude&&(_finite(sm.Altitude)&&!_isnan(sm.Altitude))) mssage.Altitude=sm.Altitude;
// else if(mssage.Altitude&&(_finite(mssage.Altitude)&&!_isnan(mssage.Altitude)))sm.Altitude=mssage.Altitude;
// if(sm.Kelly&&(_finite(sm.Kelly)&&!_isnan(sm.Kelly))) mssage.Kelly=sm.Kelly;
// else if(mssage.Kelly&&(_finite(mssage.Kelly)&&!_isnan(mssage.Kelly)))sm.Kelly=mssage.Kelly;
// if(sm.TVD&&(_finite(sm.TVD)&&!_isnan(sm.TVD))) mssage.TVD=sm.TVD;
// else if(mssage.TVD&&(_finite(mssage.TVD)&&!_isnan(mssage.TVD)))sm.TVD=mssage.TVD;
// if(sm.X0&&(_finite(sm.X0)&&!_isnan(sm.X0))) mssage.X0=sm.X0;
// else if(mssage.X0&&(_finite(mssage.X0)&&!_isnan(mssage.X0)))sm.X0=mssage.X0;
// if(sm.Y0&&(_finite(sm.Y0)&&!_isnan(sm.Y0))) mssage.Y0=sm.Y0;
// else if(mssage.Y0&&(_finite(mssage.Y0)&&!_isnan(mssage.Y0)))sm.Y0=mssage.Y0;
// sf.SetFileMessage(sm);
// logio->SetFileMessage(mssage);
// }
// }
// int curveCount=logio->GetObjectCount();
// //说明从项目或者井节点发起attachSLF,需要读取slf获得井名和井次信息
// QString wellname="";
// QString wellRoundname="";
// QStringList azims=GetSimilarCurves("AZIM");
// foreach(QString cname,azims)
// {
// iAZIM=logio->OpenCurve(cname.toStdString().c_str());
// if(iAZIM>-1) break;
// }
// QStringList devis=GetSimilarCurves("DEVI");
// foreach(QString cname,devis)
// {
// iDev=logio->OpenCurve(cname.toStdString().c_str());
// if(iDev>-1) break;
// }
// Slf_CURVE acurveinfo;
// memset(&acurveinfo,0,sizeof(Slf_CURVE));
// float AZCA=mssage.azca,TVD=mssage.TVD,X0=mssage.X0,Y0=mssage.Y0;
// double XE=X0,YN=Y0;
// float Altitude=mssage.Altitude;
// float X_COORDINATE=mssage.Xcoor;
// float Y_COORDINATE=mssage.Ycoor;//井斜x,y坐标
// float KB=ConvertDataByFloat(mssage.Kelly).toFloat();
// double HOFF0=0;
// double HOAZ0=0,gtd=0;
// double AZIM0=0;
// if(iAZIM>-1) logio->GetCurveInfo(iAZIM,&acurveinfo);
// WellHead &mWellHead=pWell->GetWellHead();
// mWellHead.x=X_COORDINATE;
// mWellHead.y=Y_COORDINATE;
// if(KB==-9999) KB=0;
// if(KB==-99999) KB=0;
// mWellHead.dEle=KB;
// mWellHead.earthEle=Altitude;
// mWellHead.depth=acurveinfo.StartDepth;
// mWellHead.startDepth=acurveinfo.StartDepth;
// mWellHead.azca=AZCA;
// mWellHead.endDepth=acurveinfo.EndDepth;
// if(TVD==0) TVD=mWellHead.startDepth;
// mWellHead.tvd=TVD;
// mWellHead.z=mWellHead.earthEle+mWellHead.dEle-TVD;
// mWellHead.dxe=X0;
// mWellHead.dyn=Y0;
// // if(mWellHead.tvd==0) mWellHead.tvd=TVD;
// double ZD=mWellHead.tvd;
// if(mWellHead.tvd==0) ZD=TVD;
// //TVD=mWellHead.tvd;
// std::vector<double>vX;
// std::vector<double>vY;
// std::vector<double>vZ;
// std::vector<float>vTVD;
// if(iAZIM>=0&&iDev>=0&&acurveinfo.DepLevel) {
// initTrackPoints(AZCA,TVD,X0,Y0,acurveinfo.DepLevel,30,0);
// int point=(mWellHead.endDepth-mWellHead.startDepth)/acurveinfo.DepLevel+1.5;
// float *nDevi=new float[point+1];
// memset(nDevi,0,sizeof(float)*point);
// float *nAzim=new float[point+1];
// memset(nAzim,0,sizeof(float)*point);
// vX.resize(point);
// vY.resize(point);
// vZ.resize(point);
// vTVD.resize(point);
// int point1=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5;
// int point2=(acurveinfo.EndDepth-mWellHead.startDepth)/acurveinfo.DepLevel+0.5;
// logio->ReadCurve(iAZIM,acurveinfo.StartDepth,point1,nAzim);
// logio->ReadCurve(iDev,acurveinfo.StartDepth,point1,nDevi);
// for(int i=point2;i<point-1;i++)
// {
// nDevi[i]=nDevi[point2-1];
// nAzim[i]=nAzim[point2-1];
// }
// for(int i=0;i<point;i++) {
// TrackPoints(nDevi[i],nAzim[i],acurveinfo.DepLevel,XE,YN,ZD,HOFF0,HOAZ0,gtd,AZIM0);
// //x0;
// //y0; //xy偏移
// //tvd; //井口垂直高度
// //depth; //测量深度
// //Altitude ; //地面海拔
// //KB; // 补心高
// //azca; // 闭合方位,磁偏角
// double z=mWellHead.earthEle-ZD+mWellHead.dEle;
// double x=X_COORDINATE+XE;
// double y=Y_COORDINATE+YN;//井斜x,y坐标
// float tvd=ZD;
// vX[i]=x;
// vY[i]=y;
// vZ[i]=z;
// vTVD[i]=tvd;
// }
// delete nDevi;
// delete nAzim;
// }
// else {
// int curveindex=-1;
// for(int i=0;i<curveCount;i++) {
// if(logio->GetObjectStatus(i)!=OBJECT_NORMAL) continue;
// short curvetype=logio->GetObjectType(i);
// if(curvetype==CURVE_OBJECT) {
// char* curvename=new char[65];
// curvename[64]='\0';
// char* aliasname=new char[65];
// aliasname[64]='\0';
// logio->GetObjectName(i,curvename,NULL,aliasname);
// logio->GetCurveInfo(i,&acurveinfo);
// if(acurveinfo.DepLevel==0||
// acurveinfo.DepLevel==0xcdcdcdcd
// ||acurveinfo.DepLevel>=2.226e+008||
// acurveinfo.StartDepth==acurveinfo.EndDepth){
// logio->DiscardObject(i);
// delete curvename;
// delete aliasname;
// continue;
// }
// else {
// curveindex=logio->OpenCurve(curvename);
// delete curvename;
// delete aliasname;
// }
// break;
// }
// }
// float sdep=TVD,edep=TVD,rlev=0.125;
// if(curveindex>-1) {
// logio->GetCurveInfo(curveindex,&acurveinfo);
// sdep=acurveinfo.StartDepth;
// edep=acurveinfo.EndDepth;
// rlev=acurveinfo.DepLevel;
// ZD=sdep;
// double z=mWellHead.earthEle-ZD+mWellHead.dEle;
// double x=X_COORDINATE+XE+X0;
// double y=Y_COORDINATE+YN+Y0;//井斜x,y坐标
// int count=(edep-sdep)/rlev+1.5;
// vX.resize(count);
// vY.resize(count);
// vZ.resize(count);
// vTVD.resize(count);
// for(int i=0;i<count;i++) {
// z-=rlev;
// ZD+=rlev;
// vX[i]=x;
// vY[i]=y;
// vZ[i]=z;
// vTVD[i]=ZD;
// }
// }
// else {
// memset(&acurveinfo,0,sizeof(Slf_CURVE));
// }
// }
// // if(acurveinfo.DepLevel&&acurveinfo.StartDepth!=acurveinfo.EndDepth)
// {
// Slf_CURVE xinfo;
// memset(&xinfo,0,sizeof(xinfo));
// xinfo.DepLevel=acurveinfo.DepLevel;
// if(xinfo.DepLevel==0) xinfo.DepLevel=0.125;
// xinfo.StartDepth=acurveinfo.StartDepth;
// xinfo.EndDepth=acurveinfo.EndDepth;
// xinfo.MaxValue=-999999;
// xinfo.MinValue=999999;
// xinfo.CodeLen=sizeof(double);
// xinfo.RepCode=REPR_DOUBLE;
// strcpy(xinfo.AliasName,"X");
// strcpy(xinfo.Name,"X");
// int index=logio->CreateCurve(&xinfo);
// if(index>-1&&vX.size()) {
// logio->WriteCurve(index,xinfo.StartDepth,vX.size(),(double *)&vX[0]);
// logio->CloseCurve(index);
// }
// strcpy(xinfo.AliasName,"Y");
// strcpy(xinfo.Name,"Y");
// index=logio->CreateCurve(&xinfo);
// if(index>-1&&vY.size()) {
// logio->WriteCurve(index,xinfo.StartDepth,vY.size(),(double *)&vY[0]);
// logio->CloseCurve(index);
// }
// strcpy(xinfo.AliasName,"Z");
// strcpy(xinfo.Name,"Z");
// index=logio->CreateCurve(&xinfo);
// if(index>-1&&vZ.size()) {
// logio->WriteCurve(index,xinfo.StartDepth,vZ.size(),(double *)&vZ[0]);
// logio->CloseCurve(index);
// }
// strcpy(xinfo.AliasName,"TVD");
// strcpy(xinfo.Name,"TVD");
// xinfo.CodeLen=sizeof(float);
// xinfo.RepCode=REPR_FLOAT;
// index=logio->CreateCurve(&xinfo);
// if(index>-1&&vTVD.size()) {
// logio->WriteCurve(index,xinfo.StartDepth,vTVD.size(),(float *)&vTVD[0]);
// logio->CloseCurve(index);
// }
// }
// delete logio;
// Methodlib.unload();
// return vTVD.size();
// }
// void CObjWell::Compute2DTrajectory(float _ProjAngle,double _HorizBoreXE,double _HorizBoreYN,float _HScale,float _VScale)
// {
// m_WellHead._ProjAngle=_ProjAngle;
// m_WellHead._HorizBoreXE=_HorizBoreXE;
// m_WellHead._HorizBoreYN=_HorizBoreYN;
// Compute2DTrajectory(_HScale,_VScale);
// }
// void CObjWell::Compute2DTrajectory(float _HScale,float _VScale)
// {
// if(!m_vX.size())LoadXYZ();
// Well &well=GetDBWell();
// float bs=m_WellHead.earthEle+m_WellHead.dEle;
// int xsize=m_vX.size();
// CGeneralProfileModelData model;
// model._HRate=1;
// model._VRate=1;
// model._HScale=1;
// model._VScale=1;
// // model.InitRealScaleRate();
// if(!m_WellHead._HorizBoreXE) {
// m_WellHead._HorizBoreXE=m_WellHead.x;
// m_WellHead._HorizBoreYN=m_WellHead.y;
// }
// model.InitProfileExtent(m_WellHead);
// m_vDX.SetSize(xsize);
// m_vDY.SetSize(xsize);
// m_vAngle.SetSize(xsize);
// if(!xsize) return;
// m_vDX.m_vProperty[0]=0;
// m_vDY.m_vProperty[0]=0;
// m_vAngle.m_vProperty[0]=0;
// for(int i=1;i<xsize;i++) {
// double z = m_vZ.m_vProperty[i];
// // z=-ConvertY0(-z);
// double x = m_vX.m_vProperty[i];
// double y = m_vY.m_vProperty[i];
// Point3D p(x, y, z);
// Point3D p3 = model.GetProjectPoint(p);
// Point2D p2 = model.ProfilePointToScreen(p3);
// m_vDX.m_vProperty[i]=p2.x;
// m_vDY.m_vProperty[i]=p2.y;
// float x1, x2, y1, y2, angle = 0;
// int i_1=i-1;/*
// if(i>=3)
// i_1=i-3;*/
// double Z0 = m_vZ.m_vProperty[i_1];
// // Z0=-ConvertY0(-Z0);
// double X0 = m_vX.m_vProperty[i-1];
// double Y0= m_vY.m_vProperty[i_1];
// Point3D P30(X0, Y0, Z0);
// Point3D PP3 = model.GetProjectPoint(P30);
// Point2D ttp2 = model.ProfilePointToScreen(PP3);
// Point2D zP21 = model.ProfilePointToScreenZoom(p3);//计算投影后的直接段的与角度
// Point2D zP20 = model.ProfilePointToScreenZoom(PP3);//计算投影后的直接段的与角度
// float tdevi = 0;
// zP21.y=-zP21.y;
// zP20.y=-zP20.y;
// if (zP21.x == zP20.x)
// {
// if (zP21.y - zP20.y > 0)
// tdevi = 90;
// else
// tdevi = 270;
// }
// else
// {
// tdevi = (float)(atan((zP21.y - zP20.y) / (zP21.x - zP20.x)) * 180 / 3.1415926);
// if (zP21.y - zP20.y == 0 && zP21.x - zP20.x < 0) tdevi = 180;
// if (tdevi < 0) tdevi += 360;
// if (zP21.x - zP20.x < 0 && zP21.y - zP20.y > 0)
// {
// tdevi = tdevi - 180;
// }
// else if (zP21.x - zP20.x < 0 && zP21.y - zP20.y < 0)
// {
// tdevi = tdevi + 180;
// }
// }
// angle = tdevi + 90;
// if (angle > 360) angle -= 360;
// m_vAngle.m_vProperty[i]=angle;
// }
// }
void CObjWell::SetDX(const FLOATPROPERTY *DX)
{
m_vDX.copy(DX);
}
void CObjWell::SetDY(const FLOATPROPERTY *DY)
{
m_vDY.copy(DY);
}
void CObjWell::SetAngle(const FLOATPROPERTY *Angle)
{
m_vAngle.copy(Angle);
}
FLOATPROPERTY & CObjWell::GetDX()
{
return m_vDX;
}
FLOATPROPERTY & CObjWell::GetDY()
{
return m_vDY;
}
DOUBLEPROPERTY & CObjWell::GetX()
{
return m_vX;
}
float CObjWell::GetDX(float dep)
{
int i=(dep-m_XYZStartDep)/m_XYZRlev;
if(i>0)i-=1;
if(m_vDX.size()&&i>-1&&i<m_vDX.size()) return m_vDX.m_vProperty[i];
else if(m_vDX.size()) return -9999;
else return dep;
}
float CObjWell::GetDXToDep(float dx)
{
//以下只适用于递增或递减水平位移的井段
if(m_vDX.size() < 1)return m_XYZStartDep;
int s=m_vDX.size();
if(dx > m_vDX.m_vProperty[s-1])return m_XYZEndDep;
if(dx<=m_vDX.m_vProperty[0]) return m_XYZStartDep;
float err=0;
//int i=binarySearch(m_vDX.m_vProperty,s,dx,err);
int i = 0;
for(int j = 0;j<m_vDX.size()-1;j++)
{
if(dx==m_vDX.m_vProperty[j]||(dx > m_vDX.m_vProperty[j] && dx < m_vDX.m_vProperty[j+1]) || ((dx >= m_vDX.m_vProperty[j+1] && dx < m_vDX.m_vProperty[j])))
{
i = j;
break;
}
}
return m_XYZStartDep+i*m_XYZRlev;
}
float CObjWell::GetDYToDep(float dy)
{
//以下只适用于递增或递减垂深的井段
if(m_vDY.size() < 1)return m_XYZStartDep;
int s=m_vDY.size();
if(dy > m_WellHead.earthEle+m_WellHead.dEle-m_vDY.m_vProperty[s-1])return m_XYZEndDep;
float err=0;
//int i=binarySearch(m_vDY.m_vProperty,s,dy,err);
int i = 0;
for(int j = 0;j<m_vDY.size()-1;j++)
{
if((dy >= m_WellHead.earthEle+m_WellHead.dEle-m_vDY.m_vProperty[j] &&
dy < m_WellHead.earthEle+m_WellHead.dEle-m_vDY.m_vProperty[j+1]) ||
(dy >=m_WellHead.earthEle+m_WellHead.dEle -m_vDY.m_vProperty[j+1] &&
dy <m_WellHead.earthEle+m_WellHead.dEle -m_vDY.m_vProperty[j]))
{
i = j;
break;
}
}
return m_XYZStartDep+i*m_XYZRlev;
}
float CObjWell::GetDY(float dep)
{
int i=(dep-m_XYZStartDep)/m_XYZRlev;
if(m_vDY.size()&&i>-1&&i<m_vDY.size()) return m_vDY.m_vProperty[i];
else if(m_vDY.size()) return -9999;
else return dep;
}
float CObjWell::GetDZ(float dep)
{
int i=(dep-m_XYZStartDep)/m_XYZRlev;
if(m_vZ.size()&&i>=0&&i<m_vZ.size()){
dep=m_WellHead.earthEle+m_WellHead.dEle-m_vZ.m_vProperty[i];
return dep;
}
else if(m_vZ.size())return -9999;
else return dep;
}
DOUBLEPROPERTY & CObjWell::GetY()
{
return m_vY;
}
FLOATPROPERTY & CObjWell::GetAngle()
{
return m_vAngle;
}
DOUBLEPROPERTY & CObjWell::GetZ()
{
return m_vZ;
}
void CObjWell::SetX( const DOUBLEPROPERTY *vX )
{
m_vX.copy(vX);
}
void CObjWell::SetY( const DOUBLEPROPERTY *vY )
{
m_vY.copy(vY);
}
void CObjWell::SetZ( const DOUBLEPROPERTY *vZ )
{
m_vZ.copy(vZ);
}
void CObjWell::SetDepth(float sdep,float edep,float rlev)
{
m_StartDep = sdep;
m_EndDep = edep;
m_Rlev = rlev;
}
void CObjWell::SetStartDep(float sdep)
{
m_StartDep = sdep;
}
void CObjWell::SetEndDep(float dep)
{
m_EndDep = dep;
}
void CObjWell::SetRlev( float rlev )
{
m_Rlev = rlev;
}
float CObjWell::GetStartDep()
{
return m_StartDep;
}
float CObjWell::GetEndDep()
{
return m_EndDep;
}
float CObjWell::GetRlev()
{
return m_Rlev;
}
QString CObjWell::GetWellSymbol()
{
return m_strWellImage;
}
pai::ios::welllog::Well &CObjWell::GetDBWell()
{
return m_DbWell;
}
void CObjWell::SetDBWell(pai::ios::welllog::Well &DbWell)
{
m_DbWell=DbWell;
}
// void CObjWell::SetBelongID()
// {
// pai::objectmodel::PaiObject* paiProject = this->GetForebear(GetClassID_Project());
// if(paiProject)
// {
// pai::datamodel::CObjProject *currentProject = dynamic_cast<pai::datamodel::CObjProject*>(paiProject);
// if(currentProject)
// {
// pai::ios::welllog::DataObject* dbProject = currentProject->GetDbObject();
// if(dbProject)
// {
// m_DbWell.SetDataBelongID(dbProject->GetDataID());
// }
// }
// }
// }
// pai::ios::welllog::DataObject * CObjWell::GetDbObject()
// {
// SetBelongID();
// return &m_DbWell;
// }
/************************************************************************/
/* @brief 得到本井次下的对应模板值的井曲线 */
/************************************************************************/
// pai::datamodel::CObjWellLog* CObjWell::GetWellLogByTemplate(QString wellroundPath,const QVariant& templateKey)
// {
// int ghostindex=templateKey.toString().indexOf(OBJ_GHOST_MARK);
// if(ghostindex>0) return GetWellLogByTemplate(templateKey);
// if(wellroundPath=="") return GetWellLogByTemplate(templateKey);
// return dynamic_cast<pai::datamodel::CObjWellLog*>(CPaiObjectHelper::GetSubtree(::GetProject(),wellroundPath.append("/").append(templateKey.toString())));
// }
// pai::datamodel::CObjWellLog* CObjWell::GetWellLogByTemplate(const QVariant& templateKey)
// {
// QList<PaiObject*> wellLogsUnderRounds;
// QList<PaiObject*> welllogOrRounds;
// this->GetChildren(welllogOrRounds);
// for(int i= welllogOrRounds.size()-1; i>=0; --i)
// {
// if(welllogOrRounds[i]->GetTypeID() == GetClassID_WellLogRound() )
// {
// CObjWelllogRound* currentround=dynamic_cast<pai::datamodel::CObjWelllogRound*>(welllogOrRounds[i]);
// QString wellroundspath=currentround->GetWellRoundPath();
// CObjWellLog* result=dynamic_cast<CObjWellLog*>(CPaiObjectHelper::GetSubtree(::GetProject(),wellroundspath.append("/").append(templateKey.toString())));
// if(result) return result;
// QList<PaiObject*> welllogsUnderRound;
// welllogOrRounds[i]->GetChildren(welllogsUnderRound);
// wellLogsUnderRounds << welllogsUnderRound;
// welllogOrRounds.removeAt(i);
// }
// }
// welllogOrRounds << wellLogsUnderRounds ;
// foreach(PaiObject* welllog, welllogOrRounds)
// {
// pai::datamodel::CBaseObject* welllogCurve = dynamic_cast<pai::datamodel::CBaseObject* >(welllog);
// if(welllogCurve!= NULL && welllogCurve->GetTemplateKey() == templateKey)
// {
// return dynamic_cast<pai::datamodel::CObjWellLog*>(welllogCurve);
// }
// }
// //没有找到看看是否存在Ghost
// int ghostindex=templateKey.toString().indexOf(OBJ_GHOST_MARK);
// if(ghostindex>0){
// QString OriginalCurveName=templateKey.toString().left(ghostindex);
// //如果是ghost对象优先在本节点下找再到各级井次查找
// CBaseObject* pClonedObj=NULL;
// foreach(PaiObject* welllog, welllogOrRounds)
// {
// pai::datamodel::CBaseObject* origwelllogCurve = dynamic_cast<pai::datamodel::CBaseObject* >(welllog);
// if(origwelllogCurve!= NULL && origwelllogCurve->GetTemplateKey().toString() == OriginalCurveName)
// {
// pClonedObj=origwelllogCurve->CloneObject();
// break;
// }
// }
// if(pClonedObj){
// this->AddChild(pClonedObj->GetPaiObject(),pai::objectmodel::PaiObject::MountNoTree);//MountNoTree
// ::GetProject()->AddIDMap(pClonedObj->GetPaiObject()->GetID(),pClonedObj);
// pClonedObj->SetCheckState(Qt::Checked);
// pClonedObj->SetGhostName(pClonedObj->GetPaiObject()->GetName()+OBJ_GHOST_MARK+QString::fromStdString(GenTimeStamp()));
// return dynamic_cast<pai::datamodel::CObjWellLog*>(pClonedObj);
// }
// }
// return NULL;
// }
OSGDATAMODEL_EXPORT CObjWell *GetCurrentObjWell()
{
return g_pObjWell;
}
OSGDATAMODEL_EXPORT void SetCurrentObjWell( CObjWell *pObjWell)
{
g_pObjWell = pObjWell;
}
// BEGIN_REGISTER_OBJECT(CObjWell)
// QUuid(GetClassID_Well())
// END_REGISTER_OBJECT( CObjWell );
// CWellViewInfo3DBasemap::CWellViewInfo3DBasemap()
// {
// SetDrawWellPath( true );
// m_LineProperty.SetLineColor( osg::Vec4f(1,0,0,1) );
// m_LineProperty.SetLineWidth(2);
// }
// BEGIN_REGISTER_OBJECTVIEWINFO(CWellViewInfo3DBasemap)
// sOSGObjectViewInfoKey( GetClassID_Well(),GetWindowTypeID_3D() ),
// sOSGObjectViewInfoKey( GetClassID_Well(),GetWindowTypeID_QtBasemap() ),
// sOSGObjectViewInfoKey( GetClassID_Well(),GetWindowTypeID_Contour() )
// END_REGISTER_OBJECTVIEWINFO( CWellViewInfo3DBasemap );
END_OSGDATAMODEL_NAMESPACE