#pragma warning(push,0) // #include "Family.h" #include #include #include #include #include #include "Statistics2Dlg.h" #include "ui_Statistics2.h" #include "CStringType.h" #include "Well.h" #pragma warning(pop) using namespace pai::ios::welllog; BEGIN_OSGGRAPHICS_NAMESPACE static float ReadSdep=9999999.,ReadEdep=-9999999; CStatistics2Dlg::~CStatistics2Dlg() { if(m_pUI) delete m_pUI; ReadSdep=9999999.,ReadEdep=-9999999; } CStatistics2Dlg::CStatistics2Dlg(QWidget * parent, Qt::WindowFlags flags) : QWidget(parent,flags)//: QDialog(parent,flags) { m_pUI = new Ui_Statistics2(); m_pUI->setupUi(this); int w=width(); int h=height(); if(NULL != parent) { parent->setFixedSize(w,h); } m_pUI->cancelbtn->hide(); QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave())); QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel())); QObject::connect(m_pUI->okbtn_Refurbish, SIGNAL(clicked()), this, SLOT(slotRefurbish())); QObject::connect(m_pUI->checkBox, SIGNAL(clicked()), this, SLOT(slotCheckLjpl())); QObject::connect(m_pUI->lineEditName, SIGNAL(textChanged( QString )),this,SLOT(slotChangeName(QString))); QObject::connect(m_pUI->lineEditUnit, SIGNAL(textChanged( QString )),this,SLOT(slotChangeUnit(QString))); QObject::connect(m_pUI->lineEditXmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin(QString))); QObject::connect(m_pUI->lineEditXmin2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmin2(QString))); QObject::connect(m_pUI->lineEditYmin, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmin(QString))); QObject::connect(m_pUI->lineEditXmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax(QString))); QObject::connect(m_pUI->lineEditXmax2, SIGNAL(textChanged( QString )),this,SLOT(slotChangeXmax2(QString))); QObject::connect(m_pUI->lineEditYmax, SIGNAL(textChanged( QString )),this,SLOT(slotChangeYmax(QString))); QObject::connect(m_pUI->lineEditSdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSdep(QString))); QObject::connect(m_pUI->lineEditEdep, SIGNAL(textChanged( QString )),this,SLOT(slotChangeEdep(QString))); QObject::connect(m_pUI->lineEditSmallGrid, SIGNAL(textChanged( QString )),this,SLOT(slotChangeSmallGrid(QString))); QObject::connect(m_pUI->horizontalSliderSdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetSdep(int))); QObject::connect(m_pUI->horizontalSliderEdep, SIGNAL(valueChanged(int)),this, SLOT(slotSetEdep(int))); //time QObject::connect(m_pUI->lineEditStime, SIGNAL(textChanged( QString )),this,SLOT(slotChangeStime(QString))); QObject::connect(m_pUI->lineEditEtime, SIGNAL(textChanged( QString )),this,SLOT(slotChangeEtime(QString))); QObject::connect(m_pUI->horizontalSliderStime, SIGNAL(valueChanged(int)),this, SLOT(slotSetStime(int))); QObject::connect(m_pUI->horizontalSliderEtime, SIGNAL(valueChanged(int)),this, SLOT(slotSetEtime(int))); m_SmallGrid=10; fmin=0,fmax=0; m_Xmin=0; m_Xmax=9999; m_Ymin=0; m_Ymax=100; m_Xmin2=0; m_Xmax2=0; m_DrawLjpl=0; val=NULL; QPalette pal; m_pUI->widgetPlot->setStyleSheet("background:lightgray"); m_pUI->widgetPlot->setPalette(pal); m_view.setParent(m_pUI->widgetPlot); QRect rec=m_pUI->widgetPlot->geometry(); m_view.widgetRec=QRect(0,0,rec.width(),rec.height()); } void CStatistics2Dlg::slotSave() { // //保存位图,该部分需要罗林配合 // //QMessageBox::about(NULL,"提示","暂时未作"); // QString desktopPath=QDesktopServices::storageLocation(QDesktopServices::HomeLocation); // desktopPath=desktopPath+QString("/Statistics2.jpg"); // QString imagePath=QFileDialog::getSaveFileName(this,"(Save Image)",desktopPath,"JPG File(*.jpg)"); // QSize vSize=m_view.size(); // QPixmap image(vSize); // m_view.render(&image); // bool isSave=image.save(imagePath,"JPG"); // QMessageBox::information(this,"提示","图片保存成功!"); // //accept(); } /** *@brief 取消槽函数 */ void CStatistics2Dlg::slotCancel() { delete []val; //reject (); } void CStatistics2Dlg::slotCheckLjpl() { m_DrawLjpl=!m_DrawLjpl; m_view.m_DrawLjpl=m_DrawLjpl; m_view.update(); } void CStatistics2Dlg::slotChangeName(const QString &text) { m_CurveName=text;//m_pUI->lineEditName->text(); m_view.m_CurveName=m_CurveName; m_view.update(); } void CStatistics2Dlg::slotChangeUnit(const QString &text) { m_CurveUnit=text;//m_pUI->lineEditUnit->text(); m_view.m_CurveUnit=m_CurveUnit; m_view.update(); } void CStatistics2Dlg::slotChangeXmin(const QString &text) { m_Xmin=text.toFloat(); Refurbish(); m_view.update(); } void CStatistics2Dlg::slotChangeXmax(const QString &text) { m_Xmax=text.toFloat(); Refurbish(); m_view.update(); } void CStatistics2Dlg::slotChangeXmin2(const QString &text) { m_Xmin2=text.toFloat(); Refurbish(); m_view.update(); } void CStatistics2Dlg::slotChangeXmax2(const QString &text) { m_Xmax2=text.toFloat(); Refurbish(); m_view.update(); } void CStatistics2Dlg::slotChangeYmin(const QString &text) { m_Ymin=text.toFloat(); Refurbish(); m_view.update(); } void CStatistics2Dlg::slotChangeYmax(const QString &text) { m_Ymax=text.toFloat(); Refurbish(); m_view.update(); } void CStatistics2Dlg::slotChangeSdep(const QString &text) { sdep=text.toFloat(); if(sdepm_flEnDepth)edep=m_flEnDepth; //Refurbish(); //m_view.update(); } void CStatistics2Dlg::slotChangeSmallGrid(const QString &text) { m_SmallGrid=text.toInt(); if(m_SmallGrid<1) { m_SmallGrid=1; m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid)); } if(m_SmallGrid>10) { m_SmallGrid=10; m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid)); } Refurbish(); m_view.update(); } void CStatistics2Dlg::slotSetSdep(const int &dep) { m_pUI->lineEditSdep->setText(QString::number(dep/100.)); } void CStatistics2Dlg::slotSetEdep(const int &dep) { m_pUI->lineEditEdep->setText(QString::number(dep/100.)); } //time void CStatistics2Dlg::slotChangeStime(const QString &text) { stime=text.toFloat(); if(stimem_flEndTime)etime=m_flEndTime; Refurbish(); m_view.update(); } void CStatistics2Dlg::slotSetStime(const int &time) { m_pUI->lineEditStime->setText(QString::number(time/100.)); } void CStatistics2Dlg::slotSetEtime(const int &time) { m_pUI->lineEditEtime->setText(QString::number(time/100.)); } // void CStatistics2Dlg::init() { CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite); int index=logio.OpenWave(CurveName.toStdString().c_str()); if(index<0) return; logio.GetWaveInfo(index,&info); num=(info.EndDepth-info.StartDepth)/info.DepLevel+1.5; logio.CloseWave(index); logio.Close(); d_min=info.StartDepth; d_max=info.EndDepth; m_flEnDepth = d_max; m_flStDepth = d_min; rlev=info.DepLevel; m_flStTime=info.StartTime; m_flEndTime=info.StartTime+info.TimeSamples*info.TimeLevel; m_CurveName=CurveName,m_CurveUnit="("+QLatin1String(info.Unit)+")"; m_pUI->lineEditName->setText(CurveName); m_pUI->lineEditUnit->setText(m_CurveUnit); m_pUI->lineEditSdep1->setText(QString::number(d_min)); m_pUI->lineEditEdep1->setText(QString::number(d_max)); m_pUI->horizontalSliderSdep->setRange(d_min*100,d_max*100); m_pUI->horizontalSliderEdep->setRange(d_min*100,d_max*100); if(num*info.TimeSamples<=100000)//当数据点较少时全部统计 { sdep=d_min; edep=d_max; } else//当数据点较多时统计中间的5000个深度点 { int m_ShowDepPoint=100000./info.TimeSamples; m_ShowDepPoint/=2; sdep=d_min+(num/2.-m_ShowDepPoint)*rlev; edep=sdep+2.*m_ShowDepPoint*rlev; } m_pUI->lineEditSdep->setText(QString::number(sdep)); m_pUI->lineEditEdep->setText(QString::number(edep)); m_pUI->horizontalSliderSdep->setValue(sdep*100); m_pUI->horizontalSliderEdep->setValue(edep*100); m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid)); //time m_pUI->lineEditStime1->setText(QString::number(m_flStTime)); m_pUI->lineEditEtime1->setText(QString::number(m_flEndTime)); m_pUI->horizontalSliderStime->setRange(m_flStTime*100,m_flEndTime*100); m_pUI->horizontalSliderEtime->setRange(m_flStTime*100,m_flEndTime*100); stime=m_flStTime;etime=m_flEndTime; m_pUI->lineEditStime->setText(QString::number(stime)); m_pUI->lineEditEtime->setText(QString::number(etime)); m_pUI->horizontalSliderStime->setValue(stime*100); m_pUI->horizontalSliderEtime->setValue(etime*100); // Statistics2(); m_Xmin=min; m_Xmax=max; m_pUI->lineEditXmin->setText(QString::number(min)); m_pUI->lineEditXmax->setText(QString::number(max)); m_pUI->lineEditYmin->setText(QString::number(m_Ymin)); m_pUI->lineEditYmax->setText(QString::number(m_Ymax)); Refurbish(); //初始化主频刻度范围:15%————85% int pp=0; for(int i=0;i<10*m_SmallGrid;i++) { pp+=point[i]; if((float)pp/(float)ShowPoint>=0.15) { m_Xmin2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid); ibegin=i; break; } } pp=0; for(int i=0;i<10*m_SmallGrid;i++) { pp+=point[i]; if((float)pp/(float)ShowPoint>=0.85) { m_Xmax2=m_Xmin+i*(m_Xmax-m_Xmin)/(10.*m_SmallGrid); iend=i; break; } } m_pUI->lineEditXmin2->setText(QString::number(m_Xmin2)); m_pUI->lineEditXmax2->setText(QString::number(m_Xmax2)); //频率刻度取整 if(fmax>50.)fmax=100.; else if(fmax>20.)fmax=50.; else if(fmax>10.)fmax=20.; else if(fmax>5.)fmax=10.; else fmax=5.; m_Ymax=fmax; m_Ymin=0; m_pUI->lineEditYmin->setText(QString::number(m_Ymin)); m_pUI->lineEditYmax->setText(QString::number(m_Ymax)); //for plot m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位 for(int i=0;i<100;i++)m_view.point[i]=point[i]; m_view.ShowPoint=ShowPoint; m_view.m_SmallGrid=m_SmallGrid; m_view.m_Ymax=m_Ymax; m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax; m_view.m_DrawLjpl=m_DrawLjpl; m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2; m_view.update(); } void CStatistics2Dlg::Statistics2() { bool ReReadData=1; d_min=sdep; d_max=edep; if(val!=NULL){ if((sdep>=ReadSdep&&sdep<=ReadEdep)&&(edep>=ReadSdep&&edep<=ReadEdep))ReReadData=0;}//如果要统计的深度在读取的深度范围内,就不在读数据 if(ReReadData) { CLogIO logio(FileName.toStdString().c_str(),(unsigned int)CLogIO::modeReadWrite); int index=logio.OpenWave(CurveName.toStdString().c_str()); if(index<0) return; if(val!=NULL)delete []val; num=(edep-sdep)/rlev+1.5; val=new float[num*info.TimeSamples]; logio.ReadWave(index,sdep,num,&val[0]); logio.CloseWave(index); logio.Close(); ReadSdep=sdep; ReadEdep=edep; } int ist=(sdep-ReadSdep)/rlev+0.5; int dpoint=(edep-sdep)/rlev+0.5;//深度点数 int timepoint=(etime-stime)/info.TimeLevel+0.5; tpoint=dpoint*timepoint; min=99999;max=-99999; average=0; depmin=depmax=d_min; timemin=timemax=stime; int InvalidNum=0; for(int i=ist;ival[pos]){min=val[pos];depmin=d_min+i*rlev;timemin=j*info.TimeLevel+m_flStTime;} if(maxInvalidNum)average/=(tpoint-InvalidNum); else average=val[(ist+1)*info.TimeSamples+int((stime-m_flStTime)/info.TimeLevel+0.5)]; float del=(m_Xmax-m_Xmin)/(10*m_SmallGrid);//del=(max-min)/(10*m_SmallGrid); for(int j=0;j<100;j++)point[j]=0; double vvv,v1,v2; Variance=0.; for(int i=ist;i=v1&&vvv<=v2) { point[j]++; break; } } } } if(tpoint>InvalidNum)Variance/=(tpoint-InvalidNum); else Variance=0; Variance=qSqrt(Variance); DWORD maxpoint=0;//point[0]; ShowPoint=0;//point[0]; for(int j=0;j<10*m_SmallGrid;j++) { if(maxpointlineEditSdep->text().toFloat(); edep=m_pUI->lineEditEdep->text().toFloat(); m_Xmin=m_pUI->lineEditXmin->text().toFloat(); m_Xmax=m_pUI->lineEditXmax->text().toFloat(); m_Xmin2=m_pUI->lineEditXmin2->text().toFloat(); m_Xmax2=m_pUI->lineEditXmax2->text().toFloat(); m_Ymin=m_pUI->lineEditYmin->text().toFloat(); m_Ymax=m_pUI->lineEditYmax->text().toFloat(); if(sdepm_flEnDepth)edep=m_flEnDepth; if(sdep>=edep)return; if(m_Xmin>=m_Xmax)return; if(m_Ymin>=m_Ymax)return; m_SmallGrid=m_pUI->lineEditSmallGrid->text().toInt(); if(m_SmallGrid<1) { m_SmallGrid=1; m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid)); } if(m_SmallGrid>10) { m_SmallGrid=10; m_pUI->lineEditSmallGrid->setText(QString::number(m_SmallGrid)); }*/ if(sdep>=edep)return; if(m_Xmin>=m_Xmax)return; if(m_Ymin>=m_Ymax)return; Statistics2(); QString str,jieguo; str="开始深度 : "+QString::number(sdep)+"("+QLatin1String(info.DepthUnit)+")";jieguo="\r\n"+str; str="结束深度 : "+QString::number(edep)+"("+QLatin1String(info.DepthUnit)+")";jieguo+="\r\n\r\n"+str; str="统计深度段: "+QString::number(edep-sdep)+"("+QLatin1String(info.DepthUnit)+")";jieguo+="\r\n\r\n"+str; str="开始时间 : "+QString::number(stime)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str; str="结束时间 : "+QString::number(etime)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str; str="有效数据点数 : "+QString::number(ShowPoint);jieguo+="\r\n\r\n"+str;//tpoint); str="最小值 : "+QString::number(min)+m_CurveUnit;jieguo+="\r\n\r\n"+str; str="最小值深度、时间 : "+QString::number(depmin)+"("+QLatin1String(info.DepthUnit)+"),"+QString::number(timemin)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str; str="最大值 : "+QString::number(max)+m_CurveUnit;jieguo+="\r\n\r\n"+str; str="最大值深度、时间 : "+QString::number(depmax)+"("+QLatin1String(info.DepthUnit)+"),"+QString::number(timemax)+"("+QLatin1String(info.TimeUnit)+")";jieguo+="\r\n\r\n"+str; str="平均值 : "+QString::number(average)+m_CurveUnit;jieguo+="\r\n\r\n"+str; str="最大频率 : "+QString::number(fmax);str+="/%";jieguo+="\r\n\r\n"+str; str="最大频率数值范围 : "+QString::number(m_PVmin)+" -- "+QString::number(m_PVmax);jieguo+="\r\n\r\n"+str; str="标准偏差 : "+QString::number(Variance);jieguo+="\r\n\r\n"+str; m_pUI->textEditJieGuo->setText(jieguo); //for plot m_view.m_CurveName=m_CurveName;m_view.m_CurveUnit=m_CurveUnit;//显示的曲线名称和单位 for(int i=0;i<100;i++)m_view.point[i]=point[i]; m_view.ShowPoint=ShowPoint; m_view.m_SmallGrid=m_SmallGrid; m_view.m_Ymax=m_Ymax; m_view.m_Xmin=m_Xmin,m_view.m_Xmax=m_Xmax; m_view.m_DrawLjpl=m_DrawLjpl; m_view.m_Xmin2=m_Xmin2,m_view.m_Xmax2=m_Xmax2; } END_OSGGRAPHICS_NAMESPACE