#pragma warning( push ,0) #include #include #include #include #include "LogIO.h" #include "ObjWelllog.h" // #include "ObjWell.h" // #include "ObjWelllogRound.h" // #include "ObjWellTrack.h" // #include "ObjWellLogTrack.h" // #include "FamilyAliases.h" // #include "Family.h" #include "MemRdWt.h" #include "BaseFun.h" // #include "ObjectEvent.h" #include "ObjectID.h" #pragma warning( pop ) BEGIN_OSGDATAMODEL_NAMESPACE; CObjWellLog::CObjWellLog(bool visible) { // SetFlagEnable(PaiObject::VisibibleOnTree, visible); m_fPropertMin = 200; m_fPropertMax = 100; m_DepthOffset = 0; // SetIconName("icon/Log.png"); m_BottomDepth=0.0; m_TopDepth=0.0; SetName("AC"); m_ShiftTopDepth=-9999.0; m_ShiftBottomDepth=-9999.0; m_ObjectType=0; m_Rlev=0.125; m_ChangeNo=0; m_pObjWell=NULL; m_strValue[0]=0; isRun=0; m_SharedMemory=NULL; m_Handle=NULL; // connect( (const QObject*)( &GetObjectEvent() ),SIGNAL(RefreshData(QString,QString,QObject*)),this,SLOT(slotRefreshData(QString ,QString,QObject*))); // connect( (const QObject*)( &GetObjectEvent() ),SIGNAL(DeAttchData(QString,QString)),this,SLOT(slotDeAttchData(QString ,QString))); } CObjWellLog::CObjWellLog() { m_fPropertMin = 0; m_fPropertMax = 100; m_DepthOffset = 0; // SetIconName("icon/Log.png"); m_BottomDepth=0.0; m_TopDepth=0.0; m_ShiftTopDepth=-9999.0; m_ShiftBottomDepth=-9999.0; SetName("AC"); m_ObjectType=0; m_Rlev=0.125; m_ChangeNo=0; m_pObjWell=NULL; isRun=false; isLoad=false; isUsing = false; m_SharedMemory=NULL; m_Handle=NULL; // connect( (const QObject*)( &GetObjectEvent() ), // SIGNAL(RefreshData(QString,QString,QObject*)), // this,SLOT(slotRefreshData(QString ,QString,QObject*))); // connect( (const QObject*)( &GetObjectEvent() ),SIGNAL(DeAttchData(QString,QString)),this,SLOT(slotDeAttchData(QString ,QString))); } void CObjWellLog::slotRefreshData(QString slf,QString curname,QObject*re) { // if(re==this) { // return; // } // QString slf1=m_SlfFileName; // slf1.replace("\\","/"); // QString slf2=slf; // slf2.replace("\\","/"); // slf1.toUpper(); // slf2.toUpper(); // if(slf1==slf2) { // if(!curname.isEmpty()) { // if(GetName()==curname&&isRun) { // // isLoad=false; // GetValidMDProperty(m_vMD,m_vProperty,-99999,-99999); // // LoadFromSLF(); // } // return; // } // else { // if(isRun) { // // isLoad=false; // GetValidMDProperty(m_vMD,m_vProperty,-99999,-99999); // // LoadFromSLF(); // } // } // } } void CObjWellLog::slotDeAttchData(QString slf,QString curname) { QString slf1=m_SlfFileName; slf1.replace("\\","/"); QString slf2=slf; slf2.replace("\\","/"); slf1.toUpper(); slf2.toUpper(); if(slf1==slf2) { if(!curname.isEmpty()) { if(GetName()==curname&&isRun) { QString name=GetSlfFileName()+GetName(); if(IsMappingMem(name.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; m_vMD.clear(); m_vProperty.clear(); m_vMDShifting.clear(); } isLoad=false; } } } } CObjWellLogTrack *CObjWellLog::GetWellLogTrack() { // PaiObject *pPai=GetPaiObject(); // while(pPai) { // CObjWellLogTrack *pTWellLogTrack=dynamic_cast(pPai); // if(pTWellLogTrack) { // return pTWellLogTrack; // } // pPai=pPai->GetParent(); // } return NULL; } CObjWellTrack *CObjWellLog::GetWellTrack() { // PaiObject *pPai=GetPaiObject(); // while(pPai) { // CObjWellTrack *pTWellTrack=dynamic_cast(pPai); // if(pTWellTrack) { // return pTWellTrack; // } // else { // CObjWellLogTrack *pTWellLogTrack=dynamic_cast(pPai); // if(pTWellLogTrack) { // CObjWellTrack *pTWellTrack=dynamic_cast(pTWellLogTrack->GetWellTrack()); // if(pTWellTrack) { // return pTWellTrack; // } // } // } // pPai=pPai->GetParent(); // } return NULL; } QString CObjWellLog::GetDescription() { //if(!isRun) { CLogIO *logio=new CLogIO(); QString slfFileName=GetSlfFileName(); if(slfFileName.isEmpty()) return ""; if(!logio->Open(slfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; return ""; } QString name=GetName(); int i=logio->OpenCurve(name.toStdString().c_str()); if(i<0) { delete logio; return ""; } logio->GetCurveInfo(i,&acurveinfo); if(acurveinfo.DepLevel!=0&&acurveinfo.EndDepth-acurveinfo.StartDepth>0) { if(acurveinfo.MaxValue==acurveinfo.MinValue||acurveinfo.MaxValue==-99999||acurveinfo.MaxValue==-9999||acurveinfo.MinValue==999999||acurveinfo.MinValue==999999||acurveinfo.MinValue==99999||acurveinfo.MinValue==99999||acurveinfo.MinValue==-9999) { MyDataTypeEnum vVdl; DWORD count=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5; DWORD len=count*acurveinfo.CodeLen; acurveinfo.MinValue=99999999; acurveinfo.MaxValue=-99999999; if(acurveinfo.CodeLen==8) acurveinfo.MinValue=99999999; vVdl.vchar=new char[len]; len=logio->ReadCurve(i, acurveinfo.StartDepth,count,(void *)vVdl.vchar); if(!len) { delete vVdl.vchar; delete logio; return "data error!"; } for(int kk=0;kkGetData(acurveinfo.RepCode,&vVdl.vchar[kk*acurveinfo.CodeLen],buf); if(temp==-9999.0||temp==-999.25||temp==-99999.0) continue; #ifdef WIN32 if(_isnan(temp)||!_finite(temp)) continue; #else if(__isnan(temp)||!__finite(temp)) continue; #endif // WIN32 if(acurveinfo.MaxValuetemp) acurveinfo.MinValue=temp; } logio->SetCurveInfo(i,&acurveinfo); delete vVdl.vchar; } } logio->CloseCurve(i); delete logio; } if(acurveinfo.RepCode<1) acurveinfo.RepCode=1; if(acurveinfo.RepCode>12) acurveinfo.RepCode=12; QString result=""; result.append("对象类型:曲线\n"); result.append("曲线名:").append(acurveinfo.Name).append("\n"); result.append("曲线别名:").append(QString::fromStdString(acurveinfo.AliasName)).append("\n"); result.append("本地数据文件:").append(GetSlfFileName()).append("\n"); result.append("顶深:").append(QString::number(acurveinfo.StartDepth)).append("\n"); result.append("底深:").append(QString::number(acurveinfo.EndDepth)).append("\n"); result.append("采样间隔:").append(QString::number(acurveinfo.DepLevel)).append("\n"); result.append("数据类型:").append(Rep_STR[acurveinfo.RepCode-1]).append("\n"); result.append("字节长度:").append(QString::number(acurveinfo.CodeLen)).append("\n"); result.append("最小值:").append(QString::number(acurveinfo.MinValue)).append("\n"); result.append("最大值:").append(QString::number(acurveinfo.MaxValue)).append("\n"); result.append("单位:").append(QString::fromStdString(acurveinfo.Unit)).append("\n"); return result; } double CObjWellLog::GetRlev() { if(m_Rlev==0) m_Rlev=0.125; return m_Rlev; } void CObjWellLog::SetRlev(float rlev) { m_Rlev=rlev; } double CObjWellLog::GetShiftOffset() { return m_DepthOffset; } void CObjWellLog::SetShiftOffset(double DepthOffset) { m_DepthOffset=DepthOffset; } float CObjWellLog::GetPropertyMin() { return m_fPropertMin; } // pai::ios::welllog::WelllogCurve & CObjWellLog::GetLogCurve() // { // return m_logCurve; // } float CObjWellLog::GetPropertyMax() { return m_fPropertMax; } void CObjWellLog::ReCalculateMinMax() { _CalculateMinMax(true); } void CObjWellLog::_CalculateMinMax(bool force) { if( m_fPropertMin < m_fPropertMax && force == false) return; if(!m_vMD.size()) { return; } if( m_vProperty.size() ) { double val=0; int size=m_vProperty.size(); m_fPropertMin =99999999999.0; m_fPropertMax =-99999999999.0; for(int i=0;ival) m_fPropertMin=val;//m_vProperty.m_vProperty[i]; if(m_fPropertMax wellLogTracks; // this->GetChildren(wellLogTracks); // for(int j=0;j(wellLogTracks[j]); // if(tempWellLog) { // tempWellLog->SetSlfFileName(filePath); // } // } } QString CObjWellLog::GetSlfFileName() { return m_SlfFileName; } QUuid CObjWellLog::GetTypeID()const { return GetClassID_WellLog(); } void CObjWellLog::SetBelongID() { // pai::objectmodel::PaiObject* paiWelllogRound = this->GetForebear(GetClassID_WellLogRound()); // if(paiWelllogRound) // { // pai::datamodel::CObjWelllogRound *currentWelllogRound= dynamic_cast(paiWelllogRound); // if(currentWelllogRound) // { // pai::ios::welllog::DataObject* dbWelllogRound = currentWelllogRound->GetDbObject(); // if(dbWelllogRound) // { // m_logCurve.SetDataBelongID(dbWelllogRound->GetDataID()); // } // } // } } void CObjWellLog::SetShiftBottomDepth( double bottomDepth ) { m_ShiftBottomDepth=bottomDepth; } void CObjWellLog::SetShiftTopDepth( double topDepth ) { m_ShiftTopDepth=topDepth; } void CObjWellLog::SetBottomDepth( double bottomDepth ) { m_BottomDepth=bottomDepth; } void CObjWellLog::SetTopDepth( double topDepth ) { m_TopDepth=topDepth; } void CObjWellLog::SetpropertyMin( float Propertymin ) { m_fPropertMin= Propertymin; } void CObjWellLog::SetpropertyMax( float Propertymax ) { m_fPropertMax=Propertymax; } // bool CObjWellLog::Serialize( CObjectArchive &ar ) // { // if(ar.IsStoring()) // { // BEGIN_WRITE_OBJECT( ar,1 ); // BEGIN_WRITE_BLOCK( ar, 1); // ar << HasFlag(PaiObject::VisibibleOnTree); // ar <> visible; // SetFlagEnable(PaiObject::VisibibleOnTree, visible); // ar >>m_SlfFileName; // CBaseObjectImpl::Serialize( ar ); // ar >>m_fPropertMin; // ar >>m_fPropertMax; // ar >>m_TopDepth; // ar >>m_BottomDepth; // QString strtmp; // ar >>strtmp;m_logCurve.SetCurveAlias(strtmp.toStdString()); // ar >>strtmp;m_logCurve.SetFamilyType(strtmp.toStdString()); // ar >>strtmp;m_logCurve.SetUnit(strtmp.toStdString()); // float tmpfloat; // ar >>tmpfloat;m_logCurve.SetSampleInterval(tmpfloat); // END_READ_BLOCK( 1 ); // END_READ_OBJECT( ar ); // } // return true; // } void CObjWellLog::GetValidMDProperty( PFLOATPROPERTY &vMD,PFLOATPROPERTY &vProperty,float sdep,float edep) { if(m_SlfFileName=="") return; if(sdep>=edep){ if(sdep!=-99999) return; } isRun=true; QString name=m_SlfFileName+GetName(); if(key!=name) { vMD.SetSize(0); vMD.m_vProperty=0; vProperty.SetSize(0); vProperty.m_vProperty=NULL; if(IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } key=""; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; return; } int curveindex=logio->OpenCurve(GetName().toStdString().c_str()); if(curveindex<0) { delete logio; return; } Slf_CURVE acurveinfo; logio->GetCurveInfo(curveindex,&acurveinfo); if(acurveinfo.DepLevel==0) { acurveinfo.DepLevel=0.125; logio->DiscardObject(curveindex); delete logio; return; } m_ObjectType=CURVE_OBJECT; int samplenum=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5; CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=name; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+acurveinfo.CodeLen*(samplenum+1),name.toStdString().c_str()); if(!m_Handle||!m_SharedMemory) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; key=""; return; } float *buffer=(float*)m_SharedMemory; buffer[0]=acurveinfo.StartDepth; buffer[1]=acurveinfo.EndDepth; buffer[2]=acurveinfo.DepLevel; ((int *)buffer)[3]=samplenum; logio->ReadCurve(curveindex,acurveinfo.StartDepth,samplenum,(void *)&buffer[4]); if(acurveinfo.MaxValue==acurveinfo.MinValue||acurveinfo.MaxValue==-99999||acurveinfo.MaxValue==-9999||acurveinfo.MinValue==999999||acurveinfo.MinValue==999999||acurveinfo.MinValue==99999||acurveinfo.MinValue==99999||acurveinfo.MinValue==-9999) { if(acurveinfo.MaxValue==acurveinfo.MinValue||acurveinfo.MaxValue==-99999||acurveinfo.MaxValue==-9999||acurveinfo.MinValue==999999||acurveinfo.MinValue==999999||acurveinfo.MinValue==99999||acurveinfo.MinValue==99999||acurveinfo.MinValue==-9999) { ReCalculateMinMax(); acurveinfo.MaxValue=m_fPropertMax; acurveinfo.MinValue=m_fPropertMin; logio->SetCurveInfo(curveindex,&acurveinfo); } } delete logio; } CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { if(IsMappingMem(name.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } delete logio; vMD.SetSize(0); vMD.m_vProperty=0; vProperty.SetSize(0); vProperty.m_vProperty=NULL; key=""; return; } int curveindex=logio->OpenCurve((char *)GetName().toStdString().c_str()); if(curveindex<0) { if(IsMappingMem(name.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } delete logio; vMD.SetSize(0); vMD.m_vProperty=0; vProperty.SetSize(0); vProperty.m_vProperty=NULL; key=""; return; } logio->GetCurveInfo(curveindex,&acurveinfo); delete logio; vMD.clear(); vProperty.clear(); vMD.SetSize(3); int samplenum=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5; if(!m_SharedMemory) { m_SharedMemory=NULL; m_Handle=NULL; int len=3*sizeof(float)+sizeof(int)+acurveinfo.CodeLen*(samplenum+1); MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,len,key.toStdString().c_str()); } else { vMD.m_vProperty=(float *)m_SharedMemory; if(m_vMD.m_vProperty) { int samplenum1=(m_vMD.m_vProperty[1]-m_vMD.m_vProperty[0])/m_vMD.m_vProperty[2]+1.5; if(samplenum1==samplenum){ m_vMD.m_vProperty[0]=acurveinfo.StartDepth; m_vMD.m_vProperty[1]=acurveinfo.EndDepth; m_vMD.m_vProperty[2]=acurveinfo.DepLevel; } else { isLoad=false; LoadFromSLF(); vMD.m_vProperty=(float *)m_SharedMemory; m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; } } } if(!vMD.m_vProperty) { vMD.SetSize(0); vProperty.SetSize(0); vProperty.m_vProperty=NULL; if(IsMappingMem(name.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } key=""; return; } int size=((int *)m_SharedMemory)[3]; vProperty.SetSize(size); vProperty.m_vProperty=&vMD.m_vProperty[4]; if(m_vMD.size()>0){ m_TopDepth=m_vMD.m_vProperty[0]; m_BottomDepth=m_vMD.m_vProperty[1]; m_Rlev=m_vMD.m_vProperty[2]; } } void CObjWellLog::MoveShift() { MoveShift(m_ShiftTopDepth,m_ShiftBottomDepth,m_DepthOffset); } void CObjWellLog::EShiftDepth(int count,float *sdeps,float *edeps) { if(m_SlfFileName=="") return; CMemRdWt * logio=new CMemRdWt(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return; } int curveindex=logio->FindObjectName((char*)GetName().toStdString().c_str()); if(curveindex<0) { delete logio; return; } CString szBuffer1=""; CString szBuffer=""; for(int i=0;iEShiftDepth((char*)GetName().toStdString().c_str(),2,sdeps,edeps); delete logio; if(isRun) { isLoad=false; LoadFromSLF(); } } void CObjWellLog::MoveShift(float sdep,float edep,float delta) { if(sdep>=edep&&delta==0) return; if(m_SlfFileName=="") return; CMemRdWt * logio=new CMemRdWt(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return; } int curveindex=logio->FindObjectName((char*)GetName().toStdString().c_str()); if(curveindex<0) { delete logio; return; } CString szBuffer=""; if(sdep==edep&&sdep==-9999.0) { szBuffer=QString::number(delta,'f',3)+"\r\n"; WriteShiftMessage(*logio,szBuffer,GetName()); logio->CorrectObjectDepth(curveindex,delta); delete logio; if(isRun) { isLoad=false; LoadFromSLF(); } return; } curveindex=logio->OpenChannel(GetName().toStdString().c_str()); if(curveindex>-1) { szBuffer.Format("%10.3f %10.3f %10.3f\r\n",sdep,edep,delta); WriteShiftMessage(*logio,szBuffer,GetName()); logio->MoveDepth(curveindex,sdep,edep,delta); } else { int ObjectType=logio->GetObjectType(GetName().toStdString().c_str()); float sdeps[2],edeps[2]; sdeps[0]=sdep; edeps[0]=sdep+delta; sdeps[1]=edep; edeps[1]=edep+delta; szBuffer.Format("%10.3f %10.3f\r\n%10.3f %10.3f\r\n",sdeps[0],edeps[0],sdeps[1],edeps[1]); WriteShiftMessage(*logio,szBuffer,GetName()); if(ObjectType >CARD_OBJECT||ObjectType==0) { int index=logio->OpenTable(GetName().toStdString().c_str()); if(index>-1) { logio->EShiftTableDepth((char*)GetName().toStdString().c_str(),2,sdeps,edeps); } } else if(ObjectType==CARD_OBJECT) { logio->EshiftStreamDepth((char *)GetName().toStdString().c_str(),2,sdeps,edeps); } } delete logio; if(isRun) { isLoad=false; LoadFromSLF(); } } void CObjWellLog::GetZoneMDProperty( FLOATPROPERTY &vMD,FLOATPROPERTY &vProperty ,float sdep,float edep) { if(!m_vMD.size()) { GetValidMDProperty(m_vMD,m_vProperty,-99999,99999); } if(m_vMD.size()<3) return; if(edep==99999) edep=m_vMD.m_vProperty[1]; if(sdep==-99999) sdep=m_vMD.m_vProperty[0]; int size=(edep-sdep)/m_vMD.m_vProperty[2]+1.5; vProperty.SetSize(size); int j=(sdep-m_vMD.m_vProperty[0])/m_vMD.m_vProperty[2]; int i=0; if(j<0) { i=(m_vMD.m_vProperty[0]-sdep)/m_vMD.m_vProperty[2]; j=0; } if(j>=m_vProperty.size()) return; if(edep>m_vMD.m_vProperty[1]) edep=m_vMD.m_vProperty[1]; int jj=(edep-m_vMD.m_vProperty[0])/m_vMD.m_vProperty[2]; if(jj<=0) return; vMD.SetSize(3); vMD.m_vProperty[0]=sdep; vMD.m_vProperty[1]=edep; vMD.m_vProperty[2]=m_vMD.m_vProperty[2]; if(acurveinfo.RepCode==REPR_FLOAT) { memmove(&vProperty.m_vProperty[i],&m_vProperty.m_vProperty[j],sizeof(float)*(jj-j)); } else { for(int k=j;k=200) repLen=199; if(repLen>0) { memmove(m_strValue,buffer,repLen); m_strValue[repLen]=0; } else m_strValue[0]=0; break; } return yy; } void CObjWellLog::SetData(int repCode,char *buffer,double yy) { if(!buffer) { return; } switch(repCode) { case REPR_INT: //0 (*((int*)buffer))=(int)yy; break; case REPR_SHORT: //1 (*((short *)buffer))=(short)yy; break; case REPR_LONG://2 (*((long *)buffer))=(long)yy; break; case REPR_FLOAT://3 (*((float *)buffer))=yy; break; case REPR_DOUBLE://4 (*((double *)buffer))=(double)yy; break; case REPR_CHAR://5 (*((char *)buffer))=(char)yy; break; case REPR_UCHAR://6 (*((unsigned char *)buffer))=(unsigned char)yy; break; case REPR_USHORT://7 (*((unsigned short *)buffer))=(unsigned short)yy; break; case REPR_UINT://8 (*((unsigned int *)buffer))=(unsigned int)yy; break; case REPR_ULONG://9 (*((unsigned long *)buffer))=(unsigned long )yy; break; case REPR_STRING://10 // *yy=-99999; break; } return; } double CObjWellLog::GetData(float dep,char *buffer) { if(dep>=acurveinfo.StartDepth&&dep<=acurveinfo.EndDepth) { int i=(dep-acurveinfo.StartDepth)/acurveinfo.DepLevel+0.5; double yy=GetData(i,buffer); return yy; } else { if(acurveinfo.RepCode==REPR_STRING&&buffer) buffer[0]=0; return -9999; } } double CObjWellLog::GetData(int i,char *buffer) { if(!m_vProperty.size()) return -9999; if(!m_vProperty.m_vProperty) return -9999; double yy=-9999; if(m_vProperty.size()>i) { yy=GetData(acurveinfo.RepCode,(char *)&((char *)m_vProperty.m_vProperty)[i*acurveinfo.CodeLen],acurveinfo.CodeLen); } if(acurveinfo.RepCode==REPR_STRING&&buffer) strcpy(buffer,m_strValue); return yy; } void CObjWellLog::SetData(float dep,float *value) { if(dep>=acurveinfo.StartDepth&&dep<=acurveinfo.EndDepth) { int i=(dep-acurveinfo.StartDepth)/acurveinfo.DepLevel+0.5; SetData(i,value); } } void CObjWellLog::SetData(float dep,float value) { if(dep>=acurveinfo.StartDepth&&dep<=acurveinfo.EndDepth) { int i=(dep-acurveinfo.StartDepth)/acurveinfo.DepLevel+0.5; SetData(i,&value); } } void CObjWellLog::SetData(int i,float *value) { if(!m_vProperty.m_vProperty) return; if(acurveinfo.RepCode!=REPR_STRING) { double val=*value; SetData(acurveinfo.RepCode,&((char *)m_vProperty.m_vProperty)[i*acurveinfo.CodeLen],val); } else { memmove(&((char *)m_vProperty.m_vProperty)[i*acurveinfo.CodeLen],value,acurveinfo.CodeLen); } } void CObjWellLog::GetMDProperty(FLOATPROPERTY &vMD,FLOATPROPERTY &vProperty) { if(!m_vMD.size()) { GetValidMDProperty(m_vMD,m_vProperty,-99999,99999); } if(m_vMD.size()<3) return; vMD.SetSize(m_vMD.size()); vProperty.SetSize(m_vProperty.size()); if(acurveinfo.RepCode==REPR_FLOAT) { memmove(vProperty.m_vProperty,m_vProperty.m_vProperty,sizeof(float)*m_vProperty.size()); } else { for(int k=0;k( pParent ); // if( pWell ) { // m_pObjWell=pWell; // return pWell; // } // pParent = pParent->GetParent(); // } return NULL; } CObjWelllogRound *CObjWellLog::GetWelllogRound() { // PaiObject *pParent = GetParent(); // while( pParent ) // { // CObjWelllogRound *pWellRound = dynamic_cast( pParent ); // if( pWellRound ) return pWellRound; // pParent = pParent->GetParent(); // } return NULL; } double CObjWellLog::GetShiftTopDepth() { return m_ShiftTopDepth; } double CObjWellLog::GetShiftBottomDepth() { return m_ShiftBottomDepth; } double CObjWellLog::GetTopDepth() { return m_TopDepth; } double CObjWellLog::GetBottomDepth() { return m_BottomDepth; } PFLOATPROPERTY &CObjWellLog::GetProperty( ) { if(!m_vProperty.size()) { m_vMD.clear(); m_vProperty.clear(); GetValidMDProperty(m_vMD,m_vProperty,-99999.0,99999.0); } CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { if(IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=""; } delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; m_TopDepth=0; m_BottomDepth=0; return m_vProperty; } QString name=m_SlfFileName+GetName(); int index=logio->FindObjectName((char *)GetName().toStdString().c_str()); if(index<0) { if(IsMappingMem(name.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=""; } delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; m_TopDepth=0; m_BottomDepth=0; return m_vProperty; } delete logio; if(!IsMappingMem(name.toStdString().c_str())) { isLoad=false; LoadFromSLF(); } if(m_vMD.size()>0&&m_TopDepth!=m_vMD.m_vProperty[0]){ m_TopDepth=m_vMD.m_vProperty[0]; m_BottomDepth=m_vMD.m_vProperty[1]; m_Rlev=m_vMD.m_vProperty[2]; } return m_vProperty; } PFLOATPROPERTY &CObjWellLog::GetMD( ) { if(!m_vMD.size()) { GetValidMDProperty(m_vMD,m_vProperty,-99999.0,99999.0); } CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { if(IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=""; } delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; m_TopDepth=0; m_BottomDepth=0; return m_vProperty; } QString name=m_SlfFileName+GetName(); int index=logio->FindObjectName((char *)GetName().toStdString().c_str()); if(index<0) { if(IsMappingMem(name.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=""; } delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; m_TopDepth=0; m_BottomDepth=0; return m_vProperty; } logio->GetCurveInfo(index,&acurveinfo); delete logio; if(!IsMappingMem(name.toStdString().c_str())) { isLoad=false; LoadFromSLF(); } if(m_vMD.size()>0&&m_TopDepth!=m_vMD.m_vProperty[0]){ m_TopDepth=m_vMD.m_vProperty[0]; m_BottomDepth=m_vMD.m_vProperty[1]; m_Rlev=m_vMD.m_vProperty[2]; } return m_vMD; } void CObjWellLog::SetProperty(PFLOATPROPERTY *vMD,PFLOATPROPERTY *vProperty ) { if(m_vProperty.m_vProperty!=vProperty->m_vProperty) { if(m_vProperty.size()!=vProperty->size()) { m_vProperty.SetSize(vProperty->size()); CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,vMD->size()*sizeof(float)+sizeof(int)+(vProperty->size()+1)*sizeof(float),key.toStdString().c_str()); } m_vProperty.m_vProperty=&((float*)m_SharedMemory)[4]; memmove(m_vProperty.m_vProperty,vProperty->m_vProperty,sizeof(float)*vProperty->size()); } SetMD(vMD); // SetModified(true,false); SaveToSLF(); } void CObjWellLog::SetProperty(PFLOATPROPERTY *vMD,FLOATPROPERTY *vProperty ) { if(m_vProperty.m_vProperty!=vProperty->m_vProperty) { if(m_vProperty.size()!=vProperty->size()) { m_vProperty.SetSize(vProperty->size()); CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,vMD->size()*sizeof(float)+sizeof(int)+(vProperty->size()+1)*sizeof(float),key.toStdString().c_str()); } m_vProperty.m_vProperty=&((float*)m_SharedMemory)[4]; memmove(m_vProperty.m_vProperty,vProperty->m_vProperty,sizeof(float)*vProperty->size()); } SetMD(vMD); // SetModified(true,false); SaveToSLF(); } void CObjWellLog::SetMD(PFLOATPROPERTY *vMD ) { if(m_vMD.m_vProperty!=vMD->m_vProperty) { if(m_vMD.m_vProperty) { memmove(m_vMD.m_vProperty,vMD->m_vProperty,sizeof(float)*vMD->size()); } } } void CObjWellLog::SetProperty(FLOATPROPERTY *vMD,FLOATPROPERTY *vProperty ) { if(m_vProperty.m_vProperty!=vProperty->m_vProperty) { if(m_vProperty.size()!=vProperty->size()) { m_vProperty.SetSize(vProperty->size()); CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,vMD->size()*sizeof(float)+sizeof(int)+(vProperty->size()+1)*sizeof(float),key.toStdString().c_str()); } m_vProperty.m_vProperty=&((float*)m_SharedMemory)[4]; memmove(m_vProperty.m_vProperty,vProperty->m_vProperty,sizeof(float)*vProperty->size()); } SetMD(vMD); // SetModified(true,false); SaveToSLF(); } void CObjWellLog::SetMD(FLOATPROPERTY *vMD ) { if(m_vMD.m_vProperty!=vMD->m_vProperty) { if(m_vMD.m_vProperty) { memmove(m_vMD.m_vProperty,vMD->m_vProperty,sizeof(float)*vMD->size()); } } } pai::ios::welllog::DataObject *CObjWellLog::GetDbObject() { // if(m_SlfFileName==""){ // SetBelongID(); // return &m_logCurve; // } // else //slf文件存储的情况下,不存到数据库 return NULL; } QVariant CObjWellLog::GetTemplateKey() { QVariant val; return val; //TODO //增加了一级分类,templatekey需要增加这个 // QVariant val=CBaseObject::GetTemplateKey(); // QString sTemplateKey=val.toString(); // int i=sTemplateKey.lastIndexOf("/"); // if(i<0) { // /* QString left; // QString curvename=GetName(); // if(i>-1) left=sTemplateKey.left(i)+"/"+curvename; // else left=sTemplateKey+"/"+curvename; // SetTemplateKey(left); // val=left; // */ // QString categoryName=""; // if(!GetParent()) return categoryName; // if(GetParent()->GetTypeID()!=GetClassID_Well()&&GetParent()->GetTypeID()!=GetClassID_WellLogRound()) categoryName=this->GetParent()->GetName(); // if(categoryName!="") categoryName=categoryName.append("/"); // if(GetGhostName()!="") categoryName=categoryName+GetGhostName(); // else categoryName=categoryName+GetName(); // SetTemplateKey(categoryName); // val=categoryName; // } // return val; } CBaseObject *CObjWellLog::CloneObject() { // CBaseObject * result=CBaseObject::CloneObject(); // CObjWellLog * pCopyedWellLog = dynamic_cast(result); // if(pCopyedWellLog) pCopyedWellLog->SetWell(m_pObjWell); // return pCopyedWellLog; return NULL; } QStringList CObjWellLog::GetColumnHeadList() { QStringList strlist; strlist<<"深度值"<<"属性值"; return strlist; } //从slf加载数据 bool CObjWellLog::LoadFromSLF() { if(m_SlfFileName=="") { if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=""; } return true; } isRun=true; if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=""; } QString name=m_SlfFileName+GetName(); if(IsMappingMem(name.toStdString().c_str())) { // GetObjectEvent().OnDeAttchData(m_SlfFileName,GetName()); } m_SharedMemory=NULL; m_Handle=NULL; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; return false; } int curveindex=logio->OpenCurve(GetName().toStdString().c_str()); if(curveindex<0) { delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; return false; } m_ObjectType=CURVE_OBJECT; logio->GetCurveInfo(curveindex,&acurveinfo); int samplenum=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5; if(acurveinfo.DepLevel==0) { acurveinfo.DepLevel=0.125; logio->DiscardObject(curveindex); delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; return false; } key=name; int len=3*sizeof(float)+sizeof(int)+acurveinfo.CodeLen*(samplenum+1); MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,len,key.toStdString().c_str()); if(!m_Handle||!m_SharedMemory) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+acurveinfo.CodeLen*(samplenum+1),key.toStdString().c_str()); if(!m_Handle||!m_SharedMemory) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; return false; } } float *buffer=(float*)m_SharedMemory; buffer[0]=acurveinfo.StartDepth; buffer[1]=acurveinfo.EndDepth; buffer[2]=acurveinfo.DepLevel; ((int *)buffer)[3]=samplenum; logio->ReadCurve(curveindex,acurveinfo.StartDepth,samplenum,(void*)&buffer[4]); logio->Clear(); delete logio; m_vMD.SetSize(3); m_vMD.m_vProperty=(float *)m_SharedMemory; int size=((int *)m_SharedMemory)[3]; m_vProperty.SetSize(size); m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; if(m_vMD.size()>0){ m_TopDepth=m_vMD.m_vProperty[0]; m_BottomDepth=m_vMD.m_vProperty[1]; m_Rlev=m_vMD.m_vProperty[2]; } m_ShiftTopDepth=-9999; m_ShiftBottomDepth=-9999; m_DepthOffset=0; isLoad=true; // SetModified(false,false); // GetObjectEvent().OnRefreshData(GetSlfFileName(),GetName(),this); return true; } //从slf加载数据 int CObjWellLog::IsObjectExist(QString name) { if(m_SlfFileName=="") return true; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return false; } int curveindex=logio->FindObjectName((char *)name.toStdString().c_str()); delete logio; return curveindex; } bool CObjWellLog::DeleteData(float Stdep,float Endep) { SetModify(true); SaveToSLF(); if(m_SlfFileName=="") return true; isRun=true; isLoad=false; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } return false; } int curveindex=logio->OpenCurve(GetName().toStdString().c_str()); if(curveindex<0) { delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } return false; } m_ObjectType=CURVE_OBJECT; logio->GetCurveInfo(curveindex,&acurveinfo); acurveinfo.StartDepth=Stdep; acurveinfo.EndDepth=Endep; int samplenum=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5; QString name=m_SlfFileName+GetName(); if(acurveinfo.DepLevel==0) { acurveinfo.DepLevel=0.125; logio->DiscardObject(curveindex); delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } return false; } m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+acurveinfo.CodeLen*(samplenum+1),key.toStdString().c_str()); if(!m_Handle||!m_SharedMemory) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+acurveinfo.CodeLen*(samplenum+1),key.toStdString().c_str()); if(!m_Handle||!m_SharedMemory) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; return false; } } float *buffer=(float*)m_SharedMemory; buffer[0]=acurveinfo.StartDepth; buffer[1]=acurveinfo.EndDepth; buffer[2]=acurveinfo.DepLevel; ((int *)buffer)[3]=samplenum; logio->ReadCurve(curveindex,acurveinfo.StartDepth,samplenum,(void*)&buffer[4]); logio->CloseCurve(curveindex); logio->DiscardObject(curveindex); curveindex=logio->CreateCurve(&acurveinfo); if(curveindex>-1) logio->WriteCurve(curveindex,acurveinfo.StartDepth,samplenum,(void*)&buffer[4]); logio->Clear(); delete logio; m_vMD.SetSize(3); m_vMD.m_vProperty=(float *)m_SharedMemory; int size=((int *)m_SharedMemory)[3]; m_vProperty.SetSize(size); m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; if(m_vMD.size()>0){ m_TopDepth=m_vMD.m_vProperty[0]; m_BottomDepth=m_vMD.m_vProperty[1]; m_Rlev=m_vMD.m_vProperty[2]; } isLoad=true; // SetModified(false,false); return true; } bool CObjWellLog::ExpendData(bool ishead,float Depth) { // SetModify(true); // SaveToSLF(); m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(m_SlfFileName=="") { if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } return true; } isLoad=false; isRun=true; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } return false; } int curveindex=logio->OpenCurve(GetName().toStdString().c_str()); if(curveindex<0) { delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } return false; } m_ObjectType=CURVE_OBJECT; logio->GetCurveInfo(curveindex,&acurveinfo); if(ishead) acurveinfo.StartDepth=Depth; else acurveinfo.EndDepth=Depth; if(acurveinfo.EndDepthDiscardObject(curveindex); delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } return false; } int samplenum=(acurveinfo.EndDepth-acurveinfo.StartDepth)/acurveinfo.DepLevel+1.5; QString name=m_SlfFileName+GetName(); m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; if(IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; } // GetObjectEvent().OnDeAttchData(GetSlfFileName(),GetName()); while(IsMappingMem(key.toStdString().c_str())) { QCoreApplication::processEvents(); } key=name; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+acurveinfo.CodeLen*samplenum,key.toStdString().c_str()); if(!m_Handle||!m_SharedMemory) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+acurveinfo.CodeLen*(samplenum+1),key.toStdString().c_str()); if(!m_Handle||!m_SharedMemory) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; return false; } } float *buffer=(float*)m_SharedMemory; buffer[0]=acurveinfo.StartDepth; buffer[1]=acurveinfo.EndDepth; buffer[2]=acurveinfo.DepLevel; ((int *)buffer)[3]=samplenum; logio->ReadCurve(curveindex,acurveinfo.StartDepth,samplenum,(void*)&buffer[4]); logio->Clear(); delete logio; m_vMD.SetSize(3); m_vMD.m_vProperty=(float *)m_SharedMemory; int size=((int *)m_SharedMemory)[3]; m_vProperty.SetSize(size); m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; if(m_vMD.size()>0){ m_TopDepth=m_vMD.m_vProperty[0]; m_BottomDepth=m_vMD.m_vProperty[1]; m_Rlev=m_vMD.m_vProperty[2]; } // SetModified(false,false); isLoad=true; return true; } //数据变化后写入slf数据 bool CObjWellLog::SaveToSLF() { bool m=false;//HasModified(); if(!m) return false; int samplenum=m_vProperty.size(); if(!m_vMD.size()) return false; if(samplenum<=0) return false; if(m_SlfFileName=="") return true; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return false; } int curveindex=logio->OpenCurve(GetName().toStdString().c_str()); if(curveindex<0) { delete logio; return false; } if(samplenum)logio->WriteCurve(curveindex,m_vMD.m_vProperty[0],samplenum,(void*)(&m_vProperty.m_vProperty[0])); delete logio; //qDebug()<Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return false; }; short curvetype=logio->GetObjectType(GetName().toStdString().c_str()); if(curvetype==CURVE_OBJECT||curvetype==WAVE_OBJECT) { Slf_CURVE info; int index=-1; if(curvetype==CURVE_OBJECT) index=logio->OpenCurve(GetName().toStdString().c_str()); else index=logio->OpenWave(GetName().toStdString().c_str()); logio->GetCurveInfo(index,&info); unsigned char cs[4]={0xcd,0xcd,0xcd,0xcd}; unsigned char cs1[4]={0x0,204,204,204}; unsigned char cs2[4]={204,204,204,204}; float va=*(float*)&cs; float va1=*(float*)&cs1; float va2=*(float*)&cs2; if(info.DepLevel==0||info.DepLevel==va||info.DepLevel==va1||info.DepLevel==va2|| info.StartDepth==va||info.EndDepth==va1||info.EndDepth==va2) { logio->DeleteObject(GetName().toStdString().c_str()); delete logio; return true; } } logio->DiscardObject(GetName().toStdString().c_str()); delete logio; //TODO 删掉克隆的对象 } //将内存数据清空 void CObjWellLog::clearData() { FLOATPROPERTY nulldata; SetMD(&nulldata); SetProperty(&nulldata,&nulldata); } void CObjWellLog::ChangeDepth(double DepthOffset) { //1.修改内存数据 if(m_vMD.size()) { m_vMD.m_vProperty[0]+=DepthOffset; m_vMD.m_vProperty[1]+=DepthOffset; } m_TopDepth+=DepthOffset; m_BottomDepth+=DepthOffset; } void CObjWellLog::ApplyShiftDepth() { //1.修改内存数据 ChangeDepth(m_DepthOffset); if(m_SlfFileName=="") return ; CMemRdWt * logio=new CMemRdWt(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return ; }; bool isok=0; //TODO 目前对于表格类,参数卡类不支持,会崩溃 int curveindex=logio->FindObjectName((char *)GetName().toStdString().c_str()); if(curveindex>=0) { CString szBuffer=""; szBuffer=QString::number(m_DepthOffset,'f',3)+"\r\n"; WriteShiftMessage(*logio,szBuffer,GetName()); logio->CorrectObjectDepth(curveindex,m_DepthOffset); isok=1; } logio->GetCurveInfo(curveindex,&acurveinfo); delete logio; m_DepthOffset = 0; if(isRun&&isok) { isLoad=false; LoadFromSLF(); } } void CObjWellLog::loadInfo() { if(m_SlfFileName=="") return ; CMemRdWt * logio=new CMemRdWt(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return ; }; int curveindex=logio->FindObjectName((char *)GetName().toStdString().c_str()); if(curveindex>=0) { logio->GetCurveInfo(curveindex,&acurveinfo); } delete logio; } void CObjWellLog::AddShiftDepth(double shiftdepth) { m_DepthOffset += shiftdepth; } bool CObjWellLog::CloneInSlfFile(QString newname) { if(m_SlfFileName=="") return false; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return false; }; char* curvename=new char[65]; curvename[64]='\0'; strcpy(curvename,GetName().toStdString().c_str()); char* newcurvename=new char[65]; newcurvename[64]='\0'; strcpy(newcurvename,newname.toStdString().c_str()); logio->CopyObject(curvename,newcurvename,true); delete[] curvename; delete[] newcurvename; delete logio; } bool CObjWellLog::CopyToSLFFile(QString targetSLFFileName,bool deleteFromSrc,char*newCurveName) { if(m_SlfFileName=="") return false; CLogIO a_cslfio; CLogIO * logio=new CLogIO(); if(!logio->Open(targetSLFFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return false; }; if(!a_cslfio.Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); delete logio; return false; }; char* curvename=new char[65]; curvename[64]='\0'; strcpy(curvename,GetName().toStdString().c_str()); if(newCurveName) logio->CopyFromFile(a_cslfio,curvename,newCurveName); else logio->CopyFromFile(a_cslfio,curvename); delete[] curvename; delete logio; if(deleteFromSrc) DeleteFromSLF(); } void CObjWellLog::SetName(const QString & name) { QString oldn=GetName(); if(oldn.compare(name,Qt::CaseInsensitive)==0) return; m_name = name; // PaiObject::SetName(name); if(isRun) { isLoad=false; LoadFromSLF(); } } bool CObjWellLog::RenName(const QString & name) { if(isUsing) return false; //将SLF中的对象重命名 if(m_SlfFileName!="") { CSlfIO a_cslfio; if(!a_cslfio.Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { m_name = name; // PaiObject::SetName(name); if(isRun) { isLoad=false; LoadFromSLF(); } return true; }; if(a_cslfio.RenameObject(GetName().toStdString().c_str(),name.toStdString().c_str())) { a_cslfio.Close(); m_name = name; // PaiObject::SetName(name); if(isRun){ isLoad=false; LoadFromSLF(); } return true; } } return false; } void CObjWellLog::ReSample(double newDelta) { if(m_SlfFileName=="") return ; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeReadWrite)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return ; }; bool isok=0; int curveindex=logio->OpenChannel(GetName().toStdString().c_str()); if(curveindex>=0) { logio->ChannelResamples(curveindex,newDelta); isok=1; } delete logio; m_Rlev=newDelta; if(isRun&&isok) { isLoad=false; LoadFromSLF(); } } //TODO 重构void ImportDataDialog::AutoMatchFamily(WelllogCurve* acurve) void CObjWellLog::AutoMatchFamily() { return; // static std::vector familyaliases; // if(familyaliases.size()<=0){ // FamilyAliases aAlias; // aAlias.GetFamilyAliases(familyaliases); // } // for(int i=0;i void AddToWellRound(QString objname,T *aclass,char* ID,int Type) { // CObjWelllogRound *pWelllogRound=dynamic_cast(aclass->GetWelllogRound()); // if(pWelllogRound) { // PaiObject*pBase=pWelllogRound->GetObjectByName(objname,ID); // if(!dynamic_cast(pBase)){ // CObjWellLog * acurve=new T(); // if(acurve) { // acurve->m_ObjectType=Type; // acurve->SetName(objname); // acurve->SetAliasName(objname); // acurve->SetSlfFileName(pWelllogRound->GetSlfFileName()); // acurve->SetWell(pWelllogRound->GetWell()); // pWelllogRound->AddChild(acurve); // } // } // } } // BEGIN_REGISTER_OBJECT(CObjWellLog) // QUuid(GetClassID_WellLog()) // END_REGISTER_OBJECT( CObjWellLog ); END_OSGDATAMODEL_NAMESPACE