#pragma warning(push,0) // #include "Family.h" #include #include "UnitConvertDlg.h" #include "ui_UnitConvert.h" #include "CStringType.h" #include "geometryutils.h" #include #include "DataImport.h" // #include "ObjProject.h" #pragma warning(pop) using namespace pai::ios::welllog; BEGIN_OSGGRAPHICS_NAMESPACE CUnitConvertDlg::CUnitConvertDlg(QWidget * parent, Qt::WindowFlags flags) : QDialog(parent,flags) { m_pUI = new Ui_UnitConvert(); m_pUI->setupUi(this); QObject::connect(m_pUI->okbtn, SIGNAL(clicked()), this, SLOT(slotSave())); QObject::connect(m_pUI->cancelbtn, SIGNAL(clicked()), this, SLOT(slotCancel())); QObject::connect(m_pUI->buttonGroup, SIGNAL(buttonClicked (int)), this, SLOT(slotbuttonJudge(int)) ); QObject::connect(m_pUI->comboBoxDataType, SIGNAL(currentIndexChanged(int)),this, SLOT(slotChangeUnitType())); QObject::connect(m_pUI->comboBoxConvertType, SIGNAL(currentIndexChanged(int)),this, SLOT(slotChangeConvertType())); QObject::connect(m_pUI->checkBox, SIGNAL(clicked()), this, SLOT(slotCheckChangeValue())); QObject::connect(m_pUI->checkBox_Curve, SIGNAL(clicked()), this, SLOT(slotCheckCurve())); QObject::connect(m_pUI->checkBox_Wave, SIGNAL(clicked()), this, SLOT(slotCheckWave())); QObject::connect(m_pUI->pushButton_SelAll, SIGNAL(clicked()), this, SLOT(slotSelAll())); QObject::connect(m_pUI->pushButton_NotSelAll, SIGNAL(clicked()), this, SLOT(slotNotSelAll())); QObject::connect(m_pUI->pushButton_ReSel, SIGNAL(clicked()), this, SLOT(slotReverseSel())); m_pUI->buttonGroup->setId(m_pUI->radioButton,0); m_pUI->buttonGroup->setId(m_pUI->radioButton_2,1); m_pUI->radioButton->setChecked(1); m_pUI->tableWidget->setColumnCount(6); QStringList header; header<<"曲线名称"<<"曲线单位"<<"起始深度"<<"结束深度"<<"采样间隔"<<"深度单位"; m_pUI->tableWidget->setHorizontalHeaderLabels(header); m_pUI->tableWidget->horizontalHeader()->setStretchLastSection(true); m_pUI->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::ResizeToContents); //m_pUI->tableWidget->horizontalHeader()->setResizeMode(1, QHeaderView::ResizeToContents); //m_pUI->tableWidget->horizontalHeader()->setResizeMode(2, QHeaderView::ResizeToContents); CurveCheck=1;WaveCheck=1; CurrentType=-1; } void CUnitConvertDlg::slotSave() { SelCurve.clear(); if(CurrentType<0||CurrentType>=UnitTypeNum) { QMessageBox::warning(this,"提示","请选择单位类型");return; } if(CurrentConvert<0||CurrentConvert>=UnitType.find(UnitTypeName.at(CurrentType)).value()) { QMessageBox::warning(this,"提示","请选择转换类型");return; } iConvertFlag=m_pUI->buttonGroup->checkedId(); float muti=1.,adding=0.; if(m_pUI->checkBox->checkState()==Qt::Unchecked) { muti=m_pUI->lineEditMul->text().toFloat(); adding=m_pUI->lineEditAdd->text().toFloat(); } QString strUnit=m_pUI->lineEditName->text(); QString strUnitAlias=m_pUI->lineEditAlias->text(); CMemRdWt *mrw=new CMemRdWt(); mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite); for(int i=0;itableWidget->rowCount();i++) { Qt::CheckState eState= m_pUI->tableWidget->item(i,0)->checkState(); if (eState==Qt::Unchecked)continue; QString cvname = m_pUI->tableWidget->item(i,0)->text(); SelCurve.append(cvname);////2020.8.2 for刷新数据查看 ////////////////////////////////////////////////////////////////////////// int index = mrw->FindObjectIndex( cvname.toStdString().c_str() ); short Attribute,SubAttribute; mrw->GetObjectAttribute( index , &Attribute , &SubAttribute ); if ( SubAttribute == CURVE_OBJECT )//0x0001 { Slf_CURVE curveInfo; mrw->GetCurveInfo( index , &curveInfo ); if (iConvertFlag == CONVERT_CURVE_UNIT) { strcpy( curveInfo.Unit , strUnit.toStdString().c_str() );//Reset curve unit strcpy( curveInfo.AliasUnit , strUnitAlias.toStdString().c_str() ); mrw->SetCurveInfo( index ,&curveInfo ) ; float *oldData,*newData; //whp change 2018.10.15 保证读写一致 int iPointNum = ( curveInfo.EndDepth - curveInfo.StartDepth ) / curveInfo.DepLevel + 1.5;//0.5 ; oldData = new float[iPointNum]; newData = new float[iPointNum]; mrw->ReadCurve( index , curveInfo.StartDepth , iPointNum ,oldData ); for (int m= 0 ; m < iPointNum ; m ++ ) { newData[m] = muti * oldData[m] + adding ; } mrw->WriteCurve( index , curveInfo.StartDepth , iPointNum ,newData ); mrw->CloseCurve(index); delete oldData ; delete newData ; m_pUI->tableWidget->item(i,1)->setText(strUnit); } else// Depth unit convert { strcpy( curveInfo.DepthUnit , strUnit.toStdString().c_str() );//reset depth unit strcpy( curveInfo.DepthHZUnit , strUnitAlias.toStdString().c_str() ); mrw->SetCurveInfo( index ,&curveInfo ) ; //whp change 2018.10.15 保证读写一致 int iPointNum = ( curveInfo.EndDepth - curveInfo.StartDepth ) / curveInfo.DepLevel + 1.5;//0.5 ; Slf_OBJECT_FIELD curveFieldInfo[2];// = new Slf_OBJECT_FIELD[2]; mrw->GetSlfTableFieldInfo(index,&curveFieldInfo[0]); curveFieldInfo[0].Start=curveFieldInfo[0].Start*muti+adding; curveFieldInfo[0].Rlev=curveFieldInfo[0].Rlev*muti+adding; curveFieldInfo[0].End=m_pUI->tableWidget->item(i,3)->text().toFloat()*muti+adding;//curveFieldInfo[0].Start+iPointNum*curveFieldInfo[0].Rlev;//curveInfo.EndDepth; mrw->SetSlfTableFieldInfo(index,&curveFieldInfo[0]); mrw->CloseCurve(index); m_pUI->tableWidget->item(i,2)->setText(QString::number(curveFieldInfo[0].Start)); m_pUI->tableWidget->item(i,3)->setText(QString::number(curveFieldInfo[0].End)); m_pUI->tableWidget->item(i,4)->setText(QString::number(curveFieldInfo[0].Rlev)); m_pUI->tableWidget->item(i,5)->setText(strUnit); } } else//WAVE_OBJECT 0x0002 { Slf_WAVE waveInfo; mrw->GetWaveInfo(index , &waveInfo ); if (iConvertFlag == CONVERT_CURVE_UNIT) { #ifdef WIN32 strcpy_s( waveInfo.Unit , 32 , strUnit.toStdString().c_str() ); strcpy_s( waveInfo.AliasUnit , 32 , strUnitAlias.toStdString().c_str() ); #else strncpy(waveInfo.Unit, strUnit.toStdString().c_str(), 32); strncpy( waveInfo.AliasUnit , strUnitAlias.toStdString().c_str(), 32); #endif mrw->SetWaveInfo( index ,&waveInfo ) ; //float **oldValue,**newValue; //whp change 2018.10.15 保证读写一致 int iPointNum = ( waveInfo.EndDepth - waveInfo.StartDepth ) / waveInfo.DepLevel + 1.5;//0.5 ; int iSamplesNum = waveInfo.TimeSamples*waveInfo.ArrayNum; //allocate space /* oldValue = new float*[ iPointNum ] ; newValue = new float*[ iPointNum ]; for ( i = 0 ; i < iPointNum ; i ++ ) { oldValue[i] = new float [ iSamplesNum +1 ] ; newValue[i] = new float [ iSamplesNum +1 ] ; } */ float *oldValue=new float [ iSamplesNum +1 ],*newValue=new float [ iSamplesNum +1 ]; //operate data //进度提示 QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); // ::GetProgressBar()->setVisible(true); // ::GetProgressBar()->setRange(0,iPointNum); for ( int m = 0 ; m < iPointNum ; m ++ ) { // ::GetProgressBar()->setValue(m+1); //read mrw->ReadWave( index , waveInfo.StartDepth + waveInfo.DepLevel * m , 1 , &oldValue[0] );//&oldValue[i][0] ); //calcuate using coefficient :muti and adding for ( int j = 0 ;j < iSamplesNum ; j ++ ) { newValue[j] = muti * oldValue[j] + adding ;//newValue[i][j] = muti * oldValue[i][j] + adding ; } //write back mrw->WriteWave( index , waveInfo.StartDepth + waveInfo.DepLevel * m , 1 ,&newValue[0] );//&newValue[i][0] ); } mrw->CloseWave(index); QApplication::setOverrideCursor(QCursor(Qt::ArrowCursor)); // ::GetProgressBar()->setVisible(false); //free space /* for ( i = 0; i < iPointNum ; i ++ ) { delete oldValue[i]; delete newValue[i]; }*/ delete []oldValue ; delete []newValue ; m_pUI->tableWidget->item(i,1)->setText(strUnit); } else//Depth unit convert { #ifdef WIN32 strcpy_s( waveInfo.DepthUnit , 32 , strUnit.toStdString().c_str() );//reset depth unit strcpy_s( waveInfo.DepthHZUnit , 32 , strUnitAlias.toStdString().c_str() );//reset depth unit #else strncpy(waveInfo.DepthUnit, strUnit.toStdString().c_str(), 32); strncpy( waveInfo.DepthHZUnit , strUnitAlias.toStdString().c_str(), 32); #endif mrw->SetWaveInfo( index ,&waveInfo ) ; //whp change 2018.10.15 保证读写一致 int iPointNum = ( waveInfo.EndDepth - waveInfo.StartDepth ) / waveInfo.DepLevel + 1.5;//0.5 ; Slf_OBJECT_FIELD waveFieldInfo[3];// = new Slf_OBJECT_FIELD [3]; mrw->GetSlfTableFieldInfo(index,&waveFieldInfo[0]); waveFieldInfo[0].Start=waveFieldInfo[0].Start*muti+adding; waveFieldInfo[0].Rlev=waveFieldInfo[0].Rlev*muti+adding; waveFieldInfo[0].End=m_pUI->tableWidget->item(i,3)->text().toFloat()*muti+adding;//waveFieldInfo[0].Start+iPointNum*waveFieldInfo[0].Rlev;//waveInfo.EndDepth; mrw->SetSlfTableFieldInfo(index,&waveFieldInfo[0]); mrw->CloseWave(index); m_pUI->tableWidget->item(i,2)->setText(QString::number(waveFieldInfo[0].Start)); m_pUI->tableWidget->item(i,3)->setText(QString::number(waveFieldInfo[0].End)); m_pUI->tableWidget->item(i,4)->setText(QString::number(waveFieldInfo[0].Rlev)); m_pUI->tableWidget->item(i,5)->setText(strUnit); } } } delete mrw; QMessageBox::warning(this,"提示","转换完成!"); } /** *@brief 取消槽函数 */ void CUnitConvertDlg::slotCancel() { MapUnit.clear(); UnitType.clear(); reject (); } void CUnitConvertDlg::init() { m_pUI->checkBox_Curve->setCheckState(Qt::Checked); m_pUI->checkBox_Wave->setCheckState(Qt::Checked); CMemRdWt *mrw=new CMemRdWt(); mrw->Open(FileName.toStdString().c_str(),CSlfIO::modeReadWrite); int ObjectNumber=mrw->GetObjectCount(); int CurveCount=0,WaveCount=0; char Name[200]; for(int i=0;iGetObjectStatus(i)!=OBJECT_NORMAL) { continue; } mrw->GetObjectName(i,Name); short Attribute,SubAttribute; Attribute=mrw->GetObjectType(i); if(Attribute==CURVE_OBJECT) { //CUR_INFO mInfo; Slf_CURVE cInfo; int index=mrw->OpenCurve(Name); if(index<0) continue; mrw->GetCurveInfo(index,&cInfo); /*mInfo.name=QString(QLatin1String(Name)); mInfo.strCurveUnit=QString(QLatin1String(cInfo.Unit)); mInfo.strDepthUnit=QString(QLatin1String(cInfo.DepthUnit)); mInfo.sdep=cInfo.StartDepth; mInfo.edep=cInfo.EndDepth; mInfo.DepInterval=cInfo.DepLevel; Curve_Info.push_back()*/ Curve_Info.push_back(cInfo); } else if(Attribute==WAVE_OBJECT) { Slf_WAVE cInfo; int index=mrw->OpenWave(Name); if(index>-1) { mrw->GetWaveInfo(index,&cInfo); Wave_Info.push_back(cInfo); } } } delete mrw; ReadConfig(); for(int i=0;icomboBoxDataType->addItem(UnitTypeName[i]); RebrushList(); } void CUnitConvertDlg::ReadConfig() { QString ConfigName = ::GetConfPath()+"UnitConvert.ini"; QFile InFile(ConfigName); if( !InFile.open(QIODevice::ReadOnly ) ) { QMessageBox::warning(NULL,"提示","打开单位转换配置文件"+ConfigName+"错误"); return ; } QTextStream textstream( &InFile ); QString line; while(!textstream.atEnd()) { line=textstream.readLine(); if(line.indexOf("")>=0)break; } line=textstream.readLine(); line=line.right(line.length()-line.indexOf("=")-1); UnitTypeNum=line.toInt(); for(int i=0;i temp; temp.reserve(ItemNum); MapUnit.insert(StrList[1],temp); } QString name; while(!textstream.atEnd()) { line=textstream.readLine(); if(line.indexOf("")>=0)break; if(line.indexOf("#")>=0) { line.replace("#",""); line.replace(" ",""); name=line; continue; } if(line.indexOf("==")>=0) { while(line.indexOf(" ")>-1)line.replace(" "," "); while(line.indexOf(" ")>-1)line.replace(" "," "); line=line.trimmed(); QStringList StrList=line.split(" "); ConvertUnit mUnit; mUnit.No=StrList.at(0).toInt(); mUnit.Type=StrList.at(1); mUnit.NewUnit=StrList.at(2); mUnit.UnitAlias=StrList.at(3); mUnit.MutiCoefficient=StrList.at(4);//.toFloat(); mUnit.AddingCoefficient=StrList.at(5);//.toFloat(); MapUnit.find(name).value().push_back(mUnit); } } } void CUnitConvertDlg::slotCheckCurve() { CurveCheck=!CurveCheck; RebrushList(); } void CUnitConvertDlg::slotCheckWave() { WaveCheck=!WaveCheck; RebrushList(); } void CUnitConvertDlg::slotSelAll() { for(int i=0;itableWidget->rowCount();i++)m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Checked); } void CUnitConvertDlg::slotNotSelAll() { for(int i=0;itableWidget->rowCount();i++)m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Unchecked); } void CUnitConvertDlg::slotReverseSel() { for(int i=0;itableWidget->rowCount();i++) { Qt::CheckState eState= m_pUI->tableWidget->item(i,0)->checkState(); if (eState==Qt::Checked)m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Unchecked); else m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Checked); } } void CUnitConvertDlg::slotCheckChangeValue()//仅改变单位名称,不做数值转换 { slotChangeConvertType(); } void CUnitConvertDlg::slotbuttonJudge(int id) { iConvertFlag=id; if(iConvertFlag==CONVERT_DEPTH_UNIT) { for(int i=0;icomboBoxDataType->setCurrentIndex(i); m_pUI->comboBoxDataType->setEnabled(0); return; } } } else m_pUI->comboBoxDataType->setEnabled(1); } void CUnitConvertDlg::slotChangeUnitType() { CurrentType=m_pUI->comboBoxDataType->currentIndex(); m_pUI->comboBoxConvertType->clear(); std::vector mUnit=MapUnit.find(UnitTypeName.at(CurrentType)).value(); for(int i=0;icomboBoxConvertType->addItem(mUnit[i].Type); } } void CUnitConvertDlg::slotChangeConvertType() { CurrentConvert=m_pUI->comboBoxConvertType->currentIndex(); if(CurrentConvert<0)return; std::vector mUnit=MapUnit.find(UnitTypeName.at(CurrentType)).value(); CurrentUnit=mUnit.at(CurrentConvert); m_pUI->lineEditName->setText(CurrentUnit.NewUnit); m_pUI->lineEditAlias->setText(CurrentUnit.UnitAlias); m_pUI->lineEditMul->setText(CurrentUnit.MutiCoefficient);//QString::number(CurrentUnit.MutiCoefficient)); m_pUI->lineEditAdd->setText(CurrentUnit.AddingCoefficient); if(m_pUI->checkBox->checkState()==Qt::Checked)m_pUI->lineEditMode->setText("NewValue=1.0*OldValue+0.0"); else { if(CurrentUnit.AddingCoefficient.indexOf("-")>=0)m_pUI->lineEditMode->setText("NewValue="+CurrentUnit.MutiCoefficient+"*OldValue"+CurrentUnit.AddingCoefficient); else m_pUI->lineEditMode->setText("NewValue="+CurrentUnit.MutiCoefficient+"*OldValue+"+CurrentUnit.AddingCoefficient); } } void CUnitConvertDlg::RebrushList() { m_pUI->tableWidget->clearContents();//clear();whp change 2020.3.6 int row=CurveCheck*Curve_Info.size()+WaveCheck*Wave_Info.size(); m_pUI->tableWidget->setRowCount(row); if(CurveCheck) { for(int i=0;itableWidget->setItem(i,0,new QTableWidgetItem(QString(QLatin1String(Curve_Info[i].Name)))); m_pUI->tableWidget->setItem(i,1,new QTableWidgetItem(QString(QLatin1String(Curve_Info[i].Unit)))); m_pUI->tableWidget->setItem(i,2,new QTableWidgetItem(QString::number(Curve_Info[i].StartDepth))); m_pUI->tableWidget->setItem(i,3,new QTableWidgetItem(QString::number(Curve_Info[i].EndDepth))); m_pUI->tableWidget->setItem(i,4,new QTableWidgetItem(QString::number(Curve_Info[i].DepLevel))); m_pUI->tableWidget->setItem(i,5,new QTableWidgetItem(QString(QLatin1String(Curve_Info[i].DepthUnit)))); m_pUI->tableWidget->item(i,0)->setCheckState(Qt::Checked); } } if(WaveCheck) { for(int i=0;itableWidget->setItem(i+CurveCheck*Curve_Info.size(),0,new QTableWidgetItem(QString(QLatin1String(Wave_Info[i].Name)))); m_pUI->tableWidget->setItem(i+CurveCheck*Curve_Info.size(),1,new QTableWidgetItem(QString(QLatin1String(Wave_Info[i].Unit)))); m_pUI->tableWidget->setItem(i+CurveCheck*Curve_Info.size(),2,new QTableWidgetItem(QString::number(Wave_Info[i].StartDepth))); m_pUI->tableWidget->setItem(i+CurveCheck*Curve_Info.size(),3,new QTableWidgetItem(QString::number(Wave_Info[i].EndDepth))); m_pUI->tableWidget->setItem(i+CurveCheck*Curve_Info.size(),4,new QTableWidgetItem(QString::number(Wave_Info[i].DepLevel))); m_pUI->tableWidget->setItem(i+CurveCheck*Curve_Info.size(),5,new QTableWidgetItem(QString(QLatin1String(Wave_Info[i].DepthUnit)))); m_pUI->tableWidget->item(i+CurveCheck*Curve_Info.size(),0)->setCheckState(Qt::Checked); } } } END_OSGGRAPHICS_NAMESPACE