You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AppFlow/FITK_Component/FITKFlowOFIOHDF5/FITKFlowOFHDF5AdaptorGeomet...

98 lines
4.0 KiB
C++

#include "FITKFlowOFHDF5AdaptorGeometryComponent.h"
#include "FITK_Kernel/FITKCore/FITKEnumTransformer.hpp"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoCommand.h"
#include "FITK_Interface/FITKInterfaceGeoIOHDF5/FITKInterfaceHDF5AdaptorCommand.h"
#include "FITK_Component/FITKGeoOCCIOHDF5/FITKOCCHDF5AdaptorCommand.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKComponents.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKGeoCommandList.h"
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoShapeAgent.h"
#include "FITKFlowOFHDF5Reader.h"
#include "FITKFlowOFHDF5Writer.h"
//数据层
#include "FITK_Kernel/FITKEasyParam/FITKParameter.h"
#include <QDebug>
namespace IO
{
QString FITKFlowOFHDF5AdaptorGeometryComponent::getAdaptorClass()
{
return "FITKFlowOFHDF5AdaptorGeometryComponent";
}
bool FITKFlowOFHDF5AdaptorGeometryComponent::adaptR()
{
Interface::FITKAbsGeoCommand* geoCommand = dynamic_cast<Interface::FITKAbsGeoCommand*>(_dataObj);
if (!_reader || !geoCommand) return false;
Interface::FITKAbsGeoShapeAgent* geoModel = geoCommand->getShapeAgent();
if (!geoModel)return false;
//获取组件管理器
_geoComponentMgr = geoModel->getGeoComponentManager();
bool isR = true;
int count = readIntAttribute(*_h5Group, "componentCount");
for (int i = 0; i < count; ++i)
{
std::string name = std::to_string(i);
if (!_h5Group->attrExists(name))continue;
if (!_h5Group->nameExists(name))continue;
int type = readIntAttribute(*_h5Group, name);
H5::Group h5Group = _h5Group->openGroup(name);
Interface::FITKGeoComponent* component = new Interface::FITKGeoComponent(Interface::FITKModelEnum::FITKModelSetType(type));
isR &= this->geoComponentR(component, h5Group);
_geoComponentMgr->appendDataObj(component);
}
return isR;
}
bool FITKFlowOFHDF5AdaptorGeometryComponent::adaptW()
{
Interface::FITKAbsGeoCommand* geoCommand = dynamic_cast<Interface::FITKAbsGeoCommand*>(_dataObj);
if (!_writer || !geoCommand) return false;
Interface::FITKAbsGeoShapeAgent* geoModel = geoCommand->getShapeAgent();
if (!geoModel)return false;
//获取组件管理器
_geoComponentMgr = geoModel->getGeoComponentManager();
bool isW = true;
int count = _geoComponentMgr->getDataCount();
writeIntAttribute(*_h5Group, "componentCount", &count);
for (int i = 0; i < count; ++i)
{
Interface::FITKGeoComponent* component = _geoComponentMgr->getDataByIndex(i);
if (!component)continue;
int type = component->getGeoType();
std::string name = std::to_string(i);
writeIntAttribute(*_h5Group, name, &type);
H5::Group h5Group = _h5Group->createGroup(name);
isW &= this->geoComponentW(component, h5Group);
}
return isW;
}
bool FITKFlowOFHDF5AdaptorGeometryComponent::geoComponentW(Interface::FITKGeoComponent* component, H5::Group& h5Group)
{
if (!component)return false;
if (!writeNDataObject(component, h5Group))return false;
int absModelId = component->getAbsModelID();
writeIntAttribute(h5Group, "absModelID", &absModelId);
QList<int> allMember = component->getMember();
writeIntDataSet(h5Group, "member", allMember);
return true;
}
bool FITKFlowOFHDF5AdaptorGeometryComponent::geoComponentR(Interface::FITKGeoComponent* component, H5::Group& h5Group)
{
if (!component)return false;
if (!readNDataObject(component, h5Group))return false;
int absModelId = readIntAttribute(h5Group, "absModelID");
component->setModel(absModelId);
QList<int> allMember;
readIntDataSet(h5Group, "member", allMember);
component->setMember(allMember);
return true;
}
}