3635 lines
89 KiB
C++
3635 lines
89 KiB
C++
#include "MemRdWt.h"
|
||
#include "math.h"
|
||
#include <QString>
|
||
CMemRdWt ::CMemRdWt(const char *wellname,bool bconst,int FileType):CLogIO(wellname,FileType)
|
||
{
|
||
Initialize(bconst);
|
||
}
|
||
void CMemRdWt ::Initialize(bool bconst)
|
||
{
|
||
ZoneSdep=-99999;
|
||
ZoneEdep=-99999;
|
||
|
||
isfirstrun=false;
|
||
INC=NULL;
|
||
OUTC=NULL;
|
||
INP=NULL;
|
||
OUTP=NULL;
|
||
CONC=NULL;
|
||
CON=NULL;
|
||
HD=NULL;
|
||
OutCurveType=NULL;
|
||
SlfError=NULL;
|
||
ConstFileName=NULL;
|
||
InData=NULL ;
|
||
OutData=NULL;
|
||
InCurveNo=NULL;
|
||
OutCurveNo=NULL;
|
||
ConstBuffer=NULL;
|
||
InSdep=NULL;
|
||
InEdep=NULL;
|
||
OutSdep=NULL;
|
||
OutEdep=NULL;
|
||
Inflag=0;
|
||
SaveFlag=0;
|
||
Inflag=0;
|
||
InData=NULL;
|
||
OutData=NULL;
|
||
InCurveNo=NULL;
|
||
OutCurveNo=NULL;
|
||
if(bconst) {
|
||
ConstBuffer=new char[8192];
|
||
*ConstBuffer='\0';
|
||
}
|
||
else ConstBuffer=NULL;
|
||
RunSdep=-999999;
|
||
RunEdep=-999999;
|
||
Rlev=99999;
|
||
SaveFlag=0;
|
||
memset(&m_Channel,0,sizeof(Slf_CHANNEL));
|
||
memset(&m_Wave,0,sizeof(Slf_WAVE));
|
||
memset(&m_Curve,0,sizeof(Slf_CURVE));
|
||
}
|
||
bool CMemRdWt ::Open(const char *wellname,unsigned int nOpenFlags,int BlockLen,int MaxObjectNumber, int MachineType,int FileType)
|
||
{
|
||
Initialize(FALSE);
|
||
return CLogIO ::Open(wellname,nOpenFlags,BlockLen,MaxObjectNumber,MachineType,FileType);
|
||
}
|
||
|
||
CMemRdWt ::CMemRdWt()
|
||
{
|
||
Initialize();
|
||
}
|
||
void CMemRdWt::ChangeName(struct INC_STRU *Inc,
|
||
struct OUTC_STRU *Outc,
|
||
struct CONC_STRU *Conc,
|
||
struct CON_STRU *Con
|
||
)
|
||
{
|
||
isfirstrun=0;
|
||
if(Inc&&strchr(Inc->Name,':')) {
|
||
QString tcs=Inc->Name;
|
||
tcs.replace("\t","");
|
||
strcpy(Inc->Name,tcs.toStdString().c_str());
|
||
int len=strlen(Inc->Name);
|
||
if(len>24576) len=24576;
|
||
char *name=new char[len+1];
|
||
memmove(name,Inc->Name,len+1);
|
||
memset(Inc->Name,0,24576);
|
||
char *p=name;
|
||
for(int i=0;i<Inc->Noi;i++) {
|
||
char *p1=strchr(p,':');
|
||
if(!p1) {
|
||
AfxMessageBox("输入曲线名称、描述、单位与曲线个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1='\0';
|
||
strcat(Inc->Name,p);
|
||
int ssl=strlen(p);
|
||
for(int ccc=ssl;ccc<8;ccc++)
|
||
strcat(Inc->Name," ");
|
||
int pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
if(!p1) {
|
||
AfxMessageBox("输入曲线名称、描述、单位与曲线个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1=0;
|
||
strcat(Inc->Script,p);
|
||
// strcat(Inc->Script,";");
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
if(!p1) {
|
||
AfxMessageBox("输入曲线名称、描述、单位与曲线个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1=0;
|
||
if(strlen(p)) {
|
||
strcat(Inc->Script,"(");
|
||
strcat(Inc->Script,p);
|
||
strcat(Inc->Script,")");
|
||
}
|
||
strcat(Inc->Script,";");
|
||
strcat(Inc->Unit,p);
|
||
strcat(Inc->Unit,";");
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
}
|
||
delete name;
|
||
}
|
||
|
||
if(Outc&&strchr(Outc->Name,':')) {
|
||
QString tcs=Outc->Name;
|
||
tcs.replace("\t","");
|
||
strcpy(Outc->Name,tcs.toStdString().c_str());
|
||
int len=strlen(Outc->Name);
|
||
if(len>24576) len=24576;
|
||
char *name=new char[len+1];
|
||
memmove(name,Outc->Name,len+1);
|
||
memset(Outc->Name,0,24576);
|
||
char *p=name;
|
||
for(int i=0;i<Outc->Noo;i++) {
|
||
char *p1=strchr(p,':');
|
||
if(!p1) {
|
||
AfxMessageBox("输出曲线名称、描述、单位与输出曲线个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1='\0';
|
||
strcat(Outc->Name,p);
|
||
int ssl=strlen(p);
|
||
for(int ccc=ssl;ccc<8;ccc++)strcat(Outc->Name," ");
|
||
int pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
if(!p1) {
|
||
AfxMessageBox("输出曲线名称、描述、单位与输出曲线个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1=0;
|
||
strcat(Outc->Script,p);
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
if(!p1) {
|
||
AfxMessageBox("输出曲线名称、描述、单位与输出曲线个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1=0;
|
||
if(strlen(p)) {
|
||
strcat(Outc->Script,"(");
|
||
strcat(Outc->Script,p);
|
||
strcat(Outc->Script,")");
|
||
}
|
||
strcat(Outc->Script,";");
|
||
strcat(Outc->Unit,p);
|
||
strcat(Outc->Unit,";");
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
}
|
||
delete name;
|
||
}
|
||
if(Conc&&strchr(Conc->Name,':')) {
|
||
QString tcs=Conc->Name;
|
||
tcs.replace("\t","");
|
||
strcpy(Conc->Name,tcs.toStdString().c_str());
|
||
int len=strlen(Conc->Name);
|
||
if(len>40960) len=40960;
|
||
char *name=new char[len+1];
|
||
memmove(name,Conc->Name,len+1);
|
||
memset(Conc->Name,0,40960);
|
||
strcpy(Con->stryy,"");
|
||
char *p=name;
|
||
for(int i=0;i<Conc->Noc;i++) {
|
||
char *p1=strchr(p,':');
|
||
if(!p1) {
|
||
AfxMessageBox("输入参数名称、描述、单位个数与参数个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1='\0';
|
||
strcat(Conc->Name,p);
|
||
int ssl=strlen(p);
|
||
for(int ccc=ssl;ccc<8;ccc++)strcat(Conc->Name," ");
|
||
int pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
if(!p1) {
|
||
AfxMessageBox("输入参数名称、描述、单位个数与参数个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1=0;
|
||
strcat(Conc->Script,p);
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
*p1=0;
|
||
if(strlen(p)) {
|
||
strcat(Conc->Script,"(");
|
||
strcat(Conc->Script,p);
|
||
strcat(Conc->Script,")");
|
||
}
|
||
strcat(Conc->Script,";");
|
||
strcat(Conc->Unit,p);
|
||
strcat(Conc->Unit,";");
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
if(!p1) {
|
||
AfxMessageBox("输入参数名称、描述、单位个数与参数个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1=0;
|
||
strcat(Conc->Options,p);
|
||
strcat(Conc->Options,";");
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
if(!p1) {
|
||
AfxMessageBox("输入参数名称、描述、单位个数与参数个数不匹配!\n可能原因:参数信息太长、缺少';'等");
|
||
break;
|
||
}
|
||
*p1=0;
|
||
strcat(Conc->ValType,p);
|
||
strcat(Conc->ValType,";");
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
p1=strchr(p,';');
|
||
if(p1) {
|
||
*p1=0;
|
||
}
|
||
else {
|
||
int aa=1;
|
||
}
|
||
strcat(Con->stryy,p);
|
||
strcat(Con->stryy,",");
|
||
Con->yy[i]=atof(p);
|
||
pl=p1-p;
|
||
p+=pl+1;
|
||
p1++;
|
||
}
|
||
delete name;
|
||
}
|
||
}
|
||
void CMemRdWt::SetStruct(
|
||
struct INC_STRU *Inc,
|
||
struct OUTC_STRU *Outc,
|
||
struct INP_STRU *Inp,
|
||
struct OUTP_STRU *Outp,
|
||
struct CONC_STRU *Conc,
|
||
struct CON_STRU *Con,
|
||
struct HD_STRU *Hd,
|
||
struct LogType *OutType,
|
||
struct ErrorInf *Errorinf
|
||
)
|
||
{
|
||
OldINC =INC;
|
||
OldOUTC=OUTC;
|
||
OldCONC=CONC;
|
||
OldINP =INP;
|
||
OldOUTP=OUTP;
|
||
OldCON=CON;
|
||
OldHD=HD;
|
||
OldOutCurveType=OutCurveType;
|
||
OldSlfError=SlfError;
|
||
INC =Inc;
|
||
OUTC=Outc;
|
||
CONC=Conc;
|
||
INP =Inp;
|
||
OUTP=Outp;
|
||
CON=Con;
|
||
HD=Hd;
|
||
OutCurveType=OutType;
|
||
SlfError=Errorinf;
|
||
ChangeName(Inc,Outc,Conc,Con);
|
||
}
|
||
void CMemRdWt::LoadOldStruct()
|
||
{
|
||
INC =OldINC;
|
||
OUTC=OldOUTC;
|
||
CONC=OldCONC;
|
||
INP =OldINP;
|
||
OUTP=OldOUTP;
|
||
CON =OldCON;
|
||
HD =OldHD;
|
||
OutCurveType=OldOutCurveType;
|
||
SlfError=OldSlfError;
|
||
}
|
||
int CMemRdWt ::GetInCurveCount()
|
||
{
|
||
if(INC) return INC->Noi;
|
||
else return 0;
|
||
}
|
||
int CMemRdWt ::GetOutCurveCount()
|
||
{
|
||
if(OUTC) return OUTC->Noo;
|
||
else return 0;
|
||
}
|
||
|
||
char * CMemRdWt ::OpenCord(const char* szLogFileName)
|
||
{
|
||
DWORD bytes;
|
||
ConstFileName=szLogFileName;
|
||
if(ConstBuffer==NULL)
|
||
{
|
||
ConstBuffer=new char[8192+1];
|
||
}
|
||
*ConstBuffer='\0';
|
||
|
||
int index=OpenStream(ConstFileName);
|
||
if(index<0) GetParam();
|
||
else {
|
||
int length=GetStreamLength(index);
|
||
if(ConstBuffer) delete ConstBuffer;
|
||
ConstBuffer=new char[length+1];
|
||
ReadStream(index,length,&bytes,ConstBuffer);
|
||
ConstBuffer[bytes]='\0';
|
||
}
|
||
if(index>-1)CloseStream(index);
|
||
return ConstBuffer;
|
||
|
||
}
|
||
char* CMemRdWt::GetParam()
|
||
{
|
||
int jj;
|
||
char *pp;
|
||
char buf[100];
|
||
char name[100];
|
||
if(!CONC) return ConstBuffer;
|
||
CString cs;
|
||
pp=CONC->Name;
|
||
if(*pp&&!CONC->Noc) {
|
||
cs+=CString(CONC->Name);
|
||
}
|
||
else {
|
||
cs.Format("%g %g\r\n",HD->Sdep,HD->Edep);
|
||
for(int i=0;i<CONC->Noc;i++) {
|
||
jj=0;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[jj++]=toupper(*pp++);
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[jj]='\0';
|
||
if(i!=CONC->Noc-1) sprintf(buf,"%s=%g,",name,CON->yy[i]);
|
||
else sprintf(buf,"%s=%g\r\n",name,CON->yy[i]);
|
||
cs+=CString(buf);
|
||
if((i+1)%10==0&&i!=CONC->Noc-1) cs+=CString("\r\n");
|
||
}
|
||
cs+=CString("/*\r\n");
|
||
}
|
||
//这几句加上后,新产生参数卡时不正确
|
||
if(ConstBuffer) delete ConstBuffer;
|
||
ConstBuffer=new char[cs.GetLength()+1];
|
||
strcpy(ConstBuffer,cs.GetString());
|
||
return ConstBuffer;
|
||
}
|
||
void CMemRdWt ::SaveCord(const char* szLogFileName,char *pBuf)
|
||
{
|
||
DWORD bytes;
|
||
ConstFileName=szLogFileName;
|
||
if(!ConstFileName) return;
|
||
if(!pBuf) return;
|
||
if(!ConstBuffer) {
|
||
ConstBuffer=new char[strlen(pBuf)+1];
|
||
strcpy(ConstBuffer,pBuf);
|
||
}
|
||
else {
|
||
delete ConstBuffer;
|
||
ConstBuffer=new char[strlen(pBuf)+1];
|
||
strcpy(ConstBuffer,pBuf);
|
||
}
|
||
int index=OpenStream(ConstFileName);
|
||
if(index<0) {
|
||
if(strlen(ConstBuffer)<=0) GetParam();
|
||
index=CreateStream(PARA_OBJECT/*STREAM_OBJECT*/,ConstFileName);
|
||
}
|
||
if(index){
|
||
WriteStream(index,strlen(ConstBuffer)+1,&bytes,ConstBuffer);
|
||
CloseStream(index);
|
||
}
|
||
}
|
||
QString getStrValue(char *stryy,int pos)//stryy 输入字符串缓冲器,pos 参数号,1开始
|
||
{
|
||
QString str=stryy;
|
||
QStringList strlst=str.split(";");
|
||
if(strlst.size()>pos-1) return strlst[pos-1];
|
||
else return QString();
|
||
}
|
||
|
||
CMemRdWt ::~CMemRdWt()
|
||
{
|
||
Close();
|
||
}
|
||
int CMemRdWt::GetInCurveName(int CurveNo,char *InName)
|
||
{
|
||
if(!INC) return 0;
|
||
char *pp=INC->Name;
|
||
char name[200];
|
||
for(int i=0;i<INC->Noi;i++) {
|
||
int jj=0;
|
||
char *pf=pp;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[jj++]=toupper(*pp++);
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if(*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[jj]='\0';
|
||
if(CurveNo==i) {
|
||
strcpy(InName,name);
|
||
return 1;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
int CMemRdWt::GetOutCurveName(int CurveNo,char *OutName)
|
||
{
|
||
if(!OUTC) return 0;
|
||
char name[200];
|
||
char *pp=OUTC->Name;
|
||
for(int i=0;i<OUTC->Noo;i++) {
|
||
int jj=0;
|
||
char *pf=pp;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[jj++]=toupper(*pp++);
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if(*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[jj]='\0';
|
||
if(CurveNo==i) {
|
||
strcpy(OutName,name);
|
||
return 1;
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
int CMemRdWt::Const()
|
||
{
|
||
if(!HD) {
|
||
// AfxMessageBox("缺少HD!");
|
||
return 0;
|
||
}
|
||
if(SlfError){
|
||
strcpy(SlfError->ErrorStr,"");
|
||
SlfError->ErrorNo=0;
|
||
}
|
||
HD->Stdep=9999;
|
||
HD->Endep=-9999;
|
||
char *p,*pp;
|
||
char vst[100],var[100],name[100];
|
||
int i=-1,k=0,j=0,right=0,jj=0;
|
||
float Sdep=0.0,Edep=0.0;
|
||
if(!CONC) {
|
||
return 0;
|
||
}
|
||
if(!ConstBuffer)
|
||
{
|
||
if(strlen(HD->Param)>0) OpenCord((const char* )HD->Param);
|
||
else {
|
||
// AfxMessageBox("应用模块开发不规范,缺少参数缓冲区!");
|
||
return 0;
|
||
}
|
||
}
|
||
//
|
||
// 取深度段=》 SDEP EDEP
|
||
//
|
||
QString tw=ConstBuffer;
|
||
tw.replace(",",",");
|
||
tw.replace("\r\n","\n");
|
||
tw.replace("\r","\n");
|
||
tw.replace(" \n","\n");
|
||
tw.replace("\n","\r\n");
|
||
QStringList tws=tw.split("\r\n");
|
||
tws.removeAll("");
|
||
for(int i=0;i<tws.size();i++)
|
||
{
|
||
int len=tws[i].length();
|
||
tws[i]=tws[i].trimmed();
|
||
if(isdigit(*tws[i].toStdString().c_str()))
|
||
{
|
||
if(tws[i].indexOf(" ")<0)
|
||
{
|
||
QString cs=tws[i]+" ->深度对错误,将被忽略!";
|
||
tws[i]="";
|
||
if(!isfirstrun)AfxMessageBox(cs);
|
||
for(int j=i+1;j<tws.size();j++)
|
||
{
|
||
if(isdigit(*tws[j].toStdString().c_str()))
|
||
{
|
||
break;
|
||
}
|
||
else
|
||
{
|
||
tws[j]="";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
tws.removeAll("");
|
||
for(int i=0;i<tws.size();i++)
|
||
{
|
||
QStringList ls=tws[i].split(',');
|
||
for(int j=0;j<ls.size();j++)
|
||
{
|
||
int k=ls[j].indexOf('=');
|
||
if(k>-1) {
|
||
QString ss=ls[j].mid(k+1);
|
||
if(ss.indexOf('=')>-1){
|
||
AfxMessageBox("参数卡错误:"+ls[j]);
|
||
return -1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
tw=tws.join("\r\n");
|
||
if(strlen(tw.toStdString().c_str())<1) {
|
||
return 0;
|
||
}
|
||
char *pTemp=new char[strlen(tw.toStdString().c_str())+1];
|
||
strcpy(pTemp,tw.toStdString().c_str());
|
||
int d=0;
|
||
p=pTemp;
|
||
//
|
||
// 取深度段=》 SDEP EDEP
|
||
//
|
||
QStringList mes;
|
||
int isend0=0;
|
||
p=pTemp;
|
||
while(1)
|
||
{
|
||
i=-1,k=0,j=0,right=0,jj=0;
|
||
while(*p==' '||*p=='\t') p++;
|
||
while(*p==0x0d) p++;
|
||
while(*p==0x0a) p++;
|
||
if(!*p) break;
|
||
if(strncmp(p,"END",3)==0||strncmp(p,"end",3)==0) {
|
||
isend0=true;
|
||
break;
|
||
}
|
||
if(strncmp(p,"/*",2)==0) {
|
||
isend0=true;
|
||
break;
|
||
}
|
||
int Flag=0;
|
||
if(isalpha(*p)) goto next;
|
||
while(*p!=0x0a&&*p!=0) {
|
||
//
|
||
Flag=1;
|
||
if(*p>=0x30&&*p<=0x39||*p=='.') {
|
||
if(i==-1) {
|
||
i=k;
|
||
pp=p;
|
||
};
|
||
}
|
||
else if(i>-1) {
|
||
char buf[20];
|
||
strncpy(buf,pp,k-i);
|
||
buf[k-i]='\0';
|
||
if(j==0) {
|
||
if(Sdep&&(float)atof(buf)!=Edep) {
|
||
char temm[200],temm1[200];
|
||
temm1[0]=0;
|
||
int t=strchr(pp,0x0d)-pp;
|
||
if(t>0) {
|
||
strncpy(temm1,pp,t);
|
||
temm1[t]=0;
|
||
}
|
||
sprintf(temm,"深度段%s与前一段%g-%g不连续!",temm1,Sdep,Edep);
|
||
if(SlfError){
|
||
strcpy(SlfError->ErrorStr,temm);
|
||
SlfError->ErrorNo=-1;
|
||
}
|
||
if(!isfirstrun){
|
||
mes.append(temm);
|
||
}
|
||
}
|
||
Sdep=(float)atof(buf);
|
||
if(Sdep<HD->Stdep)HD->Stdep=Sdep;
|
||
j++;
|
||
}
|
||
else {
|
||
Edep=(float)atof(buf);
|
||
j++;
|
||
if(Edep>HD->Endep)HD->Endep=Edep;
|
||
}
|
||
while(*p==' '||*p=='\t') p++;
|
||
if(*(p-1)==' '||*(p-1)=='\t') p--;
|
||
i=-1;
|
||
}
|
||
p++;
|
||
k++;
|
||
}
|
||
if(j>0&&j<2)
|
||
{
|
||
char v[100];
|
||
sprintf(v,"深度段错误:%g",Sdep);
|
||
if(SlfError){
|
||
strcpy(SlfError->ErrorStr,v);
|
||
SlfError->ErrorNo=-1;
|
||
}
|
||
mes.append(v);
|
||
Edep=Sdep;
|
||
}
|
||
if(j)
|
||
{
|
||
if(Sdep>10000||Edep>10000)
|
||
{
|
||
char v[100];
|
||
sprintf(v,"深度段异常:%g %g",Sdep,Edep);
|
||
if(SlfError){
|
||
strcpy(SlfError->ErrorStr,v);
|
||
SlfError->ErrorNo=-1;
|
||
}
|
||
mes.append(v);
|
||
Sdep=0;
|
||
Edep=0;
|
||
}
|
||
}
|
||
next:;
|
||
//if(Sdep<HD->StartDep) Sdep=HD->StartDep;
|
||
//if(Edep>HD->EndDep&&HD->EndDep>HD->StartDep) Edep=HD->EndDep;
|
||
//
|
||
//跳过行尾
|
||
//
|
||
if(*p=='\0') break;
|
||
if(Flag)p++;
|
||
//
|
||
right=0;i=0;j=0;
|
||
int eq=0;
|
||
while(*p!=0x0) {
|
||
while(*p==' '||*p=='\t') p++;
|
||
//
|
||
// "//"为注释行
|
||
//
|
||
if(*p=='/') {
|
||
p++;
|
||
if(*p=='/') {
|
||
if(strchr(p,0x0a)) {
|
||
p=strchr(p,0x0a);p++;
|
||
}
|
||
}
|
||
else {
|
||
//
|
||
// “/*”为卡片结尾标志
|
||
//
|
||
if(*p=='*') {
|
||
while(*p!='\0') p++;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if(strncmp(p,"END",3)==0||
|
||
strncmp(p,"end",3)==0) {
|
||
isend0=true;
|
||
p+=3;
|
||
break;
|
||
}
|
||
//
|
||
// 行首为数字表示为深度段
|
||
//
|
||
if(*p>=0x30&&*p<=0x39) break;
|
||
while(*p!=0x0d){
|
||
if(*p=='\0') break;
|
||
while(*p==' '||*p=='\t') p++;
|
||
// =左界---
|
||
if(!right) {
|
||
if(*p!='='&&*p!='<'&&*p!='>') vst[i++]=toupper(*p);
|
||
else {
|
||
vst[i]='\0';
|
||
right=1;
|
||
if(*p=='<') eq=1;
|
||
if(*p=='>') eq=2;
|
||
}
|
||
}
|
||
// =右界---
|
||
else {
|
||
//
|
||
// "," "\n" 结束当前参数
|
||
//
|
||
if(*p!=','&&*p!=0xd&&*p!=0x0a&&*p!='\t') var[j++]=*p;
|
||
if(*p==','||*p==0xd||*p==0x0a||*p=='\t'||(*(p+1)==0x0d&&*p!=',')) {
|
||
var[j]='\0';
|
||
if(eq==1&&INC) {
|
||
pp=INC->Name;
|
||
while(pp&&*pp==' ') pp++;
|
||
for(i=0;i<INC->Noi;i++) {
|
||
jj=0;
|
||
char *pf=pp;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[jj++]=toupper(*pp++);
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
int pl=pp-pf;
|
||
name[jj]='\0';
|
||
if(strcmp(vst,name)==0) {
|
||
int l1=strlen(var);
|
||
int l2=pp-INC->Name;
|
||
int l3=strlen(INC->Name);
|
||
if(l1>=pl) {
|
||
char *bu=new char[l3+1];
|
||
strcpy(bu,pp-1);
|
||
strcpy(pp+l1-pl+1,bu);
|
||
delete bu;
|
||
for(int y=0;y<l1-pl+1;y++) {
|
||
*(pp+y)=' ';
|
||
}
|
||
}
|
||
else if(l1<pl) {
|
||
for(int y=l1;y<pl;y++) *(pf+y)=' ';
|
||
}
|
||
for(int y=0;y<l1;y++) {
|
||
*pf++=var[y];
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else if(eq==2&&OUTC) {
|
||
pp=OUTC->Name;
|
||
while(pp&&*pp==' ') pp++;
|
||
for(i=0;i<OUTC->Noo;i++) {
|
||
jj=0;
|
||
char *pf=pp;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[jj++]=toupper(*pp++);
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
int pl=pp-pf;
|
||
name[jj]='\0';
|
||
if(strcmp(vst,name)==0) {
|
||
int l1=strlen(var);
|
||
int l2=pp-OUTC->Name;
|
||
int l3=strlen(OUTC->Name);
|
||
if(l1>=pl) {
|
||
char *bu=new char[l3+1];
|
||
strcpy(bu,pp-1);
|
||
strcpy(pp+l1-pl+1,bu);
|
||
delete bu;
|
||
for(int y=0;y<l1-pl+1;y++) {
|
||
*(pp+y)=' ';
|
||
}
|
||
}
|
||
else if(l1<pl) {
|
||
for(int y=l1;y<pl;y++) *(pf+y)=' ';
|
||
}
|
||
for(int y=0;y<l1;y++) {
|
||
*pf++=var[y];
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
eq=0;
|
||
right=0;j=0;i=0;
|
||
}
|
||
}
|
||
++p;
|
||
}
|
||
if(*p=='\0') break;
|
||
//
|
||
//跳过行尾
|
||
//
|
||
p++;
|
||
if(*p==0x0a) p++;
|
||
//
|
||
}
|
||
if(isend0) break;
|
||
}
|
||
isfirstrun=true;
|
||
|
||
// if(!CONC->Noc) return 0;
|
||
|
||
p=pTemp;
|
||
if(CON) {
|
||
if(!strchr(CON->stryy,',')||strchr(CON->stryy,',')-CON->stryy>16){
|
||
strcpy(CON->stryy,"");
|
||
for(i=0;i<CONC->Noc;i++) {
|
||
strcat(CON->stryy,",");
|
||
}
|
||
}
|
||
}
|
||
int isend=0;
|
||
Sdep=0.0,Edep=0.0;
|
||
while(1)
|
||
{
|
||
i=-1,k=0,j=0,right=0,jj=0;
|
||
while(*p==' '||*p=='\t') p++;
|
||
while(*p==0x0d) p++;
|
||
while(*p==0x0a) p++;
|
||
if(!*p) break;
|
||
if(strncmp(p,"END",3)==0||strncmp(p,"end",3)==0) {
|
||
isend=true;
|
||
break;
|
||
}
|
||
if(strncmp(p,"/*",2)==0) {
|
||
isend=true;
|
||
break;
|
||
}
|
||
while(strchr(p,'<'))
|
||
{
|
||
while(*p!=0x0a&&*p) p++;
|
||
p++;
|
||
}
|
||
while(strchr(p,'>'))
|
||
{
|
||
while(*p!=0x0a&&*p) p++;
|
||
p++;
|
||
}
|
||
while(*p!=0x0a&&*p)
|
||
{
|
||
//
|
||
if(*p>=0x30&&*p<=0x39||*p=='.')
|
||
{
|
||
if(i==-1) {i=k;pp=p;};
|
||
}
|
||
else if(i>-1)
|
||
{
|
||
char buf[20];
|
||
strncpy(buf,pp,k-i);
|
||
buf[k-i]='\0';
|
||
if(j==0) {
|
||
Sdep=(float)atof(buf);
|
||
j++;
|
||
}
|
||
else {
|
||
Edep=(float)atof(buf);
|
||
j++;
|
||
}
|
||
while(*p==' '||*p=='\t') p++;if(*(p-1)==' '||*(p-1)=='\t') p--;
|
||
i=-1;
|
||
}
|
||
p++;
|
||
k++;
|
||
}
|
||
if(j>0&&j<2)
|
||
{
|
||
char v[100];
|
||
sprintf(v,"深度段错误:%g",Sdep);
|
||
if(SlfError){
|
||
strcpy(SlfError->ErrorStr,v);
|
||
SlfError->ErrorNo=-1;
|
||
}
|
||
mes.append(v);
|
||
Edep=Sdep;
|
||
}
|
||
float oldsdep=Sdep;
|
||
if(HD->Dep<Sdep)
|
||
{
|
||
HD->Dep =Sdep;
|
||
HD->Depo=Sdep;
|
||
HD->Sdep=Sdep;
|
||
HD->Edep=Edep;
|
||
}
|
||
//
|
||
//跳过行尾
|
||
//
|
||
if(*p=='\0') break;
|
||
p++;
|
||
//
|
||
right=0;i=0;j=0;
|
||
while(*p!=0x0)
|
||
{
|
||
while(*p==' '||*p=='\t') p++;
|
||
//
|
||
// "//"为注释行
|
||
//
|
||
if(*p=='/')
|
||
{
|
||
p++;
|
||
if(*p=='/')
|
||
{
|
||
if(strchr(p,0x0a))
|
||
{
|
||
p=strchr(p,0x0a);p++;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
//
|
||
// “/*”为卡片结尾标志
|
||
//
|
||
if(*p=='*')
|
||
{
|
||
while(*p!='\0') p++;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if(strncmp(p,"END",3)==0||
|
||
strncmp(p,"end",3)==0) {
|
||
isend=true;
|
||
p+=3;
|
||
break;
|
||
}
|
||
//
|
||
// 行首为数字表示为深度段
|
||
//
|
||
if(strlen(p)>3&&*p==13&&*(p+1)==10&&((*(p+2)>=0x30&&*(p+2)<=0x39)||strncmp(p+2,"END",3)==0||strncmp(p+2,"end",3)==0||*(p+2)=='/')) {
|
||
p+=2;
|
||
break;
|
||
}
|
||
if(*p>=0x30&&*p<=0x39) break;
|
||
int eq=0;
|
||
while(*p!=0x0d&&*p)
|
||
{
|
||
while(*p==' '||*p=='\t'||*p==0x0d||*p==0x0a) p++;
|
||
// =左界---
|
||
if(!right)
|
||
{
|
||
if(*p!='='&&*p!='<'&&*p!='>') vst[i++]=toupper(*p);
|
||
else
|
||
{
|
||
vst[i]='\0';
|
||
right=1;
|
||
if(*p=='<') eq=1;
|
||
if(*p=='>') eq=2;
|
||
}
|
||
}
|
||
// =右界---
|
||
else
|
||
{
|
||
//
|
||
// "," "\n" 结束当前参数
|
||
//
|
||
if(*p!=','&&*p!=0xd&&*p!=0x0a&&*p!='\t') var[j++]=*p;
|
||
if(*p==','||*p==0xd||*p==0x0a||*p=='\t'||(*(p+1)==0x0d&&*p!=','))
|
||
{
|
||
var[j]='\0';
|
||
if(HD->Dep>=Sdep&&HD->Dep<=Edep)
|
||
{
|
||
char *ppp=CON->stryy;
|
||
pp=CONC->Name;
|
||
while (pp&&*pp==' ')
|
||
{
|
||
pp++;
|
||
}
|
||
int fflag=0;
|
||
for(i=0;i<CONC->Noc;i++)
|
||
{
|
||
jj=0;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[jj++]=toupper(*pp++);
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[jj]='\0';
|
||
if(!strstr(ppp,",")) {
|
||
strcat(ppp,",");
|
||
ppp+=1;
|
||
}
|
||
if(strcmp(vst,name)==0)
|
||
{
|
||
fflag=1;
|
||
CON->yy[i]=(float)atof(var);
|
||
if(ppp) {
|
||
char *pppp=strstr(ppp,",");
|
||
if(pppp) {
|
||
char *a=new char[strlen(pppp)+1];
|
||
strcpy(a,pppp);
|
||
ppp[0]=0;
|
||
strcat(ppp,var);
|
||
strcat(ppp,a);
|
||
delete a;
|
||
}
|
||
else {
|
||
ppp[0]=0;
|
||
strcat(ppp,var);
|
||
}
|
||
if(ppp)ppp=strstr(ppp,",")+1;
|
||
}
|
||
break;
|
||
}
|
||
else if(ppp)ppp=strstr(ppp,",")+1;
|
||
}
|
||
if(!fflag&&HD->Dep>=Sdep&&HD->Dep<Edep) {
|
||
char temm[200];
|
||
sprintf(temm,"%g %g中参数%s不存在或存在填写错误!",Sdep,Edep,vst);
|
||
if(SlfError){
|
||
strcpy(SlfError->ErrorStr,temm);
|
||
SlfError->ErrorNo=-1;
|
||
}
|
||
mes.append(temm);
|
||
fflag=1;
|
||
// AfxMessageBox(temm);
|
||
}
|
||
}
|
||
right=0;j=0;i=0;
|
||
}
|
||
}
|
||
++p;
|
||
}
|
||
if(*p=='\0') break;
|
||
//
|
||
//跳过行尾
|
||
//
|
||
p++;
|
||
if(*p==0x0a) p++;
|
||
//
|
||
}
|
||
if(HD->Dep>=Sdep&&HD->Dep<Edep)
|
||
{
|
||
HD->Sdep=Sdep;
|
||
HD->Edep=Edep;
|
||
if(ZoneSdep!=-99999&&HD->Dep<ZoneSdep) {
|
||
HD->Dep=Edep;
|
||
HD->Endep=ZoneEdep;
|
||
continue;
|
||
}
|
||
break;
|
||
}
|
||
if(isend) break;
|
||
}
|
||
if(isend||ZoneSdep!=-99999) {
|
||
if(Edep!=0)HD->EndDep=Edep;
|
||
}
|
||
if(pTemp!=ConstBuffer) delete pTemp;
|
||
if(HD->Sdep==99999&&HD->Edep==-99999||HD->Rlev==99999||HD->Rlev==-99999) {
|
||
HD->Sdep=0;
|
||
HD->Edep=0;
|
||
HD->Dep=0;
|
||
HD->Rlev=0.125;
|
||
HD->StartDep=0;
|
||
HD->EndDep=0;
|
||
HD->Stdep=0;
|
||
HD->Endep=0;
|
||
}
|
||
if(mes.size()) {
|
||
ShowMessage(mes.join("\n"));
|
||
return -1;
|
||
}
|
||
if(HD->Dep>=Sdep&&HD->Dep<Edep) {
|
||
return 1;
|
||
}
|
||
else if(HD->Dep>=Edep) {
|
||
if(Edep!=0)HD->EndDep=Edep;
|
||
return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
void CMemRdWt ::SetDepthDelta(float sdep,float edep,float rlev)
|
||
{
|
||
RunSdep=sdep;
|
||
RunEdep=edep;
|
||
Rlev=rlev;
|
||
}
|
||
bool CMemRdWt ::AddInCurve(char *mCurve)
|
||
{
|
||
if(!AddInCurve(INC->Noi++,mCurve)) return 0;
|
||
if(INC->Noi!=1) strcat(INC->Name," ");
|
||
strcat(INC->Name,mCurve);
|
||
return true;
|
||
}
|
||
void CMemRdWt::BackData()
|
||
{
|
||
int i,samples;
|
||
for(i=0;i<INC->Noi;i++) {
|
||
if(InCurveNo[i]>-1) {
|
||
GetChannelInfo(InCurveNo[i],&m_Channel);
|
||
samples=(int)((InEdep[i]-InSdep[i])/m_Channel.DimInfo[0].Delta+0.5);
|
||
if(samples<0) samples=0;
|
||
memmove(OutData[i],InData[i],samples*m_Channel.DimInfo[0].Size);
|
||
}
|
||
}
|
||
}
|
||
float CMemRdWt::epshft(float dest,float rlevs,float d_sdep,float d_edep,float dold1,float dold2,float dnew1,float dnew2)
|
||
{
|
||
int ids,k=0;
|
||
double dold=d_sdep;
|
||
float dnew,a,ddold;
|
||
float tempdep;
|
||
int iDepPos1,iDepPos2;
|
||
if(dold1<d_sdep) dold1=d_sdep;
|
||
if(dold2<d_sdep) dold2=d_sdep;
|
||
if(dnew1<d_sdep) dnew1=d_sdep;
|
||
if(dnew2<d_sdep) dnew2=d_sdep;
|
||
int num=(d_edep-d_sdep)/rlevs+0.5;
|
||
if(dold1>d_edep) dold1=d_edep;
|
||
if(dold2>d_edep) dold2=d_edep;
|
||
if(dnew1>d_edep) dnew1=d_edep;
|
||
if(dnew2>d_edep) dnew2=d_edep;
|
||
dold=dold1;
|
||
ids=1;
|
||
if(dnew1 >dnew2) ids=-1;
|
||
if(dnew1==dnew2)
|
||
{
|
||
tempdep = dold2;
|
||
round(&tempdep,dold1,dold2,rlevs,d_sdep,ids);
|
||
// -----------------------------------------
|
||
iDepPos1 =(int)( (tempdep - d_sdep ) / rlevs+0.5);
|
||
iDepPos2 =(int)( (dnew1 - d_sdep ) / rlevs+0.5);
|
||
if(iDepPos1>=num) iDepPos1=num-1;
|
||
if(iDepPos2>=num) iDepPos2=num-1;
|
||
if(iDepPos1<0) iDepPos1=0;
|
||
if(iDepPos2<0) iDepPos2=0;
|
||
}
|
||
else
|
||
{
|
||
a=(dold2-dold1)/(dnew2-dnew1);
|
||
dnew=dnew1;
|
||
round(&dnew,dnew1,dnew2,rlevs,d_sdep,ids);
|
||
dnew=dnew-ids*rlevs;
|
||
double a1=dnew;
|
||
l200:
|
||
a1=a1+ids*rlevs;
|
||
dnew=a1;
|
||
if((dnew-dnew2)*ids<=0.0)
|
||
{
|
||
if(dold1!=dold2)
|
||
{
|
||
dold=dold1+a*(dnew-dnew1);
|
||
ddold=dold;
|
||
if( a< 1.)
|
||
{
|
||
if(dnew>dold) ddold=dold2-a*k*rlevs;
|
||
}
|
||
if(fabsf(dold-dest)<rlevs) return dnew;
|
||
}
|
||
else
|
||
{
|
||
if(dnew==dnew1 && dnew!=d_sdep && dnew!=d_edep) goto l200;
|
||
if(dnew==dnew2 && dnew!=d_sdep && dnew!=d_edep) goto l200;
|
||
}
|
||
iDepPos2 = (int)( (dnew-d_sdep) /rlevs+0.5 );
|
||
if(dnew>d_edep) goto l200;
|
||
if(iDepPos2>=num) iDepPos2=num-1;
|
||
if(iDepPos2<0) goto l200;
|
||
if( a < 1.)
|
||
{
|
||
if(dnew>dold)
|
||
{
|
||
iDepPos2 = (int)( (dnew2-rlevs*k++-d_sdep)/rlevs+0.5 );
|
||
if(iDepPos2>=num) iDepPos2=num-1;
|
||
if(iDepPos2<0) goto l200;
|
||
}
|
||
}
|
||
goto l200;
|
||
}
|
||
}
|
||
return -9999;
|
||
}
|
||
void CMemRdWt::epshft(int iPos,int Len,int CodeLen,float rlevs,float d_sdep,float d_edep,float dold1,float dold2,float dnew1,float dnew2,int flg,char *d_flLogData,char *d_flSavLogData)
|
||
{
|
||
int ids,k=0;
|
||
double dold=d_sdep;
|
||
float dnew,a,ddold;
|
||
float tempdep;
|
||
float *yy=new float[Len];
|
||
int iDepPos1=0,iDepPos2=0;
|
||
if(dold1<d_sdep) dold1=d_sdep;
|
||
if(dold2<d_sdep) dold2=d_sdep;
|
||
if(dnew1<d_sdep) dnew1=d_sdep;
|
||
if(dnew2<d_sdep) dnew2=d_sdep;
|
||
int num=(d_edep-d_sdep)/rlevs+0.5;
|
||
if(dold1>d_edep) dold1=d_edep;
|
||
if(dold2>d_edep) dold2=d_edep;
|
||
if(dnew1>d_edep) dnew1=d_edep;
|
||
if(dnew2>d_edep) dnew2=d_edep;
|
||
dold=dold1;
|
||
ids=1;
|
||
if(dnew1 >dnew2) ids=-1;
|
||
if(dnew1==dnew2)
|
||
{
|
||
tempdep = dold2;
|
||
round(&tempdep,dold1,dold2,rlevs,d_sdep,ids);
|
||
// -----------------------------------------
|
||
iDepPos1 =(int)( (tempdep - d_sdep ) / rlevs+0.51);
|
||
iDepPos2 =(int)( (dnew1 - d_sdep ) / rlevs+0.51);
|
||
if(iDepPos1>=num) iDepPos1=num-1;
|
||
if(iDepPos2>=num) iDepPos2=num-1;
|
||
if(iDepPos1<0) iDepPos1=0;
|
||
if(iDepPos2<0) iDepPos2=0;
|
||
if( flg ) {
|
||
GetVal(iPos,Len,&d_flSavLogData[iDepPos1*Len*CodeLen],yy);
|
||
SetVal(iPos,Len,&d_flLogData[iDepPos2*Len*CodeLen],yy);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
a=(dold2-dold1)/(dnew2-dnew1);
|
||
int count=(dnew2-dnew1)/rlevs+1.5;
|
||
float dep=0;
|
||
int pos=0;
|
||
float old=dold1;;
|
||
float val=0;
|
||
val=(int)( (dnew1-d_sdep) /rlevs+0.53 );
|
||
for(int i=0;i<count;i++) {
|
||
dnew=dnew1+i*rlevs;
|
||
iDepPos2=i+val;
|
||
dold=a*(dnew-dnew1)+dold1;
|
||
// val= (int)( (dnew-d_sdep) /rlevs+0.53 );
|
||
// if(iDepPos2!=0&&iDepPos2==val) {
|
||
// iDepPos2 =val+1;
|
||
// }
|
||
// else iDepPos2 =val;
|
||
if(iDepPos2>=num) iDepPos2=num-1;
|
||
if(iDepPos2<0) iDepPos2=0;
|
||
inter(iPos,Len,CodeLen,d_sdep,d_edep,a,dold,old,rlevs,d_flLogData,d_flSavLogData,yy);
|
||
SetVal(iPos,Len,&d_flLogData[iDepPos2*Len*CodeLen],yy);
|
||
old=dold;
|
||
}
|
||
return;
|
||
}
|
||
delete yy;
|
||
return;
|
||
}
|
||
void CMemRdWt::round(float *d,float d1,float d2,float rlevs,float stdeps,int ids)
|
||
{
|
||
float di;
|
||
di=(int)((*d-stdeps)/rlevs);
|
||
*d=(di+stdeps/rlevs)*rlevs;
|
||
if((*d-d1)*ids<0.) *d=(*d/rlevs+ids)*rlevs;
|
||
if((*d-d1)*ids>0.) *d=(*d/rlevs-ids)*rlevs;
|
||
return;
|
||
}
|
||
void CMemRdWt::inter(int iPos,int nLen,int CodeLen,float d_sdep,float d_edep,float a,float d,float oldd,float rlevs,char *d_flLogData,char *d_flSavLogData,float *yy)
|
||
{
|
||
float *flVal1=new float[nLen];
|
||
float *flVal2=new float[nLen];
|
||
double d1,d2;
|
||
int iPos1,iPos2;
|
||
|
||
// -----------------------------------------
|
||
// 将要校深的曲线存放在 d_flSavLogData[d_nPointNumber]中
|
||
// 因此,做此处理
|
||
// -----------------------------------------
|
||
if( a > 1.0 )
|
||
{
|
||
float dep0=d;//oldd;//累加后取平均
|
||
int nu=(d-dep0)/rlevs+1.5;
|
||
if(nu<1) {
|
||
nu=1;
|
||
dep0=d;
|
||
}
|
||
for(int j=0;j<nu;j++) {
|
||
iPos2 =(int)( (dep0+j*rlevs - d_sdep ) / rlevs+0.51);
|
||
GetVal(iPos,nLen,&d_flSavLogData[iPos2*CodeLen*nLen],flVal1);
|
||
for(int i=0;i<nLen;i++) {
|
||
if(!j) yy[i]=flVal1[i];
|
||
else yy[i]+=flVal1[i];
|
||
}
|
||
}
|
||
for(int i=0;i<nLen;i++) {
|
||
yy[i]/=nu;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
// d1=d;
|
||
d1=(int)((d-d_sdep)/rlevs);
|
||
d1=d1*rlevs+d_sdep;
|
||
if(d1==d)
|
||
{
|
||
if(d>=d_edep)d=d_edep;
|
||
iPos2 =(int)( (d - d_sdep ) / rlevs+0.01);
|
||
GetVal(iPos,nLen,&d_flSavLogData[iPos2*CodeLen*nLen],yy);
|
||
}
|
||
else
|
||
{
|
||
float rlev=rlevs;
|
||
iPos1 =(int)( (d - d_sdep ) / rlevs+0.01);
|
||
d1=iPos1*rlevs+d_sdep;
|
||
GetVal(iPos,nLen,&d_flSavLogData[iPos1*CodeLen*nLen],flVal1);
|
||
if(d1==d) {
|
||
d2=d1;
|
||
}
|
||
if(d1<d) {
|
||
d2=d1+rlevs;
|
||
}
|
||
else {
|
||
d2=d1-rlevs;
|
||
rlev=-rlevs;
|
||
}
|
||
if(d2<d_sdep) d2=d_sdep;
|
||
if(d2>d_edep) d2=d_edep;
|
||
iPos2 =(int)( (d2 - d_sdep ) / rlevs+0.01);
|
||
GetVal(iPos,nLen,&d_flSavLogData[iPos2*CodeLen*nLen],flVal2);
|
||
for(int i=0;i<nLen;i++)
|
||
{
|
||
// float lll=(d-d1)/rlevs;
|
||
if(d2==d1) yy[i]=flVal1[i];
|
||
else yy[i]=(flVal2[i]-flVal1[i])/(d2-d1)*(d-d1)+flVal1[i];
|
||
// yy[i] = (flVal1[i]*(d2-d)+flVal2[i]*(d-d1))/rlev;
|
||
}
|
||
}
|
||
}
|
||
delete flVal1;
|
||
delete flVal2;
|
||
return;
|
||
}
|
||
void CMemRdWt::DepthSort(float *xxx,int number)
|
||
{
|
||
int i5,j5;
|
||
float tempf5;
|
||
|
||
for (i5=0; i5<number; i5++)
|
||
for (j5=i5; j5<number; j5++)
|
||
if (xxx[i5] > xxx[j5])
|
||
{
|
||
tempf5 = xxx[i5];
|
||
xxx[i5] = xxx[j5];
|
||
xxx[j5] = tempf5;
|
||
}
|
||
}
|
||
bool CMemRdWt::EShiftWFDepth(char *Name,int Count,float *dep1,float *dep2)
|
||
{
|
||
if(Count<1)return 0;
|
||
int iIndex=OpenWave(Name);
|
||
if (iIndex >= 0)
|
||
{
|
||
Slf_WAVE curve;
|
||
GetWaveInfo(iIndex,&curve);
|
||
if(Count==2&&dep1[0]-dep1[1]==dep2[0]-dep2[1]) {
|
||
if(fabs(dep1[0]-curve.StartDepth)<curve.DepLevel&&fabs(dep1[1]-curve.EndDepth)<curve.DepLevel) {
|
||
float dep=dep1[0]-dep2[0];
|
||
CorrectDepth(iIndex,dep);
|
||
CloseWave(iIndex);
|
||
return 1;
|
||
}
|
||
}
|
||
float sdep=curve.StartDepth;
|
||
float edep=curve.EndDepth;
|
||
for (int i=0;i<Count;i++) {
|
||
if(sdep>dep2[i]) sdep=dep2[i];
|
||
if(edep<dep2[i]) edep=dep2[i];
|
||
}
|
||
int m_PointNum = (float)(fabs((edep-sdep)/curve.DepLevel+1.5));
|
||
|
||
int Len=m_PointNum*ComputerChannelLength(iIndex);
|
||
char *m_ValueBak=new char[Len+4];
|
||
char *m_Value=new char[Len+4];
|
||
ReadWave(iIndex,sdep,m_PointNum,(void *)m_ValueBak);
|
||
memmove(m_Value,m_ValueBak,Len);
|
||
for (int i=0;i<Count-1;i++)
|
||
{
|
||
epshft(iIndex,curve.SamplePoint*curve.ArrayNum,curve.CodeLen,
|
||
curve.DepLevel,sdep,edep,
|
||
dep1[i],dep1[i+1],dep2[i],dep2[i+1],1,m_Value,m_ValueBak);
|
||
}
|
||
WriteWave(iIndex,sdep,m_PointNum,(void *)m_Value);
|
||
delete m_ValueBak;
|
||
delete m_Value;
|
||
CloseWave(iIndex);
|
||
}
|
||
return TRUE;
|
||
}
|
||
bool CMemRdWt::EShiftCurveDepth(char *Name,int Count,float *dep1,float *dep2)
|
||
{
|
||
int iIndex=OpenCurve(Name);
|
||
if (iIndex >= 0)
|
||
{
|
||
Slf_CURVE curve;
|
||
GetCurveInfo(iIndex,&curve);
|
||
if(Count==2&&dep1[0]-dep1[1]==dep2[0]-dep2[1])
|
||
{
|
||
if(fabs(dep1[0]-curve.StartDepth)<curve.DepLevel&&fabs(dep1[1]-curve.EndDepth)<curve.DepLevel)
|
||
{
|
||
float dep=dep1[0]-dep2[0];
|
||
CorrectDepth(iIndex,dep);
|
||
CloseCurve(iIndex);
|
||
return 1;
|
||
}
|
||
}
|
||
float sdep=curve.StartDepth;
|
||
float edep=curve.EndDepth;
|
||
for (int i=0;i<Count;i++) {
|
||
if(sdep>dep2[i]) sdep=dep2[i];
|
||
if(edep<dep2[i]) edep=dep2[i];
|
||
}
|
||
int m_PointNum = (float)(fabs((edep-sdep)/curve.DepLevel+0.5));
|
||
char *m_Value=new char[m_PointNum*curve.CodeLen+4];
|
||
char *m_ValueBak=new char[m_PointNum*curve.CodeLen+4];
|
||
ReadCurve(iIndex,sdep,m_PointNum,(void *)m_Value);
|
||
memmove(m_ValueBak,m_Value,m_PointNum*curve.CodeLen+4);
|
||
for (int i=0;i<Count-1;i++)
|
||
{
|
||
epshft(iIndex,1,curve.CodeLen,
|
||
curve.DepLevel,sdep,edep,
|
||
dep1[i],dep1[i+1],dep2[i],dep2[i+1],1,m_Value,m_ValueBak);
|
||
}
|
||
delete m_ValueBak;
|
||
WriteCurve(iIndex,sdep,m_PointNum,(void *)m_Value);
|
||
delete m_Value;
|
||
CloseCurve(iIndex);
|
||
}
|
||
return TRUE;
|
||
}
|
||
bool CMemRdWt::EShiftFMTDepth(char *Name,int Count,float *dep1,float *dep2) //dep1 =>file depth dep2=>change
|
||
{
|
||
int iIndex=OpenFMT(Name);
|
||
if (iIndex < 0) return FALSE;
|
||
SetFMTDepth(iIndex,Count,dep1,dep2);
|
||
return TRUE;
|
||
}
|
||
bool CMemRdWt::EShiftTDTDepth(char *Name,int Count,float *dep1,float *dep2)//dep1 =>file depth dep2=>change
|
||
{
|
||
int iIndex=OpenTDT(Name);
|
||
if (iIndex < 0) return FALSE;
|
||
Slf_TDT Info;
|
||
GetTDTInfo(iIndex,&Info);
|
||
TDT_DATA *buffer=new TDT_DATA[Info.MaxLogSamples];
|
||
unsigned int t;
|
||
int n=0,no;
|
||
for(int i=0;i<Count;i++) {
|
||
n=ReadTDT(iIndex,dep1[i],&t,buffer,&no);
|
||
if(n>0) {
|
||
for(int j=0;j<n;j++) buffer[j].Depth=dep2[i];
|
||
WriteTDT(iIndex,no,t,buffer,n);
|
||
}
|
||
}
|
||
delete buffer;
|
||
return TRUE;
|
||
}
|
||
bool CMemRdWt::EshiftStreamDepth(char *Name,int Count,float *dep1,float *dep2)
|
||
{
|
||
if(stricmp(Name,"DEPTH_INP")==0) return false;
|
||
if(stricmp(Name,"RUN_DEPTH_RECORDS")==0) return false;
|
||
if(strncmp(Name,"DLIS",4)==0) return false;
|
||
|
||
int i;
|
||
int iIndex=OpenStream(Name);
|
||
if (iIndex < 0) return FALSE;
|
||
int len=GetStreamLength(iIndex);
|
||
char *buf=new char[len+1];
|
||
DWORD lpb=0;
|
||
ReadStream(iIndex,len,&lpb,buf);
|
||
buf[len]=0;
|
||
QString cs=buf;
|
||
cs.replace("\r\n","\n");
|
||
QStringList css=cs.split("\n");
|
||
css.removeAll("");
|
||
float Depth,dep;
|
||
QString result;
|
||
int isNO=-1;
|
||
for(int j=0;j<css.size();j++) {
|
||
css[j]=css[j].trimmed();
|
||
css[j].replace(" "," ");
|
||
css[j].replace(",",",");
|
||
css[j].replace(", ",",");
|
||
if(css[j].indexOf(" ")>-1) {
|
||
QStringList csss=css[j].split(' ');
|
||
csss.removeAll(" ");
|
||
csss.removeAll("");
|
||
|
||
for(int k=0;k<csss.size();k++)
|
||
{
|
||
csss[k]=csss[k].trimmed();
|
||
if(j==0&&csss[k].compare("NO",Qt::CaseInsensitive)==0) isNO=k;
|
||
}
|
||
csss.removeAll("");
|
||
if(csss.size()==2&&!csss[0].isEmpty()&&!csss[1].isEmpty()&&csss[0].at(0).isDigit()&&csss[1].at(0).isDigit())
|
||
{
|
||
css[j]="";
|
||
for(int k=0;k<csss.size();k++) {
|
||
if(k==isNO) {
|
||
css[j]+=csss[k];
|
||
if(k!=csss.size()-1) css[j]+=" ";
|
||
continue;
|
||
}
|
||
if(!csss[k].isEmpty()) {
|
||
if(csss[k].at(0).isDigit()) {
|
||
Depth=csss[k].toFloat();
|
||
dep=Depth;
|
||
if(Count==0) {
|
||
dep=Depth+dep1[0];
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) {
|
||
dep=dep2[i];
|
||
break;
|
||
}
|
||
else {
|
||
dep=dep2[i]+(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i]);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
QString te=QString::number(dep,'f',1);
|
||
css[j]+=te;
|
||
if(k!=csss.size()-1) css[j]+=" ";
|
||
}
|
||
}
|
||
}
|
||
//css[j]=csss.join(" ");
|
||
}
|
||
}
|
||
result+=css[j]+"\r\n";
|
||
}
|
||
result=result.toUpper();
|
||
if(result.indexOf("END")<0) result+="END\r\n";
|
||
delete buf;
|
||
WriteStream(iIndex,result.length(),&lpb,result.toStdString().c_str());
|
||
CloseStream(iIndex);
|
||
return true;
|
||
}
|
||
bool CMemRdWt::EShiftTableDepth(char *Name,int Count,float *dep1,float *dep2)
|
||
{
|
||
////////////
|
||
// if Count==0,*dep1=ddep;=>深度量
|
||
//
|
||
int i;
|
||
int iIndex=OpenTable(Name);
|
||
if (iIndex < 0) return FALSE;
|
||
int numrec=GetTableRecordCount(iIndex);
|
||
if(numrec<1) return FALSE;
|
||
int no1=GetTableFieldNo(iIndex,"SDEP");
|
||
int no2=GetTableFieldNo(iIndex,"EDEP");
|
||
int no3=GetTableFieldNo(iIndex,"DEP");
|
||
int no4=GetTableFieldNo(iIndex,"DEPTH");
|
||
int no5=GetTableFieldNo(iIndex,"MDEPTH1");
|
||
int no6=GetTableFieldNo(iIndex,"MDEPTH2");
|
||
int no7=GetTableFieldNo(iIndex,"MDEPTH3");
|
||
int no8=GetTableFieldNo(iIndex,"MDEPTH4");
|
||
int no9=GetTableFieldNo(iIndex,"MDEPTH5");
|
||
int no10=GetTableFieldNo(iIndex,"MDEPTH6");
|
||
int no11=GetTableFieldNo(iIndex,"MDEPTH7");
|
||
int no12=GetTableFieldNo(iIndex,"MDEPTH8");
|
||
int no13=GetTableFieldNo(iIndex,"MDEPTH9");
|
||
int no14=GetTableFieldNo(iIndex,"MDEPTH10");
|
||
int no15=GetTableFieldNo(iIndex,"STARTDEP");
|
||
int no16=GetTableFieldNo(iIndex,"ENDDEP");
|
||
int no17=GetTableFieldNo(iIndex,"STDEP");
|
||
int no18=GetTableFieldNo(iIndex,"ENDEP");
|
||
if(no1<0&&
|
||
no2<0&&
|
||
no3<0
|
||
&&no4<0
|
||
&&no5<0
|
||
&&no6<0
|
||
&&no7<0
|
||
&&no8<0
|
||
&&no9<0
|
||
&&no10<0
|
||
&&no11<0
|
||
&&no12<0
|
||
&&no13<0
|
||
&&no14<0
|
||
&&no15<0
|
||
&&no16<0
|
||
&&no17<0
|
||
&&no18<0
|
||
) return FALSE;
|
||
int iThick=-1,iTT=-1,IsChange=-1;
|
||
if(no1>=0&&no2>=0)
|
||
{
|
||
iThick=GetTableFieldNo(iIndex,"THICK");
|
||
iTT=GetTableFieldNo(iIndex,"TT");
|
||
}
|
||
int len=GetTableRecordLength(iIndex);
|
||
char *buf=new char[len+1];
|
||
float Depth,dep;
|
||
|
||
for(int j=0;j<numrec;j++) {
|
||
IsChange=-1;
|
||
if(no1>-1) {
|
||
GetTableFieldData(iIndex,no1,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no1,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
IsChange=1;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no1,(char *)&dep2[i],j+1);
|
||
else {
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth/*-0.125*/-dep1[i])+dep2[i];
|
||
// dep+=0.125;
|
||
SetTableFieldData(iIndex,no1,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no2>-1) {
|
||
//GetTableFieldData(iIndex,no2,(char *)&Depth,j+1);
|
||
GetTableFieldData(iIndex,no2,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no2,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
IsChange=1;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no2,(char *)&dep2[i],j+1);
|
||
else {
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth/*+0.125*/-dep1[i])+dep2[i];
|
||
//dep-=0.125;
|
||
SetTableFieldData(iIndex,no2,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no3>-1) {
|
||
//GetTableFieldData(iIndex,no3,(char *)&Depth,j+1);
|
||
GetTableFieldData(iIndex,no3,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no3,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no3,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no3,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no4>-1)
|
||
{
|
||
//GetTableFieldData(iIndex,no4,(char *)&Depth,j+1);
|
||
GetTableFieldData(iIndex,no4,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no4,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no4,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no4,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no15>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no15,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no15,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no15,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no15,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no16>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no16,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no16,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no16,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no16,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no17>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no17,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no17,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no17,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no17,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no18>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no18,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no18,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no18,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no18,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no5>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no5,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no5,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no5,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no5,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no6>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no6,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no6,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no6,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no6,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no7>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no7,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no7,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no7,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no7,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no8>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no8,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no8,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no8,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no8,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no9>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no9,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no9,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no9,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no9,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no10>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no10,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no10,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no10,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no10,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no11>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no11,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no11,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no11,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no11,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no12>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no12,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no12,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no12,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no12,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no13>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no13,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no13,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no13,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no13,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(no14>-1)
|
||
{
|
||
GetTableFieldData(iIndex,no14,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,no14,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,no14,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-dep1[i])+dep2[i];
|
||
SetTableFieldData(iIndex,no14,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
if(IsChange>-1)
|
||
{//层的顶深或底深发生了变化
|
||
if(iThick>-1)
|
||
{
|
||
float sdep,edep,h;
|
||
GetTableFieldData(iIndex,no1,buf,j+1);
|
||
sscanf(buf,"%f",&sdep);
|
||
GetTableFieldData(iIndex,no2,buf,j+1);
|
||
sscanf(buf,"%f",&edep);
|
||
h=edep-sdep;
|
||
SetTableFieldData(iIndex,iThick,(char *)&h,j+1);
|
||
}
|
||
if(iTT>-1)
|
||
{
|
||
float sdep,edep,h;
|
||
GetTableFieldData(iIndex,no1,buf,j+1);
|
||
sscanf(buf,"%f",&sdep);
|
||
GetTableFieldData(iIndex,no2,buf,j+1);
|
||
sscanf(buf,"%f",&edep);
|
||
h=edep-sdep;
|
||
SetTableFieldData(iIndex,iTT,(char *)&h,j+1);
|
||
}
|
||
}
|
||
}
|
||
///////////////////////////////////////////////
|
||
/*
|
||
char *name[]={
|
||
"SDEP","EDEP",
|
||
"STDEP","ENDEP",
|
||
"STARTDEP","ENDDEP",
|
||
"DEP","DEPTH",
|
||
"MDEPTH1","MDEPTH2",
|
||
"MDEPTH3","MDEPTH4",
|
||
"MDEPTH5","MDEPTH6",
|
||
"MDEPTH7","MDEPTH8",
|
||
"MDEPTH9","MDEPTH10",
|
||
};
|
||
int FieldNum=GetTableFieldCount(iIndex);
|
||
|
||
int no1=GetTableFieldNo(iIndex,"SDEP");
|
||
if(no1<0) no1=GetTableFieldNo(iIndex,"STDEP");
|
||
if(no1<0) no1=GetTableFieldNo(iIndex,"STARTDEP");
|
||
int no2=GetTableFieldNo(iIndex,"EDEP");
|
||
if(no2<0) no2=GetTableFieldNo(iIndex,"ENDEP");
|
||
if(no2<0) no2=GetTableFieldNo(iIndex,"ENDDEP");
|
||
|
||
if(no1>=0&&no2>=0){
|
||
iThick=GetTableFieldNo(iIndex,"THICK");
|
||
iTT=GetTableFieldNo(iIndex,"TT");
|
||
}
|
||
|
||
Slf_TABLE_FIELD *FieldInfo=new Slf_TABLE_FIELD[FieldNum];
|
||
GetTableFieldInfo(iIndex,FieldInfo);
|
||
for(int k=0;k<sizeof(name);k++)
|
||
{
|
||
for (int n=0;n<FieldNum;n++)
|
||
{
|
||
if(stricmp(FieldInfo[n].Name,name[k])==0)
|
||
{
|
||
for(int j=0;j<numrec;j++)
|
||
{
|
||
GetTableFieldData(iIndex,n,buf,j+1);
|
||
sscanf(buf,"%f",&Depth);
|
||
if(Depth) {
|
||
if(Count==0) {
|
||
IsChange=1;
|
||
float dep=Depth+dep1[0];
|
||
SetTableFieldData(iIndex,n,(char *)&dep,j+1);
|
||
}
|
||
else {
|
||
for(i=0;i<Count-1;i++) {
|
||
if(Depth<dep1[i]||Depth>dep1[i+1]) continue;
|
||
if(dep1[i+1]==dep1[i]) SetTableFieldData(iIndex,n,(char *)&dep2[i],j+1);
|
||
else// if(i)
|
||
{
|
||
dep=(dep2[i+1]-dep2[i])/(dep1[i+1]-dep1[i])*(Depth-((k==0||k==1)?0.125:0)-dep1[i])+dep2[i];
|
||
dep+=((k==0||k==1)?0.125:0);
|
||
SetTableFieldData(iIndex,n,(char *)&dep,j+1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
delete FieldInfo;
|
||
for(int j=0;j<numrec;j++)
|
||
{
|
||
// if(IsChange>-1)
|
||
{
|
||
//层的顶深或底深发生了变化
|
||
if(iThick>-1)
|
||
{
|
||
float sdep,edep,h;
|
||
GetTableFieldData(iIndex,no1,buf,j+1);
|
||
sscanf(buf,"%f",&sdep);
|
||
GetTableFieldData(iIndex,no2,buf,j+1);
|
||
sscanf(buf,"%f",&edep);
|
||
h=edep-sdep;
|
||
SetTableFieldData(iIndex,iThick,(char *)&h,j+1);
|
||
}
|
||
if(iTT>-1)
|
||
{
|
||
float sdep,edep,h;
|
||
GetTableFieldData(iIndex,no1,buf,j+1);
|
||
sscanf(buf,"%f",&sdep);
|
||
GetTableFieldData(iIndex,no2,buf,j+1);
|
||
sscanf(buf,"%f",&edep);
|
||
h=edep-sdep;
|
||
SetTableFieldData(iIndex,iTT,(char *)&h,j+1);
|
||
}
|
||
}
|
||
}
|
||
*/
|
||
delete buf;
|
||
return TRUE;
|
||
}
|
||
void CMemRdWt::CorrectObjectDepth(int index,float deltadepth)
|
||
{
|
||
char Name[65];
|
||
Name[64]='\0';
|
||
GetObjectName(index,Name);
|
||
int ObjectType=GetObjectType(Name);
|
||
if(ObjectType==0||ObjectType>CARD_OBJECT)
|
||
{
|
||
int index=OpenTable(Name);
|
||
if(index>-1)
|
||
{
|
||
EShiftTableDepth(Name,0,&deltadepth,NULL);
|
||
}
|
||
}
|
||
else if(ObjectType==CARD_OBJECT) {
|
||
EshiftStreamDepth(Name,0,&deltadepth,NULL);
|
||
}
|
||
else
|
||
{
|
||
int index=OpenChannel(Name);
|
||
if(index>-1)
|
||
{
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(index,&Attribute,&SubAttribute);
|
||
if(SubAttribute==CURVE_OBJECT)
|
||
{
|
||
CorrectDepth(index,deltadepth);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
CorrectDepth(index,deltadepth);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
void CMemRdWt::CorrectAllObjectsDepth(float deltadepth)
|
||
{
|
||
int Count=GetObjectCount();
|
||
for(int i=0;i<Count;i++) {
|
||
CorrectObjectDepth(i,deltadepth);
|
||
}
|
||
}
|
||
bool CMemRdWt::EShiftDepth(char *Name,int m_nDepPairsNum,float *FirstDep,float *SecondDep)
|
||
{
|
||
int ObjectType=GetObjectType(Name);
|
||
if(ObjectType >CARD_OBJECT||ObjectType==0)
|
||
{
|
||
int index=OpenTable(Name);
|
||
if(index>-1)
|
||
{
|
||
EShiftTableDepth(Name,m_nDepPairsNum,FirstDep,SecondDep);
|
||
}
|
||
}
|
||
else if(ObjectType==CARD_OBJECT) {
|
||
EshiftStreamDepth(Name,m_nDepPairsNum,FirstDep,SecondDep);
|
||
}
|
||
else
|
||
{
|
||
int index=OpenChannel(Name);
|
||
if(index>-1)
|
||
{
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(index,&Attribute,&SubAttribute);
|
||
if(SubAttribute==CURVE_OBJECT)
|
||
{
|
||
EShiftCurveDepth(Name,m_nDepPairsNum,FirstDep,SecondDep);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
EShiftWFDepth(Name,m_nDepPairsNum,FirstDep,SecondDep);
|
||
}
|
||
else if(SubAttribute==FMT_OBJECT) {
|
||
EShiftFMTDepth(Name,m_nDepPairsNum,FirstDep,SecondDep);
|
||
}
|
||
else if(SubAttribute==TDT_OBJECT) {
|
||
EShiftTDTDepth(Name,m_nDepPairsNum,FirstDep,SecondDep);
|
||
}
|
||
}
|
||
}
|
||
return 1;
|
||
}
|
||
bool CMemRdWt::EShiftDepth(char *Name,char *pParam)
|
||
{
|
||
char ShiftCard[100];
|
||
int m_nDepPairsNum=0;
|
||
float *FirstDep=NULL;
|
||
float *SecondDep=NULL;
|
||
if(!pParam) strcpy(ShiftCard,"depth_inp");
|
||
else strcpy(ShiftCard,pParam);
|
||
int iIndex=OpenStream(ShiftCard);
|
||
if (iIndex >= 0)
|
||
{
|
||
int len=GetStreamLength(iIndex);
|
||
DWORD byte;
|
||
float tem1,tem2;
|
||
char *temp=new char[len+2];
|
||
ReadStream(iIndex,len,&byte,temp);
|
||
m_nDepPairsNum=0;
|
||
QString css=temp;
|
||
css.trimmed();
|
||
while(css.indexOf("\r\n")>=0) {
|
||
css=css.replace("\r\n","\n");
|
||
}
|
||
QStringList lines=css.split('\n');
|
||
foreach(QString line,lines)
|
||
{
|
||
if(line.isEmpty()) continue;
|
||
if(line.compare("END",Qt::CaseInsensitive)==0) break;
|
||
if(!line.at(0).isDigit()&&line.at(0)!='.') continue;
|
||
if(sscanf(line.toStdString().c_str(),"%f %f\n",&tem1,&tem2)<2) break;
|
||
m_nDepPairsNum++;
|
||
}
|
||
if(m_nDepPairsNum) {
|
||
FirstDep=new float[m_nDepPairsNum+1];
|
||
SecondDep=new float[m_nDepPairsNum+1];
|
||
}
|
||
m_nDepPairsNum=0;
|
||
foreach(QString line,lines)
|
||
{
|
||
if(line.isEmpty()) continue;
|
||
if(line.compare("END",Qt::CaseInsensitive)==0) break;
|
||
if(!line.at(0).isDigit()&&line.at(0)!='.') continue;
|
||
if(sscanf(line.toStdString().c_str(),"%f %f\n",&tem1,&tem2)<2) break;
|
||
SecondDep[m_nDepPairsNum]=tem1;
|
||
FirstDep[m_nDepPairsNum]=tem2;
|
||
m_nDepPairsNum++;
|
||
}
|
||
delete temp;
|
||
CloseStream(iIndex);
|
||
}
|
||
EShiftDepth(Name,m_nDepPairsNum,FirstDep,SecondDep);
|
||
delete FirstDep;
|
||
delete SecondDep;
|
||
return FALSE;
|
||
}
|
||
void CMemRdWt::RestoreData()
|
||
{
|
||
int i,samples;
|
||
for(i=0;i<INC->Noi;i++) {
|
||
if(InCurveNo[i]>-1) {
|
||
GetChannelInfo(InCurveNo[i],&m_Channel);
|
||
samples=(int)((InEdep[i]-InSdep[i])/m_Channel.DimInfo[0].Delta+0.5);
|
||
if(samples<0) samples=0;
|
||
memmove(InData[i],OutData[i],samples*m_Channel.DimInfo[0].Size);
|
||
}
|
||
}
|
||
}
|
||
bool CMemRdWt::CurveExist(int no)
|
||
{
|
||
if(INC&&InCurveNo&&no<INC->Noi)
|
||
{
|
||
if(InCurveNo[no]>=0) return 1;
|
||
}
|
||
return 0;
|
||
}
|
||
bool CMemRdWt::CurveExist(char* name)
|
||
{
|
||
if(INC){
|
||
for (int i=0;i<INC->Noi;i++)
|
||
{
|
||
if(FindObjectName(name)>-1)
|
||
{
|
||
if(InCurveNo)
|
||
{
|
||
if(InCurveNo[i]>=0) return true;
|
||
}
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
bool CMemRdWt ::AddInCurve(int i,char *name)
|
||
{
|
||
int samples;
|
||
float Dep;
|
||
int MaxObjectNumber=GetMaxObjectNumber();
|
||
if(!InCurveNo) {
|
||
InCurveNo=new int [MaxObjectNumber];
|
||
InData =new char*[MaxObjectNumber];
|
||
InSdep =new float [MaxObjectNumber];
|
||
InEdep =new float [MaxObjectNumber];
|
||
for(int i=0;i<MaxObjectNumber;i++) InData[i]=NULL;
|
||
}
|
||
InCurveNo[i]=OpenCurve(name);
|
||
if(InCurveNo[i]<0) InCurveNo[i]=OpenWave(name);
|
||
if(InCurveNo[i]<0) InCurveNo[i]=OpenFMT(name);
|
||
if(InCurveNo[i]<0) InCurveNo[i]=OpenTDT(name);
|
||
if(InCurveNo[i]>-1) {
|
||
GetChannelInfo(InCurveNo[i],&m_Channel);
|
||
if(m_Channel.RepCode>100) {
|
||
QString cs=name;
|
||
cs+="数据信息错误,可能是slf文件被损害!";
|
||
if(SlfError)
|
||
{
|
||
strcpy(SlfError->ErrorStr,cs.toStdString().c_str());
|
||
SlfError->ErrorNo=-1;
|
||
}
|
||
// AfxMessageBox(cs);
|
||
InCurveNo[i]=-1;
|
||
INP->InpLen[i]=1;
|
||
INP->InpPos[i+1]=INP->InpPos[i]+INP->InpLen[i];
|
||
return false;
|
||
}
|
||
if(m_Channel.DimInfo[0].Delta==99999) {
|
||
m_Channel.DimInfo[0].Delta=0.125;
|
||
SetChannelInfo(InCurveNo[i],&m_Channel);
|
||
}
|
||
if(Rlev>m_Channel.DimInfo[0].Delta&&m_Channel.DimInfo[0].Delta!=99999)
|
||
{
|
||
Rlev=m_Channel.DimInfo[0].Delta;
|
||
if(Rlev==0) Rlev=0.125;
|
||
}
|
||
if(RunSdep!=-999999||m_Channel.DimInfo[0].Delta>=9999) {
|
||
HD->StartDep=RunSdep;
|
||
HD->EndDep=RunEdep;
|
||
InSdep[i]=RunSdep;
|
||
InEdep[i]=RunEdep;
|
||
}
|
||
else {
|
||
InSdep[i]=m_Channel.DimInfo[0].StartVal;
|
||
if(m_Channel.DimInfo[0].Samples<1) {
|
||
InEdep[i]=InSdep[i];
|
||
}
|
||
else InEdep[i]=InSdep[i]+(m_Channel.DimInfo[0].Samples-1)*m_Channel.DimInfo[0].Delta;
|
||
if(HD->StartDep>InSdep[i]) HD->StartDep=InSdep[i];
|
||
if(HD->EndDep<InEdep[i]) HD->EndDep =InEdep[i];
|
||
}
|
||
Dep=InSdep[i];
|
||
if(m_Channel.RepCode<1) m_Channel.RepCode=4;
|
||
int size=RepSize[m_Channel.RepCode];
|
||
if(size<1) size=4;
|
||
INP->InpLen[i]=m_Channel.DimInfo[0].Size/RepSize[m_Channel.RepCode];
|
||
INP->InpPos[i+1]=INP->InpPos[i]+INP->InpLen[i];
|
||
int j;
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==TDT_OBJECT) {
|
||
unsigned int logtime[100];
|
||
Slf_TDT SlfTdt;
|
||
GetTDTInfo(InCurveNo[i],&SlfTdt);
|
||
samples=GetTDTAllLogTime(InCurveNo[i],logtime);
|
||
InData[i]=new char [samples*m_Channel.DimInfo[0].Size+4];
|
||
*(int *)InData[i]=samples;
|
||
}
|
||
else {
|
||
samples=(int)((InEdep[i]-InSdep[i])/m_Channel.DimInfo[0].Delta+1.5);
|
||
if(samples<0) samples=0;
|
||
InData[i]=new char [(samples+1)*m_Channel.DimInfo[0].Size];
|
||
}
|
||
if(SubAttribute==CURVE_OBJECT) {
|
||
ReadCurve(InCurveNo[i],Dep,samples,(void *)InData[i]);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
ReadWave(InCurveNo[i],Dep,samples,(void *)InData[i]);
|
||
}
|
||
else if(SubAttribute==TDT_OBJECT) {
|
||
for(j=0;j<samples;j++)
|
||
{
|
||
//读取点测电磁流量测井值
|
||
unsigned int LogTime;
|
||
int nSamples = ReadTDT(InCurveNo[i],j+1, &LogTime, (TDT_DATA *)&InData[i][4+j*m_Channel.DimInfo[0].Size+4]);
|
||
*(int *)&InData[i][j*m_Channel.DimInfo[0].Size+4]=nSamples;
|
||
}
|
||
}
|
||
}
|
||
else {
|
||
InSdep[i]=0;
|
||
InEdep[i]=0;
|
||
char buf[200];
|
||
sprintf(buf,"曲线%s不存在!",name);
|
||
// AfxMessageBox(buf);
|
||
INP->InpLen[i]=1;
|
||
INP->InpPos[i+1]=INP->InpPos[i]+INP->InpLen[i];
|
||
if(SlfError) {
|
||
strcpy(SlfError->ErrorStr,buf);
|
||
SlfError->ErrorNo=-1;
|
||
}
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
void CMemRdWt ::AddOutCurve(Slf_CURVE *mcurve)
|
||
{
|
||
AddOutCurve(OUTC->Noo++,mcurve);
|
||
if(OUTC->Noo!=1) strcat(OUTC->Name," ");
|
||
strcat(OUTC->Name,mcurve->Name);
|
||
return;
|
||
}
|
||
void CMemRdWt ::AddOutCurve(int i,Slf_CURVE *mCurve)
|
||
{
|
||
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(mCurve->DepLevel<=-1.0e+3) mCurve->DepLevel=0.125;
|
||
if(mCurve->StartDepth<=-1.0e+3) mCurve->StartDepth=0;
|
||
if(mCurve->EndDepth<=-1.0e+3) mCurve->EndDepth=0;
|
||
if(HD->StartDep<-1.0e+3) HD->StartDep=0;
|
||
|
||
if(HD->StartDep==va||HD->EndDep==va||HD->Rlev==va) {
|
||
return;
|
||
}
|
||
if(HD->StartDep==va1||HD->EndDep==va1||HD->Rlev==va1) {
|
||
return;
|
||
}
|
||
if(HD->StartDep==va2||HD->EndDep==va2||HD->Rlev==va2) {
|
||
return;
|
||
}
|
||
int samples;
|
||
float Dep;
|
||
int index=FindObjectIndex(mCurve->Name);
|
||
short Attribute,SubAttribute;
|
||
if(index>=0)
|
||
{
|
||
short Status=GetObjectStatus(index);
|
||
if(Status==OBJECT_DELETE)
|
||
{
|
||
CString str;
|
||
str.Format("曲线%s处于删除状态,请清除或恢复该曲线后再作处理",mCurve->Name);
|
||
AfxMessageBox(str);
|
||
}
|
||
}
|
||
int a=0;
|
||
if(index>-1) {
|
||
GetObjectAttribute(index,&Attribute,&SubAttribute);
|
||
}
|
||
if(index<0) {
|
||
a=1;
|
||
if(OutCurveType) {
|
||
Slf_FMT fmt;
|
||
Slf_WAVE wave;
|
||
Slf_CURVE curve;
|
||
if(OutCurveType->Type[i]==FMT_OBJECT) {
|
||
memmove(&fmt,&OutCurveType->addr[i],sizeof(Slf_FMT));
|
||
memmove(fmt.Name,mCurve->Name,sizeof(fmt.Name));
|
||
OutCurveNo[i]=OpenFMT(&fmt);
|
||
}
|
||
else if(OutCurveType->Type[i]==WAVE_OBJECT){
|
||
memmove(&wave,&OutCurveType->addr[i],sizeof(Slf_WAVE));
|
||
memmove(wave.Name,mCurve->Name,sizeof(wave.Name));
|
||
if(wave.StartDepth==-99999) wave.StartDepth=mCurve->StartDepth;
|
||
if(wave.EndDepth==-99999) wave.EndDepth=mCurve->EndDepth;
|
||
if(!wave.DepLevel)wave.DepLevel=mCurve->DepLevel;
|
||
OutCurveNo[i]=OpenWave(&wave);
|
||
}
|
||
else if(OutCurveType->Type[i]==CURVE_OBJECT) {
|
||
if(OutCurveType->addr[i].mCurve.Name[0]!=0) {
|
||
memmove(&curve,&OutCurveType->addr[i],sizeof(Slf_CURVE));
|
||
memmove(curve.Name,mCurve->Name,sizeof(curve.Name));
|
||
OutCurveNo[i]=OpenCurve(&curve);
|
||
}
|
||
else OutCurveNo[i]=OpenCurve((Slf_CURVE *)mCurve);
|
||
}
|
||
else {
|
||
OutCurveNo[i]=OpenCurve((Slf_CURVE *)mCurve);
|
||
}
|
||
}
|
||
else OutCurveNo[i]=OpenCurve((Slf_CURVE *)mCurve);
|
||
}
|
||
else if(SubAttribute==CURVE_OBJECT) OutCurveNo[i]=OpenCurve(mCurve->Name);
|
||
else if(SubAttribute==FMT_OBJECT) OutCurveNo[i]=OpenFMT(mCurve->Name);
|
||
else if(SubAttribute==WAVE_OBJECT) OutCurveNo[i]=OpenWave(mCurve->Name);
|
||
else {
|
||
OutCurveNo[i]=-1;
|
||
return;
|
||
}
|
||
GetChannelInfo(OutCurveNo[i],&m_Channel);
|
||
if(m_Channel.DimInfo[0].Delta>100)
|
||
{
|
||
OutCurveNo[i]=-1;
|
||
return;
|
||
}
|
||
if(RunSdep!=-999999.0) {
|
||
OutSdep[i]=RunSdep;
|
||
OutEdep[i]=RunEdep;
|
||
}
|
||
else {
|
||
OutSdep[i]=HD->StartDep;
|
||
OutEdep[i]=HD->EndDep;
|
||
}
|
||
if(m_Channel.DimInfo[0].Delta==0||m_Channel.DimInfo[0].Delta==va) {
|
||
return;
|
||
}
|
||
if(m_Channel.RepCode>100) return;
|
||
samples=(int)((OutEdep[i]-OutSdep[i])/m_Channel.DimInfo[0].Delta+1.5);
|
||
if(samples<0) samples=0;
|
||
Dep=OutSdep[i];
|
||
OUTP->OutLen[i]=m_Channel.DimInfo[0].Size/RepSize[m_Channel.RepCode];
|
||
OUTP->OutPos[i+1]=OUTP->OutPos[i]+OUTP->OutLen[i];
|
||
OutData[i]=new char[samples*m_Channel.DimInfo[0].Size];
|
||
memset(OutData[i],0,samples*m_Channel.DimInfo[0].Size);
|
||
GetObjectAttribute(OutCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==CURVE_OBJECT) ReadCurve(OutCurveNo[i],Dep,samples,(void *)OutData[i]);
|
||
else if(SubAttribute==WAVE_OBJECT)ReadWave(OutCurveNo[i],Dep,samples,(void *)OutData[i]);
|
||
return;
|
||
}
|
||
void CMemRdWt ::GetVal(int no,int Len,void *Data,float *yy)
|
||
{
|
||
GetChannelInfo(no,&m_Channel);
|
||
int j;
|
||
switch(m_Channel.RepCode)
|
||
{
|
||
case REPR_INT:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((int*)Data+j));
|
||
break;
|
||
case REPR_SHORT:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((short *)Data+j));
|
||
break;
|
||
case REPR_LONG:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((unsigned int *)Data+j));
|
||
break;
|
||
case REPR_FLOAT:
|
||
for(j=0;j<Len;j++)
|
||
{
|
||
yy[j]=(float)(*((float *)Data+j));
|
||
}
|
||
break;
|
||
case REPR_DOUBLE:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((double *)Data+j));
|
||
break;
|
||
case REPR_CHAR:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((char *)Data+j));
|
||
break;
|
||
case REPR_UCHAR:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((unsigned char *)Data+j));
|
||
break;
|
||
case REPR_USHORT:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((unsigned short *)Data+j));
|
||
break;
|
||
case REPR_UINT:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((unsigned int *)Data+j));
|
||
break;
|
||
case REPR_ULONG:
|
||
for(j=0;j<Len;j++) yy[j]=(float)(*((unsigned int *)Data+j));
|
||
break;
|
||
}
|
||
}
|
||
void CMemRdWt ::SetVal(int no,int Len,void *Data,float *yy)
|
||
{
|
||
GetChannelInfo(no,&m_Channel);
|
||
int j;
|
||
switch(m_Channel.RepCode)
|
||
{
|
||
case REPR_INT:
|
||
for(j=0;j<Len;j++) *((int*)Data+j)=(int)yy[j];
|
||
break;
|
||
case REPR_SHORT:
|
||
for(j=0;j<Len;j++) *((short *)Data+j)=(short)yy[j];
|
||
break;
|
||
case REPR_LONG:
|
||
for(j=0;j<Len;j++) *((unsigned int *)Data+j)=(unsigned int)yy[j];
|
||
break;
|
||
case REPR_FLOAT:
|
||
for(j=0;j<Len;j++) {
|
||
*((float *)Data+j)=yy[j];
|
||
}
|
||
break;
|
||
case REPR_DOUBLE:
|
||
for(j=0;j<Len;j++) *((double *)Data+j)=(double)yy[j];
|
||
break;
|
||
case REPR_CHAR:
|
||
for(j=0;j<Len;j++) *((char *)Data+j)=(char)yy[j];
|
||
break;
|
||
case REPR_UCHAR:
|
||
for(j=0;j<Len;j++) *((unsigned char *)Data+j)=(unsigned char)yy[j];
|
||
break;
|
||
case REPR_USHORT:
|
||
for(j=0;j<Len;j++) *((unsigned short *)Data+j)=(unsigned short)yy[j];
|
||
break;
|
||
case REPR_UINT:
|
||
for(j=0;j<Len;j++) *((unsigned int *)Data+j)=(unsigned int)yy[j];
|
||
break;
|
||
case REPR_ULONG:
|
||
for(j=0;j<Len;j++) *((unsigned int *)Data+j)=(unsigned int)yy[j];
|
||
break;
|
||
}
|
||
}
|
||
|
||
void CMemRdWt ::In(float Depth,int No)
|
||
{
|
||
if(!HD) return;
|
||
if(!INC) return;
|
||
if(SlfError) {
|
||
strcpy(SlfError->ErrorStr,"");
|
||
SlfError->ErrorNo=0;
|
||
}
|
||
static float del=0;
|
||
int i,j;
|
||
int samples;
|
||
int Fs,En;
|
||
if(InData)
|
||
{
|
||
if(Depth!=-99999)
|
||
{
|
||
HD->Dep=Depth;
|
||
}
|
||
if(No>-1) {Fs=No;En=No+1;}
|
||
else {Fs=0;En=INC->Noi;}
|
||
// if(HD->Dep> HD->EndDep) return;
|
||
for(i=Fs;i<En;i++)
|
||
{
|
||
if(InCurveNo[i]>-1)
|
||
{
|
||
GetChannelInfo(InCurveNo[i],&m_Channel);
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
|
||
if(SubAttribute==TDT_OBJECT)
|
||
{
|
||
for(j=0;j<*(int *)InData[i];j++)
|
||
{
|
||
if(HD->Dep==*(float *)&InData[i][4+j*m_Channel.DimInfo[0].Size])
|
||
{
|
||
memmove((char *)&INP->yy[INP->InpPos[i]],&InData[i][4+j*m_Channel.DimInfo[0].Size],m_Channel.DimInfo[0].Size);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
samples=GetSamplePos(HD->Dep,i);
|
||
//if((int)(HD->StartDep/Rlev)*Rlev==HD->StartDep) samples++;
|
||
if(samples<0) samples=0;
|
||
if(HD->Dep>=InSdep[i]-0.5*HD->Rlev&&HD->Dep<=InEdep[i]+0.5*HD->Rlev)
|
||
{
|
||
GetVal(InCurveNo[i],
|
||
INP->InpLen[i],
|
||
&InData[i][samples*ComputerChannelLength(InCurveNo[i])],
|
||
&INP->yy[INP->InpPos[i]]
|
||
);
|
||
}
|
||
else
|
||
{
|
||
for(j=0;j<INP->InpLen[i];j++)
|
||
{
|
||
INP->yy[INP->InpPos[i]+j]=(float)0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(j=0;j<INP->InpLen[i];j++)
|
||
{
|
||
INP->yy[INP->InpPos[i]+j]=(float)-99999.0;
|
||
}
|
||
}
|
||
}
|
||
if(HD->Dep>=HD->Edep)
|
||
{
|
||
float edep=HD->Edep;
|
||
Const();
|
||
float depp=(int)((HD->Sdep-HD->StartDep)/Rlev+0.51)*Rlev+HD->StartDep;
|
||
if(depp>HD->Sdep&&fabs(HD->Dep-depp)<Rlev) {
|
||
HD->Dep=depp;
|
||
}
|
||
}
|
||
HD->Dep=(int)((HD->Dep+Rlev-HD->StartDep)/Rlev+0.51)*Rlev+HD->StartDep;
|
||
return;
|
||
}
|
||
char name[64],*pp;
|
||
int MaxObjectNumber=GetMaxObjectNumber();
|
||
InCurveNo=new int [MaxObjectNumber];
|
||
InData =new char*[MaxObjectNumber];
|
||
InSdep =new float[MaxObjectNumber];
|
||
InEdep =new float[MaxObjectNumber];
|
||
|
||
for(i=0;i<MaxObjectNumber;i++) InData[i]=NULL;
|
||
HD->StartDep=99999;
|
||
HD->EndDep=-99999;
|
||
INP->InpPos[0]=0;
|
||
pp=INC->Name;
|
||
for(i=0;i<INC->Noi;i++) {
|
||
j=0;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[j++]=*pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[j]='\0';
|
||
if(!AddInCurve(i,name));// return;
|
||
}
|
||
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(HD->StartDep==va1||HD->StartDep==va||HD->StartDep==va2) HD->StartDep=0;
|
||
if(HD->EndDep==va1||HD->EndDep==va1||HD->EndDep==va2) HD->EndDep=0;
|
||
float StartDep=HD->StartDep;
|
||
float EndDep=HD->EndDep;
|
||
HD->Rlev=Rlev;
|
||
if(HD->Rlev==va1||HD->Rlev==va||HD->Rlev==va2) {
|
||
HD->Rlev=0.125;
|
||
}
|
||
Const();
|
||
if(HD->StartDep==va1||HD->StartDep==va||HD->StartDep==va2) HD->StartDep=0;
|
||
if(HD->EndDep==va1||HD->EndDep==va1||HD->EndDep==va2) HD->EndDep=0;
|
||
if(HD->Sdep==va1||HD->Sdep==va||HD->Sdep==va2) HD->Sdep=0;
|
||
if(HD->Edep==va1||HD->Edep==va1||HD->Edep==va2) HD->Edep=0;
|
||
if(HD->Stdep==va1||HD->Stdep==va||HD->Stdep==va2) HD->Stdep=0;
|
||
if(HD->Endep==va1||HD->Endep==va1||HD->Endep==va2) HD->Endep=0;
|
||
|
||
if(HD->Sdep&&HD->Edep==0) {
|
||
HD->Edep=EndDep;
|
||
HD->EndDep=EndDep;
|
||
HD->Endep=EndDep;
|
||
}
|
||
HD->Depo=HD->Sdep;
|
||
HD->Dep=HD->Sdep;
|
||
if(HD->Endep>HD->EndDep)HD->Endep=HD->EndDep;
|
||
if(HD->Stdep<HD->StartDep)HD->Stdep=HD->StartDep;
|
||
In(HD->Dep,No);
|
||
HD->Dep=HD->Sdep;
|
||
if(HD->Endep==0&&HD->Sdep==0&&HD->Edep==0)
|
||
{
|
||
if(HD->EndDep)
|
||
{
|
||
HD->Stdep=HD->StartDep;
|
||
HD->Endep=HD->EndDep;
|
||
HD->Dep=HD->Stdep;
|
||
HD->Sdep=HD->Stdep;
|
||
HD->Edep=HD->Endep;
|
||
}
|
||
}
|
||
}
|
||
void CMemRdWt ::Innn(float Depth,int No)
|
||
{
|
||
static float del=0;
|
||
int i,j;
|
||
int samples;
|
||
int Fs,En;
|
||
if(InData)
|
||
{
|
||
if(Depth!=-99999)
|
||
{
|
||
HD->Dep=Depth;
|
||
}
|
||
if(No>-1) {Fs=No;En=No+1;}
|
||
else {Fs=0;En=INC->Noi;}
|
||
// if(HD->Dep> HD->EndDep) return;
|
||
for(i=Fs;i<En;i++)
|
||
{
|
||
if(InCurveNo[i]>-1)
|
||
{
|
||
GetChannelInfo(InCurveNo[i],&m_Channel);
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
|
||
if(SubAttribute==TDT_OBJECT)
|
||
{
|
||
for(j=0;j<*(int *)InData[i];j++)
|
||
{
|
||
if(HD->Dep==*(float *)&InData[i][4+j*m_Channel.DimInfo[0].Size])
|
||
{
|
||
memmove((char *)&INP->yy[INP->InpPos[i]],&InData[i][4+j*m_Channel.DimInfo[0].Size],m_Channel.DimInfo[0].Size);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if(HD->Dep>=InSdep[i]-0.5*HD->Rlev&&HD->Dep<=InEdep[i]+0.5*HD->Rlev)
|
||
{
|
||
int samples1=(int)((HD->Dep-InSdep[i])/m_Channel.DimInfo[0].Delta+0.5);
|
||
if(samples1<0) samples1=0;
|
||
float dep1=InSdep[i]+samples1*m_Channel.DimInfo[0].Delta;
|
||
float *val1=new float[INP->InpLen[i]+1];
|
||
GetVal(InCurveNo[i],
|
||
INP->InpLen[i],
|
||
&InData[i][samples1*ComputerChannelLength(InCurveNo[i])],
|
||
val1
|
||
);
|
||
float *val2=new float[INP->InpLen[i]+1];
|
||
int samples2=samples1;
|
||
if(HD->Dep>dep1){
|
||
if(HD->Dep<InEdep[i]) samples2=samples1+1;
|
||
}
|
||
//(int)((HD->Dep-InSdep[i])/m_Channel.DimInfo[0].Delta+0.5);
|
||
else if(HD->Dep<dep1) samples2=samples1-1;
|
||
if(samples2<0) samples2=0;
|
||
float dep2=InSdep[i]+samples2*m_Channel.DimInfo[0].Delta;
|
||
GetVal(InCurveNo[i],
|
||
INP->InpLen[i],
|
||
&InData[i][samples2*ComputerChannelLength(InCurveNo[i])],
|
||
val2
|
||
);
|
||
for (int j0=0;j0<INP->InpLen[i];j0++)
|
||
{
|
||
if(dep2-dep1==0) INP->yy[INP->InpPos[i]+j0]=val2[j0];
|
||
else INP->yy[INP->InpPos[i]+j0]=(val2[j0]-val1[j0])*(dep2-HD->Dep)/(dep2-dep1)+val1[j0];
|
||
}
|
||
delete val1;
|
||
delete val2;
|
||
}
|
||
else
|
||
{
|
||
for(j=0;j<INP->InpLen[i];j++)
|
||
{
|
||
INP->yy[INP->InpPos[i]+j]=(float)0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(j=0;j<INP->InpLen[i];j++)
|
||
{
|
||
INP->yy[INP->InpPos[i]+j]=(float)-99999.0;
|
||
}
|
||
}
|
||
}
|
||
if(HD->Dep>=HD->Edep)
|
||
{
|
||
float edep=HD->Edep;
|
||
Const();
|
||
float depp=(int)((HD->Sdep-HD->StartDep)/Rlev+0.51)*Rlev+HD->StartDep;
|
||
if(depp>HD->Sdep&&fabs(HD->Dep-depp)<Rlev) {
|
||
HD->Dep=depp;
|
||
}
|
||
}
|
||
HD->Dep=(int)((HD->Dep+Rlev-HD->StartDep)/Rlev+0.51)*Rlev+HD->StartDep;
|
||
return;
|
||
}
|
||
char name[64],*pp;
|
||
int MaxObjectNumber=GetMaxObjectNumber();
|
||
InCurveNo=new int [MaxObjectNumber];
|
||
InData =new char*[MaxObjectNumber];
|
||
InSdep =new float[MaxObjectNumber];
|
||
InEdep =new float[MaxObjectNumber];
|
||
|
||
for(i=0;i<MaxObjectNumber;i++) InData[i]=NULL;
|
||
HD->StartDep=99999;
|
||
HD->EndDep=-99999;
|
||
INP->InpPos[0]=0;
|
||
pp=INC->Name;
|
||
for(i=0;i<INC->Noi;i++) {
|
||
j=0;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[j++]=*pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[j]='\0';
|
||
if(!AddInCurve(i,name));// break;
|
||
}
|
||
float StartDep=HD->StartDep;
|
||
float EndDep=HD->EndDep;
|
||
HD->Sdep=HD->StartDep;
|
||
HD->Edep=HD->EndDep;
|
||
HD->Rlev=Rlev;
|
||
Const();
|
||
if(HD->Sdep&&HD->Edep==0) {
|
||
HD->Edep=EndDep;
|
||
HD->EndDep=EndDep;
|
||
HD->Endep=EndDep;
|
||
}
|
||
HD->Depo=HD->Sdep;
|
||
HD->Dep=HD->Sdep;
|
||
if(HD->Endep>HD->EndDep)HD->Endep=HD->EndDep;
|
||
if(HD->Stdep<HD->StartDep)HD->Stdep=HD->StartDep;
|
||
Innn(HD->Dep,No);
|
||
HD->Dep=HD->Sdep;
|
||
}
|
||
|
||
void CMemRdWt ::Inn(float Depth,int No)
|
||
{
|
||
static float del=0;
|
||
int i,j;
|
||
int samples;
|
||
int Fs,En;
|
||
if(InData)
|
||
{
|
||
if(Depth!=-99999)
|
||
{
|
||
HD->Dep=Depth;
|
||
}
|
||
if(No>-1) {Fs=No;En=No+1;}
|
||
else {Fs=0;En=INC->Noi;}
|
||
// if(HD->Dep> HD->EndDep) return;
|
||
for(i=Fs;i<En;i++)
|
||
{
|
||
if(InCurveNo[i]>-1)
|
||
{
|
||
GetChannelInfo(InCurveNo[i],&m_Channel);
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
|
||
if(SubAttribute==TDT_OBJECT)
|
||
{
|
||
for(j=0;j<*(int *)InData[i];j++)
|
||
{
|
||
if(HD->Dep==*(float *)&InData[i][4+j*m_Channel.DimInfo[0].Size])
|
||
{
|
||
memmove((char *)&INP->yy[INP->InpPos[i]],&InData[i][4+j*m_Channel.DimInfo[0].Size],m_Channel.DimInfo[0].Size);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
samples=GetSamplePos(HD->Dep,i);
|
||
if(samples<0) samples=0;
|
||
if(HD->Dep>=InSdep[i]-0.5*HD->Rlev&&HD->Dep<=InEdep[i]+0.5*HD->Rlev)
|
||
{
|
||
int aa=samples*ComputerChannelLength(InCurveNo[i]);
|
||
float bb=InData[i][samples*ComputerChannelLength(InCurveNo[i])];
|
||
GetVal(InCurveNo[i],
|
||
INP->InpLen[i],
|
||
&InData[i][samples*ComputerChannelLength(InCurveNo[i])],
|
||
&INP->yy[INP->InpPos[i]]
|
||
);
|
||
}
|
||
else
|
||
{
|
||
for(j=0;j<INP->InpLen[i];j++)
|
||
{
|
||
INP->yy[INP->InpPos[i]+j]=(float)0;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for(j=0;j<INP->InpLen[i];j++)
|
||
{
|
||
INP->yy[INP->InpPos[i]+j]=(float)-99999.0;
|
||
}
|
||
}
|
||
}
|
||
return;
|
||
}
|
||
char name[64],*pp;
|
||
int MaxObjectNumber=GetMaxObjectNumber();
|
||
InCurveNo=new int [MaxObjectNumber];
|
||
InData =new char*[MaxObjectNumber];
|
||
InSdep =new float[MaxObjectNumber];
|
||
InEdep =new float[MaxObjectNumber];
|
||
|
||
for(i=0;i<MaxObjectNumber;i++) InData[i]=NULL;
|
||
HD->StartDep=99999;
|
||
HD->EndDep=-99999;
|
||
INP->InpPos[0]=0;
|
||
pp=INC->Name;
|
||
for(i=0;i<INC->Noi;i++) {
|
||
j=0;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[j++]=*pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[j]='\0';
|
||
if(!AddInCurve(i,name));//return;
|
||
}
|
||
HD->Sdep=HD->StartDep;
|
||
HD->Edep=HD->EndDep;
|
||
HD->Rlev=Rlev;
|
||
Const();
|
||
HD->Depo=HD->Sdep;
|
||
HD->Dep=HD->Sdep;
|
||
if(HD->Endep>HD->EndDep)HD->Endep=HD->EndDep;
|
||
if(HD->Stdep<HD->StartDep)HD->Stdep=HD->StartDep;
|
||
Inn(HD->Dep,No);
|
||
HD->Dep=HD->Sdep;
|
||
}
|
||
|
||
void CMemRdWt ::CopyCurve( int SourceCurve,float SourceStartDepth,float SourceEndDepth,float DecDepth,int SourceCurveNo,int DecCurveNo)
|
||
{
|
||
int i=GetSamplePos(SourceStartDepth,SourceCurveNo);
|
||
if(i<0) return;
|
||
int j=GetSamplePos(SourceEndDepth,SourceCurveNo);
|
||
if(j<0) return;
|
||
CopyCurve(InData[SourceCurveNo],i,j,DecDepth,DecCurveNo);
|
||
}
|
||
void CMemRdWt ::CopyCurve(char *SourceData,int i,int j,float DecDepth,int DecCurveNo)
|
||
{
|
||
if(InCurveNo[DecCurveNo]>-1) {
|
||
Inflag=1;
|
||
int samples=GetSamplePos(DecDepth,DecCurveNo);
|
||
GetChannelInfo(InCurveNo[DecCurveNo],&m_Channel);
|
||
int k=int((InEdep[DecCurveNo]-InSdep[DecCurveNo])/m_Channel.DimInfo[0].Delta+0.5);
|
||
if(samples<0) {
|
||
InSdep[DecCurveNo]=DecDepth;
|
||
char *temp=new char[(-samples+k)*m_Channel.DimInfo[0].Size];
|
||
for(int jj=0;jj<int(-samples*m_Channel.DimInfo[0].Size);jj++) temp[jj]='\0';
|
||
memmove(&temp[-samples*m_Channel.DimInfo[0].Size],InData[DecCurveNo],k*m_Channel.DimInfo[0].Size);
|
||
delete InData[DecCurveNo];
|
||
InData[DecCurveNo]=temp;
|
||
samples=0;
|
||
}
|
||
if(samples+j-i+1>k) {
|
||
InEdep[DecCurveNo]=InSdep[DecCurveNo]+(samples+j-i+1)*m_Channel.DimInfo[0].Delta;
|
||
char *temp=new char [(samples+j-i+1)*m_Channel.DimInfo[0].Size];
|
||
memmove(temp,InData[DecCurveNo],samples*m_Channel.DimInfo[0].Size);
|
||
delete InData[DecCurveNo];
|
||
InData[DecCurveNo]=temp;
|
||
}
|
||
if(j-i<-1) return;
|
||
memmove(&InData[DecCurveNo][samples*m_Channel.DimInfo[0].Size],&SourceData[i*m_Channel.DimInfo[0].Size],(j-i+1)*m_Channel.DimInfo[0].Size);
|
||
}
|
||
}
|
||
void CMemRdWt ::CopyCurve(CMemRdWt &SourceData,float SourceStartDepth,float SourceEndDepth,float DecDepth,char* SourceCurve,char* DecCurve)
|
||
{
|
||
int SourceCurveNo=SourceData.OpenCurve(SourceCurve);
|
||
if(SourceCurveNo<0) return;
|
||
int DecCurveNo=OpenCurve(DecCurve);
|
||
if(DecCurveNo<0) return;
|
||
CopyCurve(SourceData,SourceStartDepth,SourceEndDepth,DecDepth,SourceCurveNo,DecCurveNo);
|
||
}
|
||
void CMemRdWt ::CopyCurve(CMemRdWt &SourceData,float SourceStartDepth,float SourceEndDepth,float DecDepth,int SourceCurveNo,int DecCurveNo)
|
||
{
|
||
// int i=SourceData.GetSamplePos(SourceStartDepth,SourceCurveNo);
|
||
// if(i<0) return;
|
||
// int j=SourceData.GetSamplePos(SourceEndDepth,SourceCurveNo);
|
||
// if(j<0) return;
|
||
if(!InCurveNo) return;
|
||
if(InCurveNo[DecCurveNo]>-1) {
|
||
Slf_CHANNEL sch;
|
||
SourceData.GetChannelInfo(SourceData.InCurveNo[SourceCurveNo],&sch);
|
||
GetChannelInfo(InCurveNo[DecCurveNo],&m_Channel);
|
||
if(m_Channel.NumOfDimension>2) return;
|
||
|
||
if(m_Channel.RepCode!=sch.RepCode||
|
||
m_Channel.NumOfDimension!=sch.NumOfDimension
|
||
) {
|
||
AfxMessageBox("数据类型不同,无法粘贴拼接!");
|
||
return;
|
||
}
|
||
int isneq=0;
|
||
if(
|
||
m_Channel.NumOfDimension>1&&
|
||
(m_Channel.DimInfo[1].Delta!=sch.DimInfo[1].Delta
|
||
||m_Channel.DimInfo[1].Size!=sch.DimInfo[1].Size
|
||
||m_Channel.DimInfo[1].StartVal!=sch.DimInfo[1].StartVal)
|
||
) {
|
||
// AfxMessageBox("数据类型不同,无法粘贴拼接!");
|
||
isneq=1;
|
||
}
|
||
Inflag=1;
|
||
int samples=GetSamplePos(DecDepth,DecCurveNo);
|
||
int samples1=(DecDepth+SourceEndDepth-SourceStartDepth-InSdep[DecCurveNo])/m_Channel.DimInfo[0].Delta+0.5;
|
||
int k=int((InEdep[DecCurveNo]-InSdep[DecCurveNo])/m_Channel.DimInfo[0].Delta+0.5);
|
||
if(samples<0) {
|
||
InSdep[DecCurveNo]=DecDepth;
|
||
char *temp=new char[(-samples+k)*m_Channel.DimInfo[0].Size];
|
||
for(int jj=0;jj<int(-samples*m_Channel.DimInfo[0].Size);jj++) temp[jj]='\0';
|
||
memmove(&temp[-samples*m_Channel.DimInfo[0].Size],InData[DecCurveNo],k*m_Channel.DimInfo[0].Size);
|
||
delete InData[DecCurveNo];
|
||
InData[DecCurveNo]=temp;
|
||
samples=0;
|
||
}
|
||
if(samples1>k) {
|
||
InEdep[DecCurveNo]=InSdep[DecCurveNo]+(samples1)*m_Channel.DimInfo[0].Delta;
|
||
char *temp=new char [(samples1)*m_Channel.DimInfo[0].Size];
|
||
memset(temp,0,(samples1)*m_Channel.DimInfo[0].Size);
|
||
memmove(temp,InData[DecCurveNo],samples*m_Channel.DimInfo[0].Size);
|
||
delete InData[DecCurveNo];
|
||
InData[DecCurveNo]=temp;
|
||
}
|
||
char*buf=new char[m_Channel.DimInfo[0].Size+1];
|
||
memset(buf,0,m_Channel.DimInfo[0].Size);
|
||
float yy=0;
|
||
samples1=(SourceEndDepth-SourceStartDepth)/m_Channel.DimInfo[0].Delta;
|
||
for(int pos1=0;pos1<samples1;pos1++)
|
||
{
|
||
float dep=DecDepth+pos1*m_Channel.DimInfo[0].Delta;
|
||
int pos=GetSamplePos(dep,DecCurveNo);
|
||
if(pos<0) continue;
|
||
float s_dep=dep+(SourceStartDepth-DecDepth);//+pos1*sch.DimInfo[0].Delta;
|
||
int i=SourceData.GetSamplePos(s_dep,SourceCurveNo);
|
||
if(i<0)
|
||
{
|
||
memset(buf,0,m_Channel.DimInfo[0].Size);
|
||
}
|
||
else if(s_dep>SourceData.InEdep[SourceCurveNo]) {
|
||
memset(buf,0,m_Channel.DimInfo[0].Size);
|
||
}
|
||
else if(isneq)
|
||
{
|
||
memset(buf,0,m_Channel.DimInfo[0].Size+1);
|
||
int est=sch.DimInfo[1].StartVal+sch.DimInfo[1].Samples*sch.DimInfo[1].Delta;
|
||
int mest=m_Channel.DimInfo[1].Samples*m_Channel.DimInfo[1].Delta;
|
||
int m=0,m0=0;
|
||
for(int n=m_Channel.DimInfo[1].StartVal;n<mest;n+=m_Channel.DimInfo[1].Delta) {
|
||
if(n>=sch.DimInfo[1].StartVal&&n<est)
|
||
{
|
||
m0=(n-sch.DimInfo[1].StartVal)/sch.DimInfo[1].Delta;
|
||
m=(n-m_Channel.DimInfo[1].StartVal)/m_Channel.DimInfo[1].Delta;
|
||
if(m0<0) m0=0;
|
||
if(m<0) m=0;
|
||
if(m0>=sch.DimInfo[1].Samples) m0=sch.DimInfo[1].Samples-1;
|
||
if(m>=m_Channel.DimInfo[1].Samples) m=m_Channel.DimInfo[1].Samples-1;
|
||
yy=GetData(sch.DimInfo[1].RepCode,&SourceData.InData[SourceCurveNo][i*sch.DimInfo[0].Size+m0*RepSize[sch.DimInfo[1].RepCode]],&yy);
|
||
SetData(m_Channel.DimInfo[1].RepCode,&buf[(m)*RepSize[m_Channel.DimInfo[1].RepCode]],&yy);
|
||
}
|
||
}
|
||
}
|
||
else memmove(buf,&SourceData.InData[SourceCurveNo][i*sch.DimInfo[0].Size],m_Channel.DimInfo[0].Size);
|
||
memmove(&InData[DecCurveNo][pos*m_Channel.DimInfo[0].Size],buf,m_Channel.DimInfo[0].Size);
|
||
}
|
||
delete []buf;
|
||
return;
|
||
}
|
||
}
|
||
void CMemRdWt ::InOut(float Depth,int No)
|
||
{
|
||
if(!HD) return;
|
||
static float del=0;
|
||
int i,samples,Fs,En;
|
||
Inflag=1;
|
||
SaveFlag=0;
|
||
if(InData) {
|
||
if(Depth!=-99999) HD->Depo=Depth;
|
||
if(No>-1) {Fs=No;En=No+1;}
|
||
else {Fs=0;En=INC->Noi;}
|
||
for(i=Fs;i<En;i++) {
|
||
if(InCurveNo[i]>-1) {
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==TDT_OBJECT) continue;
|
||
if(HD->Depo<InSdep[i]) {
|
||
int mSize=ComputerChannelLength(InCurveNo[i]);
|
||
samples=GetSamplePos(HD->Depo,i)*mSize;
|
||
if(samples<0) samples=0;
|
||
int Len=(GetSamplePos(InEdep[i],i)+1)*mSize;
|
||
if(Len<0) Len=0;
|
||
InSdep[i]=HD->Depo;
|
||
char *temp=new char[mSize-samples+Len];
|
||
memmove(&temp[mSize-samples],InData[i],Len);
|
||
for(int j=0;j<mSize-samples;j++) temp[j]='\0';
|
||
delete InData[i];
|
||
InData[i]=temp;
|
||
}
|
||
if(HD->Depo>InEdep[i]) {
|
||
int mSize=ComputerChannelLength(InCurveNo[i]);
|
||
samples=(GetSamplePos(HD->Depo,i)+1)*mSize;
|
||
if(samples<0) samples=0;
|
||
int Len=(GetSamplePos(InEdep[i],i)+1)*mSize;
|
||
if(Len<0) Len=0;
|
||
InEdep[i]=HD->Depo;
|
||
char *temp=new char[samples];
|
||
memmove(temp,InData[i],Len);
|
||
for(int j=Len;j<samples;j++) temp[j]='\0';
|
||
delete InData[i];
|
||
InData[i]=temp;
|
||
}
|
||
samples=GetSamplePos(HD->Depo,i);
|
||
if(samples<0) samples=0;
|
||
SetVal(InCurveNo[i],INP->InpLen[i],&InData[i][samples*ComputerChannelLength(InCurveNo[i])],&INP->yy[INP->InpPos[i]]);
|
||
}
|
||
}
|
||
if(del<0)
|
||
{
|
||
HD->Depo+=del;
|
||
}
|
||
float LastDepo=HD->Depo;
|
||
HD->Depo=int(HD->Depo/Rlev+1.5)*Rlev;
|
||
|
||
del=HD->Depo-LastDepo-Rlev;
|
||
if(del<0)
|
||
{
|
||
HD->Depo-=del;
|
||
}
|
||
return;
|
||
}
|
||
In(Depth,No);
|
||
return;
|
||
}
|
||
void CMemRdWt ::Out(float Depth,int No)
|
||
{
|
||
if(!OUTC) return;
|
||
if(!HD) return;
|
||
static float del=0;//c=0;
|
||
int i,j,Fs,En;
|
||
int samples;
|
||
if(Rlev==99999) Rlev=HD->Rlev;
|
||
if(Rlev<=0) Rlev=0.125;
|
||
if(Depth!=-99999) HD->Depo=Depth;
|
||
else {
|
||
if(HD->Dep==HD->Sdep&&fabs(HD->Depo-HD->Sdep)<Rlev) {
|
||
HD->Depo=HD->Sdep;
|
||
}
|
||
}
|
||
if(HD->Depo==99999.0) return;
|
||
SaveFlag=0;
|
||
if(OutData) {
|
||
if(No>-1) {Fs=No;En=No+1;}
|
||
else {Fs=0;En=OUTC->Noo;}
|
||
for(i=Fs;i<En;i++)
|
||
{
|
||
if(OutCurveNo[i]<0) continue;
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(OutCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==TDT_OBJECT) continue;
|
||
if(HD->Depo<OutSdep[i])
|
||
{
|
||
int mSize=ComputerChannelLength(OutCurveNo[i]);
|
||
samples=GetSamplePos(HD->Depo,i,1)*mSize;
|
||
int Len=(GetSamplePos(OutEdep[i],i,1)+1)*mSize;
|
||
if(Len<0) Len=0;
|
||
OutSdep[i]=HD->Depo;
|
||
char *temp=new char[-samples+Len+1];
|
||
memmove(&temp[-samples],OutData[i],Len);
|
||
memset(temp,0,-samples);
|
||
delete OutData[i];
|
||
OutData[i]=temp;
|
||
}
|
||
if(HD->Depo>OutEdep[i])
|
||
{
|
||
int mSize=ComputerChannelLength(OutCurveNo[i]);
|
||
samples=GetSamplePos(HD->Depo, i,1);
|
||
if(samples<0) samples=0;
|
||
samples++;
|
||
samples*=mSize;
|
||
int Len=GetSamplePos(OutEdep[i],i,1);
|
||
if(Len<0) Len=0;
|
||
Len++;
|
||
Len*=mSize;
|
||
if(Len==samples) samples+=mSize;
|
||
OutEdep[i]=HD->Depo;
|
||
char *temp=new char[samples+1*mSize];
|
||
memmove(temp,OutData[i],Len);
|
||
memset(&temp[Len],0,samples-Len);
|
||
delete OutData[i];
|
||
OutData[i]=temp;
|
||
}
|
||
if(HD->Depo==OutEdep[i])
|
||
{
|
||
GetChannelInfo(OutCurveNo[i],&m_Channel);
|
||
}
|
||
samples=GetSamplePos(HD->Depo,i,1);
|
||
if(samples<0) samples=0;
|
||
int ppp=samples*ComputerChannelLength(OutCurveNo[i]);
|
||
SetVal(OutCurveNo[i],OUTP->OutLen[i],&OutData[i][ppp],&OUTP->yy[OUTP->OutPos[i]]);
|
||
}
|
||
//if(del<0)
|
||
//{
|
||
// HD->Depo+=del;
|
||
//}
|
||
float LastDepo=HD->Depo;
|
||
if(HD->Sdep!=99999) {
|
||
HD->Depo=(int)((HD->Depo+Rlev-HD->StartDep)/Rlev+0.51)*Rlev+HD->StartDep;
|
||
}
|
||
else HD->Depo+=Rlev;
|
||
if(HD->Depo<=LastDepo) {
|
||
HD->Depo+=Rlev;
|
||
}
|
||
return;
|
||
}
|
||
Slf_CURVE myCurve;
|
||
memset(&myCurve,0,sizeof(Slf_CURVE));
|
||
int MaxObjectNumber=GetMaxObjectNumber();
|
||
OutData= new char *[MaxObjectNumber];
|
||
for(i=0;i<MaxObjectNumber;i++) OutData[i]=NULL;
|
||
OutCurveNo=new int [MaxObjectNumber];
|
||
OutSdep = new float [MaxObjectNumber];
|
||
OutEdep = new float[MaxObjectNumber];
|
||
char name[64],*pp;
|
||
OUTP->OutPos[0]=0;
|
||
pp=OUTC->Name;
|
||
if(!InData) {
|
||
HD->StartDep=RunSdep;
|
||
HD->EndDep=RunEdep;
|
||
HD->Rlev=Rlev;
|
||
HD->Sdep=HD->StartDep;
|
||
HD->Edep=HD->EndDep;
|
||
}
|
||
if(OUTC)for(i=0;i<OUTC->Noo;i++) {
|
||
j=0;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[j++]=*pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[j]='\0';
|
||
if(strlen(name)==0) {
|
||
AfxMessageBox("输出曲线为空!");
|
||
}
|
||
memmove(myCurve.Name,name,sizeof(myCurve.Name));
|
||
strcpy(myCurve.AliasName,"");
|
||
strcpy(myCurve.Unit,"");
|
||
strcpy(myCurve.AliasUnit,"");
|
||
myCurve.RepCode=4;
|
||
myCurve.CodeLen=4;
|
||
myCurve.MinValue =99999.0;
|
||
myCurve.MaxValue =-99999.0;
|
||
myCurve.StartDepth=HD->StartDep;
|
||
myCurve.EndDepth =HD->EndDep;
|
||
if(HD->StartDep>HD->EndDep&&Rlev>0)
|
||
{
|
||
HD->EndDep=HD->StartDep;
|
||
myCurve.EndDepth=HD->StartDep;
|
||
}
|
||
myCurve.DepLevel =Rlev;
|
||
myCurve.DefVal=-9999;
|
||
strcpy(myCurve.DepthUnit,"m");
|
||
AddOutCurve(i,&myCurve);
|
||
}
|
||
HD->Depo=HD->Sdep;
|
||
}
|
||
void CMemRdWt ::Outt(float Depth,int No)
|
||
{
|
||
static float del=0;//c=0;
|
||
int i,j,Fs,En;
|
||
int samples;
|
||
if(Depth!=-99999) HD->Depo=Depth;
|
||
SaveFlag=0;
|
||
if(OutData) {
|
||
if(No>-1) {Fs=No;En=No+1;}
|
||
else {Fs=0;En=OUTC->Noo;}
|
||
for(i=Fs;i<En;i++)
|
||
{
|
||
if(OutCurveNo[i]<0) continue;
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(OutCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==TDT_OBJECT) continue;
|
||
if(HD->Depo<OutSdep[i])
|
||
{
|
||
int mSize=ComputerChannelLength(OutCurveNo[i]);
|
||
samples=GetSamplePos(HD->Depo,i,1)*mSize;
|
||
if(samples<0) samples=0;
|
||
int Len=(GetSamplePos(OutEdep[i],i,1)+1)*mSize;
|
||
if(Len<0) Len=0;
|
||
OutSdep[i]=HD->Depo;
|
||
char *temp=new char[-samples+Len+1];
|
||
memmove(&temp[-samples],OutData[i],Len);
|
||
for(int j=0;j<-samples;j++) temp[j]='\0';
|
||
delete OutData[i];
|
||
OutData[i]=temp;
|
||
}
|
||
if(HD->Depo>OutEdep[i])
|
||
{
|
||
int mSize=ComputerChannelLength(OutCurveNo[i]);
|
||
samples=(GetSamplePos(HD->Depo, i,1))*mSize;
|
||
if(samples<0) samples=0;
|
||
int Len=(GetSamplePos(OutEdep[i],i,1))*mSize;
|
||
if(Len<0) Len=0;
|
||
if(Len==samples) samples+=mSize;
|
||
OutEdep[i]=HD->Depo;
|
||
char *temp=new char[samples+1*mSize+1];
|
||
memmove(temp,OutData[i],Len);
|
||
for(int j=Len;j<samples;j++) temp[j]='\0';
|
||
delete OutData[i];
|
||
OutData[i]=temp;
|
||
}
|
||
if(HD->Depo==OutEdep[i])
|
||
{
|
||
GetChannelInfo(OutCurveNo[i],&m_Channel);
|
||
}
|
||
samples=GetSamplePos(HD->Depo,i,1);
|
||
if(samples<0) samples=0;
|
||
int ppp=samples*ComputerChannelLength(OutCurveNo[i]);
|
||
SetVal(OutCurveNo[i],OUTP->OutLen[i],&OutData[i][ppp],&OUTP->yy[OUTP->OutPos[i]]);
|
||
}
|
||
return;
|
||
}
|
||
Slf_CURVE myCurve;
|
||
int MaxObjectNumber=GetMaxObjectNumber();
|
||
OutData= new char *[MaxObjectNumber];
|
||
for(i=0;i<MaxObjectNumber;i++) OutData[i]=NULL;
|
||
OutCurveNo=new int [MaxObjectNumber];
|
||
OutSdep = new float [MaxObjectNumber];
|
||
OutEdep = new float[MaxObjectNumber];
|
||
char name[64],*pp;
|
||
OUTP->OutPos[0]=0;
|
||
pp=OUTC->Name;
|
||
if(!InData) {
|
||
HD->StartDep=RunSdep;
|
||
HD->EndDep=RunEdep;
|
||
HD->Rlev=Rlev;
|
||
HD->Sdep=HD->StartDep;
|
||
HD->Edep=HD->EndDep;
|
||
}
|
||
for(i=0;i<OUTC->Noo;i++) {
|
||
j=0;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') name[j++]=*pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
name[j]='\0';
|
||
|
||
memmove(myCurve.Name,name,sizeof(myCurve.Name));
|
||
strcpy(myCurve.AliasName,"");
|
||
strcpy(myCurve.Unit,"");
|
||
strcpy(myCurve.AliasUnit,"");
|
||
myCurve.RepCode=4;
|
||
myCurve.CodeLen=4;
|
||
myCurve.MinValue =99999.0;
|
||
myCurve.MaxValue =-99999.0;
|
||
myCurve.StartDepth=HD->StartDep;
|
||
myCurve.EndDepth =HD->EndDep;
|
||
myCurve.DepLevel =Rlev;
|
||
strcpy(myCurve.DepthUnit,"m");
|
||
AddOutCurve(i,&myCurve);
|
||
}
|
||
HD->Depo=HD->Sdep;
|
||
}
|
||
int CMemRdWt::GetSamplePos(float depth,int no,int inout)
|
||
{
|
||
int samples=0;
|
||
if(inout==1) {
|
||
if(!OutCurveNo) return -1;
|
||
if(OutCurveNo[no]<-1) return -1;
|
||
GetChannelInfo(OutCurveNo[no],&m_Channel);
|
||
samples=Slf_Int(depth,OutSdep[no],m_Channel.DimInfo[0].Delta);//(depth-OutSdep[no])/m_Channel.DimInfo[0].Delta+0.5;
|
||
}
|
||
else {
|
||
if(!InCurveNo) return -1;
|
||
if(InCurveNo[no]<0) return -1;
|
||
GetChannelInfo(InCurveNo[no],&m_Channel);
|
||
samples=Slf_Int(depth,InSdep[no],m_Channel.DimInfo[0].Delta);//(depth-InSdep[no])/m_Channel.DimInfo[0].Delta+0.5;
|
||
}
|
||
return samples;
|
||
}
|
||
void CMemRdWt::DeleteInCurve(int i)
|
||
{
|
||
char *p,*pp;
|
||
int j;
|
||
if(InData) {
|
||
if(InCurveNo[i]>-1) {
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==CURVE_OBJECT) {
|
||
CloseCurve(InCurveNo[i]);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
CloseWave(InCurveNo[i]);
|
||
}
|
||
delete InData[i];
|
||
InData[i]=NULL;
|
||
}
|
||
}
|
||
for(j=i;j<INC->Noi;j++) {
|
||
InData[j]=InData[j+1];
|
||
InCurveNo[j]=InCurveNo[j+1];
|
||
InSdep[j]=InSdep[j+1];
|
||
InEdep[j]=InEdep[j+1];
|
||
}
|
||
pp=INC->Name;
|
||
for(j=0;j<i;j++) {
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
}
|
||
p=pp;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t')pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
strcpy(p,pp);
|
||
INC->Noi--;
|
||
InData[INC->Noi] =NULL;
|
||
InCurveNo[INC->Noi]=-1;
|
||
}
|
||
void CMemRdWt::DeleteOutCurve(int i)
|
||
{
|
||
int j;
|
||
char *p,*pp;
|
||
if(OutData) {
|
||
if(OutCurveNo[i]>-1) {
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(OutCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==CURVE_OBJECT) {
|
||
CloseCurve(OutCurveNo[i]);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
CloseWave(OutCurveNo[i]);
|
||
}
|
||
delete OutData[i];
|
||
OutData[i]=NULL;
|
||
}
|
||
}
|
||
for(j=i;j<OUTC->Noo;j++) {
|
||
OutData[j]=OutData[j+1];
|
||
OutCurveNo[j]=OutCurveNo[j+1];
|
||
OutSdep[j]=OutSdep[j+1];
|
||
OutEdep[j]=OutEdep[j+1];
|
||
}
|
||
pp=OUTC->Name;
|
||
for(j=0;j<i;j++) {
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t')pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
}
|
||
p=pp;
|
||
while(*pp!=' '&&*pp!=','&&*pp!='\0'&&*pp!='\t')pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
if (*pp==',') pp++;
|
||
while(*pp==' '||*pp=='\t') pp++;
|
||
strcpy(p,pp);
|
||
OUTC->Noo--;
|
||
OutData[OUTC->Noo] =NULL;
|
||
OutCurveNo[OUTC->Noo]=-1;
|
||
}
|
||
void CMemRdWt::CloseData()
|
||
{
|
||
if(InData&&InData!=(char **)0xcccccccc) {
|
||
for(int i=0;i<INC->Noi;i++) {
|
||
if(InCurveNo[i]>-1) {
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==CURVE_OBJECT) {
|
||
CloseCurve(InCurveNo[i]);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
CloseWave(InCurveNo[i]);
|
||
}
|
||
delete []InData[i];
|
||
InData[i]=NULL;
|
||
}
|
||
}
|
||
delete []InData;
|
||
delete []InCurveNo;
|
||
delete []InSdep;
|
||
delete []InEdep;
|
||
InData=NULL;
|
||
}
|
||
if(OutData&&OutData!=(char **)0xcccccccc)
|
||
{
|
||
for(int i=0;i<OUTC->Noo;i++)
|
||
{
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(OutCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==CURVE_OBJECT)
|
||
{
|
||
CloseCurve(OutCurveNo[i]);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
CloseWave(OutCurveNo[i]);
|
||
}
|
||
delete []OutData[i];
|
||
OutData[i]=NULL;
|
||
}
|
||
delete []OutData;
|
||
delete []OutCurveNo;
|
||
delete []OutSdep;
|
||
delete []OutEdep;
|
||
OutData=NULL;
|
||
}
|
||
if(ConstBuffer&&ConstBuffer!=(char *)0xcccccccc)
|
||
{
|
||
delete ConstBuffer;
|
||
}
|
||
ConstBuffer=NULL;
|
||
Initialize();
|
||
}
|
||
void CMemRdWt::Close()
|
||
{
|
||
if(!SaveFlag)Save();
|
||
CloseData();
|
||
CLogIO::Close();
|
||
}
|
||
void CMemRdWt::Save()
|
||
{
|
||
SaveFlag=1;
|
||
if(OutData&&!Inflag) {
|
||
DWORD samples;
|
||
for(int i=0;i<OUTC->Noo;i++) {
|
||
samples=GetSamplePos(OutEdep[i],i,1)+1;
|
||
if(samples<0) samples=0;
|
||
if(OutCurveNo[i]<0) continue;
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(OutCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==TDT_OBJECT) continue;
|
||
if(samples>0) {
|
||
if(SubAttribute==CURVE_OBJECT) {
|
||
WriteCurve(OutCurveNo[i],OutSdep[i],samples,(void *)OutData[i]);
|
||
}
|
||
else {
|
||
WriteWave(OutCurveNo[i],OutSdep[i],samples,(void *)OutData[i]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if(InData&&Inflag) {
|
||
DWORD samples;
|
||
for(int i=0;i<INC->Noi;i++) {
|
||
if(InCurveNo[i]>-1) {
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==TDT_OBJECT) continue;
|
||
samples=GetSamplePos(InEdep[i],i)+1;
|
||
if(samples>0) {
|
||
if(SubAttribute==CURVE_OBJECT) {
|
||
WriteCurve(InCurveNo[i],InSdep[i],samples,(void *)InData[i]);
|
||
}
|
||
else {
|
||
WriteWave(InCurveNo[i],InSdep[i],samples,(void *)InData[i]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
void CMemRdWt::OutSave(int i)
|
||
{
|
||
if(OutData&&!Inflag) {
|
||
DWORD samples;
|
||
if(OutCurveNo[i]<0) return;
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(OutCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==TDT_OBJECT) return;
|
||
samples=GetSamplePos(OutEdep[i],i,1)+1;
|
||
if(samples>0) {
|
||
if(SubAttribute==CURVE_OBJECT) {
|
||
WriteCurve(OutCurveNo[i],OutSdep[i],samples,(void *)OutData[i]);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
WriteWave(OutCurveNo[i],OutSdep[i],samples,(void *)OutData[i]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
void CMemRdWt::InSave(int i)
|
||
{
|
||
if(InData&&Inflag) {
|
||
DWORD samples;
|
||
if(InCurveNo[i]>-1) {
|
||
short Attribute,SubAttribute;
|
||
GetObjectAttribute(InCurveNo[i],&Attribute,&SubAttribute);
|
||
if(SubAttribute==TDT_OBJECT) return;
|
||
samples=GetSamplePos(InEdep[i],i)+1;
|
||
if(samples>0) {
|
||
if(SubAttribute==CURVE_OBJECT) {
|
||
WriteCurve(InCurveNo[i],InSdep[i],samples,(void *)InData[i]);
|
||
}
|
||
else if(SubAttribute==WAVE_OBJECT) {
|
||
WriteWave(InCurveNo[i],InSdep[i],samples,(void *)InData[i]);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
CString CMemRdWt::GetWellName()
|
||
{
|
||
CString name;
|
||
name.Format("%s",m_LogFileName);
|
||
return name;
|
||
}
|
||
void CMemRdWt::GetWellName(char *Name)
|
||
{
|
||
strcpy(Name,m_LogFileName);
|
||
return;
|
||
}
|