|
|
|
|
#include "FITKFlowOFIOHDF5Interface.h"
|
|
|
|
|
#include "FITKFlowOFHDF5Reader.h"
|
|
|
|
|
#include "FITKFlowOFHDF5Writer.h"
|
|
|
|
|
|
|
|
|
|
#include "FITK_Kernel/FITKAppFramework/FITKMessage.h"
|
|
|
|
|
#include "FITK_Kernel/FITKAdaptor/FITKIOAdaptorFactory.h"
|
|
|
|
|
|
|
|
|
|
#include "H5Cpp.h"
|
|
|
|
|
|
|
|
|
|
#define HDF5VERSION 0.2
|
|
|
|
|
|
|
|
|
|
namespace IO
|
|
|
|
|
{
|
|
|
|
|
void FITKFlowOFIOHDF5Interface::setFileName(const QString& fileName)
|
|
|
|
|
{
|
|
|
|
|
_fileName = fileName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QString FITKFlowOFIOHDF5Interface::getComponentName()
|
|
|
|
|
{
|
|
|
|
|
//返回类型名
|
|
|
|
|
return "FITKFlowOFHDF5IO";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FITKFlowOFIOHDF5Interface::openFileStream(int state)
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
if (state == 1)
|
|
|
|
|
_h5File = new H5::H5File(_fileName.toStdString().c_str(), H5F_ACC_RDWR);
|
|
|
|
|
else if (state == 2)
|
|
|
|
|
_h5File = new H5::H5File(_fileName.toStdString().c_str(), H5F_ACC_TRUNC);
|
|
|
|
|
}
|
|
|
|
|
catch (const H5::FileIException& ex)
|
|
|
|
|
{
|
|
|
|
|
AppFrame::FITKMessageError(QString("HDF5 File I/O Error: %1").arg(ex.getCDetailMsg()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (_fileName.isEmpty() || !_h5File) return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FITKFlowOFIOHDF5Interface::closeFileStream()
|
|
|
|
|
{
|
|
|
|
|
if (_h5File != nullptr)
|
|
|
|
|
{
|
|
|
|
|
_h5File->close();
|
|
|
|
|
delete _h5File;
|
|
|
|
|
_h5File = nullptr;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FITKFlowOFIOHDF5Interface::exec(const int indexPort)
|
|
|
|
|
{
|
|
|
|
|
//打开文件异常时,直接退出并返回结束信号
|
|
|
|
|
if (!openFileStream(indexPort))
|
|
|
|
|
{
|
|
|
|
|
ioThreadFinishedSlot();
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//临时代码 后续重写
|
|
|
|
|
if (indexPort == 1)
|
|
|
|
|
{
|
|
|
|
|
FITKFlowOFHDF5Reader* tempIo = new FITKFlowOFHDF5Reader();
|
|
|
|
|
tempIo->setH5Root(_h5File);
|
|
|
|
|
tempIo->setVersion(HDF5VERSION);
|
|
|
|
|
_io = tempIo;
|
|
|
|
|
}
|
|
|
|
|
else if (indexPort == 2)
|
|
|
|
|
{
|
|
|
|
|
FITKFlowOFHDF5Writer* tempIo = new FITKFlowOFHDF5Writer();
|
|
|
|
|
tempIo->setH5Root(_h5File);
|
|
|
|
|
tempIo->setVersion(HDF5VERSION);
|
|
|
|
|
_io = tempIo;
|
|
|
|
|
}
|
|
|
|
|
if (_io == nullptr) return false;
|
|
|
|
|
|
|
|
|
|
connect(_io, SIGNAL(taskFinishedSig(FITKThreadTask*)), this, SLOT(ioThreadFinishedSlot()));
|
|
|
|
|
//临时代码
|
|
|
|
|
_io->setFileName(_fileName);
|
|
|
|
|
|
|
|
|
|
_io->setResultMark(&_success);
|
|
|
|
|
//在线程运行,提交到线程池
|
|
|
|
|
if (_runInThread)
|
|
|
|
|
_io->push2ThreadPool();
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
_io->run();
|
|
|
|
|
//不在线程运行,执行完读写之后直接触发结束信号
|
|
|
|
|
emit ioThreadFinishedSig();
|
|
|
|
|
closeFileStream();
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FITKFlowOFIOHDF5Interface::read()
|
|
|
|
|
{
|
|
|
|
|
//遍历所有case
|
|
|
|
|
//for (int i = 0; i < _caseManager->getDataCount(); ++i)
|
|
|
|
|
//{
|
|
|
|
|
// FITKAbaqusHDF5Reader* tempIo = new FITKAbaqusHDF5Reader();
|
|
|
|
|
// tempIo->setFileName(_fileName);
|
|
|
|
|
// _io = tempIo;
|
|
|
|
|
// connect(_io, SIGNAL(taskFinishedSig(FITKThreadTask*)), this, SLOT(ioThreadFinishedSlot()));
|
|
|
|
|
// AbaqusData::FITKDataCase* dataObject = _caseManager->getDataByIndex(i);
|
|
|
|
|
// _io->setDataObject(dataObject);
|
|
|
|
|
// _io->setResultMark(&_success);
|
|
|
|
|
//
|
|
|
|
|
// if (_runInThread)
|
|
|
|
|
// _io->push2ThreadPool();
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// _io->run();
|
|
|
|
|
// //不在线程运行,执行完读写之后直接触发结束信号
|
|
|
|
|
// emit ioThreadFinishedSig();
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FITKFlowOFIOHDF5Interface::write()
|
|
|
|
|
{
|
|
|
|
|
//if (!_caseManager || !_jobManager) return false;
|
|
|
|
|
//for (int i = 0; i < _caseManager->getDataCount(); ++i)
|
|
|
|
|
//{
|
|
|
|
|
// FITKAbaqusHDF5Writer* tempIo = new FITKAbaqusHDF5Writer();
|
|
|
|
|
// tempIo->setFileName(_fileName);
|
|
|
|
|
// _io = tempIo;
|
|
|
|
|
// connect(_io, SIGNAL(taskFinishedSig(FITKThreadTask*)), this, SLOT(ioThreadFinishedSlot()));
|
|
|
|
|
// AbaqusData::FITKDataCase* dataObject = _caseManager->getDataByIndex(i);
|
|
|
|
|
// _io->setDataObject(dataObject);
|
|
|
|
|
// _io->setResultMark(&_success);
|
|
|
|
|
//
|
|
|
|
|
// if (_runInThread)
|
|
|
|
|
// _io->push2ThreadPool();
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// _io->run();
|
|
|
|
|
// //不在线程运行,执行完读写之后直接触发结束信号
|
|
|
|
|
// emit ioThreadFinishedSig();
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FITKFlowOFIOHDF5Interface::isSuccess()
|
|
|
|
|
{
|
|
|
|
|
return _success;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool FITKFlowOFIOHDF5Interface::isRunning()
|
|
|
|
|
{
|
|
|
|
|
return _io != nullptr;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FITKFlowOFIOHDF5Interface::setRunInThread(bool r /*= true*/)
|
|
|
|
|
{
|
|
|
|
|
_runInThread = r;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void FITKFlowOFIOHDF5Interface::ioThreadFinishedSlot()
|
|
|
|
|
{
|
|
|
|
|
emit this->ioThreadFinishedSig();
|
|
|
|
|
closeFileStream();
|
|
|
|
|
_io = nullptr;
|
|
|
|
|
}
|
|
|
|
|
}
|