logplus/Slfio/src/memrdwt.cpp
2025-10-29 17:23:30 +08:00

3635 lines
89 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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

#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;
}