#include "FITKOFBlockMeshDictWriter.h" #include "FITKDictObject.h" #include "FITKDictArray.h" #include "FITKDictGroup.h" #include "FITKDictVector.h" #include "FITKDictValue.h" #include "FITK_Kernel/FITKCore/FITKEnumTransformer.hpp" #include "FITK_Interface/FITKInterfaceMeshGen/FITKMeshGenInterface.h" #include "FITK_Interface/FITKInterfaceMeshGen/FITKRegionMeshSizeBox.h" #include "FITK_Interface/FITKInterfaceMeshGen/FITKRegionMeshSizeSphere.h" #include "FITK_Interface/FITKInterfaceMeshGen/FITKRegionMeshSizeCylinder.h" #include #include //命名空间 namespace IO { FITKOFBlockMeshDictWriter::FITKOFBlockMeshDictWriter() { } FITKOFBlockMeshDictWriter::~FITKOFBlockMeshDictWriter() { } void FITKOFBlockMeshDictWriter::setFilePath(const QString& filePath) { FITKOFAbstractDictWriter::setFilePath(filePath); QFileInfo fileInfo(filePath); //判断是否是路径 if (!fileInfo.isDir())return; m_fileName = QString("%1/system/blockMeshDict").arg(filePath); } bool FITKOFBlockMeshDictWriter::run() { //判断文件是否存在 if (m_fileName.isEmpty())return false; //获取网格生成单例 Interface::FITKMeshGenInterface* meshGen = Interface::FITKMeshGenInterface::getInstance(); if (!meshGen)return false; //获取区域网格尺寸管理器 Interface::FITKRegionMeshSizeManager* meshRegionManager = meshGen->getRegionMeshSizeMgr(); if (!meshRegionManager)return false; //{ // //插入数据 // Interface::FITKRegionMeshSizeBox* meshSizeData = new Interface::FITKRegionMeshSizeBox; // meshRegionManager->appendDataObj(meshSizeData); //} if (meshRegionManager->getDataCount() == 0)return false; //获取区域网格尺寸 m_regionMeshSize = meshRegionManager->getDataByIndex(0); //获取字典工程 this->openDictObject(); if (!m_objectDict)return false; //写出FoamFile this->dictObjectFoamFile(); //设置写出的网格区域数据 bool Ok = this->blockMeshRegionMeshW(); //写出字典文件 if (Ok) Ok = this->writeDictFile(); //关闭字典工程 this->closeDictObject(); return Ok; } QString FITKOFBlockMeshDictWriter::getFileName() { return m_fileName; } void FITKOFBlockMeshDictWriter::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", "blockMeshDict"); m_objectDict->append("FoamFile", group); } bool FITKOFBlockMeshDictWriter::blockMeshRegionMeshW() { if (!m_regionMeshSize)return false; bool ok = false; //获取区域类型 Interface::FITKAbstractRegionMeshSize::RegionType type = m_regionMeshSize->getRegionType(); if (type == Interface::FITKAbstractRegionMeshSize::RegionType::RegionBox) { ok = this->blockMeshRegionMeshBox(); } else if (type == Interface::FITKAbstractRegionMeshSize::RegionType::RegionCylinder) { ok = this->blockMeshRegionMeshCylinder(); } else if (type == Interface::FITKAbstractRegionMeshSize::RegionType::RegionSphere) { ok = this->blockMeshRegionMeshSphere(); } return ok; } bool FITKOFBlockMeshDictWriter::blockMeshRegionMeshBox() { Interface::FITKRegionMeshSizeBox* box = dynamic_cast(m_regionMeshSize); if (box == nullptr)return false; //vertices if (!this->vertexBox())return false; //获取离散数据 int division[3]{ box->getDivision(0), box->getDivision(1), box->getDivision(2) }; double grading[3]{ box->getGrading(0), box->getGrading(1), box->getGrading(2) }; QString divisionStr = QString("%1 %2 %3").arg(division[0]).arg(division[1]).arg(division[2]); if (fabsl(grading[0]) < 1e-16 || fabsl(grading[1]) < 1e-16 || fabsl(grading[2]) < 1e-16)return false; QString gradingStr = QString("%1 %2 %3").arg(grading[0]).arg(grading[1]).arg(grading[2]); //blocks DICT::FITKDictArray* blocks = new DICT::FITKDictArray; blocks->append(QStringList() << "(0 1 2 3 4 5 6 7)" << QString("(%1)").arg(divisionStr) << "simpleGrading" << QString("(%1)").arg(gradingStr), "hex"); m_objectDict->append("blocks", blocks); //edges DICT::FITKDictArray* edges = new DICT::FITKDictArray; m_objectDict->append("edges", edges); //boundary if (!this->boundaryBox())return false; return true; } bool FITKOFBlockMeshDictWriter::vertexBox() { Interface::FITKRegionMeshSizeBox* box = dynamic_cast(m_regionMeshSize); if (box == nullptr)return false; double mixPoint[3], length[3]; box->getPoint1(mixPoint); box->getLength(length); double maxPoint[3]{mixPoint[0] + length[0] , mixPoint[1] + length[1] , mixPoint[2] + length[2] }; //区域点数据vertices DICT::FITKDictArray* vertex = new DICT::FITKDictArray; //8个点数据 DICT::FITKDictVector* point1 = new DICT::FITKDictVector; point1->append(mixPoint[0]); point1->append(mixPoint[1]); point1->append(mixPoint[2]); DICT::FITKDictVector* point2 = new DICT::FITKDictVector; point2->append(maxPoint[0]); point2->append(mixPoint[1]); point2->append(mixPoint[2]); DICT::FITKDictVector* point3 = new DICT::FITKDictVector; point3->append(maxPoint[0]); point3->append(maxPoint[1]); point3->append(mixPoint[2]); DICT::FITKDictVector* point4 = new DICT::FITKDictVector; point4->append(mixPoint[0]); point4->append(maxPoint[1]); point4->append(mixPoint[2]); DICT::FITKDictVector* point5 = new DICT::FITKDictVector; point5->append(mixPoint[0]); point5->append(mixPoint[1]); point5->append(maxPoint[2]); DICT::FITKDictVector* point6 = new DICT::FITKDictVector; point6->append(maxPoint[0]); point6->append(mixPoint[1]); point6->append(maxPoint[2]); DICT::FITKDictVector* point7 = new DICT::FITKDictVector; point7->append(maxPoint[0]); point7->append(maxPoint[1]); point7->append(maxPoint[2]); DICT::FITKDictVector* point8 = new DICT::FITKDictVector; point8->append(mixPoint[0]); point8->append(maxPoint[1]); point8->append(maxPoint[2]); //插入8个点数据 vertex->append(point1); vertex->append(point2); vertex->append(point3); vertex->append(point4); vertex->append(point5); vertex->append(point6); vertex->append(point7); vertex->append(point8); //插入vertices m_objectDict->append("vertices", vertex); return true; } bool FITKOFBlockMeshDictWriter::boundaryBox() { Interface::FITKRegionMeshSizeBox* box = dynamic_cast(m_regionMeshSize); if (box == nullptr)return false; //类型 QHash strBoundaryType; strBoundaryType.insert(Interface::FITKAbstractRegionMeshSize::BoundaryType::BTWall, "wall"); strBoundaryType.insert(Interface::FITKAbstractRegionMeshSize::BoundaryType::BTPatch, "patch"); strBoundaryType.insert(Interface::FITKAbstractRegionMeshSize::BoundaryType::BTSymmetry, "symmetry"); strBoundaryType.insert(Interface::FITKAbstractRegionMeshSize::BoundaryType::BTEmpty, "empty"); //区域边界 DICT::FITKDictArray* boundary = new DICT::FITKDictArray; //插入boundary m_objectDict->append("boundary", boundary); QHash groupHash; for (int i = 0; i < 6; ++i) { int index = i; //获取类型 Interface::FITKAbstractRegionMeshSize::BoundaryType type = box->getBoundary(index); //获取类型名称 QString boundaryStr = box->getFaceName(i); DICT::FITKDictGroup* group = nullptr; if (groupHash.contains(boundaryStr)) group = groupHash.value(boundaryStr); else { group = new DICT::FITKDictGroup; group->append("type", strBoundaryType.value(type)); group->append("faces", new DICT::FITKDictArray); boundary->append(group, boundaryStr); groupHash.insert(boundaryStr, group); } if (!group)return false; DICT::FITKDictValue* value = group->value("faces"); if (!value)return false; bool ok = false; DICT::FITKDictArray* face = value->toArray(ok); if (!face)return false; DICT::FITKDictVector* vector = new DICT::FITKDictVector; this->vectorDataBoxByFaceIndex(vector, index); face->append(vector); } return true; } bool FITKOFBlockMeshDictWriter::vectorDataBoxByFaceIndex(DICT::FITKDictVector* face, int index) { if (!face) return false; if (index == 0) { face->append(0); face->append(4); face->append(7); face->append(3); } else if (index == 1) { face->append(2); face->append(6); face->append(5); face->append(1); } else if (index == 2) { face->append(1); face->append(5); face->append(4); face->append(0); } else if (index == 3) { face->append(3); face->append(7); face->append(6); face->append(2); } else if (index == 4) { face->append(0); face->append(3); face->append(2); face->append(1); } else if (index == 5) { face->append(4); face->append(5); face->append(6); face->append(7); } return true; } bool FITKOFBlockMeshDictWriter::blockMeshRegionMeshCylinder() { Interface::FITKRegionMeshSizeCylinder* cylinder = dynamic_cast(m_regionMeshSize); if (cylinder == nullptr)return false; //vertices if (!this->vertexCylinder())return false; //获取离散数据 int division[3]{ cylinder->getDivision(0), cylinder->getDivision(1), cylinder->getDivision(2) }; double grading[3]{ cylinder->getGrading(0), cylinder->getGrading(1), 1 }; if (fabsl(grading[0]) < 1e-16 || fabsl(grading[1]) < 1e-16)return false; double axialGrad = qPow(grading[1], 4); //blocks DICT::FITKDictArray* blocks = new DICT::FITKDictArray; blocks->append(QStringList() << QString("(0 1 2 3 4 5 6 7) (%1 %2 %3) simpleGrading (1 %4 1)").arg(division[2]).arg(division[1]).arg(division[2]).arg(axialGrad), "hex"); blocks->append(QStringList() << QString("(1 0 3 2 9 8 11 10) (%1 %2 %3) simpleGrading (1 %4 %5)").arg(division[2]).arg(division[1]).arg(division[0]).arg(axialGrad).arg(grading[0]), "hex"); blocks->append(QStringList() << QString("(5 1 2 6 13 9 10 14) (%1 %2 %3) simpleGrading (1 %4 %5)").arg(division[2]).arg(division[1]).arg(division[0]).arg(axialGrad).arg(grading[0]), "hex"); blocks->append(QStringList() << QString("(4 5 6 7 12 13 14 15) (%1 %2 %3) simpleGrading (1 %4 %5)").arg(division[2]).arg(division[1]).arg(division[0]).arg(axialGrad).arg(grading[0]), "hex"); blocks->append(QStringList() << QString("(0 4 7 3 8 12 15 11) (%1 %2 %3) simpleGrading (1 %4 %5)").arg(division[2]).arg(division[1]).arg(division[0]).arg(axialGrad).arg(grading[0]), "hex"); m_objectDict->append("blocks", blocks); //edges if (!this->edgesCylinder())return false; //boundary if (!this->boundaryCylinder())return false; return true; } void FITKOFBlockMeshDictWriter::conversionglobalPoint(double point[], double global[]) { Interface::FITKRegionMeshSizeCylinder* cylinder = dynamic_cast(m_regionMeshSize); if (cylinder == nullptr)return; //获取原点坐标 double originCoor[3]; cylinder->getLocation(originCoor); //获取方向 double direction[3]; cylinder->getDirection(direction); double axis[6]; cylinder->getPlaneAxis(axis); global[0] = originCoor[0] + axis[0] * point[0] + axis[3] * point[1] + direction[0] * point[2]; global[1] = originCoor[1] + axis[1] * point[0] + axis[4] * point[1] + direction[1] * point[2]; global[2] = originCoor[2] + axis[2] * point[0] + axis[5] * point[1] + direction[2] * point[2]; } bool FITKOFBlockMeshDictWriter::vertexCylinder() { Interface::FITKRegionMeshSizeCylinder* cylinder = dynamic_cast(m_regionMeshSize); if (cylinder == nullptr)return false; //获取长度 double length = cylinder->getLength(); //获取半径 double r = cylinder->getRadius(); //获取半径比例 double fraction = cylinder->getRadialFraction(); double bigLength = qSqrt(r * r / 2.0); double smallLength = bigLength * (1 - fraction); //获取局部坐标系 double point1[3]{ (-smallLength), (-smallLength), 0 }; double point2[3]{ (-smallLength), smallLength, 0 }; double point3[3]{ (-smallLength), smallLength, length }; double point4[3]{ (-smallLength), (-smallLength), length }; double point5[3]{ smallLength, (-smallLength), 0 }; double point6[3]{ smallLength, smallLength, 0 }; double point7[3]{ smallLength, smallLength, length }; double point8[3]{ smallLength, (-smallLength), length }; double point9[3]{ (-bigLength), (-bigLength), 0 }; double point10[3]{ (-bigLength), bigLength, 0 }; double point11[3]{ (-bigLength), bigLength, length }; double point12[3]{ (-bigLength), (-bigLength), length }; double point13[3]{ bigLength, (-bigLength), 0 }; double point14[3]{ bigLength, bigLength, 0 }; double point15[3]{ bigLength, bigLength, length }; double point16[3]{ bigLength, (-bigLength), length }; //转化全局坐标系 double global1[3]{ 0 }, global2[3]{ 0 }, global3[3]{ 0 }, global4[3]{ 0 }, global5[3]{ 0 }, global6[3]{ 0 }, global7[3]{ 0 }, global8[3]{ 0 }; this->conversionglobalPoint(point1, global1); this->conversionglobalPoint(point2, global2); this->conversionglobalPoint(point3, global3); this->conversionglobalPoint(point4, global4); this->conversionglobalPoint(point5, global5); this->conversionglobalPoint(point6, global6); this->conversionglobalPoint(point7, global7); this->conversionglobalPoint(point8, global8); double global9[3]{ 0 }, global10[3]{ 0 }, global11[3]{ 0 }, global12[3]{ 0 }, global13[3]{ 0 }, global14[3]{ 0 }, global15[3]{ 0 }, global16[3]{ 0 }; this->conversionglobalPoint(point9, global9); this->conversionglobalPoint(point10, global10); this->conversionglobalPoint(point11, global11); this->conversionglobalPoint(point12, global12); this->conversionglobalPoint(point13, global13); this->conversionglobalPoint(point14, global14); this->conversionglobalPoint(point15, global15); this->conversionglobalPoint(point16, global16); //区域点 DICT::FITKDictArray* vertices = new DICT::FITKDictArray; //插入vertices m_objectDict->append("vertices", vertices); insertPoint(vertices, global1); insertPoint(vertices, global2); insertPoint(vertices, global3); insertPoint(vertices, global4); insertPoint(vertices, global5); insertPoint(vertices, global6); insertPoint(vertices, global7); insertPoint(vertices, global8); insertPoint(vertices, global9); insertPoint(vertices, global10); insertPoint(vertices, global11); insertPoint(vertices, global12); insertPoint(vertices, global13); insertPoint(vertices, global14); insertPoint(vertices, global15); insertPoint(vertices, global16); return true; } bool FITKOFBlockMeshDictWriter::edgesCylinder() { Interface::FITKRegionMeshSizeCylinder* cylinder = dynamic_cast(m_regionMeshSize); if (cylinder == nullptr)return false; //获取长度 double length = cylinder->getLength(); //获取半径 double r = cylinder->getRadius(); //获取半径比例 double fraction = cylinder->getRadialFraction(); //局部坐标系上弧线的中点 double bigLength = qSqrt(r * r / 2.0); double smallLength = bigLength * (1 - fraction); double coor = r + smallLength - qSqrt(r * r - smallLength * smallLength); double point1[3]{ (-coor), 0, 0 };//0 1 double point2[3]{ 0, coor, 0 };//1 5 double point3[3]{ coor, 0, 0 };//4 5 double point4[3]{ 0, (-coor), 0 };//0 4 double point5[3]{ (-coor), 0, length };//3 2 double point6[3]{ 0, coor, length };//2 6 double point7[3]{ coor, 0, length };//7 6 double point8[3]{ 0, (-coor), length };//3 7 double point9[3]{ (-r), 0, 0 };//8 9 double point10[3]{ 0, r, 0 };//9 13 double point11[3]{ r, 0, 0 };//12 13 double point12[3]{ 0, (-r), 0 };// 8 12 double point13[3]{ (-r), 0, length };//11 10 double point14[3]{ 0, r, length };//10 14 double point15[3]{ r, 0, length };//15 14 double point16[3]{ 0, (-r), length };//11 15 //转化全局坐标系 double global1[3]{ 0 }, global2[3]{ 0 }, global3[3]{ 0 }, global4[3]{ 0 }, global5[3]{ 0 }, global6[3]{ 0 }, global7[3]{ 0 }, global8[3]{ 0 }; this->conversionglobalPoint(point1, global1); this->conversionglobalPoint(point2, global2); this->conversionglobalPoint(point3, global3); this->conversionglobalPoint(point4, global4); this->conversionglobalPoint(point5, global5); this->conversionglobalPoint(point6, global6); this->conversionglobalPoint(point7, global7); this->conversionglobalPoint(point8, global8); double global9[3]{ 0 }, global10[3]{ 0 }, global11[3]{ 0 }, global12[3]{ 0 }, global13[3]{ 0 }, global14[3]{ 0 }, global15[3]{ 0 }, global16[3]{ 0 }; this->conversionglobalPoint(point9, global9); this->conversionglobalPoint(point10, global10); this->conversionglobalPoint(point11, global11); this->conversionglobalPoint(point12, global12); this->conversionglobalPoint(point13, global13); this->conversionglobalPoint(point14, global14); this->conversionglobalPoint(point15, global15); this->conversionglobalPoint(point16, global16); //区域弧线 DICT::FITKDictArray* edges = new DICT::FITKDictArray; m_objectDict->append("edges", edges); edges->append(QStringList() << QString("0 1 (%1 %2 %3)").arg(global1[0]).arg(global1[1]).arg(global1[2]), "arc"); edges->append(QStringList() << QString("1 5 (%1 %2 %3)").arg(global2[0]).arg(global2[1]).arg(global2[2]), "arc"); edges->append(QStringList() << QString("4 5 (%1 %2 %3)").arg(global3[0]).arg(global3[1]).arg(global3[2]), "arc"); edges->append(QStringList() << QString("0 4 (%1 %2 %3)").arg(global4[0]).arg(global4[1]).arg(global4[2]), "arc"); edges->append(QStringList() << QString("3 2 (%1 %2 %3)").arg(global5[0]).arg(global5[1]).arg(global5[2]), "arc"); edges->append(QStringList() << QString("2 6 (%1 %2 %3)").arg(global6[0]).arg(global6[1]).arg(global6[2]), "arc"); edges->append(QStringList() << QString("7 6 (%1 %2 %3)").arg(global7[0]).arg(global7[1]).arg(global7[2]), "arc"); edges->append(QStringList() << QString("3 7 (%1 %2 %3)").arg(global8[0]).arg(global8[1]).arg(global8[2]), "arc"); edges->append(QStringList() << QString("8 9 (%1 %2 %3)").arg(global9[0]).arg(global9[1]).arg(global9[2]), "arc"); edges->append(QStringList() << QString("9 13 (%1 %2 %3)").arg(global10[0]).arg(global10[1]).arg(global10[2]), "arc"); edges->append(QStringList() << QString("12 13 (%1 %2 %3)").arg(global11[0]).arg(global11[1]).arg(global11[2]), "arc"); edges->append(QStringList() << QString("8 12 (%1 %2 %3)").arg(global12[0]).arg(global12[1]).arg(global12[2]), "arc"); edges->append(QStringList() << QString("11 10 (%1 %2 %3)").arg(global13[0]).arg(global13[1]).arg(global13[2]), "arc"); edges->append(QStringList() << QString("10 14 (%1 %2 %3)").arg(global14[0]).arg(global14[1]).arg(global14[2]), "arc"); edges->append(QStringList() << QString("15 14 (%1 %2 %3)").arg(global15[0]).arg(global15[1]).arg(global15[2]), "arc"); edges->append(QStringList() << QString("11 15 (%1 %2 %3)").arg(global16[0]).arg(global16[1]).arg(global16[2]), "arc"); return true; } bool FITKOFBlockMeshDictWriter::boundaryCylinder() { Interface::FITKRegionMeshSizeCylinder* cylinder = dynamic_cast(m_regionMeshSize); if (cylinder == nullptr)return false; //类型 QHash strBoundaryType; strBoundaryType.insert(Interface::FITKAbstractRegionMeshSize::BoundaryType::BTWall, "wall"); strBoundaryType.insert(Interface::FITKAbstractRegionMeshSize::BoundaryType::BTPatch, "patch"); strBoundaryType.insert(Interface::FITKAbstractRegionMeshSize::BoundaryType::BTSymmetry, "symmetry"); strBoundaryType.insert(Interface::FITKAbstractRegionMeshSize::BoundaryType::BTEmpty, "empty"); //区域边界 DICT::FITKDictArray* boundary = new DICT::FITKDictArray; //插入boundary m_objectDict->append("boundary", boundary); //顺序链表 QList orderList; orderList << 2 << 0 << 1; QHash groupHash; for (int i = 0; i < 3; ++i) { int index = orderList.at(i); //获取类型 Interface::FITKAbstractRegionMeshSize::BoundaryType type = cylinder->getBoundary(index); //获取类型名称 QString boundaryStr = cylinder->getFaceName(i); DICT::FITKDictGroup* group = nullptr; if (groupHash.contains(boundaryStr)) group = groupHash.value(boundaryStr); else { group = new DICT::FITKDictGroup; group->append("type", strBoundaryType.value(type)); group->append("faces", new DICT::FITKDictArray); boundary->append(group, boundaryStr); groupHash.insert(boundaryStr, group); } if (!group)return false; DICT::FITKDictValue* value = group->value("faces"); if (!value)return false; bool ok = false; DICT::FITKDictArray* face = value->toArray(ok); if (!face)return false; this->vectorDataCylinderByFaceIndex(face, index); } return true; } bool FITKOFBlockMeshDictWriter::vectorDataCylinderByFaceIndex(DICT::FITKDictArray* face, int index) { if (!face) return false; if (index == 0) { DICT::FITKDictVector* vector1 = new DICT::FITKDictVector; vector1->append(1); vector1->append(5); vector1->append(4); vector1->append(0); face->append(vector1); DICT::FITKDictVector* vector2 = new DICT::FITKDictVector; vector2->append(5); vector2->append(13); vector2->append(12); vector2->append(4); face->append(vector2); DICT::FITKDictVector* vector3 = new DICT::FITKDictVector; vector3->append(4); vector3->append(12); vector3->append(8); vector3->append(0); face->append(vector3); DICT::FITKDictVector* vector4 = new DICT::FITKDictVector; vector4->append(0); vector4->append(8); vector4->append(9); vector4->append(1); face->append(vector4); DICT::FITKDictVector* vector5 = new DICT::FITKDictVector; vector5->append(1); vector5->append(9); vector5->append(13); vector5->append(5); face->append(vector5); } else if (index == 1) { DICT::FITKDictVector* vector1 = new DICT::FITKDictVector; vector1->append(3); vector1->append(7); vector1->append(6); vector1->append(2); face->append(vector1); DICT::FITKDictVector* vector2 = new DICT::FITKDictVector; vector2->append(6); vector2->append(14); vector2->append(10); vector2->append(2); face->append(vector2); DICT::FITKDictVector* vector3 = new DICT::FITKDictVector; vector3->append(2); vector3->append(10); vector3->append(11); vector3->append(3); face->append(vector3); DICT::FITKDictVector* vector4 = new DICT::FITKDictVector; vector4->append(3); vector4->append(11); vector4->append(15); vector4->append(7); face->append(vector4); DICT::FITKDictVector* vector5 = new DICT::FITKDictVector; vector5->append(7); vector5->append(15); vector5->append(14); vector5->append(6); face->append(vector5); } else if (index == 2) { DICT::FITKDictVector* vector1 = new DICT::FITKDictVector; vector1->append(13); vector1->append(14); vector1->append(15); vector1->append(12); face->append(vector1); DICT::FITKDictVector* vector2 = new DICT::FITKDictVector; vector2->append(12); vector2->append(15); vector2->append(11); vector2->append(8); face->append(vector2); DICT::FITKDictVector* vector3 = new DICT::FITKDictVector; vector3->append(8); vector3->append(11); vector3->append(10); vector3->append(9); face->append(vector3); DICT::FITKDictVector* vector4 = new DICT::FITKDictVector; vector4->append(9); vector4->append(10); vector4->append(14); vector4->append(13); face->append(vector4); } return true; } bool FITKOFBlockMeshDictWriter::blockMeshRegionMeshSphere() { Interface::FITKRegionMeshSizeSphere* sphere = dynamic_cast(m_regionMeshSize); if (sphere == nullptr)return false; return true; } void FITKOFBlockMeshDictWriter::insertPoint(DICT::FITKDictArray* array, double point[]) { //插入点数据 DICT::FITKDictVector* vector = new DICT::FITKDictVector; array->append(vector); vector->append(point[0]); vector->append(point[1]); vector->append(point[2]); } }