logplus/Slfio/src/memrdwt.cpp

3643 lines
89 KiB
C++
Raw Normal View History

2025-10-29 17:23:30 +08:00
#include "MemRdWt.h"
#include "math.h"
#include <QString>
#include "commonutils.h"
2025-10-29 17:23:30 +08:00
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();
2025-10-29 17:23:30 +08:00
}
bool CMemRdWt::getPrjAllSlf(QString prjname, QVector<QString> &vecSlfList, QVector<QString> &vecWellList)
{
return CCommonUtils::getAllSlf(prjname, vecSlfList, vecWellList);
}
2025-10-29 17:23:30 +08:00
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;
}