#pragma warning( push ,0) #include #include #include "ObjWelllogWavefile.h" #include "ObjWell.h" #pragma warning( pop ) BEGIN_OSGDATAMODEL_NAMESPACE; CObjWellLogWavefile::CObjWellLogWavefile() { m_ArrayNum=1; isRun=false; // SetIconName("icon/Logs.png"); isCorrDepth=0; isCorrA1ZM=0; isLoad=false; } CObjWellLogWavefile::~CObjWellLogWavefile() { } QUuid CObjWellLogWavefile::GetTypeID()const { return GetClassID_WellLogWavefile(); } void CObjWellLogWavefile::SetData(int i,int j,float *buffer) { int pos=i*waveinfo.TimeSamples+j; CObjWellLog::SetData(pos,buffer); } double CObjWellLogWavefile::GetData(int i,int j,char *buffer) { float yy=-9999; if(m_vProperty.size()>i) { int pos=(int)(i*waveinfo.TimeSamples+j); yy=CObjWellLog::GetData(acurveinfo.RepCode,(char *)&((char *)m_vProperty.m_vProperty)[pos*acurveinfo.CodeLen],acurveinfo.CodeLen); } return yy; } void CObjWellLogWavefile::SetData(float dep,int j,float *buffer) { if(dep>=waveinfo.StartDepth&&dep<=waveinfo.EndDepth) { int i=(dep-waveinfo.StartDepth)/waveinfo.DepLevel+0.5; SetData(i,j,buffer); } } double CObjWellLogWavefile::GetData(float dep,int j,char *buffer) { if(dep>=waveinfo.StartDepth&&dep<=waveinfo.EndDepth) { int i=(dep-waveinfo.StartDepth)/waveinfo.DepLevel+0.5; double yy=GetData(i,j,buffer); return yy; } else { if(waveinfo.RepCode==REPR_STRING&&buffer) buffer[0]=0; return -9999; } } QString CObjWellLogWavefile::GetDescription() { if(!isRun) { CLogIO *logio=new CLogIO(); QString slfFileName=GetSlfFileName(); if(slfFileName.isEmpty()) return ""; if(!logio->Open(slfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; return ""; } QString name=GetName(); int i=logio->OpenWave(name.toStdString().c_str()); if(i<0) { delete logio; return ""; } logio->GetWaveInfo(i,&waveinfo); logio->CloseWave(i); delete logio; } if(waveinfo.RepCode<1) waveinfo.RepCode=1; if(waveinfo.RepCode>12) waveinfo.RepCode=12; QString result=""; char buf[1000]; sprintf(buf,"对象类型:波列\n\ 曲线名:%s\n\ 曲线别名:%s\n\ 曲线单位:%s\n\ 单位别名:%s\n\ 数据类型:%s\n\ 字节长度:%d\n\ 最小值:%g\n\ 最大值:%g\n\ 起始深度:%g\n\ 终止深度:%g\n\ 采样间隔:%g\n\ 深度单位:%s\n\ 缺省值:%g\n\ 阵列数:%d\n\ 起始时间:%g\n\ 时间采样间隔:%g\n\ 阵列采样样本点数:%d\n\ 时间单位:%s\n\ 阵列名称:%s\n", waveinfo.Name, waveinfo.AliasName, waveinfo.Unit,//曲线单位%s, waveinfo.AliasUnit,//单位别名%s, Rep_STR[waveinfo.RepCode-1],//, waveinfo.CodeLen,//, waveinfo.MinValue,//最小值%g, waveinfo.MaxValue,//最大值%g, waveinfo.StartDepth,//起始深度%g, waveinfo.EndDepth,//终止深度%g, waveinfo.DepLevel,////采样间隔%g, waveinfo.DepthUnit,//深度单位%g, waveinfo.DefVal,//缺省值%g, waveinfo.ArrayNum,//阵列数%d, waveinfo.StartTime,//起始时间%g, waveinfo.TimeLevel,//时间间隔%g, waveinfo.TimeSamples,//阵列采样样本点数%d, waveinfo.TimeUnit,//时间单位%s, waveinfo.TimeName);//阵列名称%s result.append(buf); return result; } bool CObjWellLogWavefile::SaveToSLF() { if(m_ArrayNum<2) { // bool m=HasModified(); // if(!m) return false; int samplenum=m_vProperty.size(); if(!m_vMD.size()) return false; if(samplenum<=0) return false; if(m_SlfFileName=="") return true; CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; //AppendConsole(pai::log::PAI_ERROR,"SLF文件打开失败,请检查!"); return false; } int curveindex=logio->OpenWave(GetName().toStdString().c_str()); if(curveindex<0) { delete logio; return false; } if(samplenum)logio->WriteWave(curveindex,m_vMD.m_vProperty[0],samplenum,(void*)(&m_vProperty.m_vProperty[0])); delete logio; // //qDebug()< BSplineFit(QVector discretePoints, bool closed, double stride = 0.01) { QVector fittingPoints; for (int i = 0; i < (closed ? discretePoints.size() : discretePoints.size() - 1); i++) { QPointF xy[4]; xy[0] = (discretePoints[i] + 4 * discretePoints[(i + 1) % discretePoints.size()] + discretePoints[(i + 2) % discretePoints.size()]) / 6; xy[1] = -(discretePoints[i] - discretePoints[(i + 2) % discretePoints.size()]) / 2; xy[2] = (discretePoints[i] - 2 * discretePoints[(i + 1) % discretePoints.size()] + discretePoints[(i + 2) % discretePoints.size()]) / 2; xy[3] = -(discretePoints[i] - 3 * discretePoints[(i + 1) % discretePoints.size()] + 3 * discretePoints[(i + 2) % discretePoints.size()] - discretePoints[(i + 3) % discretePoints.size()]) / 6; for (double t = 0; t <= 1; t += stride) { QPointF totalPoints = QPointF(0, 0); for (int j = 0; j < 4; j++) { totalPoints += xy[j] * pow(t, j); } fittingPoints.push_back(totalPoints); } } return fittingPoints; } //从slf加载数据 bool CObjWellLogWavefile::LoadFromSLF() { struct IN_OUT_MESSAGE { int nPad;//极板数// int nPadZ;//极板子极板数据 int nSample;//每个极板元素(电扣)个数// int Width; int shift0; char Name[40][64]; char A1PZ[64]; }; struct IN_OUT_MESSAGE msa[7]={ //STAR 1 { 6,1,24,360,0, {"C_P1BTN","C_P2BTN","C_P3BTN","C_P4BTN","C_P5BTN","C_P6BTN"}, "P1AZ_STAR" }, //CBIL 2 { 2,1,250,360,0, {"C_BHTA","C_BHTT"}, "P1AZ_CBIL" }, //EMI 3 { 6,1,25,360,0, {"C_PAD1","C_PAD2","C_PAD3","C_PAD4","C_PAD5","C_PAD6"}, "P1AZ_EMI" }, //XRMI 4 { 6,1,25,360,0, {"C_XPAD1","C_XPAD2","C_XPAD3","C_XPAD4","C_XPAD5","C_XPAD6"}, "P1AZ_XRMI" }, //FMI 5 { 16,4,12,360,12, {"C_FCA1","C_FCA2","C_FCA3","C_FCA4","C_FCB1","C_FCB2","C_FCB3","C_FCB4","C_FCC1","C_FCC2","C_FCC3","C_FCC4","C_FCD1","C_FCD2","C_FCD3","C_FCD4"}, "C_P1AZ" }, //FMS 6 { 4,1,16,360,12, {"C_PAD1","C_PAD2","C_PAD3","C_PAD4"}, "P1AZ_FMS" }, //EIWD KSZ 7 { 1,1,128,360,0, {"C_RTW"} } }; if(m_SlfFileName=="") { isLoad=false; if(!key.isEmpty()&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=""; } return true; } if(isLoad) return true; char tem[100]; QString name=GetName(); strcpy(tem,name.toStdString().c_str()); int fir=-1; struct IN_OUT_MESSAGE *pMsa=NULL; if(m_ArrayNum>1) { for(int i=0;i<7;i++) { for(int j=0;j=0) break; } if(fir<0) { QStringList msa1=GetSimilarCurves(name); if(msa1.size()>7) { pMsa=new struct IN_OUT_MESSAGE; fir=msa1[0].toInt();//image type pMsa->nPad=msa1[1].toInt();//极板数// pMsa->nPadZ=msa1[2].toInt();//极板子极板数据 pMsa->nSample=msa1[3].toInt();//每个极板元素(电扣)个数// pMsa->Width=msa1[4].toInt(); pMsa->shift0=msa1[5].toInt(); for(int i=0;inPad;i++) { if(msa1.size()>6+i) strcpy(pMsa->Name[i],msa1[6+i].toStdString().c_str()); } if(msa1.size()>6+pMsa->nPad)strcpy(pMsa->A1PZ,msa1[6+pMsa->nPad].toStdString().c_str()); } } } if(fir<1) m_ArrayNum=1; name=m_SlfFileName+GetName(); if(m_ArrayNum>1) { name+="Array"; } if(!key.isEmpty()&&name!=key&&IsMappingMem(key.toStdString().c_str())) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; key=""; } if(IsMappingMem(name.toStdString().c_str())) { // GetObjectEvent().OnDeAttchData(m_SlfFileName,GetName()); } m_SharedMemory=NULL; m_Handle=NULL; name=GetName(); CLogIO * logio=new CLogIO(); if(!logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { delete logio; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; return false; } int curveindex=logio->OpenWave(name.toStdString().c_str()); if(curveindex<0) { m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; delete logio; return false; } m_ObjectType=WAVE_OBJECT; logio->GetWaveInfo(curveindex,&waveinfo); Slf_WAVE BWAVEINFO=waveinfo; if(m_ArrayNum>1) { if(waveinfo.RepCode==REPR_CHAR) waveinfo.RepCode=REPR_UCHAR; } acurveinfo.RepCode=waveinfo.RepCode; acurveinfo.CodeLen=waveinfo.CodeLen; acurveinfo.DepLevel=waveinfo.DepLevel; acurveinfo.StartDepth=waveinfo.StartDepth; acurveinfo.EndDepth=waveinfo.EndDepth; isRun=true; int samplenum=(waveinfo.EndDepth-waveinfo.StartDepth)/waveinfo.DepLevel+1.5; name=m_SlfFileName+GetName(); if(m_ArrayNum>1) { name+="Array"; } key=name; int nbpp=waveinfo.SamplePoint; int mlen=0; int myWidth=0; int chlen=0; int nPadZ=0; int myWidth1=waveinfo.SamplePoint; int shift0=0; if(m_ArrayNum>1) { shift0=pMsa->shift0; nPadZ=pMsa->nPadZ; myWidth=pMsa->Width; nbpp=pMsa->nSample; m_ArrayNum=pMsa->nPad; mlen=myWidth-m_ArrayNum*nbpp;//总盲区宽度 mlen/=m_ArrayNum; if(mlen%2!=0) mlen+=1; if(nPadZ<4) chlen=mlen/8; else chlen=mlen/4; if(chlen%2!=0) chlen+=1; if(chlen==0) chlen=2; // mlen=mlen-chlen; mlen=m_ArrayNum*chlen/nPadZ; if(mlen%2!=0) mlen++; if(mlen>20) mlen=20; if(chlen<4) chlen=4; // chlen=(myWidth-(mlen*m_ArrayNum+nbpp*m_ArrayNum))/nPadZ; int klen=pMsa->nPadZ*waveinfo.SamplePoint+mlen+pMsa->nPadZ*chlen; myWidth1=klen*pMsa->nPad/pMsa->nPadZ; } else myWidth=waveinfo.SamplePoint; int nlen=waveinfo.CodeLen*waveinfo.SamplePoint; int reclen=waveinfo.CodeLen*myWidth*waveinfo.ArrayNum; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+reclen*(samplenum+1),key.toStdString().c_str()); if(!m_Handle||!m_SharedMemory) { CloseView(m_Handle,m_SharedMemory); m_SharedMemory=NULL; m_Handle=NULL; m_vMD.SetSize(0); m_vMD.m_vProperty=0; m_vProperty.SetSize(0); m_vProperty.m_vProperty=NULL; return false; } float *buffer=(float*)m_SharedMemory; buffer[0]=waveinfo.StartDepth; buffer[1]=waveinfo.EndDepth; buffer[2]=waveinfo.DepLevel; ((int *)buffer)[3]=samplenum; char *pchar=(char *)&buffer[4]; double laa=(double)reclen*(double)samplenum/waveinfo.CodeLen; int num=reclen*samplenum/waveinfo.CodeLen; float defval=-9999; if(waveinfo.RepCode==REPR_CHAR||waveinfo.RepCode==REPR_UCHAR) defval=0; else if(waveinfo.RepCode==REPR_SHORT||waveinfo.RepCode==REPR_USHORT) defval=0xffff; for(int i=0;i1) //多极板曲线合并为一个图像数据 { int klen=pMsa->nPadZ*waveinfo.SamplePoint+mlen+pMsa->nPadZ*chlen; myWidth1=klen*pMsa->nPad/pMsa->nPadZ; int xl=0; int xladd=0; for(int n=0;nOpenWave(pMsa->Name[n]); Slf_WAVE tWaveinfo; char *bu=NULL; if(curveindex>-1) { logio->GetWaveInfo(curveindex,&tWaveinfo); bu=new char[samplenum*tWaveinfo.ArrayNum*tWaveinfo.SamplePoint*tWaveinfo.CodeLen]; logio->ReadWave(curveindex,waveinfo.StartDepth,samplenum,(void *)bu); if(tWaveinfo.CodeLen!=waveinfo.CodeLen) {//数据类型不同,转换一致 char *bu1=new char[samplenum*nlen]; for(int i=0;i-1;m--) { pos=k1*m+0.5; memmove(data1,&pchar[j*reclen+pos*waveinfo.CodeLen],(myWidth1-pos+n)*waveinfo.CodeLen); memmove(&pchar[j*reclen+(pos+1)*waveinfo.CodeLen],data1,(myWidth1-pos+n++)*waveinfo.CodeLen); } /* QVector va; for(int t=0;tGetData(waveinfo.RepCode,&pchar[j*reclen],&vall); va.append(QPointF(vall,t)); } QVector BSplineFit(); */ } delete data1; } } else logio->ReadWave(curveindex,waveinfo.StartDepth,samplenum,(void *)pchar); if(isCorrA1ZM) { char *pP1AZ=NULL; int iP1AZ=-1; Slf_CURVE aziminfo; QString P1AZ="P1AZ"; if(pMsa) { iP1AZ=logio->FindObjectName((char *)pMsa->A1PZ); } if(iP1AZ<0) { if(pMsa&&pMsa->A1PZ[0]) P1AZ=pMsa->A1PZ; QStringList azims=GetSimilarCurves(P1AZ); if(azims.size()<0) azims=GetSimilarCurves("P1AZ"); foreach(QString cname,azims) { iP1AZ=logio->FindObjectName((char *)cname.toStdString().c_str()); if(iP1AZ>-1) { P1AZ=cname; iP1AZ=logio->OpenCurve((char *)P1AZ.toStdString().c_str()); break; } } } if(iP1AZ>-1) { logio->GetCurveInfo(iP1AZ,&aziminfo); int samplenum1=(aziminfo.EndDepth-aziminfo.StartDepth)/aziminfo.DepLevel+1.5; pP1AZ=new char[aziminfo.CodeLen*(samplenum1+1)]; logio->ReadCurve(iP1AZ,aziminfo.StartDepth,samplenum1,(void *)pP1AZ); logio->CloseCurve(iP1AZ); if(aziminfo.DepLevel!=waveinfo.DepLevel||aziminfo.StartDepth!=waveinfo.StartDepth||aziminfo.EndDepth!=waveinfo.EndDepth) { char *pP1AZ1=new char[aziminfo.CodeLen*(samplenum+1)]; double val=0; float dep=0,dep1=0,dep2=0; int pos=0; double val1=-9999,val2=-9999; for(int i=0;i=samplenum1) { val=-9999; CObjWellLog::SetData(aziminfo.RepCode,(char *)&pP1AZ1[i*aziminfo.CodeLen],val); continue; } dep1=aziminfo.StartDepth+pos*aziminfo.DepLevel; val1=CObjWellLog::GetData(aziminfo.RepCode,(char *)&pP1AZ[pos*aziminfo.CodeLen],aziminfo.CodeLen); if(pos>=samplenum1-1) { CObjWellLog::SetData(aziminfo.RepCode,(char *)&pP1AZ1[i*aziminfo.CodeLen],val1); continue; } dep2=aziminfo.StartDepth+(pos+1)*aziminfo.DepLevel; val2=CObjWellLog::GetData(aziminfo.RepCode,(char *)&pP1AZ[(pos+1)*aziminfo.CodeLen],aziminfo.CodeLen); if(val1==-9999||val2==-9999) { val=-9999; } else val=(dep-dep1)/(dep2-dep1)*(val2-val1)+val1; CObjWellLog::SetData(aziminfo.RepCode,(char *)&pP1AZ1[i*aziminfo.CodeLen],val); } delete pP1AZ; pP1AZ=pP1AZ1; } } if(pP1AZ){ AzmiuthCorrect(pchar,samplenum,myWidth,pP1AZ,aziminfo,shift0); } if(pP1AZ)delete pP1AZ; } else { if(m_ArrayNum>1) AzmiuthCorrect(pchar,samplenum,myWidth,NULL,*(Slf_CURVE *)&waveinfo,shift0); } m_vMD.SetSize(3); m_vMD.m_vProperty=(float *)m_SharedMemory; int size=((int *)m_SharedMemory)[3]; m_vProperty.SetSize(size); m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; if(m_vMD.size()>0){ m_TopDepth=m_vMD.m_vProperty[0]; m_BottomDepth=m_vMD.m_vProperty[1]; m_Rlev=m_vMD.m_vProperty[2]; } m_ShiftTopDepth=-9999; m_ShiftBottomDepth=-9999; m_DepthOffset=0; if(m_ArrayNum>1) { waveinfo.ArrayNum=pMsa->nPad/pMsa->nPadZ; waveinfo.SamplePoint=myWidth/(waveinfo.ArrayNum); waveinfo.TimeSamples=myWidth; } if(pMsa) { delete pMsa; pMsa=NULL; } float val=0; valMin.clear(); valMax.clear(); valMin.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum); valMax.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum); for(int j=0;j<(waveinfo.SamplePoint)*waveinfo.ArrayNum;j++) { valMin[j]=999999999; valMax[j]=-99999999; } char buf[200]; for(int i=0;ival)valMin[j]=val; } } if(waveinfo.MaxValue==-50||waveinfo.MinValue==50||fabs(waveinfo.MaxValue)<1e-6||waveinfo.MinValue<1e-6||waveinfo.MaxValue==-99999||waveinfo.MaxValue==-9999||waveinfo.MinValue==999999||waveinfo.MinValue==999999||waveinfo.MinValue==99999||waveinfo.MinValue==99999||waveinfo.MinValue==-9999) { float valmin=99999; float valmax=-99999; for(int j=0;jvalMax[j]) valmin=valMax[j]; if(valmin>valMin[j]) valmin=valMin[j]; if(valmaxSetWaveInfo(curveindex,&BWAVEINFO); } logio->Clear(); delete logio; isLoad=true; // SetModified(false,false); // GetObjectEvent().OnRefreshData(GetSlfFileName(),GetName(),this); return true; } void CObjWellLogWavefile::DepthAlign(char *mr,int num,int pad,int ToolType) { // Star:2、4、6极板深度上移0.088392米 // EMI:2、4、6极板深度上移0.062米 // FMI:2、4、6、8极板深度上移0.14478米 //// need change int BtnPerPad=24; float vv; switch(ToolType) { case 0: // Star-II deltaZ=0.3" deltaH=3.41" BtnPerPad=24; //电扣Z方向:BUTZ =/ 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0, -.3, 0,-.3, 0, -.3, 0, -.3, 0, -.3 / //if(pad%2==0)//电扣深度对齐,第偶数个电扣需上提0.3",即0.00762m,相当于3倍的采样间隔(3*0.00254) { for(int btn=0; btn=Col-1) continue; memmove(vbuf,&mr[i*Col*cordlen+Col*cordlen-ashift*cordlen],cordlen*ashift); memmove(&mr[(i*Col+ashift)*cordlen],&mr[i*Col*cordlen],cordlen*(Col-ashift)); memmove(&mr[i*Col*cordlen],vbuf,cordlen*ashift); } } else { for(int i=0; i=Col-1) continue; memmove(vbuf,&mr[i*Col*cordlen+Col*cordlen-ashift*cordlen],cordlen*ashift); memmove(&mr[(i*Col+ashift)*cordlen],&mr[i*Col*cordlen],cordlen*(Col-ashift)); memmove(&mr[i*Col*cordlen],vbuf,cordlen*ashift); } } delete vbuf; } void CObjWellLogWavefile::SetArrayNum(int ArrayNum) { if(ArrayNum!=m_ArrayNum) { isLoad=false; m_ArrayNum=ArrayNum; LoadFromSLF(); } } void CObjWellLogWavefile::GetValidMDProperty( PFLOATPROPERTY &vMD,PFLOATPROPERTY &vProperty,float sdep,float edep) { bool ret=0; if(key.isEmpty()) ret=0; else if(!IsMappingMem(key.toStdString().c_str()))ret=LoadFromSLF(); else { if(m_SharedMemory){ ret=true; vMD.m_vProperty=(float *)m_SharedMemory; if(!GetName().isEmpty()&&!m_SlfFileName.isEmpty()&&vMD.m_vProperty) { CLogIO * logio=new CLogIO(); if(logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { int curveindex=logio->OpenWave(GetName().toStdString().c_str()); if(curveindex>-1) { // logio->GetWaveInfo(curveindex,&waveinfo); } } delete logio; int samplenum=(waveinfo.EndDepth-waveinfo.StartDepth)/waveinfo.DepLevel+1.5; int samplenum1=(m_vMD.m_vProperty[1]-m_vMD.m_vProperty[0])/m_vMD.m_vProperty[2]+1.5; if(samplenum1==samplenum){ m_vMD.m_vProperty[0]=waveinfo.StartDepth; m_vMD.m_vProperty[1]=waveinfo.EndDepth; m_vMD.m_vProperty[2]=waveinfo.DepLevel; } else { isLoad=false; LoadFromSLF(); vMD.m_vProperty=(float *)m_SharedMemory; m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; } } } else { struct IN_OUT_MESSAGE { int nPad;//极板数// int nPadZ;//极板子极板数据 int nSample;//每个极板元素(电扣)个数// int Width; int shift0; char Name[40][64]; char A1PZ[64]; }; struct IN_OUT_MESSAGE msa[7]={ //STAR 1 { 6,1,24,360,0, {"C_P1BTN","C_P2BTN","C_P3BTN","C_P4BTN","C_P5BTN","C_P6BTN"}, "P1AZ_STAR" }, //CBIL 2 { 2,1,250,360,0, {"C_BHTA","C_BHTT"}, "P1AZ_CBIL" }, //EMI 3 { 6,1,25,360,0, {"C_PAD1","C_PAD2","C_PAD3","C_PAD4","C_PAD5","C_PAD6"}, "P1AZ_EMI" }, //XRMI 4 { 6,1,25,360,0, {"C_XPAD1","C_XPAD2","C_XPAD3","C_XPAD4","C_XPAD5","C_XPAD6"}, "P1AZ_XRMI" }, //FMI 5 { 16,4,12,360,12, {"C_FCA1","C_FCA2","C_FCA3","C_FCA4","C_FCB1","C_FCB2","C_FCB3","C_FCB4","C_FCC1","C_FCC2","C_FCC3","C_FCC4","C_FCD1","C_FCD2","C_FCD3","C_FCD4"}, "C_P1AZ" }, //FMS 6 { 4,1,16,360,12, {"C_PAD1","C_PAD2","C_PAD3","C_PAD4"}, "P1AZ_FMS" }, //EIWD KSZ 7 { 1,1,128,360,0, {"C_RTW"} } }; if(!m_SlfFileName.isEmpty()) { char tem[100]; QString name=GetName(); strcpy(tem,name.toStdString().c_str()); int fir=-1; struct IN_OUT_MESSAGE *pMsa=NULL; if(m_ArrayNum>1) { for(int i=0;i<7;i++) { for(int j=0;j=0) break; } if(fir<0) { QStringList msa1=GetSimilarCurves(name); if(msa1.size()>7) { pMsa=new struct IN_OUT_MESSAGE; fir=msa1[0].toInt();//image type pMsa->nPad=msa1[1].toInt();//极板数// pMsa->nPadZ=msa1[2].toInt();//极板子极板数据 pMsa->nSample=msa1[3].toInt();//每个极板元素(电扣)个数// pMsa->Width=msa1[4].toInt(); pMsa->shift0=msa1[5].toInt(); for(int i=0;inPad;i++) { if(msa1.size()>6+i) strcpy(pMsa->Name[i],msa1[6+i].toStdString().c_str()); } if(msa1.size()>6+pMsa->nPad)strcpy(pMsa->A1PZ,msa1[6+pMsa->nPad].toStdString().c_str()); } } } if(fir<1) m_ArrayNum=1; name=m_SlfFileName+GetName(); if(m_ArrayNum>1) { name+="Array"; } m_SharedMemory=NULL; m_Handle=NULL; name=GetName(); CLogIO * logio=new CLogIO(); if(logio->Open(m_SlfFileName.toStdString().c_str(),CSlfIO::modeRead)) { int curveindex=logio->OpenWave(name.toStdString().c_str()); if(curveindex>-1) { m_ObjectType=WAVE_OBJECT; logio->GetWaveInfo(curveindex,&waveinfo); if(m_ArrayNum>1) { if(waveinfo.RepCode==REPR_CHAR) waveinfo.RepCode=REPR_UCHAR; } acurveinfo.RepCode=waveinfo.RepCode; acurveinfo.CodeLen=waveinfo.CodeLen; acurveinfo.DepLevel=waveinfo.DepLevel; acurveinfo.StartDepth=waveinfo.StartDepth; acurveinfo.EndDepth=waveinfo.EndDepth; isRun=true; int samplenum=(waveinfo.EndDepth-waveinfo.StartDepth)/waveinfo.DepLevel+1.5; name=m_SlfFileName+GetName(); if(m_ArrayNum>1) { name+="Array"; } key=name; int nbpp=waveinfo.SamplePoint; int mlen=0; int myWidth=0; int chlen=0; int nPadZ=0; int myWidth1=waveinfo.SamplePoint; int shift0=0; if(m_ArrayNum>1) { shift0=pMsa->shift0; nPadZ=pMsa->nPadZ; myWidth=pMsa->Width; nbpp=pMsa->nSample; m_ArrayNum=pMsa->nPad; mlen=myWidth-m_ArrayNum*nbpp;//总盲区宽度 mlen/=m_ArrayNum; if(mlen%2!=0) mlen+=1; if(nPadZ<4) chlen=mlen/8; else chlen=mlen/4; if(chlen%2!=0) chlen+=1; if(chlen==0) chlen=2; mlen=m_ArrayNum*chlen/nPadZ; if(mlen%2!=0) mlen++; if(mlen>20) mlen=20; if(chlen<4) chlen=4; int klen=pMsa->nPadZ*waveinfo.SamplePoint+mlen+pMsa->nPadZ*chlen; myWidth1=klen*pMsa->nPad/pMsa->nPadZ; } else myWidth=waveinfo.SamplePoint; int nlen=waveinfo.CodeLen*waveinfo.SamplePoint; int reclen=waveinfo.CodeLen*myWidth*waveinfo.ArrayNum; MappingMem(&m_Handle,(LPSTR*)&m_SharedMemory,3*sizeof(float)+sizeof(int)+reclen*(samplenum+1),key.toStdString().c_str()); if(m_Handle&&m_SharedMemory) { m_vMD.SetSize(3); m_vMD.m_vProperty=(float *)m_SharedMemory; int size=((int *)m_SharedMemory)[3]; m_vProperty.SetSize(size); m_vProperty.m_vProperty=&m_vMD.m_vProperty[4]; } if(m_vMD.size()>0){ m_TopDepth=m_vMD.m_vProperty[0]; m_BottomDepth=m_vMD.m_vProperty[1]; m_Rlev=m_vMD.m_vProperty[2]; } m_ShiftTopDepth=-9999; m_ShiftBottomDepth=-9999; m_DepthOffset=0; if(m_ArrayNum>1) { waveinfo.ArrayNum=pMsa->nPad/pMsa->nPadZ; waveinfo.SamplePoint=myWidth/(waveinfo.ArrayNum); waveinfo.TimeSamples=myWidth; } if(pMsa) { delete pMsa; pMsa=NULL; } float val=0; valMin.clear(); valMax.clear(); valMin.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum); valMax.resize((waveinfo.SamplePoint)*waveinfo.ArrayNum); for(int j=0;j<(waveinfo.SamplePoint)*waveinfo.ArrayNum;j++) { valMin[j]=999999999; valMax[j]=-99999999; } char buf[200]; for(int i=0;ival)valMin[j]=val; } } if(waveinfo.MaxValue==-50||waveinfo.MinValue==50||fabs(waveinfo.MaxValue)<1e-6||waveinfo.MinValue<1e-6||waveinfo.MaxValue==-99999||waveinfo.MaxValue==-9999||waveinfo.MinValue==999999||waveinfo.MinValue==999999||waveinfo.MinValue==99999||waveinfo.MinValue==99999||waveinfo.MinValue==-9999) { float valmin=99999; float valmax=-99999; for(int j=0;jvalMax[j]) valmin=valMax[j]; if(valmin>valMin[j]) valmin=valMin[j]; if(valmax