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.
164 lines
6.8 KiB
C++
164 lines
6.8 KiB
C++
#include "FITKOFCreatePatchDictWriter.h"
|
|
#include "FITKDictObject.h"
|
|
#include "FITKDictArray.h"
|
|
#include "FITKDictGroup.h"
|
|
#include "FITKDictVector.h"
|
|
#include "FITKDictValue.h"
|
|
#include "FITK_Kernel/FITKCore/FITKEnumTransformer.hpp"
|
|
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
|
|
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
|
|
#include "FITK_Interface/FITKInterfaceGeometry/FITKAbsGeoShapeAgent.h"
|
|
#include "FITK_Interface/FITKInterfaceGeometry/FITKGeoCommandList.h"
|
|
#include "FITK_Interface/FITKInterfaceMeshGen/FITKMeshGenInterface.h"
|
|
#include "FITK_Interface/FITKInterfaceMeshGen/FITKRegionMeshSizeGeom.h"
|
|
#include "FITK_Interface/FITKInterfaceMeshGen/FITKRegionMeshSize.h"
|
|
#include "FITK_Kernel/FITKCore/FITKDataRepo.h"
|
|
#include <QFileInfo>
|
|
#include <QtMath>
|
|
//命名空间
|
|
namespace IO
|
|
{
|
|
FITKOFCreatePatchDictWriter::FITKOFCreatePatchDictWriter()
|
|
{
|
|
}
|
|
FITKOFCreatePatchDictWriter::~FITKOFCreatePatchDictWriter()
|
|
{
|
|
}
|
|
|
|
void FITKOFCreatePatchDictWriter::setFilePath(const QString& filePath)
|
|
{
|
|
FITKOFAbstractDictWriter::setFilePath(filePath);
|
|
QFileInfo fileInfo(filePath);
|
|
//判断是否是路径
|
|
if (!fileInfo.isDir())return;
|
|
m_fileName = QString("%1/system/createPatchDict").arg(filePath);
|
|
}
|
|
|
|
bool FITKOFCreatePatchDictWriter::run()
|
|
{
|
|
//判断文件是否存在
|
|
if (m_fileName.isEmpty())return false;
|
|
//获取字典工程
|
|
this->openDictObject();
|
|
if (!m_objectDict)return false;
|
|
//写出FoamFile
|
|
this->dictObjectFoamFile();
|
|
//设置写出的网格区域数据
|
|
bool Ok = this->createPatchDictW();
|
|
//写出字典文件
|
|
if (Ok)
|
|
Ok = this->writeDictFile();
|
|
|
|
//关闭字典工程
|
|
this->closeDictObject();
|
|
return Ok;
|
|
}
|
|
|
|
QString FITKOFCreatePatchDictWriter::getFileName()
|
|
{
|
|
return m_fileName;
|
|
}
|
|
|
|
void FITKOFCreatePatchDictWriter::dictObjectFoamFile()
|
|
{
|
|
if (!m_objectDict)return;
|
|
//FoamFile
|
|
DICT::FITKDictGroup* group = new DICT::FITKDictGroup;
|
|
group->append("version", 2.0);
|
|
group->append("format", "ascii");
|
|
group->append("class", "dictionary");
|
|
group->append("location", "\"system\"");
|
|
group->append("object", "createPatchDict");
|
|
m_objectDict->append("FoamFile", group);
|
|
}
|
|
|
|
bool FITKOFCreatePatchDictWriter::createPatchDictW()
|
|
{
|
|
if (!m_objectDict)return false;
|
|
m_objectDict->append("pointSync", false);
|
|
//获取网格生成单例
|
|
Interface::FITKMeshGenInterface* meshGen = Interface::FITKMeshGenInterface::getInstance();
|
|
if (!meshGen)return false;
|
|
//获取区域网格尺寸管理器
|
|
Interface::FITKRegionMeshSizeManager* meshRegionManager = meshGen->getRegionMeshSizeMgr();
|
|
if (!meshRegionManager)return false;
|
|
//获取集合大小
|
|
QList<Interface::FITKAbstractRegionMeshSize*> geomList = meshRegionManager->getRigonByType(Interface::FITKAbstractRegionMeshSize::RegionType::RigonGeom);
|
|
//创建字典组件
|
|
DICT::FITKDictArray* patchArray = new DICT::FITKDictArray;
|
|
m_objectDict->append("patches", patchArray);
|
|
//获取几何数据
|
|
for (Interface::FITKAbstractRegionMeshSize* geom : geomList)
|
|
{
|
|
Interface::FITKRegionMeshSizeGeom* geomData = dynamic_cast<Interface::FITKRegionMeshSizeGeom*>(geom);
|
|
if (!geomData)continue;
|
|
Interface::FITKAbsGeoCommand* geoCommand = FITKDATAREPO->getTDataByID<Interface::FITKAbsGeoCommand>(geomData->getGeomID());
|
|
if (!geoCommand)continue;
|
|
//获取名称
|
|
QString name = geoCommand->getDataObjectName();
|
|
//获取模型
|
|
Interface::FITKAbsGeoShapeAgent* geoModel = geoCommand->getShapeAgent();
|
|
if (!geoModel)continue;
|
|
if (!geoModel->getVirtualTopoManager())return false;
|
|
Interface::FITKShapeVirtualTopoManager* faceMgr = geoModel->getVirtualTopoManager()->getShapeVirtualTopoManager(Interface::FITKGeoEnum::VTopoShapeType::VSFace);
|
|
if (!faceMgr)return false;
|
|
Interface::FITKGeoComponentManager* geoComponentManager = geoModel->getGeoComponentManager();
|
|
if (!geoComponentManager)continue;
|
|
//已设置的面
|
|
QList<int> index_list;
|
|
//获取面组链表
|
|
QList<Interface::FITKGeoComponent*> componentList = geoComponentManager->getGeoComponent(Interface::FITKModelEnum::FITKModelSetType::FMSSurface);
|
|
for (Interface::FITKGeoComponent* componentData : componentList)
|
|
{
|
|
if (!componentData)continue;
|
|
//面id
|
|
QList<int> id_list = componentData->getMember();
|
|
if (id_list.isEmpty())continue;
|
|
//获取名称
|
|
QString groupName = componentData->getDataObjectName();
|
|
DICT::FITKDictGroup* patch = new DICT::FITKDictGroup;
|
|
patchArray->append(patch);
|
|
patch->append("name", QString("%1_%2").arg(name).arg(groupName));
|
|
// PatchInfo
|
|
DICT::FITKDictGroup* patchInfo = new DICT::FITKDictGroup;
|
|
patch->append("patchInfo", patchInfo);
|
|
patchInfo->append("type", "wall");
|
|
patch->append("constructFrom", "patches");
|
|
DICT::FITKDictArray* patches = new DICT::FITKDictArray;
|
|
patch->append("patches", patches);
|
|
//添加面
|
|
for (int i = 0; i < id_list.size(); ++i)
|
|
{
|
|
Interface::FITKAbsVirtualTopo* topo = faceMgr->getDataByID(id_list.at(i));
|
|
if (!topo)continue;
|
|
int index = topo->getIndexLabel();
|
|
patches->append(QString("%1_face_%2").arg(name).arg(index));
|
|
index_list.append(index);
|
|
}
|
|
}
|
|
int allFaceNum = geoModel->getShapeCount(Interface::FITKModelEnum::FITKModelSetType::FMSSurface);
|
|
if (allFaceNum == index_list.size())continue;
|
|
//设置剩余的面
|
|
DICT::FITKDictGroup* patch = new DICT::FITKDictGroup;
|
|
patchArray->append(patch);
|
|
patch->append("name", name);
|
|
//PatchInfo
|
|
DICT::FITKDictGroup* patchInfo = new DICT::FITKDictGroup;
|
|
patch->append("patchInfo", patchInfo);
|
|
patchInfo->append("type", "wall");
|
|
patch->append("constructFrom", "patches");
|
|
DICT::FITKDictArray* patches = new DICT::FITKDictArray;
|
|
patch->append("patches", patches);
|
|
for (int j = 0; j < allFaceNum; ++j)
|
|
{
|
|
if (index_list.contains(j))continue;
|
|
patches->append(QString("%1_face_%2").arg(name).arg(j + 1));
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
|
|
|
|
|