From d59a9d18859c1aa5fc08d62fe224a330c6287d02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A6=85=E5=85=83=E5=A4=A9=E9=81=93?= Date: Thu, 7 Dec 2023 17:20:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BB=84=E4=BB=B6=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=B5=8B=E6=9D=90=E6=96=99=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CMakeLists.txt | 6 +- src/DataProperty/modelTreeItemType.h | 112 +- src/ModelData/elementProperty.cpp | 39 - src/ModelData/elementProperty.h | 36 - src/ModelData/modelDataBase.cpp | 1203 +++++----- src/ModelData/modelDataBase.h | 243 +- src/ModelData/modelDataBaseExtend.cpp | 68 +- src/ModelData/modelDataBaseExtend.h | 14 +- src/ModelData/modelDataPy.cpp | 206 +- src/ModelData/modelDataPy.h | 4 +- src/ProjectTree/DialogAddBC.cpp | 87 +- src/ProjectTree/DialogAddBC.h | 52 +- src/ProjectTree/DialogAddProperty.cpp | 58 - src/ProjectTree/DialogAddProperty.h | 42 - src/ProjectTree/DialogAddProperty.ui | 100 - src/ProjectTree/DialogAssignMaterial.cpp | 90 + src/ProjectTree/DialogAssignMaterial.h | 41 + src/ProjectTree/DialogAssignProperty.cpp | 93 - src/ProjectTree/DialogAssignProperty.h | 65 - src/ProjectTree/DialogImport.cpp | 112 +- src/ProjectTree/DialogImport.h | 43 +- src/ProjectTree/DialogRemoveReport.h | 30 +- src/ProjectTree/ProjectTreeWithBasicNode.cpp | 2264 +++++++++--------- src/ProjectTree/ProjectTreeWithBasicNode.h | 108 +- src/ProjectTree/projectTreeBase.cpp | 230 +- src/ProjectTree/projectTreeBase.h | 103 +- src/PythonModule/py/Case.py | 111 +- src/PythonModule/py/FastCAE.ini | 4 + 28 files changed, 2470 insertions(+), 3094 deletions(-) delete mode 100644 src/ModelData/elementProperty.cpp delete mode 100644 src/ModelData/elementProperty.h delete mode 100644 src/ProjectTree/DialogAddProperty.cpp delete mode 100644 src/ProjectTree/DialogAddProperty.h delete mode 100644 src/ProjectTree/DialogAddProperty.ui create mode 100644 src/ProjectTree/DialogAssignMaterial.cpp create mode 100644 src/ProjectTree/DialogAssignMaterial.h delete mode 100644 src/ProjectTree/DialogAssignProperty.cpp delete mode 100644 src/ProjectTree/DialogAssignProperty.h diff --git a/CMakeLists.txt b/CMakeLists.txt index d1cb933..12e8d06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -44,16 +44,16 @@ endif() #----------------------------------------------------------------------------- # 测试环境定义(如果在支持cmake系统的IDE中编写代码,可以打开以下注释,并将路径修改为自己的Qt路径) #----------------------------------------------------------------------------- -#[[set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install") +set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install") message(STATUS "${PROJECT_NAME} will be installed to ${CMAKE_INSTALL_PREFIX}") if (NOT DEFINED Qt5_DIR) if(FASTCAE_LINUX) set(Qt5_DIR "/opt/Qt5.14.2/5.14.2/gcc_64/lib/cmake/Qt5" CACHE PATH "Qt5Config.cmake所在目录" FORCE) elseif(FASTCAE_WIN) - set(Qt5_DIR "D:/software/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib/cmake/Qt5" CACHE PATH "Qt5Config.cmake所在目录" FORCE) + set(Qt5_DIR "D:/Qt/Qt5.14.2/5.14.2/msvc2017_64/lib/cmake/Qt5" CACHE PATH "Qt5Config.cmake所在目录" FORCE) endif() -endif()]] +endif() #----------------------------------------------------------------------------- # 编译选项设置 diff --git a/src/DataProperty/modelTreeItemType.h b/src/DataProperty/modelTreeItemType.h index 2f40042..c2e3d7f 100644 --- a/src/DataProperty/modelTreeItemType.h +++ b/src/DataProperty/modelTreeItemType.h @@ -26,16 +26,16 @@ #include #include "DataPropertyAPI.h" -/** - * @brief 模型树类型 - * @since 2.5.0 - */ + /** + * @brief 模型树类型 + * @since 2.5.0 + */ enum ProjectTreeType { - UnDefined = -1, ///< 未定义的 - TreeType = 0, ///< 树类型 - PluginDefType = 100, ///< 插件 - TreeTypeBoundary = 100000, ///< 边界 + UnDefined = -1, ///< 未定义的 + TreeType = 0, ///< 树类型 + PluginDefType = 100, ///< 插件 + TreeTypeBoundary = 100000, ///< 边界 }; /** @@ -44,56 +44,52 @@ enum ProjectTreeType */ enum TreeItemType { - Undefined = -1, ///< 未定义的 - GeometryRoot = 1, ///< 几何根节点 - GeometryChild, ///< 几何子节点 - Datum, ///< 基准 - DatumPlane, ///< 基准平面 - GeoComponentRoot, ///< 几何组件根节点 - GeoComponentChild, ///< 几何组件子节点 - MeshRoot, ///< 网格根节点 - MeshChild, ///< 网格子节点 - MeshSetRoot, ///< 网格组件根节点 - MeshSetChild, ///< 网格组件子节点 - MaterialRoot, ///< 材料根节点 - MaterialChild, ///< 材料子节点 - PhyaicsModelRoot, ///< 物理模型(算例)根节点 - ProjectRoot, ///< 工程根节点(Case_*) - ProjectSimulationSetting, ///< 仿真参数设置 - ProjectSimulationSettingChild, ///< 仿真参数设置子节点 - ProjectSimulationSettingGrandSon, ///< 仿真参数设置孙子节点 - ProjectGeometry, ///< 几何根节点 - ProjectGeometryChild, ///< 几何子节点 - - ProjectEleProperty, - ProjectElePropertyChild, - - ProjectComponent, ///< 工程组件节点 - ProjectComponentChild, ///< 工程组件子节点 - ProjectBoundaryCondation, ///< 工程边界条件节点 - ProjectBoundaryCondationChild, ///< 工程边界条件子节点 - ProjectMonitor, ///< 监视器节点 - ProjectMonitorChild, ///< 监视器子节点 - ProjectSolver, ///< 求解设置节点 - ProjectSolverChild, ///< 求解设置子节点 - ProjectSolverGrandSon, ///< 求解设置孙子节点 - ProjectPostSetting, ///< 后处理节点 - ProjectPostSettingChild, ///< 后处理子节点 - ProjectCaseTemplate, ///< - ProjectPost, ///< - ProjectPost3DGraph, ///< 三维绘图(云图???) - ProjectPost3DGraphChild, ///< 三维绘图子节点 - ProJectPost2DGraph, ///< 二维绘图 - ProJectPost2DGraphChild, ///< 二维绘图子节点 - ProjectPostCounter, ///< 云图 - ProjectPostCounterChild, ///< 云图子节点 - ProjectPostVector, ///< 矢量 - ProjectPostVectorChild, ///< 矢量子节点 - ProjectPostStreamLine, ///< 流线 - ProjectPostStreamLineChild, ///< 流线子节点 - ProjectReport, ///< 报告 - ProjectReportChild, ///< 报告子节点 - SelfDefineItem, ///< 自定义节点 + Undefined = -1, ///< 未定义的 + GeometryRoot = 1, ///< 几何根节点 + GeometryChild, ///< 几何子节点 + Datum, ///< 基准 + DatumPlane, ///< 基准平面 + GeoComponentRoot, ///< 几何组件根节点 + GeoComponentChild, ///< 几何组件子节点 + MeshRoot, ///< 网格根节点 + MeshChild, ///< 网格子节点 + MeshSetRoot, ///< 网格组件根节点 + MeshSetChild, ///< 网格组件子节点 + MaterialRoot, ///< 材料根节点 + MaterialChild, ///< 材料子节点 + PhyaicsModelRoot, ///< 物理模型(算例)根节点 + ProjectRoot, ///< 工程根节点(Case_*) + ProjectSimulationSetting, ///< 仿真参数设置 + ProjectSimulationSettingChild, ///< 仿真参数设置子节点 + ProjectSimulationSettingGrandSon, ///< 仿真参数设置孙子节点 + ProjectGeometry, ///< 几何根节点 + ProjectGeometryChild, ///< 几何子节点 + ProjectComponent, ///< 工程组件节点 + ProjectComponentChild, ///< 工程组件子节点 + ProjectBoundaryCondation, ///< 工程边界条件节点 + ProjectBoundaryCondationChild, ///< 工程边界条件子节点 + ProjectMonitor, ///< 监视器节点 + ProjectMonitorChild, ///< 监视器子节点 + ProjectSolver, ///< 求解设置节点 + ProjectSolverChild, ///< 求解设置子节点 + ProjectSolverGrandSon, ///< 求解设置孙子节点 + ProjectPostSetting, ///< 后处理节点 + ProjectPostSettingChild, ///< 后处理子节点 + ProjectCaseTemplate, ///< + ProjectPost, ///< + ProjectPost3DGraph, ///< 三维绘图(云图???) + ProjectPost3DGraphChild, ///< 三维绘图子节点 + ProJectPost2DGraph, ///< 二维绘图 + ProJectPost2DGraphChild, ///< 二维绘图子节点 + ProjectPostCounter, ///< 云图 + ProjectPostCounterChild, ///< 云图子节点 + ProjectPostVector, ///< 矢量 + ProjectPostVectorChild, ///< 矢量子节点 + ProjectPostStreamLine, ///< 流线 + ProjectPostStreamLineChild, ///< 流线子节点 + ProjectReport, ///< 报告 + ProjectReportChild, ///< 报告子节点 + SelfDefineItem, ///< 自定义节点 }; extern TreeItemType DATAPROPERTYAPI getTreeItemTypeByString(const QString &type); diff --git a/src/ModelData/elementProperty.cpp b/src/ModelData/elementProperty.cpp deleted file mode 100644 index 462e3ec..0000000 --- a/src/ModelData/elementProperty.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "elementProperty.h" - -namespace ModelData -{ - int ElementProperty::MaxID = 0; - - ElementProperty::ElementProperty() - { - this->setID(++MaxID); - } - void ElementProperty::setEleType(QString s) - { - _eletype = s; - this->appendProperty("Type", s); - } - QString ElementProperty::getEleType() - { - return _eletype; - } - - void ElementProperty::setMaterialID(int id) - { - _materialID = id; - this->appendProperty("Material", id); - } - - int ElementProperty::getMaterialID() - { - return _materialID; - } - - int ElementProperty::getMaxID() - { - return MaxID; - } - -} - - diff --git a/src/ModelData/elementProperty.h b/src/ModelData/elementProperty.h deleted file mode 100644 index 4cd0a34..0000000 --- a/src/ModelData/elementProperty.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef __ELEMENTPROPERTY_H__ -#define __ELEMENTPROPERTY_H__ - -#include "modelDataAPI.h" -#include "DataProperty/DataBase.h" - -namespace ModelData -{ - class MODELDATAAPI ElementProperty : public DataProperty::DataBase - { - public: - ElementProperty(); - ~ElementProperty() = default; - - void setEleType(QString s); - QString getEleType(); - - void setMaterialID(int id); - int getMaterialID(); - - static int getMaxID(); - - private: - QString _eletype{}; - int _materialID{ -1 }; - - static int MaxID; - - }; - - -} - - - -#endif \ No newline at end of file diff --git a/src/ModelData/modelDataBase.cpp b/src/ModelData/modelDataBase.cpp index 5ab0fea..743bb90 100644 --- a/src/ModelData/modelDataBase.cpp +++ b/src/ModelData/modelDataBase.cpp @@ -43,629 +43,588 @@ #include #include "MeshData/meshSingleton.h" #include "Geometry/geometryData.h" -#include "elementProperty.h" namespace ModelData { - int ModelDataBase::maxID = 0; - ModelDataBase::ModelDataBase(ProjectTreeType treeType) - : _treeType(treeType) - { - maxID++; - setID(maxID); - this->setModuleType(DataProperty::Module_Model); - _simlutationSetting = new SimlutationSettingBase(this); - _solverSetting = new SolverSettingBase(this); - } - - ModelDataBase::~ModelDataBase() - { - int n = _bcList.size(); - for (int i = 0; i < n; ++i) - { - BCBase::BCBase *bc = _bcList.at(i); - delete bc; - } - _bcList.clear(); - for (auto p : _elePropList) - delete p; - _elePropList.clear(); - } - - void ModelDataBase::resetMaxID() - { - maxID = 0; - } - - int ModelDataBase::getMaxID() - { - return maxID; - } - - void ModelDataBase::setTreeType(ProjectTreeType type) - { - _treeType = type; - } - - ProjectTreeType ModelDataBase::getTreeType() - { - return _treeType; - } - - void ModelDataBase::dataToStream(QDataStream *datas) - { - *datas << _name << _id << _treeType; - DataBase::dataToStream(datas); - } - - QDomElement &ModelDataBase::writeToProjectFile(QDomDocument *doc, QDomElement *parent) - { - QDomElement modelEle = doc->createElement("Model"); - modelEle.setAttribute("ID", QString::number(_id)); - // modelEle.setAttribute("Name", _name); - modelEle.setAttribute("Type", getTreeTypeToSring(_treeType)); - QDomElement name = doc->createElement("Name"); - QDomText nametext = doc->createTextNode(_name); - name.appendChild(nametext); - modelEle.appendChild(name); - - /*DataBase::writeParameters(doc, &modelEle); - const int ngeo = _geometryList.size(); - if (ngeo > 0) - { - QDomElement compEle = doc->createElement("GeometrySet"); - QDomText domtext = doc->createTextNode("ID"); - QString text; - for (int i = 0; i < ngeo; ++i) - text.append(QString("%1,").arg(_geometryList.at(i))); - text.resize(text.size() - 1); - domtext.setData(text); - compEle.appendChild(domtext); - modelEle.appendChild(compEle); - }*/ - - // Component - const int nset = _ComponentIDList.size(); - if (nset > 0) - { - QString IDs; - for (int i : _ComponentIDList) - IDs.append(QString::number(i)).append(','); - IDs = IDs.left(IDs.size() - 1); - QDomElement compEle = doc->createElement("Component"); - QDomText domtext = doc->createTextNode("ID"); - domtext.setData(IDs); - compEle.appendChild(domtext); - // compEle.setAttribute("ComponentIDs", IDs); - modelEle.appendChild(compEle); - } - // BC - const int nbc = _bcList.size(); - if (nbc > 0) - { - QDomElement bcelememnt = doc->createElement("BoundaryCondition"); - - for (int i = 0; i < nbc; ++i) - { - BCBase::BCBase *bc = _bcList.at(i); - QDomElement bcele = doc->createElement("BC"); - bc->writeToProjectFile(doc, &bcele); - bcelememnt.appendChild(bcele); - } - modelEle.appendChild(bcelememnt); - } - - QDomElement simEle = doc->createElement("SimlutationSetting"); - _simlutationSetting->writeToProjectFile(doc, &simEle); - modelEle.appendChild(simEle); - - QDomElement solverEle = doc->createElement("SolverSetting"); - _solverSetting->writeToProjectFile(doc, &solverEle); - modelEle.appendChild(solverEle); - - parent->appendChild(modelEle); - return modelEle; - } - - void ModelDataBase::setID(int id) - { - DataBase::setID(id); - if (id > maxID) - maxID = id; - } - - ProjectTreeType ModelDataBase::getTreeTypeByString(const QString &stype) - { - ProjectTreeType type = UnDefined; - - QString index = stype.toLower().remove("type"); - bool ok = false; - int i = index.toInt(&ok); - if (!ok) - { - assert(0); - return type; - } - return ProjectTreeType(TreeType + i); - } - - QString ModelDataBase::getTreeTypeToSring(ProjectTreeType type) - { - QString stype = "UnDefined"; - if ((int)type > 0) - { - stype = QString("Type%1").arg(int(type)); - } - return stype; - } - - void ModelDataBase::readDataFromProjectFile(QDomElement *e) - { - /*QDomNodeList geolist = e->elementsByTagName("GeometrySet"); - if (geolist.size() == 1) - { - QDomElement compEle = geolist.at(0).toElement(); - QString idtext = compEle.text(); - QStringList sids = idtext.split(","); - for (int i = 0; i < sids.size(); ++i) - { - int id = sids.at(i).toInt(); - _geometryList.append(id); - } - }*/ - int id = e->attribute("ID").toInt(); - this->setID(id); - QDomNodeList nodelist = e->elementsByTagName("Name"); - if (nodelist.size() == 1) - { - QDomElement nameEle = nodelist.at(0).toElement(); - QString name = nameEle.text(); - this->setName(name); - } - - // component - QDomNodeList complist = e->elementsByTagName("Component"); - if (complist.size() == 1) - { - QDomElement compEle = complist.at(0).toElement(); - QStringList sIDs = compEle.text().split(","); - for (QString sID : sIDs) - _ComponentIDList.append(sID.toInt()); - } - // BC - QDomNodeList bclist = e->elementsByTagName("BoundaryCondition"); - if (bclist.size() == 1) - { - QDomElement bcele = bclist.at(0).toElement(); - QDomNodeList bcelelist = bcele.elementsByTagName("BC"); - const int n = bcelelist.size(); - for (int i = 0; i < n; ++i) - { - QDomElement ele = bcelelist.at(i).toElement(); - QString stype = ele.attribute("Type"); - // int componentID = ele.attribute("SetID").toInt(); - QString t = stype.toLower(); - BCBase::BCBase *bc = nullptr; - - if (t == "pressure") - bc = new BCBase::BCPressure; - else if (t == "temperature") - bc = new BCBase::BCTemperature; - else if (t == "displacement") - bc = new BCBase::BCDisplacement; - else if (t == "userdefine") - bc = new BCBase::BCUserDef; - else if (t == "rotation" || t == "anglevelocity" || t == "angleacceleration") - bc = new BCBase::BCScalarBase; - else if (t == "acceleration" || t == "velocity") - bc = new BCBase::BCVectorBase; - else - bc = new BCBase::BCBase; - if (bc == nullptr) - continue; - - // bc->setBCType(); - bc->readDataFromProjectFile(&ele); - // _bcList.append(bc); - this->appeendBC(bc); - bc->generateParaInfo(); - } - } - // Simlutation setting - QDomNodeList simSetting = e->elementsByTagName("SimlutationSetting"); - if (simSetting.size() == 1) - { - QDomElement simele = simSetting.at(0).toElement(); - _simlutationSetting->readDataFromProjectFile(&simele); - } - QDomNodeList solverSetting = e->elementsByTagName("SolverSetting"); - if (solverSetting.size() == 1) - { - QDomElement solverele = solverSetting.at(0).toElement(); - _solverSetting->readDataFromProjectFile(&solverele); - } - } - - void ModelDataBase::writeToSolverText(QTextStream *stream) - { - Q_UNUSED(stream) - ///< MG for wave resistance - // if (_treeType != TreeType + 1){ return; } - // *stream << "船型标识符(os表示油船,cs表示集装箱船,bs表示散货船):" << endl; - } - - void ModelDataBase::writeToSolverXML(QDomDocument *doc, QDomElement *e) - { - // Q_UNUSED(doc); - writeToProjectFile(doc, e); - } - - QString ModelDataBase::getPath() - { - QString workingdir = Setting::BusAPI::instance()->getWorkingDir(); - QDir dir; - if ((workingdir.isEmpty()) || (!dir.exists(workingdir))) - { - QMessageBox::warning(nullptr, QObject::tr("Warning"), QObject::tr("Wrong Working Directory !")); - return ""; - } - QString path = workingdir + "/" + _name; - if (!dir.exists(path)) - dir.mkdir(path); - return path; - } - - bool ModelDataBase::checkSolveableStatus(QVector &messages) - { - Q_UNUSED(messages) - return true; - } - - void ModelDataBase::setSolveTime(double t) - { - _solvetime = t; - } - - double ModelDataBase::getSolveTime() - { - return _solvetime; - } - - void ModelDataBase::setOutputFileName(QString name) - { - _outputFileName = name; - // qDebug() << name; - } - - QString &ModelDataBase::getOutputFileName() - { - return _outputFileName; - } - - int ModelDataBase::getBCCount() - { - return _bcList.size(); - } - - void ModelDataBase::appeendBC(BCBase::BCBase *bc) - { - int index = _bcList.size(); - _bcList.append(bc); - bc->setIndex(index); - bc->setID(_id); - } - - QList ModelDataBase::getBCByType(BCBase::BCType t) - { - QList l; - const int n = _bcList.size(); - for (int i = 0; i < n; ++i) - { - BCBase::BCBase *bc = _bcList.at(i); - if (bc->getBCType() == t) - l.append(bc); - } - return l; - } - - BCBase::BCBase *ModelDataBase::getBCAt(const int index) - { - if (index >= 0 && index < _bcList.size()) - return _bcList.at(index); - return nullptr; - } - - void ModelDataBase::removeBCAt(const int index) - { - assert(index >= 0 && index < _bcList.size()); - _bcList.removeAt(index); - } - - void ModelDataBase::setComponentIDList(const QList &ids) - { - _ComponentIDList = ids; - } - - void ModelDataBase::addComponentID(int cpId) - { - if (!_ComponentIDList.contains(cpId)) - _ComponentIDList.append(cpId); - } - - QList ModelDataBase::getMeshSetList() - { - QList ids; - auto meshdata = MeshData::MeshData::getInstance(); - for (int id : _ComponentIDList) - if (meshdata->getMeshSetByID(id)) - ids.append(id); - return ids; - } - - void ModelDataBase::setMeshKernelList(const QList &kids) - { - _meshKernalIDList = kids; - } - - void ModelDataBase::addMeshKernalId(const int kId) - { - if (!_meshKernalIDList.contains(kId)) - _meshKernalIDList.append(kId); - } - - QList &ModelDataBase::getMeshKernalList() - { - return _meshKernalIDList; - } - - void ModelDataBase::removeComponentAt(int index) - { - assert(index >= 0 && index < _ComponentIDList.size()); - int compid = _ComponentIDList.at(index); - _ComponentIDList.removeAt(index); - QList tmp = _bcList; - for (BCBase::BCBase *bc : tmp) - { - if (bc && bc->getComponentID() == compid) - { - _bcList.removeOne(bc); - delete bc; - bc = nullptr; - break; - } - } - } - - SimlutationSettingBase *ModelDataBase::getSimlutationSetting() - { - return _simlutationSetting; - } - - SolverSettingBase *ModelDataBase::getSolverSetting() - { - return _solverSetting; - } - - void ModelDataBase::writeToProjectFile1(QDomDocument *doc, QDomElement *modelEle) - { - // QDomElement modelEle = doc->createElement("Model"); - QDomAttr idattr = doc->createAttribute("ID"); - idattr.setValue(QString::number(_id)); - modelEle->setAttributeNode(idattr); - QDomAttr typeAttr = doc->createAttribute("Type"); - typeAttr.setValue(getTreeTypeToSring(_treeType)); - modelEle->setAttributeNode(typeAttr); - QDomElement name = doc->createElement("Name"); - QDomText nametext = doc->createTextNode(_name); - name.appendChild(nametext); - modelEle->appendChild(name); - - const int ngeo = _geometryList.size(); - if (ngeo > 0) - { - QDomElement compEle = doc->createElement("GeometrySet"); - QDomText domtext = doc->createTextNode("ID"); - QString text; - for (int i = 0; i < ngeo; ++i) - text.append(QString("%1,").arg(_geometryList.at(i))); - text.resize(text.size() - 1); - domtext.setData(text); - compEle.appendChild(domtext); - modelEle->appendChild(compEle); - } - - // Set - const int nset = _ComponentIDList.size(); - if (nset > 0) - { - QDomElement compEle = doc->createElement("Component"); - QDomText domtext = doc->createTextNode("ID"); - QString text; - for (int id : _ComponentIDList) - text.append(QString("%1,").arg(id)); - text.resize(text.size() - 1); - domtext.setData(text); - compEle.appendChild(domtext); - modelEle->appendChild(compEle); - } - // BC - const int nbc = _bcList.size(); - if (nbc > 0) - { - QDomElement bcelememnt = doc->createElement("BoundaryCondition"); - - for (int i = 0; i < nbc; ++i) - { - BCBase::BCBase *bc = _bcList.at(i); - QDomElement bcele = doc->createElement("BC"); - bc->writeToProjectFile(doc, &bcele); - bcelememnt.appendChild(bcele); - } - modelEle->appendChild(bcelememnt); - } - - QDomElement simEle = doc->createElement("SimlutationSetting"); - _simlutationSetting->writeToProjectFile(doc, &simEle); - modelEle->appendChild(simEle); - - QDomElement solverEle = doc->createElement("SolverSetting"); - _solverSetting->writeToProjectFile(doc, &solverEle); - modelEle->appendChild(solverEle); - } - - void ModelDataBase::copyFormConfig() - { - ConfigOption::DataConfig *dataconfig = ConfigOption::ConfigOption::getInstance()->getDataConfig(); - if (dataconfig == nullptr) - return; - DataProperty::DataBase *sim = dataconfig->getSimlutationData(_treeType); - if (sim != nullptr) - _simlutationSetting->copy(sim); - - DataProperty::DataBase *solver = dataconfig->getSolverSettingData(_treeType); - if (solver != nullptr) - _solverSetting->copy(solver); - } - - bool ModelDataBase::isComponentUsed(int index) - { - if (index < 0 || index >= _ComponentIDList.size()) - return false; - const int id = _ComponentIDList.at(index); - for (int i = 0; i < _bcList.size(); ++i) - { - BCBase::BCBase *bc = _bcList.at(i); - if (bc->getComponentID() == id) - return true; - } - return false; - } - - DataProperty::ParameterBase *ModelDataBase::getParameterByName(QString name) - { - DataProperty::ParameterBase *P = nullptr; - P = _simlutationSetting->getParameterByName(name); - if (P != nullptr) - return P; - P = _solverSetting->getParameterByName(name); - if (P != nullptr) - return P; - return DataBase::getParameterByName(name); - } - - void ModelDataBase::removeParameter(DataProperty::ParameterBase *p) - { - _simlutationSetting->removeParameter(p); - _solverSetting->removeParameter(p); - DataBase::removeParameter(p); - } - - DataProperty::ParameterGroup *ModelDataBase::getParameterGroupByName(QString name) - { - DataProperty::ParameterGroup *g = nullptr; - g = _simlutationSetting->getParameterGroupByName(name); - if (g != nullptr) - return g; - g = _solverSetting->getParameterGroupByName(name); - if (g != nullptr) - return g; - return DataBase::getParameterGroupByName(name); - } - - void ModelDataBase::removeParameterGroup(DataProperty::ParameterGroup *g) - { - _simlutationSetting->removeParameterGroup(g); - _solverSetting->removeParameterGroup(g); - DataBase::removeParameterGroup(g); - } - - QList &ModelDataBase::getGeometryList() - { - return _geometryList; - } - - void ModelDataBase::setGeometryList(QList geo) - { - _geometryList = geo; - } - - QList ModelDataBase::getGeoComponentIDList() - { - QList ids; - auto geodata = Geometry::GeometryData::getInstance(); - for (int id : _ComponentIDList) - { - if (geodata->getGeoComponentByID(id)) - ids.append(id); - } - return ids; - } - - void ModelDataBase::appendEleProperty(ElementProperty *p) - { - if (p != nullptr) - _elePropList.append(p); - } - - int ModelDataBase::getElePropCount() - { - return _elePropList.size(); - } - - ElementProperty *ModelDataBase::getElePropertyAt(int index) - { - if (index < 0 || index >= _elePropList.size()) - return nullptr; - return _elePropList.at(index); - } - - ElementProperty *ModelDataBase::getElePropertyByID(int id) - { - for (auto p : _elePropList) - { - if (id == p->getID()) - return p; - } - return nullptr; - } - - void ModelDataBase::removeElePropAt(int index) - { - if (index < 0 || index >= _elePropList.size()) - return; - auto m = _elePropList.at(index); - _elePropList.removeOne(m); - delete m; - } - - void ModelDataBase::generateParaInfo() - { - _solverSetting->generateParaInfo(); - _simlutationSetting->generateParaInfo(); - DataBase::generateParaInfo(); - } - - const QList &ModelDataBase::getComponentIDList() - { - return _ComponentIDList; - } - - bool ModelDataBase::removeComponentByID(int id) - { - return _ComponentIDList.removeOne(id); - } - - void ModelDataBase::removeBCByComponentID(int id) - { - QList tmp = _bcList; - for (BCBase::BCBase *bc : tmp) - { - if (bc->getComponentID() == id) - { - _bcList.removeOne(bc); - delete bc; - bc = nullptr; - } - } - } + int ModelDataBase::maxID = 0; + ModelDataBase::ModelDataBase(ProjectTreeType treeType) + : _treeType(treeType) + { + maxID++; + setID(maxID); + this->setModuleType(DataProperty::Module_Model); + _simlutationSetting = new SimlutationSettingBase(this); + _solverSetting = new SolverSettingBase(this); + } + + ModelDataBase::~ModelDataBase() + { + int n = _bcList.size(); + for (int i = 0; i < n; ++i) + { + BCBase::BCBase *bc = _bcList.at(i); + delete bc; + } + _bcList.clear(); + } + + void ModelDataBase::resetMaxID() + { + maxID = 0; + } + + int ModelDataBase::getMaxID() + { + return maxID; + } + + void ModelDataBase::setTreeType(ProjectTreeType type) + { + _treeType = type; + } + + ProjectTreeType ModelDataBase::getTreeType() + { + return _treeType; + } + + void ModelDataBase::dataToStream(QDataStream *datas) + { + *datas << _name << _id << _treeType; + DataBase::dataToStream(datas); + } + + QDomElement &ModelDataBase::writeToProjectFile(QDomDocument *doc, QDomElement *parent) + { + QDomElement modelEle = doc->createElement("Model"); + modelEle.setAttribute("ID", QString::number(_id)); + // modelEle.setAttribute("Name", _name); + modelEle.setAttribute("Type", getTreeTypeToSring(_treeType)); + QDomElement name = doc->createElement("Name"); + QDomText nametext = doc->createTextNode(_name); + name.appendChild(nametext); + modelEle.appendChild(name); + + /*DataBase::writeParameters(doc, &modelEle); + const int ngeo = _geometryList.size(); + if (ngeo > 0) + { + QDomElement compEle = doc->createElement("GeometrySet"); + QDomText domtext = doc->createTextNode("ID"); + QString text; + for (int i = 0; i < ngeo; ++i) + text.append(QString("%1,").arg(_geometryList.at(i))); + text.resize(text.size() - 1); + domtext.setData(text); + compEle.appendChild(domtext); + modelEle.appendChild(compEle); + }*/ + + // Component + const int nset = _ComponentIDList.size(); + if (nset > 0) + { + QString IDs; + for (int i : _ComponentIDList) + IDs.append(QString::number(i)).append(','); + IDs = IDs.left(IDs.size() - 1); + QDomElement compEle = doc->createElement("Component"); + QDomText domtext = doc->createTextNode("ID"); + domtext.setData(IDs); + compEle.appendChild(domtext); + // compEle.setAttribute("ComponentIDs", IDs); + modelEle.appendChild(compEle); + } + // BC + const int nbc = _bcList.size(); + if (nbc > 0) + { + QDomElement bcelememnt = doc->createElement("BoundaryCondition"); + + for (int i = 0; i < nbc; ++i) + { + BCBase::BCBase *bc = _bcList.at(i); + QDomElement bcele = doc->createElement("BC"); + bc->writeToProjectFile(doc, &bcele); + bcelememnt.appendChild(bcele); + } + modelEle.appendChild(bcelememnt); + } + + QDomElement simEle = doc->createElement("SimlutationSetting"); + _simlutationSetting->writeToProjectFile(doc, &simEle); + modelEle.appendChild(simEle); + + QDomElement solverEle = doc->createElement("SolverSetting"); + _solverSetting->writeToProjectFile(doc, &solverEle); + modelEle.appendChild(solverEle); + + parent->appendChild(modelEle); + return modelEle; + } + + void ModelDataBase::setID(int id) + { + DataBase::setID(id); + if (id > maxID) + maxID = id; + } + + ProjectTreeType ModelDataBase::getTreeTypeByString(const QString &stype) + { + ProjectTreeType type = UnDefined; + + QString index = stype.toLower().remove("type"); + bool ok = false; + int i = index.toInt(&ok); + if (!ok) + { + assert(0); + return type; + } + return ProjectTreeType(TreeType + i); + } + + QString ModelDataBase::getTreeTypeToSring(ProjectTreeType type) + { + QString stype = "UnDefined"; + if ((int)type > 0) + { + stype = QString("Type%1").arg(int(type)); + } + return stype; + } + + void ModelDataBase::readDataFromProjectFile(QDomElement *e) + { + /*QDomNodeList geolist = e->elementsByTagName("GeometrySet"); + if (geolist.size() == 1) + { + QDomElement compEle = geolist.at(0).toElement(); + QString idtext = compEle.text(); + QStringList sids = idtext.split(","); + for (int i = 0; i < sids.size(); ++i) + { + int id = sids.at(i).toInt(); + _geometryList.append(id); + } + }*/ + int id = e->attribute("ID").toInt(); + this->setID(id); + QDomNodeList nodelist = e->elementsByTagName("Name"); + if (nodelist.size() == 1) + { + QDomElement nameEle = nodelist.at(0).toElement(); + QString name = nameEle.text(); + this->setName(name); + } + + // component + QDomNodeList complist = e->elementsByTagName("Component"); + if (complist.size() == 1) + { + QDomElement compEle = complist.at(0).toElement(); + QStringList sIDs = compEle.text().split(","); + for (QString sID : sIDs) + _ComponentIDList.append(sID.toInt()); + } + // BC + QDomNodeList bclist = e->elementsByTagName("BoundaryCondition"); + if (bclist.size() == 1) + { + QDomElement bcele = bclist.at(0).toElement(); + QDomNodeList bcelelist = bcele.elementsByTagName("BC"); + const int n = bcelelist.size(); + for (int i = 0; i < n; ++i) + { + QDomElement ele = bcelelist.at(i).toElement(); + QString stype = ele.attribute("Type"); + // int componentID = ele.attribute("SetID").toInt(); + QString t = stype.toLower(); + BCBase::BCBase *bc = nullptr; + + if (t == "pressure") + bc = new BCBase::BCPressure; + else if (t == "temperature") + bc = new BCBase::BCTemperature; + else if (t == "displacement") + bc = new BCBase::BCDisplacement; + else if (t == "userdefine") + bc = new BCBase::BCUserDef; + else if (t == "rotation" || t == "anglevelocity" || t == "angleacceleration") + bc = new BCBase::BCScalarBase; + else if (t == "acceleration" || t == "velocity") + bc = new BCBase::BCVectorBase; + else + bc = new BCBase::BCBase; + if (bc == nullptr) + continue; + + // bc->setBCType(); + bc->readDataFromProjectFile(&ele); + // _bcList.append(bc); + this->appeendBC(bc); + bc->generateParaInfo(); + } + } + // Simlutation setting + QDomNodeList simSetting = e->elementsByTagName("SimlutationSetting"); + if (simSetting.size() == 1) + { + QDomElement simele = simSetting.at(0).toElement(); + _simlutationSetting->readDataFromProjectFile(&simele); + } + QDomNodeList solverSetting = e->elementsByTagName("SolverSetting"); + if (solverSetting.size() == 1) + { + QDomElement solverele = solverSetting.at(0).toElement(); + _solverSetting->readDataFromProjectFile(&solverele); + } + } + + void ModelDataBase::writeToSolverText(QTextStream *stream) + { + Q_UNUSED(stream) + ///< MG for wave resistance + // if (_treeType != TreeType + 1){ return; } + // *stream << "船型标识符(os表示油船,cs表示集装箱船,bs表示散货船):" << endl; + } + + void ModelDataBase::writeToSolverXML(QDomDocument *doc, QDomElement *e) + { + // Q_UNUSED(doc); + writeToProjectFile(doc, e); + } + + QString ModelDataBase::getPath() + { + QString workingdir = Setting::BusAPI::instance()->getWorkingDir(); + QDir dir; + if ((workingdir.isEmpty()) || (!dir.exists(workingdir))) + { + QMessageBox::warning(nullptr, QObject::tr("Warning"), QObject::tr("Wrong Working Directory !")); + return ""; + } + QString path = workingdir + "/" + _name; + if (!dir.exists(path)) + dir.mkdir(path); + return path; + } + + bool ModelDataBase::checkSolveableStatus(QVector &messages) + { + Q_UNUSED(messages) + return true; + } + + void ModelDataBase::setSolveTime(double t) + { + _solvetime = t; + } + + double ModelDataBase::getSolveTime() + { + return _solvetime; + } + + void ModelDataBase::setOutputFileName(QString name) + { + _outputFileName = name; + // qDebug() << name; + } + + QString &ModelDataBase::getOutputFileName() + { + return _outputFileName; + } + + int ModelDataBase::getBCCount() + { + return _bcList.size(); + } + + void ModelDataBase::appeendBC(BCBase::BCBase *bc) + { + int index = _bcList.size(); + _bcList.append(bc); + bc->setIndex(index); + bc->setID(_id); + } + + QList ModelDataBase::getBCByType(BCBase::BCType t) + { + QList l; + const int n = _bcList.size(); + for (int i = 0; i < n; ++i) + { + BCBase::BCBase *bc = _bcList.at(i); + if (bc->getBCType() == t) + l.append(bc); + } + return l; + } + + BCBase::BCBase *ModelDataBase::getBCAt(const int index) + { + if (index >= 0 && index < _bcList.size()) + return _bcList.at(index); + return nullptr; + } + + void ModelDataBase::removeBCAt(const int index) + { + assert(index >= 0 && index < _bcList.size()); + _bcList.removeAt(index); + } + + void ModelDataBase::setComponentIDList(const QList &ids) + { + _ComponentIDList = ids; + } + + void ModelDataBase::addComponentID(int cpId) + { + if (!_ComponentIDList.contains(cpId)) + _ComponentIDList.append(cpId); + } + + QList ModelDataBase::getMeshSetList() + { + QList ids; + auto meshdata = MeshData::MeshData::getInstance(); + for (int id : _ComponentIDList) + if (meshdata->getMeshSetByID(id)) + ids.append(id); + return ids; + } + + void ModelDataBase::setMeshKernelList(const QList &kids) + { + _meshKernalIDList = kids; + } + + void ModelDataBase::addMeshKernalId(const int kId) + { + if (!_meshKernalIDList.contains(kId)) + _meshKernalIDList.append(kId); + } + + QList &ModelDataBase::getMeshKernalList() + { + return _meshKernalIDList; + } + + void ModelDataBase::removeComponentAt(int index) + { + assert(index >= 0 && index < _ComponentIDList.size()); + int compid = _ComponentIDList.at(index); + _ComponentIDList.removeAt(index); + QList tmp = _bcList; + for (BCBase::BCBase *bc : tmp) + { + if (bc && bc->getComponentID() == compid) + { + _bcList.removeOne(bc); + delete bc; + bc = nullptr; + break; + } + } + } + + SimlutationSettingBase *ModelDataBase::getSimlutationSetting() + { + return _simlutationSetting; + } + + SolverSettingBase *ModelDataBase::getSolverSetting() + { + return _solverSetting; + } + + void ModelDataBase::writeToProjectFile1(QDomDocument *doc, QDomElement *modelEle) + { + // QDomElement modelEle = doc->createElement("Model"); + QDomAttr idattr = doc->createAttribute("ID"); + idattr.setValue(QString::number(_id)); + modelEle->setAttributeNode(idattr); + QDomAttr typeAttr = doc->createAttribute("Type"); + typeAttr.setValue(getTreeTypeToSring(_treeType)); + modelEle->setAttributeNode(typeAttr); + QDomElement name = doc->createElement("Name"); + QDomText nametext = doc->createTextNode(_name); + name.appendChild(nametext); + modelEle->appendChild(name); + + const int ngeo = _geometryList.size(); + if (ngeo > 0) + { + QDomElement compEle = doc->createElement("GeometrySet"); + QDomText domtext = doc->createTextNode("ID"); + QString text; + for (int i = 0; i < ngeo; ++i) + text.append(QString("%1,").arg(_geometryList.at(i))); + text.resize(text.size() - 1); + domtext.setData(text); + compEle.appendChild(domtext); + modelEle->appendChild(compEle); + } + + // Set + const int nset = _ComponentIDList.size(); + if (nset > 0) + { + QDomElement compEle = doc->createElement("Component"); + QDomText domtext = doc->createTextNode("ID"); + QString text; + for (int id : _ComponentIDList) + text.append(QString("%1,").arg(id)); + text.resize(text.size() - 1); + domtext.setData(text); + compEle.appendChild(domtext); + modelEle->appendChild(compEle); + } + // BC + const int nbc = _bcList.size(); + if (nbc > 0) + { + QDomElement bcelememnt = doc->createElement("BoundaryCondition"); + + for (int i = 0; i < nbc; ++i) + { + BCBase::BCBase *bc = _bcList.at(i); + QDomElement bcele = doc->createElement("BC"); + bc->writeToProjectFile(doc, &bcele); + bcelememnt.appendChild(bcele); + } + modelEle->appendChild(bcelememnt); + } + + QDomElement simEle = doc->createElement("SimlutationSetting"); + _simlutationSetting->writeToProjectFile(doc, &simEle); + modelEle->appendChild(simEle); + + QDomElement solverEle = doc->createElement("SolverSetting"); + _solverSetting->writeToProjectFile(doc, &solverEle); + modelEle->appendChild(solverEle); + } + + void ModelDataBase::copyFormConfig() + { + ConfigOption::DataConfig *dataconfig = ConfigOption::ConfigOption::getInstance()->getDataConfig(); + if (dataconfig == nullptr) + return; + DataProperty::DataBase *sim = dataconfig->getSimlutationData(_treeType); + if (sim != nullptr) + _simlutationSetting->copy(sim); + + DataProperty::DataBase *solver = dataconfig->getSolverSettingData(_treeType); + if (solver != nullptr) + _solverSetting->copy(solver); + } + + bool ModelDataBase::isComponentUsed(int index) + { + if (index < 0 || index >= _ComponentIDList.size()) + return false; + const int id = _ComponentIDList.at(index); + for (int i = 0; i < _bcList.size(); ++i) + { + BCBase::BCBase *bc = _bcList.at(i); + if (bc->getComponentID() == id) + return true; + } + return false; + } + + DataProperty::ParameterBase *ModelDataBase::getParameterByName(QString name) + { + DataProperty::ParameterBase *P = nullptr; + P = _simlutationSetting->getParameterByName(name); + if (P != nullptr) + return P; + P = _solverSetting->getParameterByName(name); + if (P != nullptr) + return P; + return DataBase::getParameterByName(name); + } + + void ModelDataBase::removeParameter(DataProperty::ParameterBase *p) + { + _simlutationSetting->removeParameter(p); + _solverSetting->removeParameter(p); + DataBase::removeParameter(p); + } + + DataProperty::ParameterGroup *ModelDataBase::getParameterGroupByName(QString name) + { + DataProperty::ParameterGroup *g = nullptr; + g = _simlutationSetting->getParameterGroupByName(name); + if (g != nullptr) + return g; + g = _solverSetting->getParameterGroupByName(name); + if (g != nullptr) + return g; + return DataBase::getParameterGroupByName(name); + } + + void ModelDataBase::removeParameterGroup(DataProperty::ParameterGroup *g) + { + _simlutationSetting->removeParameterGroup(g); + _solverSetting->removeParameterGroup(g); + DataBase::removeParameterGroup(g); + } + + QList &ModelDataBase::getGeometryList() + { + return _geometryList; + } + + void ModelDataBase::setGeometryList(QList geo) + { + _geometryList = geo; + } + + QList ModelDataBase::getGeoComponentIDList() + { + QList ids; + auto geodata = Geometry::GeometryData::getInstance(); + for (int id : _ComponentIDList) + { + if (geodata->getGeoComponentByID(id)) + ids.append(id); + } + return ids; + } + + void ModelDataBase::generateParaInfo() + { + _solverSetting->generateParaInfo(); + _simlutationSetting->generateParaInfo(); + DataBase::generateParaInfo(); + } + + const QList &ModelDataBase::getComponentIDList() + { + return _ComponentIDList; + } + + bool ModelDataBase::removeComponentByID(int id) + { + return _ComponentIDList.removeOne(id); + } + + void ModelDataBase::removeBCByComponentID(int id) + { + QList tmp = _bcList; + for (BCBase::BCBase *bc : tmp) + { + if (bc->getComponentID() == id) + { + _bcList.removeOne(bc); + delete bc; + bc = nullptr; + } + } + } } diff --git a/src/ModelData/modelDataBase.h b/src/ModelData/modelDataBase.h index 73d21ac..614434b 100644 --- a/src/ModelData/modelDataBase.h +++ b/src/ModelData/modelDataBase.h @@ -5,15 +5,15 @@ * @version 2.5.0 * @date 2022-03-08 10:54 * @copyright Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * + * * ============================================================================ * Program: FastCAE - * + * * Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. * See License or http://www.fastcae.com/ for details. - * + * * BSD 3-Clause License - * + * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE @@ -37,145 +37,134 @@ class QDomDocument; namespace BCBase { - class BCBase; + class BCBase; } namespace ModelData { - class SimlutationSettingBase; - class SolverSettingBase; - class ElementProperty; + class SimlutationSettingBase; + class SolverSettingBase; + class ElementProperty; - class MODELDATAAPI ModelDataBase : public DataProperty::DataBase - { - public: - //构造函数 - ModelDataBase(ProjectTreeType treeType); - virtual ~ModelDataBase(); - //从配置文件中拷贝 - virtual void copyFormConfig(); - //将ID和类型信息传递给基类的各个参数 - virtual void generateParaInfo() override; - //获取最大的ID - static int getMaxID(); - void setID(int id) override; - //获取算例路径 - QString getPath(); - static void resetMaxID(); - //设置类型 - void setTreeType(ProjectTreeType type); - //获取类型 - ProjectTreeType getTreeType(); - //求解完成时间 - void setSolveTime(double t); - //获取求解完成时间 - double getSolveTime(); - //设置写出给求解器的文件名称 - void setOutputFileName(QString name); - QString& getOutputFileName(); - /*获取MD5的stream*/ - virtual void dataToStream(QDataStream* datas) override; - //数据写出到工程文件 子类必须重写该函数 - virtual QDomElement& writeToProjectFile(QDomDocument* doc, QDomElement* ele) override; - //数据写出到工程文件 子类必须重写该函数 - virtual void writeToProjectFile1(QDomDocument* doc, QDomElement* ele); - ///从工程文件块读入数据,子类必须重写此函数 - virtual void readDataFromProjectFile(QDomElement* e) override; - ///将数据写出文本给求解器 - virtual void writeToSolverText(QTextStream* stream); - ///将数据写出XML给求解器 - virtual void writeToSolverXML(QDomDocument* doc, QDomElement* e); - //检查数据是否可以求解 返回True-可以求解;False-不能求解 - virtual bool checkSolveableStatus(QVector & messages); - - //获取BC数量 - int getBCCount(); - //添加BC - void appeendBC(BCBase::BCBase* bc); - //根据类型获取BC - QList getBCByType(BCBase::BCType type); + class MODELDATAAPI ModelDataBase : public DataProperty::DataBase + { + public: + //构造函数 + ModelDataBase(ProjectTreeType treeType); + virtual ~ModelDataBase(); + //从配置文件中拷贝 + virtual void copyFormConfig(); + //将ID和类型信息传递给基类的各个参数 + virtual void generateParaInfo() override; + //获取最大的ID + static int getMaxID(); + void setID(int id) override; + //获取算例路径 + QString getPath(); + static void resetMaxID(); + //设置类型 + void setTreeType(ProjectTreeType type); + //获取类型 + ProjectTreeType getTreeType(); + //求解完成时间 + void setSolveTime(double t); + //获取求解完成时间 + double getSolveTime(); + //设置写出给求解器的文件名称 + void setOutputFileName(QString name); + QString& getOutputFileName(); + /*获取MD5的stream*/ + virtual void dataToStream(QDataStream* datas) override; + //数据写出到工程文件 子类必须重写该函数 + virtual QDomElement& writeToProjectFile(QDomDocument* doc, QDomElement* ele) override; + //数据写出到工程文件 子类必须重写该函数 + virtual void writeToProjectFile1(QDomDocument* doc, QDomElement* ele); + ///从工程文件块读入数据,子类必须重写此函数 + virtual void readDataFromProjectFile(QDomElement* e) override; + ///将数据写出文本给求解器 + virtual void writeToSolverText(QTextStream* stream); + ///将数据写出XML给求解器 + virtual void writeToSolverXML(QDomDocument* doc, QDomElement* e); + //检查数据是否可以求解 返回True-可以求解;False-不能求解 + virtual bool checkSolveableStatus(QVector & messages); - //获取第index个BC - BCBase::BCBase* getBCAt(const int index); - //移除边界条件 - void removeBCAt(const int index); - //通过组件ID删除BC,每个BC都会绑定一个组件 - void removeBCByComponentID(int); - //设置需要关联的组件ID(包括网格组件和几何组件) - void setComponentIDList(const QList& ids); - //添加一个组件ID - void addComponentID(int cpId); - //获取关联的组件ID(包括网格组件和几何组件) - const QList& getComponentIDList(); - //通过ID删除组件 - bool removeComponentByID(int); + //获取BC数量 + int getBCCount(); + //添加BC + void appeendBC(BCBase::BCBase* bc); + //根据类型获取BC + QList getBCByType(BCBase::BCType type); - //获取关联的网格组件ID - QList getMeshSetList(); - //获取关联的几何组件ID - QList getGeoComponentIDList(); + //获取第index个BC + BCBase::BCBase* getBCAt(const int index); + //移除边界条件 + void removeBCAt(const int index); + //通过组件ID删除BC,每个BC都会绑定一个组件 + void removeBCByComponentID(int); + //设置需要关联的组件ID(包括网格组件和几何组件) + void setComponentIDList(const QList& ids); + //添加一个组件ID + void addComponentID(int cpId); + //获取关联的组件ID(包括网格组件和几何组件) + const QList& getComponentIDList(); + //通过ID删除组件 + bool removeComponentByID(int); - //设置需要关联的网格组件ID - //virtual void setMeshSetList(QList ids); - //设置需要关联的几何组件ID - //void setGeoComponentIDList(QList ids); + //获取关联的网格组件ID + QList getMeshSetList(); + //获取关联的几何组件ID + QList getGeoComponentIDList(); - void appendEleProperty(ElementProperty* p); + //设置需要关联的网格组件ID + //virtual void setMeshSetList(QList ids); + //设置需要关联的几何组件ID + //void setGeoComponentIDList(QList ids); - int getElePropCount(); + //移除第index个组件 + virtual void removeComponentAt(int index); + //获取关联的Kernal ID + QList& getMeshKernalList(); + //设置关联的Kernal ID + void setMeshKernelList(const QList& kids); + //添加关联的Kernal ID + void addMeshKernalId(const int); + //获取关联的几何形状 + QList& getGeometryList(); + //设置关联的几何形状 + void setGeometryList(QList geo); + //获取仿真参数 + SimlutationSettingBase* getSimlutationSetting(); + //获取求解器设置 + SolverSettingBase* getSolverSetting(); + //组件是否使用 + bool isComponentUsed(int index); - ElementProperty* getElePropertyAt(int index); - - ElementProperty* getElePropertyByID(int id); - - void removeElePropAt(int index); - - - //移除第index个组件 - virtual void removeComponentAt(int index); - //获取关联的Kernal ID - QList& getMeshKernalList(); - //设置关联的Kernal ID - void setMeshKernelList(const QList& kids); - //添加关联的Kernal ID - void addMeshKernalId(const int); - //获取关联的几何形状 - QList& getGeometryList(); - //设置关联的几何形状 - void setGeometryList(QList geo); - //获取仿真参数 - SimlutationSettingBase* getSimlutationSetting(); - //获取求解器设置 - SolverSettingBase* getSolverSetting(); - //组件是否使用 - bool isComponentUsed(int index); - - virtual DataProperty::ParameterBase* getParameterByName(QString name) override; - virtual void removeParameter(DataProperty::ParameterBase* p) override; - virtual DataProperty::ParameterGroup* getParameterGroupByName(QString name) override; - virtual void removeParameterGroup(DataProperty::ParameterGroup* g) override; + virtual DataProperty::ParameterBase* getParameterByName(QString name) override; + virtual void removeParameter(DataProperty::ParameterBase* p) override; + virtual DataProperty::ParameterGroup* getParameterGroupByName(QString name) override; + virtual void removeParameterGroup(DataProperty::ParameterGroup* g) override; - private: - ProjectTreeType getTreeTypeByString(const QString& type); - QString getTreeTypeToSring(ProjectTreeType type); + private: + ProjectTreeType getTreeTypeByString(const QString& type); + QString getTreeTypeToSring(ProjectTreeType type); - protected: - ProjectTreeType _treeType{ UnDefined }; - static int maxID; - double _solvetime{ -1.0 }; - QString _outputFileName{}; + protected: + ProjectTreeType _treeType{ UnDefined }; + static int maxID; + double _solvetime{ -1.0 }; + QString _outputFileName{}; - QList _elePropList{}; - QList _bcList{}; -// QMultiHash _ComponentIDType{}; - QList _ComponentIDList{}; - QList _meshKernalIDList{}; - QList _geometryList{}; + QList _elePropList{}; + QList _bcList{}; + // QMultiHash _ComponentIDType{}; + QList _ComponentIDList{}; + QList _meshKernalIDList{}; + QList _geometryList{}; - SolverSettingBase* _solverSetting{}; - SimlutationSettingBase* _simlutationSetting{}; - }; + SolverSettingBase* _solverSetting{}; + SimlutationSettingBase* _simlutationSetting{}; + }; } diff --git a/src/ModelData/modelDataBaseExtend.cpp b/src/ModelData/modelDataBaseExtend.cpp index 5ba6a4a..84c5864 100644 --- a/src/ModelData/modelDataBaseExtend.cpp +++ b/src/ModelData/modelDataBaseExtend.cpp @@ -80,23 +80,23 @@ namespace ModelData QDomElement& ModelDataBaseExtend::writeToProjectFile(QDomDocument* doc, QDomElement* e) { - QDomElement element = ModelDataBase::writeToProjectFile(doc, e); - QDomElement propele = doc->createElement("Property"); - QList setidlist = _setProperty.keys(); + QDomElement element = ModelDataBase::writeToProjectFile(doc, e); + QDomElement materialele = doc->createElement("Material"); + QList setidlist = _setMaterial.keys(); for (int i = 0; i < setidlist.size(); ++i) { int setid = setidlist.at(i); - int propid = _setProperty.value(setid); - QDomElement mc = doc->createElement("PropInfo"); + int materialid = _setMaterial.value(setid); + QDomElement mc = doc->createElement("MaterialInfo"); QDomAttr setattr = doc->createAttribute("ComponentID"); - QDomAttr propattr = doc->createAttribute("PropID"); + QDomAttr materialattr = doc->createAttribute("MaterialID"); setattr.setValue(QString::number(setid)); - propattr.setValue(QString::number(propid)); + materialattr.setValue(QString::number(materialid)); mc.setAttributeNode(setattr); - mc.setAttributeNode(propattr); - propele.appendChild(mc); + mc.setAttributeNode(materialattr); + materialele.appendChild(mc); } - element.appendChild(propele); + element.appendChild(materialele); QDomElement configele = doc->createElement("ConfigData"); QList datalist = _configData.values(); @@ -131,15 +131,15 @@ namespace ModelData { ModelDataBase::writeToProjectFile1(doc, e); - QDomElement materialele = doc->createElement("Property"); - QList setidlist = _setProperty.keys(); + QDomElement materialele = doc->createElement("Material"); + QList setidlist = _setMaterial.keys(); for (int i = 0; i < setidlist.size(); ++i) { int setid = setidlist.at(i); - int materialid = _setProperty.value(setid); - QDomElement mc = doc->createElement("PropInfo"); + int materialid = _setMaterial.value(setid); + QDomElement mc = doc->createElement("MaterialInfo"); QDomAttr setattr = doc->createAttribute("ComponentID"); - QDomAttr materialattr = doc->createAttribute("PropID"); + QDomAttr materialattr = doc->createAttribute("MaterialID"); setattr.setValue(QString::number(setid)); materialattr.setValue(QString::number(materialid)); mc.setAttributeNode(setattr); @@ -176,15 +176,15 @@ namespace ModelData void ModelDataBaseExtend::readDataFromProjectFile(QDomElement* e) { ModelDataBase::readDataFromProjectFile(e); - QDomNodeList materialList = e->elementsByTagName("PropInfo"); + QDomNodeList materialList = e->elementsByTagName("MaterialInfo"); for (int i = 0; i < materialList.size(); ++i) { QDomElement ele = materialList.at(i).toElement(); QString ssetid = ele.attribute("ComponentID"); - QString smaterialID = ele.attribute("PropID"); + QString smaterialID = ele.attribute("MaterialID"); int setid = ssetid.toInt(); int maid = smaterialID.toInt(); - this->setProperty(setid, maid); + this->setMaterial(setid, maid); } QDomNodeList configdata = e->elementsByTagName("ConfigData"); @@ -233,38 +233,38 @@ namespace ModelData this->writeToProjectFile(doc, e); } - void ModelDataBaseExtend::setProperty(int setID, int materialID) + void ModelDataBaseExtend::setMaterial(int setID, int materialID) { if (!_ComponentIDList.contains(setID) || materialID <= 0) return; - _setProperty[setID] = materialID; + _setMaterial[setID] = materialID; } - int ModelDataBaseExtend::getPropertyID(int setid) + int ModelDataBaseExtend::getMaterialID(int setid) { int m = -1; - if (_setProperty.contains(setid)) + if (_setMaterial.contains(setid)) { - m = _setProperty.value(setid); + m = _setMaterial.value(setid); } return m; } - bool ModelDataBaseExtend::isPropertySetted(int setid) + bool ModelDataBaseExtend::isMaterialSetted(int setid) { bool s = false; - if (_setProperty.contains(setid)) + if (_setMaterial.contains(setid)) { - if (_setProperty.value(setid) >= 0) + if (_setMaterial.value(setid) >= 0) s = true; } return s; } - void ModelDataBaseExtend::removeProperty(int setid) + void ModelDataBaseExtend::removeMaterial(int setid) { - if (_setProperty.contains(setid)) + if (_setMaterial.contains(setid)) { - _setProperty.remove(setid); + _setMaterial.remove(setid); } } @@ -277,8 +277,8 @@ namespace ModelData for (int id : removeid) { - if (_setProperty.contains(id)) - _setProperty.remove(id); + if (_setMaterial.contains(id)) + _setMaterial.remove(id); for (auto bc : _bcList) { if (bc->getComponentID() == id) @@ -296,9 +296,9 @@ namespace ModelData { assert(index >= 0 && index < _ComponentIDList.size()); int id = _ComponentIDList.at(index); - if (isPropertySetted(id)) + if (isMaterialSetted(id)) { - removeProperty(id); + removeMaterial(id); } ModelDataBase::removeComponentAt(index); } @@ -688,4 +688,4 @@ namespace ModelData { return _inpMaterIds; } -} +} \ No newline at end of file diff --git a/src/ModelData/modelDataBaseExtend.h b/src/ModelData/modelDataBaseExtend.h index 52c4592..1a3e15b 100644 --- a/src/ModelData/modelDataBaseExtend.h +++ b/src/ModelData/modelDataBaseExtend.h @@ -47,14 +47,14 @@ namespace ModelData QString getReportAt(int index); //移除第index个报告 void removeReportAt(int index); - //设置属性,网格组件ID与属性ID - void setProperty(int setID, int pid); + //设置材料,网格组件ID与材料ID + void setMaterial(int setID, int materialID); //获取组件的材料ID - int getPropertyID(int setid); + int getMaterialID(int setid); //组件是否被设置材料 - bool isPropertySetted(int setid); - //解除属性与组件的绑定 - void removeProperty(int setid); + bool isMaterialSetted(int setid); + //解除材料与组件的绑定 + void removeMaterial(int setid); virtual void setComponentIDList(QList ids); @@ -138,7 +138,7 @@ namespace ModelData protected: QList _inpMaterIds; - QHash _setProperty{}; + QHash _setMaterial{}; QStringList _reportList{}; QHash _configData{}; QStringList _monitorFiles{}; diff --git a/src/ModelData/modelDataPy.cpp b/src/ModelData/modelDataPy.cpp index e54c32e..fd36a49 100644 --- a/src/ModelData/modelDataPy.cpp +++ b/src/ModelData/modelDataPy.cpp @@ -8,137 +8,127 @@ #include #include "ProjectTree/DialogAddBC.h" + namespace ModelData { - void ModelDataPy::importComponents(int caseId, const char *addcomponentsId) - { - QString scomponentIds(addcomponentsId); - QStringList scomponentIdsList = scomponentIds.simplified().split(" "); - QList ids; - for (QString id : scomponentIdsList) - ids.append(id.toInt()); - ModelDataBase *model = ModelDataSingleton::getinstance()->getModelByID(caseId); - if (model == nullptr) - return; - model->setComponentIDList(ids); - Py::PythonAgent::getInstance()->unLock(); - } + void ModelDataPy::importComponents(int caseId, const char* addcomponentsId) + { + QString scomponentIds(addcomponentsId); + QStringList scomponentIdsList = scomponentIds.simplified().split(" "); + QList ids; + for (QString id : scomponentIdsList) + ids.append(id.toInt()); + ModelDataBase* model = ModelDataSingleton::getinstance()->getModelByID(caseId); + if (model == nullptr) return; + model->setComponentIDList(ids); + Py::PythonAgent::getInstance()->unLock(); + } - void ModelDataPy::importGeometry(int caseId, char *addcomponentsId) - { - QString scomponentIds(addcomponentsId); - QStringList scomponentIdsList = scomponentIds.simplified().split(" "); - QList ids; - for (int i = 0; i < scomponentIdsList.size(); ++i) - { - // qDebug() << scomponentIdsList[i]; - ids.append(scomponentIdsList[i].toInt()); - } - ModelDataBase *model = ModelDataSingleton::getinstance()->getModelByID(caseId); - if (model == nullptr) - return; + void ModelDataPy::importGeometry(int caseId, char* addcomponentsId) + { + QString scomponentIds(addcomponentsId); + QStringList scomponentIdsList = scomponentIds.simplified().split(" "); + QList ids; + for (int i = 0; i < scomponentIdsList.size(); ++i) + { + // qDebug() << scomponentIdsList[i]; + ids.append(scomponentIdsList[i].toInt()); + } + ModelDataBase* model = ModelDataSingleton::getinstance()->getModelByID(caseId); + if (model == nullptr) return; - model->setGeometryList(ids); - Py::PythonAgent::getInstance()->unLock(); - } + model->setGeometryList(ids); + Py::PythonAgent::getInstance()->unLock(); + } - void ModelDataPy::addBC(int caseId, int id, char *bctypetostring) - { - QString bctyst(bctypetostring); - BCBase::BCType bctype = BCBase::StringToBCType(bctyst); - // bctyst = BCBase::BCTypeToString(bctype); - if (bctype == BCBase::None) - bctype = BCBase::UserDef; - ModelDataBase *model = ModelDataSingleton::getinstance()->getModelByID(caseId); - if (model == nullptr) - return; - ModelDataBaseExtend *_data = dynamic_cast(model); - BCBase::BCBase *bc = ParaClassFactory::BCFactory::createBCByType(bctype, bctyst, _data->getTreeType()); - if (bc == nullptr) - return; - // bc->setBCType(bctype); - bc->bingdingComponentID(id); - _data->appeendBC(bc); - bc->generateParaInfo(); - Py::PythonAgent::getInstance()->unLock(); - } + void ModelDataPy::addBC(int caseId, int id, char* bctypetostring) + { - void ModelDataPy::setValue(int caseID, char *variable, char *type, char *value) - { - QString svariable(variable); - QString sType(type); - QString sValue(value); - ModelDataBase *model = ModelDataSingleton::getinstance()->getModelByID(caseID); - if (model == nullptr) - return; - DataProperty::ParameterBase *p = model->getParameterByName(svariable); - if (p == nullptr) - return; - DataProperty::ParaType t = DataProperty::ParameterBase::StringToParaType(sType); - if (t != p->getParaType()) - return; - p->setValueFromString(sValue); - Py::PythonAgent::getInstance()->unLock(); - } + QString bctyst(bctypetostring); + BCBase::BCType bctype = BCBase::StringToBCType(bctyst); + // bctyst = BCBase::BCTypeToString(bctype); + if (bctype == BCBase::None) bctype = BCBase::UserDef; + ModelDataBase* model = ModelDataSingleton::getinstance()->getModelByID(caseId); + if (model == nullptr) return; + ModelDataBaseExtend *_data = dynamic_cast(model); + BCBase::BCBase* bc = ParaClassFactory::BCFactory::createBCByType(bctype, bctyst, _data->getTreeType()); + if (bc == nullptr) return; + // bc->setBCType(bctype); + bc->bingdingComponentID(id); + _data->appeendBC(bc); + bc->generateParaInfo(); + Py::PythonAgent::getInstance()->unLock(); + } - void ModelDataPy::setBCValue(int caseID, int index, char *variable, char *type, char *value) - { - QString svariable(variable); - QString sType(type); - QString sValue(value); - ModelDataBase *model = ModelDataSingleton::getinstance()->getModelByID(caseID); - if (model == nullptr) - return; - BCBase::BCBase *bc = model->getBCAt(index); - DataProperty::ParameterBase *p = bc->getParameterByName(svariable); - if (p == nullptr) - return; - DataProperty::ParaType t = DataProperty::ParameterBase::StringToParaType(sType); - if (t != p->getParaType()) - return; - p->setValueFromString(sValue); - Py::PythonAgent::getInstance()->unLock(); - } + void ModelDataPy::setValue(int caseID, char* variable, char* type, char* value) + { + QString svariable(variable); + QString sType(type); + QString sValue(value); + ModelDataBase* model = ModelDataSingleton::getinstance()->getModelByID(caseID); + if (model == nullptr) return; + DataProperty::ParameterBase* p = model->getParameterByName(svariable); + if (p == nullptr) return; + DataProperty::ParaType t = DataProperty::ParameterBase::StringToParaType(sType); + if (t != p->getParaType()) return; + p->setValueFromString(sValue); + Py::PythonAgent::getInstance()->unLock(); + } - void ModelDataPy::setProperty(int caseID, char *componentIDs, int pid) - { - ModelData::ModelDataSingleton *modelData = ModelData::ModelDataSingleton::getinstance(); - ModelData::ModelDataBaseExtend *model = dynamic_cast(modelData->getModelByID(caseID)); - if (!model) - return; - QString cpIDs(componentIDs); - QStringList cpIDList = cpIDs.split(';'); - for (QString cpID : cpIDList) - model->setProperty(cpID.toInt(), pid); - Py::PythonAgent::getInstance()->unLock(); - } + void ModelDataPy::setBCValue(int caseID, int index, char* variable, char* type, char* value) + { + QString svariable(variable); + QString sType(type); + QString sValue(value); + ModelDataBase* model = ModelDataSingleton::getinstance()->getModelByID(caseID); + if (model == nullptr) return; + BCBase::BCBase* bc = model->getBCAt(index); + DataProperty::ParameterBase* p = bc->getParameterByName(svariable); + if (p == nullptr) return; + DataProperty::ParaType t = DataProperty::ParameterBase::StringToParaType(sType); + if (t != p->getParaType()) return; + p->setValueFromString(sValue); + Py::PythonAgent::getInstance()->unLock(); + } + + void ModelDataPy::setMaterial(int caseID, char* componentIDs, int materialID) + { + ModelData::ModelDataSingleton *modelData = ModelData::ModelDataSingleton::getinstance(); + ModelData::ModelDataBaseExtend* model = dynamic_cast(modelData->getModelByID(caseID)); + if (!model) return; + QString cpIDs(componentIDs); + QStringList cpIDList = cpIDs.split(';'); + for (QString cpID : cpIDList) + model->setMaterial(cpID.toInt(), materialID); + Py::PythonAgent::getInstance()->unLock(); + } } -void MODELDATAAPI importComponents(int caseId, const char *addcomponentsId) +void MODELDATAAPI importComponents(int caseId, const char* addcomponentsId) { - ModelData::ModelDataPy::importComponents(caseId, addcomponentsId); + ModelData::ModelDataPy::importComponents(caseId, addcomponentsId); } -void MODELDATAAPI addBC(int caseId, int id, char *bctypetostring) +void MODELDATAAPI addBC(int caseId, int id, char* bctypetostring) { - ModelData::ModelDataPy::addBC(caseId, id, bctypetostring); + ModelData::ModelDataPy::addBC(caseId, id, bctypetostring); } -void MODELDATAAPI importGeometry(int caseId, char *addcomponentsId) +void MODELDATAAPI importGeometry(int caseId, char* addcomponentsId) { - ModelData::ModelDataPy::importGeometry(caseId, addcomponentsId); + ModelData::ModelDataPy::importGeometry(caseId, addcomponentsId); } -void MODELDATAAPI setValue(int caseID, char *variable, char *stype, char *svalue) +void MODELDATAAPI setValue(int caseID, char* variable, char* stype, char* svalue) { - ModelData::ModelDataPy::setValue(caseID, variable, stype, svalue); + ModelData::ModelDataPy::setValue(caseID, variable, stype, svalue); } -void MODELDATAAPI setBCValue(int caseID, int index, char *variable, char *stype, char *svalue) +void MODELDATAAPI setBCValue(int caseID, int index, char* variable, char* stype, char* svalue) { - ModelData::ModelDataPy::setBCValue(caseID, index, variable, stype, svalue); + ModelData::ModelDataPy::setBCValue(caseID, index, variable, stype, svalue); } -void MODELDATAAPI setProperty(int caseID, char *componentIDs, int materialID) +void MODELDATAAPI setMaterial(int caseID, char* componentIDs, int materialID) { - ModelData::ModelDataPy::setProperty(caseID, componentIDs, materialID); + ModelData::ModelDataPy::setMaterial(caseID, componentIDs, materialID); } diff --git a/src/ModelData/modelDataPy.h b/src/ModelData/modelDataPy.h index 7f8e17d..a4bafac 100644 --- a/src/ModelData/modelDataPy.h +++ b/src/ModelData/modelDataPy.h @@ -13,7 +13,7 @@ namespace ModelData static void addBC(int caseId, int id, char* bctypetostring); static void setValue(int caseID, char* variable, char* stype, char* svalue); static void setBCValue(int caseID, int index, char* variable, char* stype, char* svalue); - static void setProperty(int caseID, char* componentIDs, int materialID); + static void setMaterial(int caseID, char* componentIDs, int materialID); }; } @@ -26,7 +26,7 @@ extern "C" void MODELDATAAPI addBC(int caseId, int id, char* bctypetostring); void MODELDATAAPI setValue(int caseID, char* variable, char* stype, char* svalue); void MODELDATAAPI setBCValue(int caseID,int index,char* variable, char* stype, char* svalue); - void MODELDATAAPI setProperty(int caseID, char* componentIDs, int materialID); + void MODELDATAAPI setMaterial(int caseID, char* componentIDs, int materialID); } diff --git a/src/ProjectTree/DialogAddBC.cpp b/src/ProjectTree/DialogAddBC.cpp index c98a31f..0342b55 100644 --- a/src/ProjectTree/DialogAddBC.cpp +++ b/src/ProjectTree/DialogAddBC.cpp @@ -9,10 +9,10 @@ // #include "BCBase/BCPressure.h" // #include "BCBase/BCDisplacement.h" #include "ModelData/modelDataBaseExtend.h" -#include "MeshData/meshSingleton.h" -#include "MeshData/meshSet.h" -#include "Geometry/geometryData.h" -#include "Geometry/GeoComponent.h" +#include "meshData/meshSingleton.h" +#include "meshData/meshSet.h" +#include "geometry/geometryData.h" +#include "geometry/GeoComponent.h" #include "ConfigOptions/ConfigOptions.h" #include "ConfigOptions/BCConfig.h" #include @@ -20,19 +20,17 @@ #include #include "ModelData/modelDataBase.h" #include "ModelData/modelDataSingleton.h" -namespace ProjectTree -{ +namespace ProjectTree { - AddBCDialog::AddBCDialog(GUI::MainWindow *m, ModelData::ModelDataBaseExtend *data) - : QFDialog(m), _data(data) + AddBCDialog::AddBCDialog(GUI::MainWindow* m, ModelData::ModelDataBaseExtend* data) + : QFDialog(m) + , _data(data) { _ui = new Ui::AddBCDialog(); _ui->setupUi(this); init(); } - AddBCDialog::~AddBCDialog() - { - } + AddBCDialog::~AddBCDialog() {} void AddBCDialog::init() { initBCType(); @@ -40,24 +38,22 @@ namespace ProjectTree } void AddBCDialog::initComponents() { - MeshData::MeshData *mesh = MeshData::MeshData::getInstance(); - QList mshList = _data->getMeshSetList(); - for (int i = 0; i < mshList.size(); ++i) - { - int setID = mshList.at(i); - MeshData::MeshSet *set = mesh->getMeshSetByID(setID); + MeshData::MeshData* mesh = MeshData::MeshData::getInstance(); + QList mshList = _data->getMeshSetList(); + for(int i = 0; i < mshList.size(); ++i) { + int setID = mshList.at(i); + MeshData::MeshSet* set = mesh->getMeshSetByID(setID); assert(set != nullptr); QString name = set->getName(); _ui->setComboBox->addItem(name, Qt::UserRole + 1); _ui->setComboBox->setItemData(_ui->setComboBox->count() - 1, setID, Qt::UserRole + 1); } - auto geoData = Geometry::GeometryData::getInstance(); - QList gcList = _data->getGeoComponentIDList(); - for (int i = 0; i < gcList.size(); ++i) - { - int gcID = gcList.at(i); - auto *aGC = geoData->getGeoComponentByID(gcID); + auto geoData = Geometry::GeometryData::getInstance(); + QList gcList = _data->getGeoComponentIDList(); + for(int i = 0; i < gcList.size(); ++i) { + int gcID = gcList.at(i); + auto* aGC = geoData->getGeoComponentByID(gcID); assert(aGC != nullptr); QString name = aGC->getName(); _ui->setComboBox->addItem(name, Qt::UserRole + 1); @@ -66,21 +62,21 @@ namespace ProjectTree } void AddBCDialog::initBCType() { - int beg = BCBase::BCType::None; - int end = BCBase::BCType::End; - ConfigOption::BCConfig *userdefbcs = ConfigOption::ConfigOption::getInstance()->getBCConfig(); - for (int i = beg; i < end; ++i) - { + int beg = BCBase::BCType::None; + int end = BCBase::BCType::End; + ConfigOption::BCConfig* userdefbcs = + ConfigOption::ConfigOption::getInstance()->getBCConfig(); + for(int i = beg; i < end; ++i) { QString stype = BCBase::BCTypeToString((BCBase::BCType)i); - if (!userdefbcs->isEnable(stype, _data->getTreeType())) + if(!userdefbcs->isEnable(stype, _data->getTreeType())) continue; _ui->typeComboBox->addItem(stype, i); } - // ConfigOption::BCConfig* userdefbcs = ConfigOption::ConfigOption::getInstance()->getBCConfig(); + // ConfigOption::BCConfig* userdefbcs = + //ConfigOption::ConfigOption::getInstance()->getBCConfig(); const int n = userdefbcs->getBCCount(_data->getTreeType()); - for (int i = 0; i < n; ++i) - { - BCBase::BCUserDef *bc = userdefbcs->getBCAt(i, _data->getTreeType()); + for(int i = 0; i < n; ++i) { + BCBase::BCUserDef* bc = userdefbcs->getBCAt(i, _data->getTreeType()); _ui->typeComboBox->addItem(bc->getName(), BCBase::UserDef); } } @@ -101,11 +97,13 @@ namespace ProjectTree MeshData::MeshSet* set = MeshData::MeshData::getInstance()->getMeshSetByID(id); assert(set != nullptr); QString bcTypeToString = BCBase::BCTypeToString(bcType);//liu - BCBase::BCBase* bc = ParaClassFactory::BCFactory::createBCByType(bcType, name, _data->getTreeType()); + BCBase::BCBase* bc = ParaClassFactory::BCFactory::createBCByType(bcType, name, + _data->getTreeType()); if (bc != nullptr) { - //QString code = QString("Case.addBC(%1,%2,\"%3\")").arg(caseid).arg(id).arg(addIdValues.join(" "));// + //QString code = + QString("Case.addBC(%1,%2,\"%3\")").arg(caseid).arg(id).arg(addIdValues.join(" "));// //qDebug() << code; //Py::PythonAgent::getInstance()->submit(code); bc->setType(bcType); @@ -115,26 +113,27 @@ namespace ProjectTree void AddBCDialog::accept() { // const int index = _ui->typeComboBox->currentIndex(); - // BCBase::BCType bcType = (BCBase::BCType)(_ui->typeComboBox->itemData(index).toInt()); //Commented-Out By Baojun - int cpID = _ui->setComboBox->itemData(_ui->setComboBox->currentIndex(), Qt::UserRole + 1).toInt(); - if (cpID < 0) + // BCBase::BCType bcType = + //(BCBase::BCType)(_ui->typeComboBox->itemData(index).toInt()); //Commented-Out By Baojun + int cpID = + _ui->setComboBox->itemData(_ui->setComboBox->currentIndex(), Qt::UserRole + 1).toInt(); + if(cpID < 0) return; QString typeName = _ui->typeComboBox->currentText(); // QList setidlist = _data->getMeshSetList(); - int caseid = _data->getID(); + int caseid = _data->getID(); - // MeshData::MeshSet* set = MeshData::MeshData::getInstance()->getMeshSetByID(id); //Commented-Out By Baojun - // if (set == nullptr) return; - // int caseid = _data->getID(); + // MeshData::MeshSet* set = MeshData::MeshData::getInstance()->getMeshSetByID(id); + ////Commented-Out By Baojun if (set == nullptr) return; int caseid = _data->getID(); // assert(set != nullptr); // QString bctypetostring = BCBase::BCTypeToString(bcType);//liu // submit py code - QString code = QString("Case.addBC(%1,%2,\"%3\")").arg(caseid).arg(cpID).arg(typeName); + QString code = QString("Case.addBC(%1,%2,\"%3\")").arg(caseid).arg(cpID).arg(typeName); qDebug() << code; Py::PythonAgent::getInstance()->submit(code); QDialog::accept(); } -} \ No newline at end of file +} // namespace ProjectTree \ No newline at end of file diff --git a/src/ProjectTree/DialogAddBC.h b/src/ProjectTree/DialogAddBC.h index 924a685..317de50 100644 --- a/src/ProjectTree/DialogAddBC.h +++ b/src/ProjectTree/DialogAddBC.h @@ -1,26 +1,4 @@ -/** - * @file DialogAddBC.h - * @brief 设置边界条件对话框 - * @author FastCAE研发小组(fastcae@diso.cn) - * @version 2.5.0 - * @date 2022-07-07 10:03 - * @copyright Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * - * ============================================================================ - * Program: FastCAE - * - * Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * See License or http://www.fastcae.com/ for details. - * - * BSD 3-Clause License - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. - * ================================================================================== - */ -#ifndef _DIALOGADDBC_H_ +#ifndef _DIALOGADDBC_H_ #define _DIALOGADDBC_H_ #include "SelfDefObject/QFDialog.h" @@ -40,40 +18,30 @@ namespace ModelData namespace ProjectTree { - /** - * @brief 设置边界条件对话框类 - * @since 2.5.0 - */ + class AddBCDialog : public QFDialog { Q_OBJECT public: - AddBCDialog(GUI::MainWindow *m, ModelData::ModelDataBaseExtend *data); + AddBCDialog(GUI::MainWindow* m, ModelData::ModelDataBaseExtend* data); ~AddBCDialog(); private: - /** - * @brief 初始化对话框数据 - * @since 2.5.0 - */ void init(); - /** - * @brief 初始化边界条件列表 - * @since 2.5.0 - */ + virtual void initBCType(); - /** - * @brief 初始化组件列表 - * @since 2.5.0 - */ virtual void initComponents(); virtual void accept() override; private: - Ui::AddBCDialog *_ui{}; - ModelData::ModelDataBaseExtend *_data{}; + Ui::AddBCDialog* _ui{}; + ModelData::ModelDataBaseExtend* _data{}; + + }; } + + #endif \ No newline at end of file diff --git a/src/ProjectTree/DialogAddProperty.cpp b/src/ProjectTree/DialogAddProperty.cpp deleted file mode 100644 index 0be3c7a..0000000 --- a/src/ProjectTree/DialogAddProperty.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "DialogAddProperty.h" -#include -#include "Material/Material.h" -#include "Material/MaterialSingletion.h" -#include "ModelData/elementProperty.h" -#include "ModelData/modelDataBaseExtend.h" - -namespace ProjectTree -{ - AddPropDialog::AddPropDialog(GUI::MainWindow * mw, ModelData::ModelDataBaseExtend * model) - :_mainWindow(mw), _model(model) - { - _ui = new Ui::CreateEleProp; - _ui->setupUi(this); - init(); - } - - AddPropDialog::~AddPropDialog() - { - if (_ui != nullptr) delete _ui; - } - - void ProjectTree::AddPropDialog::init() - { - int id = ModelData::ElementProperty::getMaxID(); - QString text = QString("Prop_%1").arg(id+1); - _ui->nameLineEdit->setPlaceholderText(text); - - auto mdata = Material::MaterialSingleton::getInstance(); - const int n = mdata->getMaterialCount(); - for (int i = 0; i < n; ++i) - { - auto m = mdata->getMaterialAt(i); - const int id = m->getID(); - _ui->materialCombox->addItem(QIcon(), m->getName(), id); - } - } - - void AddPropDialog::accept() - { - QString name = _ui->nameLineEdit->text(); - if (name.isEmpty()) name = _ui->nameLineEdit->placeholderText(); - - int matID = _ui->materialCombox->currentData(Qt::UserRole).toInt(); - if (matID < 1) return; - - auto prop = new ModelData::ElementProperty(); - prop->setName(name); - prop->setEleType(_ui->eleTypeCombox->currentText()); - prop->setMaterialID(matID); - - _model->appendEleProperty(prop); - - QDialog::accept(); - } - -} - diff --git a/src/ProjectTree/DialogAddProperty.h b/src/ProjectTree/DialogAddProperty.h deleted file mode 100644 index 1a8fa0a..0000000 --- a/src/ProjectTree/DialogAddProperty.h +++ /dev/null @@ -1,42 +0,0 @@ -#ifndef __DIALOGADDPROPERTY_H__ -#define __DIALOGADDPROPERTY_H__ - -#include - -namespace Ui -{ - class CreateEleProp; -} -namespace GUI -{ - class MainWindow; -} -namespace ModelData -{ - class ModelDataBaseExtend; -} - -namespace ProjectTree -{ - class AddPropDialog : public QDialog - { - public: - AddPropDialog(GUI::MainWindow* mw, ModelData::ModelDataBaseExtend* model); - ~AddPropDialog(); - - private: - void init(); - void accept() override; - - private: - Ui::CreateEleProp* _ui{}; - - GUI::MainWindow* _mainWindow{}; - ModelData::ModelDataBaseExtend* _model{}; - - - }; -} - - -#endif // !__DIALOGADDPROPERTY_H__ diff --git a/src/ProjectTree/DialogAddProperty.ui b/src/ProjectTree/DialogAddProperty.ui deleted file mode 100644 index 16931c2..0000000 --- a/src/ProjectTree/DialogAddProperty.ui +++ /dev/null @@ -1,100 +0,0 @@ - - - CreateEleProp - - - - 0 - 0 - 314 - 119 - - - - Create Prop - - - - - - Name: - - - - - - - - - - Element Type: - - - - - - - - elem_fem_sta_linear - - - - - - - - Material: - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - CreateEleProp - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - CreateEleProp - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/src/ProjectTree/DialogAssignMaterial.cpp b/src/ProjectTree/DialogAssignMaterial.cpp new file mode 100644 index 0000000..2edbd79 --- /dev/null +++ b/src/ProjectTree/DialogAssignMaterial.cpp @@ -0,0 +1,90 @@ +#include "DialogAssignMaterial.h" +#include +#include +#include +#include "ModelData/modelDataBaseExtend.h" +#include "meshData/meshSingleton.h" +#include "meshData/meshSet.h" +#include "geometry/geometryData.h" +#include "geometry/GeoComponent.h" +#include "Material/MaterialSingletion.h" +#include "Material/Material.h" +#include "PythonModule/PyAgent.h" +#include + +namespace ProjectTree { + AssignMaterialDialog::AssignMaterialDialog(GUI::MainWindow* mainwindow, + ModelData::ModelDataBaseExtend* data) + : ComponentSelectDialogBase(mainwindow, nullptr, nullptr) + , _data(data) + { + _layout = new QHBoxLayout; + _label = new QLabel("Material"); + _combobox = new QComboBox; + _layout->addWidget(_label); + _layout->addWidget(_combobox); + this->setCustomLayout(_layout); + init(); + } + + AssignMaterialDialog::~AssignMaterialDialog() + { + if(_label != nullptr) + delete _label; + if(_combobox != nullptr) + delete _combobox; + if(_layout != nullptr) + delete _layout; + } + + void AssignMaterialDialog::init() + { + MeshData::MeshData* meshdata = MeshData::MeshData::getInstance(); + QList setlist = _data->getMeshSetList(); + for(int i = 0; i < setlist.size(); ++i) { + int setid = setlist.at(i); + MeshData::MeshSet* set = meshdata->getMeshSetByID(setid); + if((set == nullptr) || (set->getSetType() != MeshData::Element)) + continue; + QString name = set->getName(); + this->appendItemToAvailableList(name, setid, ":/QUI/icon/mesh.png"); + } + + auto* geoData = Geometry::GeometryData::getInstance(); + QList gcIDs = _data->getGeoComponentIDList(); + for(int gcID : gcIDs) { + auto aGC = geoData->getGeoComponentByID(gcID); + if(!aGC) + continue; + appendItemToAvailableList(aGC->getName(), gcID, ":/QUI/icon/geometry.png"); + } + + Material::MaterialSingleton* materialData = Material::MaterialSingleton::getInstance(); + const int n = materialData->getMaterialCount(); + for(int i = 0; i < n; ++i) { + Material::Material* m = materialData->getMaterialAt(i); + QString name = m->getName(); + const int id = m->getID(); + _combobox->addItem(name, id); + } + } + + void AssignMaterialDialog::accept() + { + QMap idname = this->getSelectedItemIDNames(); + QList ids = idname.keys(); + const int currentindex = _combobox->currentIndex(); + const int mid = _combobox->itemData(currentindex).toInt(); + QString cpIDs; + for(int i = 0; i < ids.size(); ++i) { + int cpID = ids.at(i); + cpIDs.append(QString::number(cpID)).append(';'); + } + QString code = QString("Case.setMaterial(%1,\"%2\",%3)") + .arg(_data->getID()) + .arg(cpIDs.left(cpIDs.size() - 1)) + .arg(mid); + Py::PythonAgent::getInstance()->submit(code); + ComponentSelectDialogBase::accept(); + } +} // namespace ProjectTree diff --git a/src/ProjectTree/DialogAssignMaterial.h b/src/ProjectTree/DialogAssignMaterial.h new file mode 100644 index 0000000..7e6ad29 --- /dev/null +++ b/src/ProjectTree/DialogAssignMaterial.h @@ -0,0 +1,41 @@ +#ifndef _DIALOGASSIGNMATERIAL_H_ +#define _DIALOGASSIGNMATERIAL_H_ + +#include "moduleBase/componentDialogBase.h" + +namespace GUI +{ + class MainWindow; +} +namespace ModelData +{ + class ModelDataBaseExtend; +} +class QHBoxLayout; +class QLabel; +class QComboBox; + +namespace ProjectTree +{ + class AssignMaterialDialog: public ModuleBase::ComponentSelectDialogBase + { + public: + AssignMaterialDialog(GUI::MainWindow* mainwindow, ModelData::ModelDataBaseExtend* data); + ~AssignMaterialDialog(); + + private: + void init() override; + void accept() override; + + + private: + ModelData::ModelDataBaseExtend* _data{}; + QHBoxLayout* _layout{}; + QLabel* _label{}; + QComboBox* _combobox{}; + }; + +} + + +#endif \ No newline at end of file diff --git a/src/ProjectTree/DialogAssignProperty.cpp b/src/ProjectTree/DialogAssignProperty.cpp deleted file mode 100644 index 102db9c..0000000 --- a/src/ProjectTree/DialogAssignProperty.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "DialogAssignProperty.h" -#include -#include -#include -#include "ModelData/modelDataBaseExtend.h" -#include "MeshData/meshSingleton.h" -#include "MeshData/meshSet.h" -#include "Geometry/geometryData.h" -#include "Geometry/GeoComponent.h" -#include "Material/MaterialSingletion.h" -#include "Material/Material.h" -#include "PythonModule/PyAgent.h" -#include "ModelData/elementProperty.h" -#include - -namespace ProjectTree -{ - AssignPropertyDialog::AssignPropertyDialog(GUI::MainWindow *mainwindow, ModelData::ModelDataBaseExtend *data) - : ComponentSelectDialogBase(mainwindow, nullptr, nullptr), _data(data) - { - _layout = new QHBoxLayout; - _label = new QLabel("Property"); - _combobox = new QComboBox; - _layout->addWidget(_label); - _layout->addWidget(_combobox); - this->setCustomLayout(_layout); - init(); - } - - AssignPropertyDialog::~AssignPropertyDialog() - { - if (_label != nullptr) - delete _label; - if (_combobox != nullptr) - delete _combobox; - if (_layout != nullptr) - delete _layout; - } - - void AssignPropertyDialog::init() - { - MeshData::MeshData *meshdata = MeshData::MeshData::getInstance(); - QList setlist = _data->getMeshSetList(); - for (int i = 0; i < setlist.size(); ++i) - { - int setid = setlist.at(i); - MeshData::MeshSet *set = meshdata->getMeshSetByID(setid); - if ((set == nullptr) || (set->getSetType() != MeshData::Element)) - continue; - QString name = set->getName(); - this->appendItemToAvailableList(name, setid, ":/QUI/icon/mesh.png"); - } - - auto *geoData = Geometry::GeometryData::getInstance(); - QList gcIDs = _data->getGeoComponentIDList(); - for (int gcID : gcIDs) - { - auto aGC = geoData->getGeoComponentByID(gcID); - if (!aGC) - continue; - appendItemToAvailableList(aGC->getName(), gcID, ":/QUI/icon/geometry.png"); - } - - // Material::MaterialSingleton* materialData = Material::MaterialSingleton::getInstance(); - // const int n = materialData->getMaterialCount(); - const int n = _data->getElePropCount(); - for (int i = 0; i < n; ++i) - { - // Material::Material* m = materialData->getMaterialAt(i); - auto m = _data->getElePropertyAt(i); - QString name = m->getName(); - const int id = m->getID(); - _combobox->addItem(name, id); - } - } - - void AssignPropertyDialog::accept() - { - QMap idname = this->getSelectedItemIDNames(); - QList ids = idname.keys(); - const int currentindex = _combobox->currentIndex(); - const int mid = _combobox->itemData(currentindex).toInt(); - QString cpIDs; - for (int i = 0; i < ids.size(); ++i) - { - int cpID = ids.at(i); - cpIDs.append(QString::number(cpID)).append(';'); - } - QString code = QString("Case.setProperty(%1,\"%2\",%3)").arg(_data->getID()).arg(cpIDs.left(cpIDs.size() - 1)).arg(mid); - Py::PythonAgent::getInstance()->submit(code); - ComponentSelectDialogBase::accept(); - } -} diff --git a/src/ProjectTree/DialogAssignProperty.h b/src/ProjectTree/DialogAssignProperty.h deleted file mode 100644 index 8c053b9..0000000 --- a/src/ProjectTree/DialogAssignProperty.h +++ /dev/null @@ -1,65 +0,0 @@ -/** - * @file DialogAssignMaterial.h - * @brief 材料设置对话框 - * @author FastCAE研发小组(fastcae@diso.cn) - * @version 2.5.0 - * @date 2022-07-07 10:08 - * @copyright Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * - * ============================================================================ - * Program: FastCAE - * - * Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * See License or http://www.fastcae.com/ for details. - * - * BSD 3-Clause License - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. - * ================================================================================== - */ -#ifndef _DIALOGASSIGNMATERIAL_H_ -#define _DIALOGASSIGNMATERIAL_H_ - -#include "ModuleBase/componentDialogBase.h" - -namespace GUI -{ - class MainWindow; -} -namespace ModelData -{ - class ModelDataBaseExtend; -} -class QHBoxLayout; -class QLabel; -class QComboBox; - -namespace ProjectTree -{ - /** - * @brief 材料设置对话框类 - * @since 2.5.0 - */ - class AssignPropertyDialog : public ModuleBase::ComponentSelectDialogBase - { - public: - AssignPropertyDialog(GUI::MainWindow *mainwindow, ModelData::ModelDataBaseExtend *data); - ~AssignPropertyDialog(); - - private: - void init() override; - void accept() override; - - private: - ModelData::ModelDataBaseExtend *_data{}; - QHBoxLayout *_layout{}; - QLabel *_label{}; - QComboBox *_combobox{}; - }; - -} - -#endif \ No newline at end of file diff --git a/src/ProjectTree/DialogImport.cpp b/src/ProjectTree/DialogImport.cpp index ec41302..6ba8434 100644 --- a/src/ProjectTree/DialogImport.cpp +++ b/src/ProjectTree/DialogImport.cpp @@ -1,6 +1,6 @@ #include "DialogImport.h" -#include "MeshData/meshSingleton.h" -#include "MeshData/meshSet.h" +#include "meshData/meshSingleton.h" +#include "meshData/meshSet.h" #include "ModelData/modelDataBaseExtend.h" #include #include @@ -8,14 +8,15 @@ #include "PythonModule/PyAgent.h" #include "ModelData/modelDataSingleton.h" #include "ModelData/modelDataBase.h" -#include "Geometry/geometryData.h" -#include "Geometry/geometrySet.h" -#include "Geometry/GeoComponent.h" +#include "geometry/geometryData.h" +#include "geometry/geometrySet.h" +#include "geometry/GeoComponent.h" -namespace ProjectTree -{ - ImportDialog::ImportDialog(GUI::MainWindow *mainwindow, ModelData::ModelDataBaseExtend *data, ImportType t) - : ModuleBase::ComponentSelectDialogBase(mainwindow, nullptr, nullptr), _type(t) +namespace ProjectTree { + ImportDialog::ImportDialog(GUI::MainWindow* mainwindow, ModelData::ModelDataBaseExtend* data, + ImportType t) + : ModuleBase::ComponentSelectDialogBase(mainwindow, nullptr, nullptr) + , _type(t) { _data = data; init(); @@ -57,53 +58,47 @@ namespace ProjectTree }*/ // acceptGeo(); QMap idname = this->getSelectedItemIDNames(); - QList ids = idname.keys(); - QStringList addIdValues{}; - for (int id : ids) + QList ids = idname.keys(); + QStringList addIdValues{}; + for(int id : ids) addIdValues << QString::number(id); - int caseID = _data->getID(); - QString code = QString("Case.importComponents(%1,\"%2\")").arg(caseID).arg(addIdValues.join(" ")); + int caseID = _data->getID(); + QString code = + QString("Case.importComponents(%1,\"%2\")").arg(caseID).arg(addIdValues.join(" ")); Py::PythonAgent::getInstance()->submit(code); ComponentSelectDialogBase::accept(); } - /// - /// 读取可用的几何组件 - /// void ImportDialog::initGeo() { - Geometry::GeometryData *geoData = Geometry::GeometryData::getInstance(); - const int n = geoData->getGeometrySetCount(); - QList geoIDs = _data->getGeometryList(); - for (int i = 0; i < n; ++i) - { - Geometry::GeometrySet *set = geoData->getGeometrySetAt(i); - QString name = set->getName(); - int id = set->getID(); - QString icon = ":/QUI/icon/geometry.png"; - if (geoIDs.contains(id)) + Geometry::GeometryData* geoData = Geometry::GeometryData::getInstance(); + const int n = geoData->getGeometrySetCount(); + QList geoIDs = _data->getGeometryList(); + for(int i = 0; i < n; ++i) { + Geometry::GeometrySet* set = geoData->getGeometrySetAt(i); + QString name = set->getName(); + int id = set->getID(); + QString icon = ":/QUI/icon/geometry.png"; + if(geoIDs.contains(id)) appendItemToSelectedList(name, id, icon); else appendItemToAvailableList(name, id, icon); } } - /// - /// 读取可用的网格组件 - /// + void ImportDialog::initMeshSet() { - MeshData::MeshData *meshData = MeshData::MeshData::getInstance(); - const int n = meshData->getMeshSetCount(); - QList compIDs = _data->getMeshSetList(); - for (int i = 0; i < n; ++i) - { - MeshData::MeshSet *set = meshData->getMeshSetAt(i); - QString name = set->getName(); - int id = set->getID(); - QString icon = ":/QUI/icon/node.png"; - if (set->getSetType() == MeshData::Element) + MeshData::MeshData* meshData = MeshData::MeshData::getInstance(); + const int n = meshData->getMeshSetCount(); + QList compIDs = _data->getMeshSetList(); + for(int i = 0; i < n; ++i) { + MeshData::MeshSet* set = meshData->getMeshSetAt(i); + QString name = set->getName(); + int id = set->getID(); + QString icon = ":/QUI/icon/node.png"; + if(set->getSetType() == MeshData::Element) icon = ":/QUI/icon/mesh.png"; - if (compIDs.contains(id)) + if(compIDs.contains(id)) appendItemToSelectedList(name, id, icon); else appendItemToAvailableList(name, id, icon); @@ -112,14 +107,13 @@ namespace ProjectTree void ImportDialog::initGeoComponent() { - auto geoData = Geometry::GeometryData::getInstance(); - QList geoIDs = _data->getGeoComponentIDList(); - foreach (auto aGc, geoData->getGeoComponentList()) - { + auto geoData = Geometry::GeometryData::getInstance(); + QList geoIDs = _data->getGeoComponentIDList(); + foreach(auto aGc, geoData->getGeoComponentList()) { QString name = aGc->getName(); - int id = aGc->getID(); + int id = aGc->getID(); QString icon = ":/QUI/icon/geometry.png"; - if (geoIDs.contains(id)) + if(geoIDs.contains(id)) appendItemToSelectedList(name, id, icon); else appendItemToAvailableList(name, id, icon); @@ -129,17 +123,17 @@ namespace ProjectTree void ImportDialog::acceptGeo() { QMap idname = this->getSelectedItemIDNames(); - QStringList values = idname.values(); - QList ids = idname.keys(); - QStringList addIdValues; - for (int i = 0; i < ids.size(); ++i) - { + QStringList values = idname.values(); + QList ids = idname.keys(); + QStringList addIdValues; + for(int i = 0; i < ids.size(); ++i) { addIdValues << QString::number(ids.at(i)); } - int id = _data->getID(); - QString code = QString("Case.importGeometry(%1,\"%2\")").arg(id).arg(addIdValues.join(" ")); // + int id = _data->getID(); + QString code = + QString("Case.importGeometry(%1,\"%2\")").arg(id).arg(addIdValues.join(" ")); // qDebug() << code; - if (ids.size() > 0) + if(ids.size() > 0) Py::PythonAgent::getInstance()->submit(code); ComponentSelectDialogBase::accept(); } @@ -152,7 +146,8 @@ namespace ProjectTree // foreach(int id, ids) // addIdValues << QString::number(id); // int caseID = _data->getID(); - // QString code = QString("Case.importGeoComponents(%1,\"%2\")").arg(caseID).arg(addIdValues.join(" ")); + // QString code = + // QString("Case.importGeoComponents(%1,\"%2\")").arg(caseID).arg(addIdValues.join(" ")); // Py::PythonAgent::getInstance()->submit(code); // } @@ -164,7 +159,8 @@ namespace ProjectTree // foreach(int id, ids) // addIdValues << QString::number(id); // int caseID = _data->getID(); - // QString code = QString("Case.importGeoComponents(%1,\"%2\")").arg(caseID).arg(addIdValues.join(" ")); + // QString code = + // QString("Case.importGeoComponents(%1,\"%2\")").arg(caseID).arg(addIdValues.join(" ")); // Py::PythonAgent::getInstance()->submit(code); // } -} \ No newline at end of file +} // namespace ProjectTree \ No newline at end of file diff --git a/src/ProjectTree/DialogImport.h b/src/ProjectTree/DialogImport.h index c947ac2..12b4aa5 100644 --- a/src/ProjectTree/DialogImport.h +++ b/src/ProjectTree/DialogImport.h @@ -1,29 +1,7 @@ -/** - * @file DialogImport.h - * @brief 导入组件对话框 - * @author FastCAE研发小组(fastcae@diso.cn) - * @version 2.5.0 - * @date 2022-07-07 10:14 - * @copyright Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * - * ============================================================================ - * Program: FastCAE - * - * Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * See License or http://www.fastcae.com/ for details. - * - * BSD 3-Clause License - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. - * ================================================================================== - */ -#ifndef _DIALOGIMPORTMESHSET_ +#ifndef _DIALOGIMPORTMESHSET_ #define _DIALOGIMPORTMESHSET_ -#include "ModuleBase/componentDialogBase.h" +#include "moduleBase/componentDialogBase.h" namespace GUI { @@ -42,34 +20,33 @@ namespace ProjectTree Geometry, MeshSet }; - /** - * @brief 导入组件对话框类 - * @since 2.5.0 - */ + class ImportDialog : public ModuleBase::ComponentSelectDialogBase { Q_OBJECT public: - ImportDialog(GUI::MainWindow *mainwindow, ModelData::ModelDataBaseExtend *data, ImportType t); + ImportDialog(GUI::MainWindow* mainwindow, ModelData::ModelDataBaseExtend* data, ImportType t); ~ImportDialog() = default; + protected: void init() override; void accept() override; - + private: void initGeo(); void initMeshSet(); void initGeoComponent(); void acceptGeo(); - // void acceptComponents(); +// void acceptComponents(); private: - ImportType _type{None}; - ModelData::ModelDataBaseExtend *_data{}; + ImportType _type{ None }; + ModelData::ModelDataBaseExtend* _data{}; }; } + #endif diff --git a/src/ProjectTree/DialogRemoveReport.h b/src/ProjectTree/DialogRemoveReport.h index ccacf29..477258f 100644 --- a/src/ProjectTree/DialogRemoveReport.h +++ b/src/ProjectTree/DialogRemoveReport.h @@ -1,26 +1,4 @@ -/** - * @file DialogRemoveReport.h - * @brief 报告移除确认对话框 - * @author FastCAE研发小组(fastcae@diso.cn) - * @version 2.5.0 - * @date 2022-07-07 10:20 - * @copyright Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * - * ============================================================================ - * Program: FastCAE - * - * Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * See License or http://www.fastcae.com/ for details. - * - * BSD 3-Clause License - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. - * ================================================================================== - */ -#ifndef _REMOVEREPORTDIALOG_H_ +#ifndef _REMOVEREPORTDIALOG_H_ #define _REMOVEREPORTDIALOG_H_ #include "SelfDefObject/QFDialog.h" @@ -40,14 +18,16 @@ namespace ProjectTree { Q_OBJECT public: - RemoveReportDialog(GUI::MainWindow *m); + RemoveReportDialog(GUI::MainWindow* m); ~RemoveReportDialog(); bool isRemoveCompletely(); private: - Ui::RemoveReportDialog *_ui{}; + Ui::RemoveReportDialog* _ui{}; + }; } + #endif diff --git a/src/ProjectTree/ProjectTreeWithBasicNode.cpp b/src/ProjectTree/ProjectTreeWithBasicNode.cpp index 2b47ada..c28c22a 100644 --- a/src/ProjectTree/ProjectTreeWithBasicNode.cpp +++ b/src/ProjectTree/ProjectTreeWithBasicNode.cpp @@ -1,22 +1,20 @@ #include "ProjectTreeWithBasicNode.h" #include "ModelData/modelDataBaseExtend.h" #include "ConfigOptions/TreeItemData.h" -#include "MeshData/meshSet.h" +#include "meshData/meshSet.h" #include "DialogImport.h" -#include "MeshData/meshSingleton.h" +#include "meshData/meshSingleton.h" #include "DialogAddBC.h" -#include "DialogAddProperty.h" #include "BCBase/BCBase.h" #include "BCBase/BCUserDef.h" -#include "MainWindow/MainWindow.h" +#include "mainWindow/mainWindow.h" #include "DialogRemoveReport.h" #include "ModelData/simulationSettingBase.h" #include "ModelData/solverSettingBase.h" -#include "ModelData/elementProperty.h" -#include "Geometry/geometryData.h" -#include "Geometry/geometrySet.h" -#include "Geometry/GeoComponent.h" -#include "DialogAssignProperty.h" +#include "geometry/geometryData.h" +#include "geometry/geometrySet.h" +#include "geometry/GeoComponent.h" +#include "DialogAssignMaterial.h" #include "DataProperty/PropertyBase.h" #include "DataProperty/PropertyString.h" #include "ConfigOptions/ConfigOptions.h" @@ -32,7 +30,6 @@ #include "Material/MaterialSingletion.h" #include "Material/Material.h" #include "PythonModule/PyAgent.h" - #include #include #include @@ -43,1179 +40,1074 @@ #include #include -namespace ProjectTree -{ - ProjectTreeWithBasicNode::ProjectTreeWithBasicNode(GUI::MainWindow *mainwindow) - : ProjectTreeBase(mainwindow) - { - connect(this, SIGNAL(highLightSet(MeshData::MeshSet *)), mainwindow, SIGNAL(highLightSetSig(MeshData::MeshSet *))); - connect(this, SIGNAL(highLightGeoComponent(Geometry::GeoComponent *)), mainwindow, SIGNAL(highLightGeoComponentSig(Geometry::GeoComponent *))); - connect(mainwindow, SIGNAL(closePostWindowSig(Post::PostWindowBase *)), this, SLOT(closePostWindow(Post::PostWindowBase *))); - connect(this, SIGNAL(openRealTimeWin(Post::RealTimeWindowBase *, int)), mainwindow, SIGNAL(openRealTimeWindowSig(Post::RealTimeWindowBase *, int))); - connect(this, SIGNAL(clearAllHighLightSig()), mainwindow, SIGNAL(clearAllHighLight())); - connect(this, SIGNAL(addComponentRootItemSig()), this, SLOT(addComponentRootItemSlot())); - _nodeMenu = new QMenu; - _cellMeun = new QMenu; - } - - ProjectTreeWithBasicNode::~ProjectTreeWithBasicNode() - { - if (_postMapper != nullptr) - delete _postMapper; - if (_nodeMenu != nullptr) - delete _nodeMenu; - if (_cellMeun != nullptr) - delete _cellMeun; - } - - void ProjectTreeWithBasicNode::initBasicNode(QTreeWidgetItem *phyroot) - { - _root = new QTreeWidgetItem(phyroot, TreeItemType::ProjectRoot); - _root->setFlags(_root->flags() | Qt::ItemIsEditable); - _root->setIcon(0, QIcon("://QUI/icon/physics.png")); - // int id = _data->getID(); - _root->setText(0, _data->getName()); //根据项目名称确定 - _root->setData(0, Qt::UserRole, _data->getID()); - _root->setExpanded(true); - double time = _data->getSolveTime(); - if (time > 0) - _solveStatus = Finished; - _data->setOutputFileName(_outputFile); - - // _geometryRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectGeometry); - // _geometryRootItem->setText(0, tr("Geometry")); - // _geometryRootItem->setIcon(0, QIcon("://QUI/icon/geometry.png")); - // _textItemHash["Geometry"] = _geometryRootItem; - _propertyRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectEleProperty); - _propertyRootItem->setText(0, tr("Element Property")); - _propertyRootItem->setIcon(0, QIcon("://QUI/icon/solumationsetting.png")); - _textItemHash["Element Property"] = _propertyRootItem; - - _ComponentRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectComponent); - _ComponentRootItem->setText(0, tr("Set")); - _ComponentRootItem->setIcon(0, QIcon("://QUI/icon/mesh.png")); - _textItemHash["Set"] = _ComponentRootItem; - - _simulationSettingItem = new QTreeWidgetItem(_root, TreeItemType::ProjectSimulationSetting); - _simulationSettingItem->setText(0, tr("Simulation Setting")); - _simulationSettingItem->setIcon(0, QIcon("://QUI/icon/solumationsetting.png")); - _textItemHash["Simulation Setting"] = _simulationSettingItem; - - _boundaryConditionItem = new QTreeWidgetItem(_root, TreeItemType::ProjectBoundaryCondation); - _boundaryConditionItem->setText(0, tr("Boundary Condition")); - _boundaryConditionItem->setIcon(0, QIcon("://QUI/icon/bc.png")); - _textItemHash["Boundary Condition"] = _boundaryConditionItem; - - _solverSettingItem = new QTreeWidgetItem(_root, TreeItemType::ProjectSolver); - _solverSettingItem->setText(0, tr("Solver Setting")); - _solverSettingItem->setIcon(0, QIcon("://QUI/icon/setting.png")); - _textItemHash["Solver Setting"] = _solverSettingItem; - - _monitorRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectMonitor); - _monitorRootItem->setText(0, tr("Monitor")); - _monitorRootItem->setIcon(0, QIcon("://QUI/icon/monitor.png")); - _textItemHash["Monitor"] = _monitorRootItem; - - _postRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectPost); - _postRootItem->setText(0, tr("Post")); - _postRootItem->setIcon(0, QIcon("://QUI/icon/post.png")); - _textItemHash["Post"] = _postRootItem; - - _post2DItem = new QTreeWidgetItem(_postRootItem, TreeItemType::ProJectPost2DGraph); - _post2DItem->setText(0, tr("2D Plot")); - _post2DItem->setIcon(0, QIcon("://QUI/icon/curve.png")); - _textItemHash["2D Plot"] = _post2DItem; - - _postCounterItem = new QTreeWidgetItem(_postRootItem, TreeItemType::ProjectPostCounter); - _postCounterItem->setText(0, tr("Counter")); - _postCounterItem->setIcon(0, QIcon("://QUI/icon/counter.png")); - _textItemHash["Counter"] = _postCounterItem; - - _postVectorItem = new QTreeWidgetItem(_postRootItem, TreeItemType::ProjectPostVector); - _postVectorItem->setText(0, tr("Vector")); - _postVectorItem->setIcon(0, QIcon("://QUI/icon/vector.png")); - _textItemHash["Vector"] = _postVectorItem; - - _postStreamLineItem = new QTreeWidgetItem(_postRootItem, TreeItemType::ProjectPostStreamLine); - _postStreamLineItem->setText(0, tr("Stream Line")); - _postStreamLineItem->setIcon(0, QIcon("://QUI/icon/streamline.png")); - _textItemHash["Stream Line"] = _postStreamLineItem; - _postStreamLineItem->setHidden(true); - - _reportItem = new QTreeWidgetItem(_root, TreeItemType::ProjectReport); - _reportItem->setText(0, tr("Report")); - _reportItem->setHidden(true); - _textItemHash["Report"] = _reportItem; - } - - void ProjectTreeWithBasicNode::reTranslate() - { - if (_geometryRootItem != nullptr) - _geometryRootItem->setText(0, tr("Geometry")); - _ComponentRootItem->setText(0, tr("Set")); - _simulationSettingItem->setText(0, tr("Simulation Setting")); - _boundaryConditionItem->setText(0, tr("Boundary Condition")); - _solverSettingItem->setText(0, tr("Solver Setting")); - _monitorRootItem->setText(0, tr("Monitor")); - _postRootItem->setText(0, tr("Post")); - _post2DItem->setText(0, tr("2D Plot")); - _postCounterItem->setText(0, tr("Counter")); - _postVectorItem->setText(0, tr("Vector")); - _postStreamLineItem->setText(0, tr("Stream Line")); - // _post3DItem->setText(0, tr("3D Graph")); - _reportItem->setText(0, tr("Report")); - - ProjectTreeBase::reTranslate(); - } - void ProjectTreeWithBasicNode::setData(ModelData::ModelDataBase *data) - { - ProjectTreeBase::setData(data); - _modelDataExtend = dynamic_cast(_data); - } - void ProjectTreeWithBasicNode::contextMenu(QMenu *menu) - { - QAction *action = nullptr; - TreeItemType type = (TreeItemType)_currentItem->type(); - auto glo = ConfigOption::ConfigOption::getInstance()->getGlobalConfig(); - switch (type) - { - case ProjectGeometry: - action = menu->addAction(tr("Import Geometry")); - connect(action, SIGNAL(triggered()), this, SLOT(importGeometry())); - break; - case ProjectEleProperty: - action = menu->addAction(tr("Add Property")); - connect(action, SIGNAL(triggered()), this, SLOT(addEleProperty())); - break; - case ProjectElePropertyChild: - action = menu->addAction(tr("Remove")); - connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); - break; - case ProjectComponent: - action = menu->addAction(tr("Import Set")); - connect(action, SIGNAL(triggered()), this, SLOT(importComponents())); - - if (glo->isMaterialEnabled()) - { - action = menu->addAction(tr("Assign Property")); - connect(action, SIGNAL(triggered()), this, SLOT(assignProperty())); - } - break; - case ProjectComponentChild: - action = menu->addAction(tr("Remove")); - connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); - break; - case ProjectBoundaryCondation: - action = menu->addAction(tr("Add Boundary Condition")); - connect(action, SIGNAL(triggered()), this, SLOT(addBC())); - break; - case ProjectBoundaryCondationChild: - action = menu->addAction(tr("Remove")); - connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); - break; - case ProjectMonitor: - action = menu->addAction(tr("View")); - connect(action, SIGNAL(triggered()), this, SLOT(viewRealTimeWindow())); - break; - case ProJectPost2DGraph: - this->d2PlotContextMenu(menu); - break; - case ProJectPost2DGraphChild: - action = menu->addAction(tr("Remove")); - connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); - break; - case ProjectPostCounter: - this->counterContextMenu(menu); - break; - case ProjectPostCounterChild: - action = menu->addAction(tr("Remove")); - connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); - break; - case ProjectPostVector: - this->vectorContextMenu(menu); - break; - case ProjectPostVectorChild: - action = menu->addAction(tr("Remove")); - connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); - break; - case ProjectPostStreamLine: - break; - case ProjectReport: - action = menu->addAction(tr("Create Report")); - connect(action, SIGNAL(triggered()), this, SLOT(createReport())); - break; - case ProjectReportChild: - action = menu->addAction(tr("Remove")); - connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); - break; - default: - break; - } - ProjectTreeBase::contextMenu(menu); - } - - void ProjectTreeWithBasicNode::importComponents() - { - ImportDialog dlg(_mainWindow, _modelDataExtend, MeshSet); - dlg.exec(); - // if (dlg.exec() == QDialog::Accepted) - // updateMeshSubTree(); - } - void ProjectTreeWithBasicNode::importGeometry() - { - ImportDialog dlg(_mainWindow, _modelDataExtend, Geometry); - dlg.exec(); - } - void ProjectTreeWithBasicNode::updateTree() - { - updatePropTree(); - updateGeometrySubTree(); - updateComponentSubTree(); - updateBCSubTree(); - updateMonitorTree(); - updatePostTree(); - updateReportTree(); - } - void ProjectTreeWithBasicNode::updateComponentSubTree() - { - if (_ComponentRootItem == nullptr) - return; - _ComponentRootItem->takeChildren(); - - QList IDs = _modelDataExtend->getComponentIDList(); - if (IDs.size() == 0) - return; - auto meshData = MeshData::MeshData::getInstance(); - auto geoData = Geometry::GeometryData::getInstance(); - auto materialData = Material::MaterialSingleton::getInstance(); - QString name{}; - QString icon{}; - for (int id : IDs) - { - auto type = DataProperty::ComponentBase::getComponentTypeByID(id); - if (type == 0) - continue; - if (type == DataProperty::ComponentType::MESH) - { - auto set = meshData->getMeshSetByID(id); - if (set == nullptr) - continue; - name = set->getName(); - MeshData::SetType type = set->getSetType(); - if (type == MeshData::Element) - icon = "://QUI/icon/eleset.png"; - else if (type == MeshData::Family) - icon = "://QUI/icon/family.png"; - else - icon = "://QUI/icon/nodeset.png"; - } - else if (type == DataProperty::ComponentType::GEOMETRY) - { - auto gc = geoData->getGeoComponentByID(id); - name = gc->getName(); - icon = "://QUI/icon/geometry.png"; - } - - if (_modelDataExtend->isPropertySetted(id)) //是否指定材料 - { - int pid = _modelDataExtend->getPropertyID(id); - auto m = _modelDataExtend->getElePropertyByID(pid); - if (!m) - continue; - QString mname = m->getName(); - name.append(QString("-[%1]").arg(mname)); - } - - QTreeWidgetItem *temp = new QTreeWidgetItem(/*_ComponentRootItem, */ TreeItemType::ProjectComponentChild); - temp->setIcon(0, QIcon(icon)); - temp->setText(0, name); - temp->setData(0, Qt::UserRole, id); - _ComponentItems.append(temp); - } - emit addComponentRootItemSig(); - - /*_ComponentRootItem->setExpanded(true); - emit clearAllHighLightSig();*/ - } - - /*void ProjectTreeWithBasicNode::updateMeshSetSubTree() - { - QList setIDs = _modelDataExtend->getMeshSetList(); - if (setIDs.size() == 0) return; - - MeshData::MeshData* meshdata = MeshData::MeshData::getInstance(); - Material::MaterialSingleton* materialData = Material::MaterialSingleton::getInstance(); - - for (int i = 0; i < setIDs.size(); ++i) - { - int id = setIDs.at(i); - MeshData::MeshSet* set = meshdata->getMeshSetByID(id); - // assert(set != nullptr); - if (set == nullptr) continue; - QString name = set->getName(); - MeshData::SetType type = set->getSetType(); - QString icon = "://QUI/icon/nodeset.png"; - if (type == MeshData::Element) - { - icon = "://QUI/icon/eleset.png"; - if (_modelDataExtend->isMaterialSetted(id)) - { - int materialid = _modelDataExtend->getMaterialID(id); - Material::Material* m = materialData->getMaterialByID(materialid); - if (m != nullptr) - { - QString mname = m->getName(); - name.append(QString("-[%1]").arg(mname)); - } - } - } - else if (type == MeshData::Family) - { - icon = "://QUI/icon/family.png"; - } - - QTreeWidgetItem* temp = new QTreeWidgetItem(_ComponentRootItem, TreeItemType::ProjectComponentChild); - temp->setIcon(0, QIcon(icon)); - temp->setText(0, name); - temp->setData(0, Qt::UserRole, id); - } - } - - void ProjectTreeWithBasicNode::updateGeoComponentTree() - { - QList GCIDs = _modelDataExtend->getGeoComponentIDList(); - if (GCIDs.isEmpty()) return; - auto geoData = Geometry::GeometryData::getInstance(); - auto materialData = Material::MaterialSingleton::getInstance(); - QString name{}; - for(int GCID : GCIDs) - { - auto aGC = geoData->getGeoComponentByID(GCID); - if (!aGC) continue; - name = aGC->getName(); - if (_modelDataExtend->isMaterialSetted(GCID)) - { - int materialid = _modelDataExtend->getMaterialID(GCID); - Material::Material* m = materialData->getMaterialByID(materialid); - if (!m) continue; - name.append(QString("-[%1]").arg(m->getName())); - } - - QTreeWidgetItem* temp = new QTreeWidgetItem(_ComponentRootItem, TreeItemType::ProjectComponentChild); - temp->setIcon(0, QIcon("://QUI/icon/geometry.png")); - temp->setText(0, name); - temp->setData(0, Qt::UserRole, GCID); - } - }*/ - - void ProjectTreeWithBasicNode::updatePropTree() - { - if (_propertyRootItem == nullptr) - return; - _propertyRootItem->takeChildren(); - const int np = _modelDataExtend->getElePropCount(); - for (int i = 0; i < np; ++i) - { - auto prop = _modelDataExtend->getElePropertyAt(i); - QTreeWidgetItem *item = new QTreeWidgetItem(_propertyRootItem, TreeItemType::ProjectElePropertyChild); - item->setText(0, prop->getName()); - item->setData(0, Qt::UserRole, prop->getID()); - } - _propertyRootItem->setExpanded(true); - } - - void ProjectTreeWithBasicNode::updateBCSubTree() - { - if (_boundaryConditionItem == nullptr) - return; - _boundaryConditionItem->takeChildren(); - const int nBC = _modelDataExtend->getBCCount(); - for (int i = 0; i < nBC; ++i) - { - QString icon; - BCBase::BCBase *bc = _modelDataExtend->getBCAt(i); - if (bc == nullptr) - continue; - BCBase::BCType ty = bc->getBCType(); - QString stype; - if (ty == BCBase::UserDef) - { - stype = ((BCBase::BCUserDef *)bc)->getName(); - QString sicon = ((BCBase::BCUserDef *)bc)->getIcon(); - icon = qApp->applicationDirPath() + "/../ConfigFiles/Icon/" + sicon; - bc->appendProperty("BCType", stype); - } - else - { - stype = BCBase::BCTypeToString(ty); - icon = BCBase::BCIconByType(ty); - } - QString cpName = bc->getComponentName(); - - QTreeWidgetItem *item = new QTreeWidgetItem(_boundaryConditionItem, TreeItemType::ProjectBoundaryCondationChild); - QString text = QString("%1 @ %2").arg(stype).arg(cpName); - item->setText(0, text); - item->setIcon(0, QIcon(icon)); - item->setData(0, Qt::UserRole, bc->getComponentID()); - } - _boundaryConditionItem->setExpanded(true); - emit highLightSet(nullptr); - } - void ProjectTreeWithBasicNode::updateMonitorTree() - { - _monitorRootItem->takeChildren(); - QList curvelist = _modelDataExtend->getMonitorCurves(); - // qDebug() << curvelist.size(); - for (int i = 0; i < curvelist.size(); ++i) - { - ConfigOption::PostCurve *c = curvelist.at(i); - QString text = c->getDescribe(); - QTreeWidgetItem *tempitem = new QTreeWidgetItem(_monitorRootItem, ProjectMonitorChild); - tempitem->setText(0, text); - tempitem->setIcon(0, QIcon("://QUI/icon/curve.png")); - } - } - void ProjectTreeWithBasicNode::updatePostTree() - { - _post2DItem->takeChildren(); - _postCounterItem->takeChildren(); - _postVectorItem->takeChildren(); - // QStringList d2v = _modelDataExtend->getPlot2DVariable(); - QList d2v = _modelDataExtend->getPlotCurves(); - for (int i = 0; i < d2v.size(); ++i) - { - QTreeWidgetItem *item = new QTreeWidgetItem(_post2DItem, ProJectPost2DGraphChild); - QString text = d2v.at(i)->getDescribe(); - item->setText(0, text); - item->setIcon(0, QIcon("://QUI/icon/curve.png")); - } - QStringList scalarv = _modelDataExtend->getScalarVariable(); - for (int i = 0; i < scalarv.size(); ++i) - { - QTreeWidgetItem *item = new QTreeWidgetItem(_postCounterItem, ProjectPostCounterChild); - QString text = scalarv.at(i); - if (text.endsWith("_cell000")) - { - text.replace("_cell000", " @ Cell"); - } - else - text.append(" @ Node"); - item->setIcon(0, QIcon("://QUI/icon/counter.png")); - item->setText(0, text); - } - QStringList vectorv = _modelDataExtend->getVectorVariable(); - for (int i = 0; i < vectorv.size(); ++i) - { - QTreeWidgetItem *item = new QTreeWidgetItem(_postVectorItem, ProjectPostVectorChild); - QString text = vectorv.at(i); - if (text.endsWith("_cell000")) - { - text.replace("_cell000", " @ Cell"); - } - else - text.append(" @ Node"); - item->setIcon(0, QIcon("://QUI/icon/vector.png")); - item->setText(0, text); - } - _post2DItem->setExpanded(true); - _postCounterItem->setExpanded(true); - _postVectorItem->setExpanded(true); - } - - void ProjectTreeWithBasicNode::removeCaseComponentByID(int cpID) - { - bool res = _modelDataExtend->removeComponentByID(cpID); - if (!res) - return; - _modelDataExtend->removeBCByComponentID(cpID); - - QTreeWidgetItem *item{}; - int childCount = _ComponentRootItem->childCount(); - for (int i = 0; i < childCount; ++i) - { - QTreeWidgetItem *tmp = _ComponentRootItem->child(i); - if (tmp->data(0, Qt::UserRole).toInt() == cpID) - { - item = tmp; - break; - } - } - if (!item) - return; - _ComponentRootItem->removeChild(item); - - QList items; - childCount = _boundaryConditionItem->childCount(); - for (int i = 0; i < childCount; ++i) - { - QTreeWidgetItem *item = _boundaryConditionItem->child(i); - if (item->data(0, Qt::UserRole).toInt() == cpID) - items << item; - } - for (QTreeWidgetItem *item : items) - _boundaryConditionItem->removeChild(item); - } - - void ProjectTreeWithBasicNode::renameCaseComponentByID(int cpID) - { - auto meshData = MeshData::MeshData::getInstance(); - auto geoData = Geometry::GeometryData::getInstance(); - DataProperty::DataBase *component{}; - component = meshData->getMeshSetByID(cpID); - if (!component) - component = geoData->getGeoComponentByID(cpID); - if (!component) - return; - - QTreeWidgetItem *item{}; - QString cpName = component->getName(); - int childCount = _ComponentRootItem->childCount(); - for (int i = 0; i < childCount; ++i) - { - item = _ComponentRootItem->child(i); - if (item->data(0, Qt::UserRole).toInt() != cpID) - continue; - QString oldText = item->text(0); - if (!oldText.contains("-[")) - item->setText(0, cpName); - else - { - int index = oldText.lastIndexOf("-["); - QString right = oldText.right(oldText.size() - index); - QString newText = cpName + right; - item->setText(0, newText); - } - break; - } - - childCount = _boundaryConditionItem->childCount(); - for (int i = 0; i < childCount; ++i) - { - item = _boundaryConditionItem->child(i); - if (item->data(0, Qt::UserRole).toInt() != cpID) - continue; - QString oldText = item->text(0); - int index = oldText.lastIndexOf(" @"); - QString left = oldText.left(index + 3); - QString newText = left + cpName; - item->setText(0, newText); - } - } - - const QList &ProjectTreeWithBasicNode::getComponentIDList() - { - return _modelDataExtend->getComponentIDList(); - } - - void ProjectTreeWithBasicNode::removeItem() - { - // TreeItemType type = (TreeItemType)_currentItem->type(); - if (_currentItem->type() == ProjectComponentChild) - { - int index = _ComponentRootItem->indexOfChild(_currentItem); - if (_data->isComponentUsed(index)) - { - if (QMessageBox::Yes != QMessageBox::warning(_mainWindow, tr("Warning"), tr("This Set has been used, still remove?"), QMessageBox::Yes, QMessageBox::No)) - return; - } - _modelDataExtend->removeComponentAt(index); - updateComponentSubTree(); - updateBCSubTree(); - } - else if (_currentItem->type() == ProjectElePropertyChild) - { - int index = _propertyRootItem->indexOfChild(_currentItem); - _data->removeElePropAt(index); - updatePropTree(); - } - else if (_currentItem->type() == ProjectBoundaryCondationChild) - { - int index = _boundaryConditionItem->indexOfChild(_currentItem); - _modelDataExtend->removeBCAt(index); - updateBCSubTree(); - } - else if (_currentItem->type() == ProjectReportChild) - { - int index = _reportItem->indexOfChild(_currentItem); - RemoveReportDialog dlg(_mainWindow); - if (dlg.exec() == QDialog::Accepted) - { - QString fileName = _modelDataExtend->getReportAt(index); - QFile f(fileName); - if (f.exists() && dlg.isRemoveCompletely()) - f.remove(); - _modelDataExtend->removeReportAt(index); - updateReportTree(); - } - } - else if (_currentItem->type() == ProJectPost2DGraphChild) - { - const int index = _post2DItem->indexOfChild(_currentItem); - QString name = _currentItem->text(0); - qDebug() << name; - _modelDataExtend->removePlotCurve(index); - updatePostTree(); - auto p2d = _modelDataExtend->getPost2DWindow(); - if (p2d != nullptr) - { - p2d->removeCurve(name); - } - } - else if (_currentItem->type() == ProjectPostCounterChild) - { - const int index = _postCounterItem->indexOfChild(_currentItem); - _modelDataExtend->removeScalarVariable(index); - updatePostTree(); - } - else if (_currentItem->type() == ProjectPostVectorChild) - { - const int index = _postVectorItem->indexOfChild(_currentItem); - _modelDataExtend->removeVectorVariable(index); - updatePostTree(); - } - emit disPlayProp(nullptr); - } - void ProjectTreeWithBasicNode::addEleProperty() - { - AddPropDialog dlg(_mainWindow, _modelDataExtend); - if (QDialog::Accepted == dlg.exec()) - updatePropTree(); - } - void ProjectTreeWithBasicNode::createReport() - { - // _modelDataExtend->appendReport("D:/test.docx"); - - updateReportTree(); - } - void ProjectTreeWithBasicNode::addBC() - { - AddBCDialog dlg(_mainWindow, _modelDataExtend); - dlg.exec(); - // if (dlg.exec() == QDialog::Accepted) - // updateBCSubTree(); - } - void ProjectTreeWithBasicNode::singleClicked() - { - TreeItemType type = (TreeItemType)_currentItem->type(); - if (type == ProjectComponentChild) - { - const int index = _ComponentRootItem->indexOfChild(_currentItem); - if (index >= 0) - { - emit clearAllHighLightSig(); - int id = _modelDataExtend->getComponentIDList().at(index); - auto ms = MeshData::MeshData::getInstance()->getMeshSetByID(id); - if (ms) - { - emit highLightSet(ms); - emit disPlayProp(ms); - } - else - { - auto gc = Geometry::GeometryData::getInstance()->getGeoComponentByID(id); - if (!gc) - return; - emit highLightGeoComponent(gc); - emit disPlayProp(gc); - } - } - } - else if (type == ProjectElePropertyChild) - { - const int index = _propertyRootItem->indexOfChild(_currentItem); - if (index >= 0) - { - auto prop = _modelDataExtend->getElePropertyAt(index); - emit disPlayProp(prop); - } - } - else if (type == ProjectBoundaryCondationChild) - { - emit clearAllHighLightSig(); - const int index = _boundaryConditionItem->indexOfChild(_currentItem); - BCBase::BCBase *bc = _modelDataExtend->getBCAt(index); - assert(bc != nullptr); - emit disPlayProp(bc); - DataProperty::ComponentBase *component = bc->getComponent(); - if (!component) - return; - if (component->getComponentType() == DataProperty::ComponentType::MESH) - { - auto set = dynamic_cast(component); - emit highLightSet(set); - } - else - { - auto gc = dynamic_cast(component); - emit highLightGeoComponent(gc); - } - } - else if (type == ProjectSimulationSetting) - { - ModelData::SimlutationSettingBase *s = _data->getSimlutationSetting(); - emit disPlayProp(s); - } - else if (type == ProjectSolver) - { - ModelData::SolverSettingBase *s = _data->getSolverSetting(); - emit disPlayProp(s); - } - else if (type == ProjectMonitorChild) - { - const int index = _monitorRootItem->indexOfChild(_currentItem); - // QList mon = _modelDataExtend->getMonitorList(); - emit disPlayProp(_modelDataExtend->getMonitorCurveAt(index)); - if (_realTimeWin != nullptr) - { - QString name = _currentItem->text(0); - _realTimeWin->viewRealTimeWindow(name); - } - } - else if (type == ProJectPost2DGraphChild) - { - const int index = _post2DItem->indexOfChild(_currentItem); - ConfigOption::PostCurve *temp = _modelDataExtend->getPlotCurves().at(index); - emit disPlayProp(temp); - QString text = _currentItem->text(0); - viewPlot2D(text); - } - else if (type == ProjectPostCounterChild) - { - QString text = _currentItem->text(0); - text.remove(" @ Node"); - text.replace(" @ Cell", "_cell000"); - viewCounter(text); - } - else if (type == ProjectPostVectorChild) - { - QString text = _currentItem->text(0); - text.remove(" @ Node"); - text.replace(" @ Cell", "_cell000"); - viewVector(text); - } - else - { - emit clearAllHighLightSig(); - emit disPlayProp(nullptr); - } - const int index = _currentItem->data(0, Qt::UserRole + 1).toInt() - 1; - if (index >= 0) - { - ConfigOption::TreeItem *item = _itemList.at(index); - const int id = item->getDataID(); - DataProperty::DataBase *d = _modelDataExtend->getConfigData(id); - emit disPlayProp(d); - } - ProjectTreeBase::singleClicked(); - } - - void ProjectTreeWithBasicNode::doubleClicked() - { - if (_treeType == 1) - { - TreeItemType itemType = (TreeItemType)_currentItem->type(); - switch (itemType) - { - case TreeItemType::ProjectSimulationSettingChild: - { - // NodeParameterDlg dlg(_treeType, _currentItem->text(0), _mainWindow); - break; - } - } - } - } - - void ProjectTreeWithBasicNode::updateReportTree() - { - if (_reportItem == nullptr) - return; - _reportItem->takeChildren(); - const int nReport = _modelDataExtend->getReportCount(); - for (int i = 0; i < nReport; ++i) - { - QString report = _modelDataExtend->getReportAt(i); - QFileInfo file(report); - if (!file.exists()) - continue; - QString text = file.fileName(); - QTreeWidgetItem *item = new QTreeWidgetItem(_reportItem, TreeItemType::ProjectReportChild); - item->setText(0, text); - } - _reportItem->setExpanded(true); - } - void ProjectTreeWithBasicNode::assignProperty() - { - AssignPropertyDialog dlg(_mainWindow, _modelDataExtend); - if (dlg.exec() == QDialog::Accepted) - this->updateComponentSubTree(); - } - void ProjectTreeWithBasicNode::d2PlotContextMenu(QMenu *menu) - { - ConfigOption::PostConfig *option = ConfigOption::ConfigOption::getInstance()->getPostConfig(); - ConfigOption::PostConfigInfo *info = option->getPostConfigInfo(_treeType); - if (info == nullptr) - return; - if (_postMapper != nullptr) - { - delete _postMapper; - _postMapper = nullptr; - } - - _postMapper = new QSignalMapper(this); - // QStringList d2Variables = info->get2DVariable(); - QList curlist = info->getCurveList(); - for (int i = 0; i < curlist.size(); ++i) - { - QString text = curlist.at(i)->getDescribe(); - if (text.isEmpty()) - continue; - QAction *action = menu->addAction(text); - connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); - _postMapper->setMapping(action, text); - } - connect(_postMapper, SIGNAL(mapped(QString)), this, SLOT(viewPlot2D(QString))); - } - void ProjectTreeWithBasicNode::counterContextMenu(QMenu *menu) - { - ConfigOption::PostConfig *option = ConfigOption::ConfigOption::getInstance()->getPostConfig(); - ConfigOption::PostConfigInfo *info = option->getPostConfigInfo(_treeType); - if (info == nullptr) - return; - if (_postMapper != nullptr) - { - delete _postMapper; - _postMapper = nullptr; - } - _postMapper = new QSignalMapper(this); - - QAction *nodeaction = menu->addAction(tr("Node Scalar")); - QAction *cellaction = menu->addAction(tr("Cell Scalar")); - _nodeMenu->clear(); - _cellMeun->clear(); - nodeaction->setMenu(_nodeMenu); - cellaction->setMenu(_cellMeun); - - QStringList scalarVariables = info->getNodeScalarVariable(); - // if (scalarVariables.at(0) != "") - // { - - for (int i = 0; i < scalarVariables.size(); ++i) - { - QString text = scalarVariables.at(i); - if (text.isEmpty()) - continue; - qDebug() << text; - QAction *action = _nodeMenu->addAction(text); - connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); - _postMapper->setMapping(action, text); - } - // } - scalarVariables = info->getCellScalarVariable(); - // if (scalarVariables.at(0) != "") - // { - - for (int i = 0; i < scalarVariables.size(); ++i) - { - QString text = scalarVariables.at(i); - if (text.isEmpty()) - continue; - QAction *action = _cellMeun->addAction(text); - connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); - _postMapper->setMapping(action, text.append("_cell000")); - } - // } - connect(_postMapper, SIGNAL(mapped(QString)), this, SLOT(viewCounter(QString))); - } - void ProjectTreeWithBasicNode::vectorContextMenu(QMenu *menu) - { - ConfigOption::PostConfig *option = ConfigOption::ConfigOption::getInstance()->getPostConfig(); - ConfigOption::PostConfigInfo *info = option->getPostConfigInfo(_treeType); - if (info == nullptr) - return; - if (_postMapper != nullptr) - { - delete _postMapper; - _postMapper = nullptr; - } - _postMapper = new QSignalMapper(this); - - QAction *nodeaction = menu->addAction(tr("Node Vector")); - QAction *cellaction = menu->addAction(tr("Cell Vector")); - _nodeMenu->clear(); - _cellMeun->clear(); - nodeaction->setMenu(_nodeMenu); - cellaction->setMenu(_cellMeun); - - QStringList vectorVariables = info->getNodeVectorVariable(); - // if (vectorVariables.at(0) != "") - // { - - for (int i = 0; i < vectorVariables.size(); ++i) - { - QString text = vectorVariables.at(i); - if (text.isEmpty()) - continue; - QAction *action = _nodeMenu->addAction(text); - connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); - _postMapper->setMapping(action, text); - } - // } - vectorVariables = info->getCellVectorVariable(); - // if (vectorVariables.at(0) != "") - // { - - for (int i = 0; i < vectorVariables.size(); ++i) - { - QString text = vectorVariables.at(i); - if (text.isEmpty()) - continue; - QAction *action = _cellMeun->addAction(text); - connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); - _postMapper->setMapping(action, text.append("_cell000")); - } - // } - connect(_postMapper, SIGNAL(mapped(QString)), this, SLOT(viewVector(QString))); - } - - void ProjectTreeWithBasicNode::closePostWindow(Post::PostWindowBase *w) - { - auto p2d = _modelDataExtend->getPost2DWindow(); - auto p3d = _modelDataExtend->getPost3DWindow(); - if (p2d == w) - { - // _post2DWindow = nullptr; - _modelDataExtend->setPost2DWindow(nullptr); - _modelDataExtend->clearPlotCurve(); - this->updatePostTree(); - } - if (p3d == w) - { - // _post3DWindow = nullptr; - _modelDataExtend->setPost3DWindow(nullptr); - _modelDataExtend->clear3DVariable(); - this->updatePostTree(); - } - } - - void ProjectTreeWithBasicNode::addComponentRootItemSlot() - { - if (_ComponentItems.size() == 0) - return; - _ComponentRootItem->addChildren(_ComponentItems); - _ComponentRootItem->setExpanded(true); - _ComponentItems.clear(); - emit clearAllHighLightSig(); - } - - void ProjectTreeWithBasicNode::viewPlot2D(QString variable) - { - auto p2d = _modelDataExtend->getPost2DWindow(); - - if (p2d == nullptr) - { - // ConfigOption::PostConfig* option = ConfigOption::ConfigOption::getInstance()->getPostConfig(); - // ConfigOption::PostConfigInfo* info = option->getPostConfigInfo(_treeType); - p2d = new Post::Post2DWindowInterface(_mainWindow, _data->getID()); - _modelDataExtend->setPost2DWindow(p2d); - // QStringList filenames = info->getPost2DFile(); - QStringList filenames = _modelDataExtend->getAbsolutePost2DFiles(); - // - // for (int i = 0; i < filenames.size(); ++i) - // { - // QString fileName = filenames.at(i); - // // QString file = _data->getPath() + "/Result/" + fileName; - // // qDebug() << fileName; - // p2d->openfile(fileName); - // } - } - emit openPostWindowSig(p2d); - - if (_modelDataExtend->isPostCurveExist(variable)) - return; - - ConfigOption::PostConfig *postinfo = ConfigOption::ConfigOption::getInstance()->getPostConfig(); - ConfigOption::PostConfigInfo *info = postinfo->getPostConfigInfo(_treeType); - ConfigOption::PostCurve *curve = info->getCurveByName(variable); - ConfigOption::PostCurve *newcurve = new ConfigOption::PostCurve; - QString path = _modelDataExtend->getPath() + "/Result/"; - newcurve->copy(curve); - p2d->addCurve(curve->getDescribe(), path + curve->getFile(), curve->getXVariable(), curve->getYVariable()); - _modelDataExtend->apppendPlotCurve(newcurve); - this->updatePostTree(); - - emit disPlayProp(newcurve); - } - - void ProjectTreeWithBasicNode::viewCounter(QString variable) - { - int caseid = _modelDataExtend->getID(); - QString pycode = QString("Post.viewCounter(%1,\"%2\")").arg(caseid).arg(variable); - qDebug() << pycode; - Py::PythonAgent::getInstance()->submit(pycode); - } - void ProjectTreeWithBasicNode::viewCounterPost(QString variable) - { - auto p3d = _modelDataExtend->getPost3DWindow(); - - if (p3d == nullptr) - { - ConfigOption::PostConfig *option = ConfigOption::ConfigOption::getInstance()->getPostConfig(); - ConfigOption::PostConfigInfo *info = option->getPostConfigInfo(_treeType); - QString fileName = info->getPost3DFile(); - QString file = _data->getPath() + "/Result/" + fileName; - // if (!isFileExist(file)) return; - p3d = new Post::Post3DWindowInterface(_mainWindow, _data->getID()); - _modelDataExtend->setPost3DWindow(p3d); - p3d->getWindow()->openFile(file); - } - emit openPostWindowSig(p3d); - QStringList variablelist = _modelDataExtend->getScalarVariable(); - if (!variablelist.contains(variable)) - { - _modelDataExtend->appendScalarVariable(variable); - this->updatePostTree(); - } - Post::Post3DWindow *w = p3d->getWindow(); - PipelineObject *popobj = w->getCurrentPipelineObj(); - w->viewCounter(popobj, variable); - w->displayLegendBar(true); - - emit disPlayProp(nullptr); - // Py::PythonAgent::getInstance()->unLock(); - } - void ProjectTreeWithBasicNode::viewVector(QString variable) - { - int caseid = _modelDataExtend->getID(); - - QString pycode = QString("Post.viewVector(%1,\"%2\")").arg(caseid).arg(variable); - qDebug() << pycode; - Py::PythonAgent::getInstance()->submit(pycode); - } - - void ProjectTreeWithBasicNode::viewVectorPost(QString variable) - { - auto p3d = _modelDataExtend->getPost3DWindow(); - if (p3d == nullptr) - { - ConfigOption::PostConfig *option = ConfigOption::ConfigOption::getInstance()->getPostConfig(); - ConfigOption::PostConfigInfo *info = option->getPostConfigInfo(_treeType); - QString fileName = info->getPost3DFile(); - QString file = _data->getPath() + "/Result/" + fileName; - // if (!isFileExist(file)) return; - p3d = new Post::Post3DWindowInterface(_mainWindow, _data->getID()); - _modelDataExtend->setPost3DWindow(p3d); - p3d->getWindow()->openFile(file); - } - emit openPostWindowSig(p3d); - QStringList variablelist = _modelDataExtend->getVectorVariable(); - if (!variablelist.contains(variable)) - { - _modelDataExtend->appendVectorVariable(variable); - this->updatePostTree(); - } - Post::Post3DWindow *w = p3d->getWindow(); - PipelineObject *popobj = w->getCurrentPipelineObj(); - w->viewVector(popobj, variable); - w->displayLegendBar(true); - - emit disPlayProp(nullptr); - } - void ProjectTreeWithBasicNode::viewRealTimeWindow() - { - QStringList files; //= _modelDataExtend->getMonitorNameList(); - if (files.size() > 1) - return; - for (int i = 0; i < files.size(); ++i) - { - QString fi = files.at(i); - QFile f(fi); - if (!f.exists()) - { - QMessageBox::warning(nullptr, tr("Warning"), tr("File %1 is not exist").arg(fi)); - return; - } - } - - if (_realTimeWin == nullptr) - { - _realTimeWin = new Post::RealTimeWindowBase(_mainWindow, _data->getID()); - emit openRealTimeWin(_realTimeWin, _data->getID()); - } - } - - DataProperty::DataBase *ProjectTreeWithBasicNode::getCurrentItemData() - { - if (_currentItem == nullptr) - return nullptr; - if (_currentItem == _simulationSettingItem) - return _modelDataExtend->getSimlutationSetting(); - if (_currentItem == _solverSettingItem) - return _modelDataExtend->getSolverSetting(); - - const int index = _currentItem->data(0, Qt::UserRole + 1).toInt() - 1; - if (index >= 0) - { - ConfigOption::TreeItem *item = _itemList.at(index); - const int id = item->getDataID(); - DataProperty::DataBase *d = _modelDataExtend->getConfigData(id); - return d; - } - return nullptr; - } - - /*bool ProjectTreeWithBasicNode::readInForm() - { - QDesignerResource r(this); - QScopedPointer ui(r.readUi(dev)); - if (ui.isNull()) { - if (errorMessageIn) - *errorMessageIn = r.errorString(); - return false; - } - - UpdateBlocker ub(this); - clearSelection(); - m_selection->clearSelectionPool(); - m_insertedWidgets.clear(); - m_widgets.clear(); - // The main container is cleared as otherwise - // the names of the newly loaded objects will be unified. - clearMainContainer(); - m_undoStack.clear(); - emit changed(); - - QWidget *w = r.loadUi(ui.data(), formContainer()); - if (w) { - setMainContainer(w); - emit changed(); - } - if (errorMessageIn) - *errorMessageIn = r.errorString(); - return w != nullptr; - }*/ - - void ProjectTreeWithBasicNode::updateGeometrySubTree() - { - if (_geometryRootItem == nullptr) - return; - _geometryRootItem->takeChildren(); - Geometry::GeometryData *geodata = Geometry::GeometryData::getInstance(); - - QList geoIDs = _modelDataExtend->getGeometryList(); - for (int i = 0; i < geoIDs.size(); ++i) - { - int id = geoIDs.at(i); - Geometry::GeometrySet *set = geodata->getGeometrySetByID(id); - if (set == nullptr) - continue; - QString name = set->getName(); - QString icon = "://QUI/icon/geometry.png"; - QTreeWidgetItem *temp = new QTreeWidgetItem(_geometryRootItem, TreeItemType::ProjectGeometryChild); - temp->setIcon(0, QIcon(icon)); - temp->setText(0, name); - temp->setData(0, Qt::UserRole, id); - } - _geometryRootItem->setExpanded(true); - } - -} +namespace ProjectTree { + ProjectTreeWithBasicNode::ProjectTreeWithBasicNode(GUI::MainWindow* mainwindow) + : ProjectTreeBase(mainwindow) + { + connect(this, SIGNAL(highLightSet(MeshData::MeshSet*)), mainwindow, + SIGNAL(highLightSetSig(MeshData::MeshSet*))); + connect(this, SIGNAL(highLightGeoComponent(Geometry::GeoComponent*)), mainwindow, + SIGNAL(highLightGeoComponentSig(Geometry::GeoComponent*))); + connect(mainwindow, SIGNAL(closePostWindowSig(Post::PostWindowBase*)), this, + SLOT(closePostWindow(Post::PostWindowBase*))); + connect(this, SIGNAL(openRealTimeWin(Post::RealTimeWindowBase*, int)), mainwindow, + SIGNAL(openRealTimeWindowSig(Post::RealTimeWindowBase*, int))); + connect(this, SIGNAL(clearAllHighLightSig()), mainwindow, SIGNAL(clearAllHighLight())); + connect(this, SIGNAL(addComponentRootItemSig()), this, SLOT(addComponentRootItemSlot())); + _nodeMenu = new QMenu; + _cellMeun = new QMenu; + } + + ProjectTreeWithBasicNode::~ProjectTreeWithBasicNode() + { + if (_postMapper != nullptr) + delete _postMapper; + if (_nodeMenu != nullptr) + delete _nodeMenu; + if (_cellMeun != nullptr) + delete _cellMeun; + } + + void ProjectTreeWithBasicNode::initBasicNode(QTreeWidgetItem* phyroot) + { + _root = new QTreeWidgetItem(phyroot, TreeItemType::ProjectRoot); + _root->setFlags(_root->flags() | Qt::ItemIsEditable); + _root->setIcon(0, QIcon("://QUI/icon/physics.png")); + int id = _data->getID(); + _root->setText(0, _data->getName()); // 根据项目名称确定 + _root->setData(0, Qt::UserRole, _data->getID()); + _root->setExpanded(true); + double time = _data->getSolveTime(); + if (time > 0) + _solveStatus = Finished; + _data->setOutputFileName(_outputFile); + + // _geometryRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectGeometry); + // _geometryRootItem->setText(0, tr("Geometry")); + // _geometryRootItem->setIcon(0, QIcon("://QUI/icon/geometry.png")); + // _textItemHash["Geometry"] = _geometryRootItem; + + _ComponentRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectComponent); + _ComponentRootItem->setText(0, tr("Set")); + _ComponentRootItem->setIcon(0, QIcon("://QUI/icon/mesh.png")); + _textItemHash["Set"] = _ComponentRootItem; + + _simulationSettingItem = new QTreeWidgetItem(_root, TreeItemType::ProjectSimulationSetting); + _simulationSettingItem->setText(0, tr("Simulation Setting")); + _simulationSettingItem->setIcon(0, QIcon("://QUI/icon/solumationsetting.png")); + _textItemHash["Simulation Setting"] = _simulationSettingItem; + + _boundaryConditionItem = new QTreeWidgetItem(_root, TreeItemType::ProjectBoundaryCondation); + _boundaryConditionItem->setText(0, tr("Boundary Condition")); + _boundaryConditionItem->setIcon(0, QIcon("://QUI/icon/bc.png")); + _textItemHash["Boundary Condition"] = _boundaryConditionItem; + + _solverSettingItem = new QTreeWidgetItem(_root, TreeItemType::ProjectSolver); + _solverSettingItem->setText(0, tr("Solver Setting")); + _solverSettingItem->setIcon(0, QIcon("://QUI/icon/setting.png")); + _textItemHash["Solver Setting"] = _solverSettingItem; + + _monitorRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectMonitor); + _monitorRootItem->setText(0, tr("Monitor")); + _monitorRootItem->setIcon(0, QIcon("://QUI/icon/monitor.png")); + _textItemHash["Monitor"] = _monitorRootItem; + + _postRootItem = new QTreeWidgetItem(_root, TreeItemType::ProjectPost); + _postRootItem->setText(0, tr("Post")); + _postRootItem->setIcon(0, QIcon("://QUI/icon/post.png")); + _textItemHash["Post"] = _postRootItem; + + _post2DItem = new QTreeWidgetItem(_postRootItem, TreeItemType::ProJectPost2DGraph); + _post2DItem->setText(0, tr("2D Plot")); + _post2DItem->setIcon(0, QIcon("://QUI/icon/curve.png")); + _textItemHash["2D Plot"] = _post2DItem; + + _postCounterItem = new QTreeWidgetItem(_postRootItem, TreeItemType::ProjectPostCounter); + _postCounterItem->setText(0, tr("Counter")); + _postCounterItem->setIcon(0, QIcon("://QUI/icon/counter.png")); + _textItemHash["Counter"] = _postCounterItem; + + _postVectorItem = new QTreeWidgetItem(_postRootItem, TreeItemType::ProjectPostVector); + _postVectorItem->setText(0, tr("Vector")); + _postVectorItem->setIcon(0, QIcon("://QUI/icon/vector.png")); + _textItemHash["Vector"] = _postVectorItem; + + _postStreamLineItem = + new QTreeWidgetItem(_postRootItem, TreeItemType::ProjectPostStreamLine); + _postStreamLineItem->setText(0, tr("Stream Line")); + _postStreamLineItem->setIcon(0, QIcon("://QUI/icon/streamline.png")); + _textItemHash["Stream Line"] = _postStreamLineItem; + _postStreamLineItem->setHidden(true); + + _reportItem = new QTreeWidgetItem(_root, TreeItemType::ProjectReport); + _reportItem->setText(0, tr("Report")); + _reportItem->setHidden(true); + _textItemHash["Report"] = _reportItem; + } + + void ProjectTreeWithBasicNode::reTranslate() + { + if (_geometryRootItem != nullptr) + _geometryRootItem->setText(0, tr("Geometry")); + _ComponentRootItem->setText(0, tr("Set")); + _simulationSettingItem->setText(0, tr("Simulation Setting")); + _boundaryConditionItem->setText(0, tr("Boundary Condition")); + _solverSettingItem->setText(0, tr("Solver Setting")); + _monitorRootItem->setText(0, tr("Monitor")); + _postRootItem->setText(0, tr("Post")); + _post2DItem->setText(0, tr("2D Plot")); + _postCounterItem->setText(0, tr("Counter")); + _postVectorItem->setText(0, tr("Vector")); + _postStreamLineItem->setText(0, tr("Stream Line")); + // _post3DItem->setText(0, tr("3D Graph")); + _reportItem->setText(0, tr("Report")); + + ProjectTreeBase::reTranslate(); + } + void ProjectTreeWithBasicNode::setData(ModelData::ModelDataBase* data) + { + ProjectTreeBase::setData(data); + _modelDataExtend = dynamic_cast(_data); + } + void ProjectTreeWithBasicNode::contextMenu(QMenu* menu) + { + QAction* action = nullptr; + TreeItemType type = (TreeItemType)_currentItem->type(); + auto glo = ConfigOption::ConfigOption::getInstance()->getGlobalConfig(); + switch (type) { + case ProjectGeometry: + action = menu->addAction(tr("Import Geometry")); + connect(action, SIGNAL(triggered()), this, SLOT(importGeometry())); + break; + case ProjectComponent: + action = menu->addAction(tr("Import Set")); + connect(action, SIGNAL(triggered()), this, SLOT(importComponents())); + + if (glo->isMaterialEnabled()) { + action = menu->addAction(tr("Assign Material")); + connect(action, SIGNAL(triggered()), this, SLOT(assignMaterial())); + } + break; + case ProjectComponentChild: + action = menu->addAction(tr("Remove")); + connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); + break; + case ProjectBoundaryCondation: + action = menu->addAction(tr("Add Boundary Condition")); + connect(action, SIGNAL(triggered()), this, SLOT(addBC())); + break; + case ProjectBoundaryCondationChild: + action = menu->addAction(tr("Remove")); + connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); + break; + case ProjectMonitor: + action = menu->addAction(tr("View")); + connect(action, SIGNAL(triggered()), this, SLOT(viewRealTimeWindow())); + break; + case ProJectPost2DGraph: + this->d2PlotContextMenu(menu); + break; + case ProJectPost2DGraphChild: + action = menu->addAction(tr("Remove")); + connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); + break; + case ProjectPostCounter: + this->counterContextMenu(menu); + break; + case ProjectPostCounterChild: + action = menu->addAction(tr("Remove")); + connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); + break; + case ProjectPostVector: + this->vectorContextMenu(menu); + break; + case ProjectPostVectorChild: + action = menu->addAction(tr("Remove")); + connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); + break; + case ProjectPostStreamLine: + break; + case ProjectReport: + action = menu->addAction(tr("Create Report")); + connect(action, SIGNAL(triggered()), this, SLOT(createReport())); + break; + case ProjectReportChild: + action = menu->addAction(tr("Remove")); + connect(action, SIGNAL(triggered()), this, SLOT(removeItem())); + break; + default: + break; + } + ProjectTreeBase::contextMenu(menu); + } + + void ProjectTreeWithBasicNode::importComponents() + { + ImportDialog dlg(_mainWindow, _modelDataExtend, MeshSet); + dlg.exec(); + // if (dlg.exec() == QDialog::Accepted) + // updateMeshSubTree(); + } + void ProjectTreeWithBasicNode::importGeometry() + { + ImportDialog dlg(_mainWindow, _modelDataExtend, Geometry); + dlg.exec(); + } + void ProjectTreeWithBasicNode::updateTree() + { + updateGeometrySubTree(); + updateComponentSubTree(); + updateBCSubTree(); + updateMonitorTree(); + updatePostTree(); + updateReportTree(); + } + void ProjectTreeWithBasicNode::updateComponentSubTree() + { + if (_ComponentRootItem == nullptr) + return; + _ComponentRootItem->takeChildren(); + + QList IDs = _modelDataExtend->getComponentIDList(); + if (IDs.size() == 0) + return; + auto meshData = MeshData::MeshData::getInstance(); + auto geoData = Geometry::GeometryData::getInstance(); + auto materialData = Material::MaterialSingleton::getInstance(); + QString name{}; + QString icon{}; + for (int id : IDs) { + auto type = DataProperty::ComponentBase::getComponentTypeByID(id); + if (type == 0) + continue; + if (type == DataProperty::ComponentType::MESH) { + auto set = meshData->getMeshSetByID(id); + name = set->getName(); + MeshData::SetType type = set->getSetType(); + if (type == MeshData::Element) + icon = "://QUI/icon/eleset.png"; + else if (type == MeshData::Family) + icon = "://QUI/icon/family.png"; + else + icon = "://QUI/icon/nodeset.png"; + } + else if (type == DataProperty::ComponentType::GEOMETRY) { + auto gc = geoData->getGeoComponentByID(id); + name = gc->getName(); + icon = "://QUI/icon/geometry.png"; + } + + if (_modelDataExtend->isMaterialSetted(id)) // 是否指定材料 + { + int materialid = _modelDataExtend->getMaterialID(id); + Material::Material* m = materialData->getMaterialByID(materialid); + if (!m) + continue; + QString mname = m->getName(); + name.append(QString("-[%1]").arg(mname)); + } + + QTreeWidgetItem* temp = + new QTreeWidgetItem(/*_ComponentRootItem, */ TreeItemType::ProjectComponentChild); + temp->setIcon(0, QIcon(icon)); + temp->setText(0, name); + temp->setData(0, Qt::UserRole, id); + _ComponentItems.append(temp); + } + emit addComponentRootItemSig(); + + /*_ComponentRootItem->setExpanded(true); + emit clearAllHighLightSig();*/ + } + + /*void ProjectTreeWithBasicNode::updateMeshSetSubTree() + { + QList setIDs = _modelDataExtend->getMeshSetList(); + if (setIDs.size() == 0) return; + + MeshData::MeshData* meshdata = MeshData::MeshData::getInstance(); + Material::MaterialSingleton* materialData = Material::MaterialSingleton::getInstance(); + + for (int i = 0; i < setIDs.size(); ++i) + { + int id = setIDs.at(i); + MeshData::MeshSet* set = meshdata->getMeshSetByID(id); + // assert(set != nullptr); + if (set == nullptr) continue; + QString name = set->getName(); + MeshData::SetType type = set->getSetType(); + QString icon = "://QUI/icon/nodeset.png"; + if (type == MeshData::Element) + { + icon = "://QUI/icon/eleset.png"; + if (_modelDataExtend->isMaterialSetted(id)) + { + int materialid = _modelDataExtend->getMaterialID(id); + Material::Material* m = materialData->getMaterialByID(materialid); + if (m != nullptr) + { + QString mname = m->getName(); + name.append(QString("-[%1]").arg(mname)); + } + } + } + else if (type == MeshData::Family) + { + icon = "://QUI/icon/family.png"; + } + + QTreeWidgetItem* temp = new QTreeWidgetItem(_ComponentRootItem, + TreeItemType::ProjectComponentChild); temp->setIcon(0, QIcon(icon)); temp->setText(0, name); + temp->setData(0, Qt::UserRole, id); + } + } + + void ProjectTreeWithBasicNode::updateGeoComponentTree() + { + QList GCIDs = _modelDataExtend->getGeoComponentIDList(); + if (GCIDs.isEmpty()) return; + auto geoData = Geometry::GeometryData::getInstance(); + auto materialData = Material::MaterialSingleton::getInstance(); + QString name{}; + for(int GCID : GCIDs) + { + auto aGC = geoData->getGeoComponentByID(GCID); + if (!aGC) continue; + name = aGC->getName(); + if (_modelDataExtend->isMaterialSetted(GCID)) + { + int materialid = _modelDataExtend->getMaterialID(GCID); + Material::Material* m = materialData->getMaterialByID(materialid); + if (!m) continue; + name.append(QString("-[%1]").arg(m->getName())); + } + + QTreeWidgetItem* temp = new QTreeWidgetItem(_ComponentRootItem, + TreeItemType::ProjectComponentChild); temp->setIcon(0, QIcon("://QUI/icon/geometry.png")); + temp->setText(0, name); + temp->setData(0, Qt::UserRole, GCID); + } + }*/ + + void ProjectTreeWithBasicNode::updateBCSubTree() + { + if (_boundaryConditionItem == nullptr) + return; + _boundaryConditionItem->takeChildren(); + const int nBC = _modelDataExtend->getBCCount(); + for (int i = 0; i < nBC; ++i) { + QString icon; + BCBase::BCBase* bc = _modelDataExtend->getBCAt(i); + if (bc == nullptr) + continue; + BCBase::BCType ty = bc->getBCType(); + QString stype; + if (ty == BCBase::UserDef) { + stype = ((BCBase::BCUserDef*)bc)->getName(); + QString sicon = ((BCBase::BCUserDef*)bc)->getIcon(); + icon = qApp->applicationDirPath() + "/../ConfigFiles/Icon/" + sicon; + bc->appendProperty("BCType", stype); + } + else { + stype = BCBase::BCTypeToString(ty); + icon = BCBase::BCIconByType(ty); + } + QString cpName = bc->getComponentName(); + + QTreeWidgetItem* item = new QTreeWidgetItem( + _boundaryConditionItem, TreeItemType::ProjectBoundaryCondationChild); + QString text = QString("%1 @ %2").arg(stype).arg(cpName); + item->setText(0, text); + item->setIcon(0, QIcon(icon)); + item->setData(0, Qt::UserRole, bc->getComponentID()); + } + _boundaryConditionItem->setExpanded(true); + emit highLightSet(nullptr); + } + void ProjectTreeWithBasicNode::updateMonitorTree() + { + _monitorRootItem->takeChildren(); + QList curvelist = _modelDataExtend->getMonitorCurves(); + // qDebug() << curvelist.size(); + for (int i = 0; i < curvelist.size(); ++i) { + ConfigOption::PostCurve* c = curvelist.at(i); + QString text = c->getDescribe(); + QTreeWidgetItem* tempitem = new QTreeWidgetItem(_monitorRootItem, ProjectMonitorChild); + tempitem->setText(0, text); + tempitem->setIcon(0, QIcon("://QUI/icon/curve.png")); + } + } + void ProjectTreeWithBasicNode::updatePostTree() + { + _post2DItem->takeChildren(); + _postCounterItem->takeChildren(); + _postVectorItem->takeChildren(); + // QStringList d2v = _modelDataExtend->getPlot2DVariable(); + QList d2v = _modelDataExtend->getPlotCurves(); + for (int i = 0; i < d2v.size(); ++i) { + QTreeWidgetItem* item = new QTreeWidgetItem(_post2DItem, ProJectPost2DGraphChild); + QString text = d2v.at(i)->getDescribe(); + item->setText(0, text); + item->setIcon(0, QIcon("://QUI/icon/curve.png")); + } + QStringList scalarv = _modelDataExtend->getScalarVariable(); + for (int i = 0; i < scalarv.size(); ++i) { + QTreeWidgetItem* item = new QTreeWidgetItem(_postCounterItem, ProjectPostCounterChild); + QString text = scalarv.at(i); + if (text.endsWith("_cell000")) { + text.replace("_cell000", " @ Cell"); + } + else + text.append(" @ Node"); + item->setIcon(0, QIcon("://QUI/icon/counter.png")); + item->setText(0, text); + } + QStringList vectorv = _modelDataExtend->getVectorVariable(); + for (int i = 0; i < vectorv.size(); ++i) { + QTreeWidgetItem* item = new QTreeWidgetItem(_postVectorItem, ProjectPostVectorChild); + QString text = vectorv.at(i); + if (text.endsWith("_cell000")) { + text.replace("_cell000", " @ Cell"); + } + else + text.append(" @ Node"); + item->setIcon(0, QIcon("://QUI/icon/vector.png")); + item->setText(0, text); + } + _post2DItem->setExpanded(true); + _postCounterItem->setExpanded(true); + _postVectorItem->setExpanded(true); + } + + void ProjectTreeWithBasicNode::removeCaseComponentByID(int cpID) + { + bool res = _modelDataExtend->removeComponentByID(cpID); + if (!res) + return; + _modelDataExtend->removeBCByComponentID(cpID); + + QTreeWidgetItem* item{}; + int childCount = _ComponentRootItem->childCount(); + for (int i = 0; i < childCount; ++i) { + QTreeWidgetItem* tmp = _ComponentRootItem->child(i); + if (tmp->data(0, Qt::UserRole).toInt() == cpID) { + item = tmp; + break; + } + } + if (!item) + return; + _ComponentRootItem->removeChild(item); + + QList items; + childCount = _boundaryConditionItem->childCount(); + for (int i = 0; i < childCount; ++i) { + QTreeWidgetItem* item = _boundaryConditionItem->child(i); + if (item->data(0, Qt::UserRole).toInt() == cpID) + items << item; + } + for (QTreeWidgetItem* item : items) + _boundaryConditionItem->removeChild(item); + } + + void ProjectTreeWithBasicNode::renameCaseComponentByID(int cpID) + { + auto meshData = MeshData::MeshData::getInstance(); + auto geoData = Geometry::GeometryData::getInstance(); + DataProperty::DataBase* component{}; + component = meshData->getMeshSetByID(cpID); + if (!component) + component = geoData->getGeoComponentByID(cpID); + if (!component) + return; + + QTreeWidgetItem* item{}; + QString cpName = component->getName(); + int childCount = _ComponentRootItem->childCount(); + for (int i = 0; i < childCount; ++i) { + item = _ComponentRootItem->child(i); + if (item->data(0, Qt::UserRole).toInt() != cpID) + continue; + QString oldText = item->text(0); + if (!oldText.contains("-[")) + item->setText(0, cpName); + else { + int index = oldText.lastIndexOf("-["); + QString right = oldText.right(oldText.size() - index); + QString newText = cpName + right; + item->setText(0, newText); + } + break; + } + + childCount = _boundaryConditionItem->childCount(); + for (int i = 0; i < childCount; ++i) { + item = _boundaryConditionItem->child(i); + if (item->data(0, Qt::UserRole).toInt() != cpID) + continue; + QString oldText = item->text(0); + int index = oldText.lastIndexOf(" @"); + QString left = oldText.left(index + 3); + QString newText = left + cpName; + item->setText(0, newText); + } + } + + const QList& ProjectTreeWithBasicNode::getComponentIDList() + { + return _modelDataExtend->getComponentIDList(); + } + + void ProjectTreeWithBasicNode::removeItem() + { + TreeItemType type = (TreeItemType)_currentItem->type(); + if (_currentItem->type() == ProjectComponentChild) { + int index = _ComponentRootItem->indexOfChild(_currentItem); + if (_data->isComponentUsed(index)) { + if (QMessageBox::Yes + != QMessageBox::warning(_mainWindow, tr("Warning"), + tr("This Set has been used, still remove?"), + QMessageBox::Yes, QMessageBox::No)) + return; + } + _modelDataExtend->removeComponentAt(index); + updateComponentSubTree(); + updateBCSubTree(); + } + else if (_currentItem->type() == ProjectBoundaryCondationChild) { + int index = _boundaryConditionItem->indexOfChild(_currentItem); + _modelDataExtend->removeBCAt(index); + updateBCSubTree(); + } + else if (_currentItem->type() == ProjectReportChild) { + int index = _reportItem->indexOfChild(_currentItem); + RemoveReportDialog dlg(_mainWindow); + if (dlg.exec() == QDialog::Accepted) { + QString fileName = _modelDataExtend->getReportAt(index); + QFile f(fileName); + if (f.exists() && dlg.isRemoveCompletely()) + f.remove(); + _modelDataExtend->removeReportAt(index); + updateReportTree(); + } + } + else if (_currentItem->type() == ProJectPost2DGraphChild) { + const int index = _post2DItem->indexOfChild(_currentItem); + QString name = _currentItem->text(0); + qDebug() << name; + _modelDataExtend->removePlotCurve(index); + updatePostTree(); + auto p2d = _modelDataExtend->getPost2DWindow(); + if (p2d != nullptr) { + p2d->removeCurve(name); + } + } + else if (_currentItem->type() == ProjectPostCounterChild) { + const int index = _postCounterItem->indexOfChild(_currentItem); + _modelDataExtend->removeScalarVariable(index); + updatePostTree(); + } + else if (_currentItem->type() == ProjectPostVectorChild) { + const int index = _postVectorItem->indexOfChild(_currentItem); + _modelDataExtend->removeVectorVariable(index); + updatePostTree(); + } + emit disPlayProp(nullptr); + } + void ProjectTreeWithBasicNode::createReport() + { + // _modelDataExtend->appendReport("D:/test.docx"); + + updateReportTree(); + } + void ProjectTreeWithBasicNode::addBC() + { + AddBCDialog dlg(_mainWindow, _modelDataExtend); + dlg.exec(); + // if (dlg.exec() == QDialog::Accepted) + // updateBCSubTree(); + } + void ProjectTreeWithBasicNode::singleClicked() + { + TreeItemType type = (TreeItemType)_currentItem->type(); + if (type == ProjectComponentChild) { + const int index = _ComponentRootItem->indexOfChild(_currentItem); + if (index >= 0) { + emit clearAllHighLightSig(); + int id = _modelDataExtend->getComponentIDList().at(index); + auto ms = MeshData::MeshData::getInstance()->getMeshSetByID(id); + if (ms) { + emit highLightSet(ms); + emit disPlayProp(ms); + } + else { + auto gc = Geometry::GeometryData::getInstance()->getGeoComponentByID(id); + if (!gc) + return; + emit highLightGeoComponent(gc); + emit disPlayProp(gc); + } + } + } + else if (type == ProjectBoundaryCondationChild) { + emit clearAllHighLightSig(); + const int index = _boundaryConditionItem->indexOfChild(_currentItem); + BCBase::BCBase* bc = _modelDataExtend->getBCAt(index); + assert(bc != nullptr); + emit disPlayProp(bc); + DataProperty::ComponentBase* component = bc->getComponent(); + if (!component) + return; + if (component->getComponentType() == DataProperty::ComponentType::MESH) { + auto set = dynamic_cast(component); + emit highLightSet(set); + } + else { + auto gc = dynamic_cast(component); + emit highLightGeoComponent(gc); + } + } + else if (type == ProjectSimulationSetting) { + ModelData::SimlutationSettingBase* s = _data->getSimlutationSetting(); + emit disPlayProp(s); + } + else if (type == ProjectSolver) { + ModelData::SolverSettingBase* s = _data->getSolverSetting(); + emit disPlayProp(s); + } + else if (type == ProjectMonitorChild) { + const int index = _monitorRootItem->indexOfChild(_currentItem); + // QList mon = _modelDataExtend->getMonitorList(); + emit disPlayProp(_modelDataExtend->getMonitorCurveAt(index)); + if (_realTimeWin != nullptr) { + QString name = _currentItem->text(0); + _realTimeWin->viewRealTimeWindow(name); + } + } + else if (type == ProJectPost2DGraphChild) { + const int index = _post2DItem->indexOfChild(_currentItem); + ConfigOption::PostCurve* temp = _modelDataExtend->getPlotCurves().at(index); + emit disPlayProp(temp); + QString text = _currentItem->text(0); + viewPlot2D(text); + } + else if (type == ProjectPostCounterChild) { + QString text = _currentItem->text(0); + text.remove(" @ Node"); + text.replace(" @ Cell", "_cell000"); + viewCounter(text); + } + else if (type == ProjectPostVectorChild) { + QString text = _currentItem->text(0); + text.remove(" @ Node"); + text.replace(" @ Cell", "_cell000"); + viewVector(text); + } + else { + emit clearAllHighLightSig(); + emit disPlayProp(nullptr); + } + const int index = _currentItem->data(0, Qt::UserRole + 1).toInt() - 1; + if (index >= 0) { + ConfigOption::TreeItem* item = _itemList.at(index); + const int id = item->getDataID(); + DataProperty::DataBase* d = _modelDataExtend->getConfigData(id); + emit disPlayProp(d); + } + ProjectTreeBase::singleClicked(); + } + + void ProjectTreeWithBasicNode::doubleClicked() + { + if (_treeType == 1) { + TreeItemType itemType = (TreeItemType)_currentItem->type(); + switch (itemType) { + case TreeItemType::ProjectSimulationSettingChild: { + // NodeParameterDlg dlg(_treeType, _currentItem->text(0), _mainWindow); + break; + } + } + } + } + + void ProjectTreeWithBasicNode::updateReportTree() + { + if (_reportItem == nullptr) + return; + _reportItem->takeChildren(); + const int nReport = _modelDataExtend->getReportCount(); + for (int i = 0; i < nReport; ++i) { + QString report = _modelDataExtend->getReportAt(i); + QFileInfo file(report); + if (!file.exists()) + continue; + QString text = file.fileName(); + QTreeWidgetItem* item = + new QTreeWidgetItem(_reportItem, TreeItemType::ProjectReportChild); + item->setText(0, text); + } + _reportItem->setExpanded(true); + } + void ProjectTreeWithBasicNode::assignMaterial() + { + AssignMaterialDialog dlg(_mainWindow, _modelDataExtend); + if (dlg.exec() == QDialog::Accepted) + this->updateComponentSubTree(); + } + void ProjectTreeWithBasicNode::d2PlotContextMenu(QMenu* menu) + { + ConfigOption::PostConfig* option = + ConfigOption::ConfigOption::getInstance()->getPostConfig(); + ConfigOption::PostConfigInfo* info = option->getPostConfigInfo(_treeType); + if (info == nullptr) + return; + if (_postMapper != nullptr) { + delete _postMapper; + _postMapper = nullptr; + } + + _postMapper = new QSignalMapper(this); + // QStringList d2Variables = info->get2DVariable(); + QList curlist = info->getCurveList(); + for (int i = 0; i < curlist.size(); ++i) { + QString text = curlist.at(i)->getDescribe(); + if (text.isEmpty()) + continue; + QAction* action = menu->addAction(text); + connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); + _postMapper->setMapping(action, text); + } + connect(_postMapper, SIGNAL(mapped(QString)), this, SLOT(viewPlot2D(QString))); + } + void ProjectTreeWithBasicNode::counterContextMenu(QMenu* menu) + { + ConfigOption::PostConfig* option = + ConfigOption::ConfigOption::getInstance()->getPostConfig(); + ConfigOption::PostConfigInfo* info = option->getPostConfigInfo(_treeType); + if (info == nullptr) + return; + if (_postMapper != nullptr) { + delete _postMapper; + _postMapper = nullptr; + } + _postMapper = new QSignalMapper(this); + + QAction* nodeaction = menu->addAction(tr("Node Scalar")); + QAction* cellaction = menu->addAction(tr("Cell Scalar")); + _nodeMenu->clear(); + _cellMeun->clear(); + nodeaction->setMenu(_nodeMenu); + cellaction->setMenu(_cellMeun); + + QStringList scalarVariables = info->getNodeScalarVariable(); + // if (scalarVariables.at(0) != "") + // { + + for (int i = 0; i < scalarVariables.size(); ++i) { + QString text = scalarVariables.at(i); + if (text.isEmpty()) + continue; + qDebug() << text; + QAction* action = _nodeMenu->addAction(text); + connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); + _postMapper->setMapping(action, text); + } + // } + scalarVariables = info->getCellScalarVariable(); + // if (scalarVariables.at(0) != "") + // { + + for (int i = 0; i < scalarVariables.size(); ++i) { + QString text = scalarVariables.at(i); + if (text.isEmpty()) + continue; + QAction* action = _cellMeun->addAction(text); + connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); + _postMapper->setMapping(action, text.append("_cell000")); + } + // } + connect(_postMapper, SIGNAL(mapped(QString)), this, SLOT(viewCounter(QString))); + } + void ProjectTreeWithBasicNode::vectorContextMenu(QMenu* menu) + { + ConfigOption::PostConfig* option = + ConfigOption::ConfigOption::getInstance()->getPostConfig(); + ConfigOption::PostConfigInfo* info = option->getPostConfigInfo(_treeType); + if (info == nullptr) + return; + if (_postMapper != nullptr) { + delete _postMapper; + _postMapper = nullptr; + } + _postMapper = new QSignalMapper(this); + + QAction* nodeaction = menu->addAction(tr("Node Vector")); + QAction* cellaction = menu->addAction(tr("Cell Vector")); + _nodeMenu->clear(); + _cellMeun->clear(); + nodeaction->setMenu(_nodeMenu); + cellaction->setMenu(_cellMeun); + + QStringList vectorVariables = info->getNodeVectorVariable(); + // if (vectorVariables.at(0) != "") + // { + + for (int i = 0; i < vectorVariables.size(); ++i) { + QString text = vectorVariables.at(i); + if (text.isEmpty()) + continue; + QAction* action = _nodeMenu->addAction(text); + connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); + _postMapper->setMapping(action, text); + } + // } + vectorVariables = info->getCellVectorVariable(); + // if (vectorVariables.at(0) != "") + // { + + for (int i = 0; i < vectorVariables.size(); ++i) { + QString text = vectorVariables.at(i); + if (text.isEmpty()) + continue; + QAction* action = _cellMeun->addAction(text); + connect(action, SIGNAL(triggered()), _postMapper, SLOT(map())); + _postMapper->setMapping(action, text.append("_cell000")); + } + // } + connect(_postMapper, SIGNAL(mapped(QString)), this, SLOT(viewVector(QString))); + } + + void ProjectTreeWithBasicNode::closePostWindow(Post::PostWindowBase* w) + { + auto p2d = _modelDataExtend->getPost2DWindow(); + auto p3d = _modelDataExtend->getPost3DWindow(); + if (p2d == w) { + // _post2DWindow = nullptr; + _modelDataExtend->setPost2DWindow(nullptr); + _modelDataExtend->clearPlotCurve(); + this->updatePostTree(); + } + if (p3d == w) { + // _post3DWindow = nullptr; + _modelDataExtend->setPost3DWindow(nullptr); + _modelDataExtend->clear3DVariable(); + this->updatePostTree(); + } + } + + void ProjectTreeWithBasicNode::addComponentRootItemSlot() + { + if (_ComponentItems.size() == 0) + return; + _ComponentRootItem->addChildren(_ComponentItems); + _ComponentRootItem->setExpanded(true); + _ComponentItems.clear(); + emit clearAllHighLightSig(); + } + + void ProjectTreeWithBasicNode::viewPlot2D(QString variable) + { + auto p2d = _modelDataExtend->getPost2DWindow(); + + if (p2d == nullptr) { + // ConfigOption::PostConfig* option = + // ConfigOption::ConfigOption::getInstance()->getPostConfig(); + // ConfigOption::PostConfigInfo* info = option->getPostConfigInfo(_treeType); + p2d = new Post::Post2DWindowInterface(_mainWindow, _data->getID()); + _modelDataExtend->setPost2DWindow(p2d); + // QStringList filenames = info->getPost2DFile(); + QStringList filenames = _modelDataExtend->getAbsolutePost2DFiles(); + + for (int i = 0; i < filenames.size(); ++i) { + QString fileName = filenames.at(i); + // QString file = _data->getPath() + "/Result/" + fileName; + // qDebug() << fileName; + p2d->openfile(fileName); + } + } + emit openPostWindowSig(p2d); + + if (_modelDataExtend->isPostCurveExist(variable)) + return; + + ConfigOption::PostConfig* postinfo = + ConfigOption::ConfigOption::getInstance()->getPostConfig(); + ConfigOption::PostConfigInfo* info = postinfo->getPostConfigInfo(_treeType); + ConfigOption::PostCurve* curve = info->getCurveByName(variable); + ConfigOption::PostCurve* newcurve = new ConfigOption::PostCurve; + newcurve->copy(curve); + p2d->addCurve(curve->getDescribe(), curve->getFile(), curve->getXVariable(), + curve->getYVariable()); + _modelDataExtend->apppendPlotCurve(newcurve); + this->updatePostTree(); + + emit disPlayProp(newcurve); + } + + void ProjectTreeWithBasicNode::viewCounter(QString variable) + { + int caseid = _modelDataExtend->getID(); + QString pycode = QString("Post.viewCounter(%1,\"%2\")").arg(caseid).arg(variable); + qDebug() << pycode; + Py::PythonAgent::getInstance()->submit(pycode); + } + void ProjectTreeWithBasicNode::viewCounterPost(QString variable) + { + auto p3d = _modelDataExtend->getPost3DWindow(); + + if (p3d == nullptr) { + ConfigOption::PostConfig* option = + ConfigOption::ConfigOption::getInstance()->getPostConfig(); + ConfigOption::PostConfigInfo* info = option->getPostConfigInfo(_treeType); + QString fileName = info->getPost3DFile(); + QString file = _data->getPath() + "/Result/" + fileName; + // if (!isFileExist(file)) return; + p3d = new Post::Post3DWindowInterface(_mainWindow, _data->getID()); + _modelDataExtend->setPost3DWindow(p3d); + p3d->getWindow()->openFile(file); + } + emit openPostWindowSig(p3d); + QStringList variablelist = _modelDataExtend->getScalarVariable(); + if (!variablelist.contains(variable)) { + _modelDataExtend->appendScalarVariable(variable); + this->updatePostTree(); + } + Post::Post3DWindow* w = p3d->getWindow(); + PipelineObject* popobj = w->getCurrentPipelineObj(); + w->viewCounter(popobj, variable); + w->displayLegendBar(true); + + emit disPlayProp(nullptr); + // Py::PythonAgent::getInstance()->unLock(); + } + void ProjectTreeWithBasicNode::viewVector(QString variable) + { + int caseid = _modelDataExtend->getID(); + + QString pycode = QString("Post.viewVector(%1,\"%2\")").arg(caseid).arg(variable); + qDebug() << pycode; + Py::PythonAgent::getInstance()->submit(pycode); + } + + void ProjectTreeWithBasicNode::viewVectorPost(QString variable) + { + auto p3d = _modelDataExtend->getPost3DWindow(); + if (p3d == nullptr) { + ConfigOption::PostConfig* option = + ConfigOption::ConfigOption::getInstance()->getPostConfig(); + ConfigOption::PostConfigInfo* info = option->getPostConfigInfo(_treeType); + QString fileName = info->getPost3DFile(); + QString file = _data->getPath() + "/Result/" + fileName; + // if (!isFileExist(file)) return; + p3d = new Post::Post3DWindowInterface(_mainWindow, _data->getID()); + _modelDataExtend->setPost3DWindow(p3d); + p3d->getWindow()->openFile(file); + } + emit openPostWindowSig(p3d); + QStringList variablelist = _modelDataExtend->getVectorVariable(); + if (!variablelist.contains(variable)) { + _modelDataExtend->appendVectorVariable(variable); + this->updatePostTree(); + } + Post::Post3DWindow* w = p3d->getWindow(); + PipelineObject* popobj = w->getCurrentPipelineObj(); + w->viewVector(popobj, variable); + w->displayLegendBar(true); + + emit disPlayProp(nullptr); + } + void ProjectTreeWithBasicNode::viewRealTimeWindow() + { + QStringList files; //= _modelDataExtend->getMonitorNameList(); + if (files.size() > 1) + return; + for (int i = 0; i < files.size(); ++i) { + QString fi = files.at(i); + QFile f(fi); + if (!f.exists()) { + QMessageBox::warning(nullptr, tr("Warning"), tr("File %1 is not exist").arg(fi)); + return; + } + } + + if (_realTimeWin == nullptr) { + _realTimeWin = new Post::RealTimeWindowBase(_mainWindow, _data->getID()); + emit openRealTimeWin(_realTimeWin, _data->getID()); + } + } + + DataProperty::DataBase* ProjectTreeWithBasicNode::getCurrentItemData() + { + if (_currentItem == nullptr) + return nullptr; + if (_currentItem == _simulationSettingItem) + return _modelDataExtend->getSimlutationSetting(); + if (_currentItem == _solverSettingItem) + return _modelDataExtend->getSolverSetting(); + + const int index = _currentItem->data(0, Qt::UserRole + 1).toInt() - 1; + if (index >= 0) { + ConfigOption::TreeItem* item = _itemList.at(index); + const int id = item->getDataID(); + DataProperty::DataBase* d = _modelDataExtend->getConfigData(id); + return d; + } + return nullptr; + } + + /*bool ProjectTreeWithBasicNode::readInForm() + { + QDesignerResource r(this); + QScopedPointer ui(r.readUi(dev)); + if (ui.isNull()) { + if (errorMessageIn) + *errorMessageIn = r.errorString(); + return false; + } + + UpdateBlocker ub(this); + clearSelection(); + m_selection->clearSelectionPool(); + m_insertedWidgets.clear(); + m_widgets.clear(); + // The main container is cleared as otherwise + // the names of the newly loaded objects will be unified. + clearMainContainer(); + m_undoStack.clear(); + emit changed(); + + QWidget *w = r.loadUi(ui.data(), formContainer()); + if (w) { + setMainContainer(w); + emit changed(); + } + if (errorMessageIn) + *errorMessageIn = r.errorString(); + return w != nullptr; + }*/ + + void ProjectTreeWithBasicNode::updateGeometrySubTree() + { + if (_geometryRootItem == nullptr) + return; + _geometryRootItem->takeChildren(); + Geometry::GeometryData* geodata = Geometry::GeometryData::getInstance(); + + QList geoIDs = _modelDataExtend->getGeometryList(); + for (int i = 0; i < geoIDs.size(); ++i) { + int id = geoIDs.at(i); + Geometry::GeometrySet* set = geodata->getGeometrySetByID(id); + if (set == nullptr) + continue; + QString name = set->getName(); + QString icon = "://QUI/icon/geometry.png"; + QTreeWidgetItem* temp = + new QTreeWidgetItem(_geometryRootItem, TreeItemType::ProjectGeometryChild); + temp->setIcon(0, QIcon(icon)); + temp->setText(0, name); + temp->setData(0, Qt::UserRole, id); + } + _geometryRootItem->setExpanded(true); + } + +} // namespace ProjectTree \ No newline at end of file diff --git a/src/ProjectTree/ProjectTreeWithBasicNode.h b/src/ProjectTree/ProjectTreeWithBasicNode.h index 7bc2238..ed214c0 100644 --- a/src/ProjectTree/ProjectTreeWithBasicNode.h +++ b/src/ProjectTree/ProjectTreeWithBasicNode.h @@ -1,26 +1,4 @@ -/** - * @file ProjectTreeWithBasicNode.h - * @brief 新建算例时默认树形菜单 - * @author FastCAE研发小组(fastcae@diso.cn) - * @version 2.5.0 - * @date 2022-07-07 10:36 - * @copyright Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * - * ============================================================================ - * Program: FastCAE - * - * Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * See License or http://www.fastcae.com/ for details. - * - * BSD 3-Clause License - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. - * ================================================================================== - */ -#ifndef _PROJECTTREEWITHBASICNODE_H_ +#ifndef _PROJECTTREEWITHBASICNODE_H_ #define _PROJECTTREEWITHBASICNODE_H_ #include "projectTreeBase.h" @@ -54,12 +32,12 @@ namespace Geometry namespace ProjectTree { - + class PROJECTTREEAPI ProjectTreeWithBasicNode : public ProjectTreeBase { Q_OBJECT public: - ProjectTreeWithBasicNode(GUI::MainWindow *mainwindow); + ProjectTreeWithBasicNode(GUI::MainWindow* mainwindow); ~ProjectTreeWithBasicNode(); //查看云图 void viewCounterPost(QString variable); @@ -70,84 +48,82 @@ namespace ProjectTree //更新子树节点 virtual void updateGeometrySubTree(); virtual void updateComponentSubTree(); - // virtual void updateMeshSetSubTree(); - // virtual void updateGeoComponentTree(); - virtual void updatePropTree(); +// virtual void updateMeshSetSubTree(); +// virtual void updateGeoComponentTree(); virtual void updateBCSubTree(); virtual void updateReportTree(); virtual void updateMonitorTree(); virtual void updatePostTree(); //获取关联的组件ID(包括网格组件和几何组件) - const QList &getComponentIDList(); + const QList& getComponentIDList(); //通过组件ID删除算例中的项,并更新树 void removeCaseComponentByID(int); //通过组件ID重命名算例中的项,并更新树 void renameCaseComponentByID(int); signals: - void highLightSet(MeshData::MeshSet *set); - void openRealTimeWin(Post::RealTimeWindowBase *w, int id); - void highLightGeoComponent(Geometry::GeoComponent *); + void highLightSet(MeshData::MeshSet* set); + void openRealTimeWin(Post::RealTimeWindowBase* w, int id); + void highLightGeoComponent(Geometry::GeoComponent*); void clearAllHighLightSig(); void addComponentRootItemSig(); protected: - virtual void initBasicNode(QTreeWidgetItem *root) override; - virtual void contextMenu(QMenu *menu) override; + virtual void initBasicNode(QTreeWidgetItem* root) override; + virtual void contextMenu(QMenu* menu) override; virtual void singleClicked() override; virtual void doubleClicked() override; - virtual void setData(ModelData::ModelDataBase *data); - virtual void d2PlotContextMenu(QMenu *menu); - virtual void counterContextMenu(QMenu *menu); - virtual void vectorContextMenu(QMenu *menu); - virtual DataProperty::DataBase *getCurrentItemData(); + virtual void setData(ModelData::ModelDataBase* data); + virtual void d2PlotContextMenu(QMenu* menu); + virtual void counterContextMenu(QMenu* menu); + virtual void vectorContextMenu(QMenu* menu); + virtual DataProperty::DataBase* getCurrentItemData(); - // bool readInForm(); + //bool readInForm(); protected slots: - virtual void importGeometry(); + virtual void importGeometry(); virtual void importComponents(); virtual void removeItem(); - virtual void addEleProperty(); virtual void addBC(); virtual void createReport(); - virtual void assignProperty(); + virtual void assignMaterial(); virtual void viewRealTimeWindow(); virtual void viewPlot2D(QString variable); virtual void viewCounter(QString variable); virtual void viewVector(QString variable); - virtual void closePostWindow(Post::PostWindowBase *w); + virtual void closePostWindow(Post::PostWindowBase* w); void addComponentRootItemSlot(); protected: - QTreeWidgetItem *_geometryRootItem{}; - QTreeWidgetItem *_propertyRootItem{}; - QTreeWidgetItem *_ComponentRootItem{}; - QTreeWidgetItem *_simulationSettingItem{}; - QTreeWidgetItem *_boundaryConditionItem{}; - QTreeWidgetItem *_solverSettingItem{}; - QTreeWidgetItem *_monitorRootItem{}; - QTreeWidgetItem *_postRootItem{}; - QTreeWidgetItem *_post2DItem{}; - QTreeWidgetItem *_postCounterItem{}; - QTreeWidgetItem *_postVectorItem{}; - QTreeWidgetItem *_postStreamLineItem{}; - QTreeWidgetItem *_post3DItem{}; - QTreeWidgetItem *_reportItem{}; + QTreeWidgetItem* _geometryRootItem{}; + QTreeWidgetItem* _ComponentRootItem{}; + QTreeWidgetItem* _simulationSettingItem{}; + QTreeWidgetItem* _boundaryConditionItem{}; + QTreeWidgetItem* _solverSettingItem{}; + QTreeWidgetItem* _monitorRootItem{}; + QTreeWidgetItem* _postRootItem{}; + QTreeWidgetItem* _post2DItem{}; + QTreeWidgetItem* _postCounterItem{}; + QTreeWidgetItem* _postVectorItem{}; + QTreeWidgetItem* _postStreamLineItem{}; + QTreeWidgetItem* _post3DItem{}; + QTreeWidgetItem* _reportItem{}; - QSignalMapper *_postMapper{}; - // - // Post::Post2DWindowInterface* _post2DWindow{}; - // Post::Post3DWindowInterface* _post3DWindow{}; + QSignalMapper* _postMapper{}; +// +// Post::Post2DWindowInterface* _post2DWindow{}; +// Post::Post3DWindowInterface* _post3DWindow{}; - QMenu *_nodeMenu{}; - QMenu *_cellMeun{}; + QMenu* _nodeMenu{}; + QMenu* _cellMeun{}; - ModelData::ModelDataBaseExtend *_modelDataExtend{}; + ModelData::ModelDataBaseExtend* _modelDataExtend{}; - QList _ComponentItems; + QList _ComponentItems; }; + } #endif diff --git a/src/ProjectTree/projectTreeBase.cpp b/src/ProjectTree/projectTreeBase.cpp index 0f3f610..66ade3c 100644 --- a/src/ProjectTree/projectTreeBase.cpp +++ b/src/ProjectTree/projectTreeBase.cpp @@ -3,13 +3,13 @@ #include #include #include -#include +#include #include "ConfigOptions/TreeItemData.h" #include "ConfigOptions/ProjectTreeInfo.h" -#include "MainWindow/MainWindow.h" +#include "mainWindow/mainWindow.h" #include "ModelData/modelDataBase.h" #include "ModelData/modelDataSingleton.h" -#include "Settings/BusAPI.h" +#include "settings/busAPI.h" #include #include #include @@ -18,24 +18,23 @@ namespace ProjectTree { ProjectTreeBase::ProjectTreeBase(GUI::MainWindow *mainwindow) - : _mainWindow(mainwindow) + :_mainWindow(mainwindow) { if (_mainWindow != nullptr) { - connect(this, SIGNAL(openPostWindowSig(Post::PostWindowBase *)), _mainWindow, SIGNAL(openPostWindowSig(Post::PostWindowBase *))); - connect(this, SIGNAL(disPlayProp(DataProperty::DataBase *)), _mainWindow, SIGNAL(updateProperty(DataProperty::DataBase *))); + connect(this, SIGNAL(openPostWindowSig(Post::PostWindowBase*)), _mainWindow, SIGNAL(openPostWindowSig(Post::PostWindowBase*))); + connect(this, SIGNAL(disPlayProp(DataProperty::DataBase*)), _mainWindow, SIGNAL(updateProperty(DataProperty::DataBase*))); connect(this, SIGNAL(showPostWindowInfo(int, int)), _mainWindow, SIGNAL(showPostWindowInfoSig(int, int))); connect(_mainWindow, SIGNAL(solveProjectSig(int, int)), this, SLOT(solveBegin(int))); connect(_mainWindow, SIGNAL(processFinished(int)), this, SLOT(solveFinished(int))); - connect(_mainWindow, SIGNAL(openRealTimeWindowSig(Post::RealTimeWindowBase *, int)), this, SLOT(realTimeWindowOpened(Post::RealTimeWindowBase *, int))); - connect(_mainWindow, SIGNAL(closeRealTimeWindowSig(Post::RealTimeWindowBase *)), this, SLOT(realTimeWindowClosed(Post::RealTimeWindowBase *))); - connect(this, SIGNAL(dispalyParaWidget(QWidget *)), _mainWindow, SIGNAL(updateParaWidget(QWidget *))); + connect(_mainWindow, SIGNAL(openRealTimeWindowSig(Post::RealTimeWindowBase*, int)), this, SLOT(realTimeWindowOpened(Post::RealTimeWindowBase*, int))); + connect(_mainWindow, SIGNAL(closeRealTimeWindowSig(Post::RealTimeWindowBase*)), this, SLOT(realTimeWindowClosed(Post::RealTimeWindowBase*))); + connect(this, SIGNAL(dispalyParaWidget(QWidget*)), _mainWindow, SIGNAL(updateParaWidget(QWidget*))); } } ProjectTreeBase::~ProjectTreeBase() { - if (_root == nullptr) - return; + if (_root == nullptr) return; _root->takeChildren(); _itemList.clear(); } @@ -60,130 +59,120 @@ namespace ProjectTree { _treeType = type; } - void ProjectTreeBase::appendItem(ConfigOption::TreeItem *item) + void ProjectTreeBase::appendItem(ConfigOption::TreeItem* item) { _itemList.append(item); } - void ProjectTreeBase::createTree(QTreeWidgetItem *phyroot, GUI::MainWindow *mainwindow) + void ProjectTreeBase::createTree(QTreeWidgetItem* phyroot, GUI::MainWindow* mainwindow) { - if (_data == nullptr) - return; + if (_data == nullptr) return; _mainWindow = mainwindow; - // QTreeWidgetItem* root = new QTreeWidgetItem(phyroot, TreeItemType::ProjectRoot); + // QTreeWidgetItem* root = new QTreeWidgetItem(phyroot, TreeItemType::ProjectRoot); initBasicNode(phyroot); QString lang = Setting::BusAPI::instance()->getLanguage(); double time = _data->getSolveTime(); - if (time > 0) - _solveStatus = Finished; + if (time > 0) _solveStatus = Finished; _data->setOutputFileName(_outputFile); int n = _itemList.size(); for (int i = 0; i < n; ++i) { - QTreeWidgetItem *parent = _root; - ConfigOption::TreeItem *item = _itemList.at(i); - if (item == nullptr) - continue; + QTreeWidgetItem* parent = _root; + ConfigOption::TreeItem* item = _itemList.at(i); + if (item == nullptr) continue; QString sparent = item->getParent(); - if (_textItemHash.contains(sparent)) - parent = _textItemHash.value(sparent); - QTreeWidgetItem *treeitem = new QTreeWidgetItem(parent, item->getType()); - treeitem->setData(0, Qt::UserRole + 1, i + 1); //留空0,标记为不是配置文件创建 - treeitem->setData(1, Qt::UserRole, item->getText()); //英文 - treeitem->setData(1, Qt::UserRole + 1, item->getChinese()); //中文 + if (_textItemHash.contains(sparent)) parent = _textItemHash.value(sparent); + QTreeWidgetItem* treeitem = new QTreeWidgetItem(parent, item->getType()); + treeitem->setData(0, Qt::UserRole + 1, i + 1); //留空0,标记为不是配置文件创建 + treeitem->setData(1, Qt::UserRole, item->getText()); //英文 + treeitem->setData(1, Qt::UserRole + 1, item->getChinese());//中文 QString text = item->getText(); if (lang == "Chinese") text = item->getChinese(); - if (text.isEmpty()) - text = item->getText(); + if (text.isEmpty()) text = item->getText(); - treeitem->setText(0, text); + treeitem->setText(0,text); QString sicon = item->getIcon(); QString icon = qApp->applicationDirPath() + "/../ConfigFiles/Icon/" + sicon; treeitem->setIcon(0, QIcon(icon)); - // qDebug() << text << item->getType(); +// qDebug() << text << item->getType(); _textItemHash[item->getText()] = treeitem; } for (int i = 0; i < _disableItems.size(); ++i) { QString s = _disableItems.at(i); auto item = _textItemHash.value(s); - if (item == nullptr) - continue; + if (item == nullptr) continue; item->setHidden(true); } + } - void ProjectTreeBase::initBasicNode(QTreeWidgetItem *phyroot) + void ProjectTreeBase::initBasicNode(QTreeWidgetItem* phyroot) { _root = new QTreeWidgetItem(phyroot, TreeItemType::ProjectRoot); _root->setFlags(_root->flags() | Qt::ItemIsEditable); _root->setIcon(0, QIcon(":/QUI/icon/physics.png")); - // int id = _data->getID(); - _root->setText(0, _data->getName()); //根据项目名称确定 + int id = _data->getID(); + _root->setText(0, _data->getName()); //根据项目名称确定 _root->setData(0, Qt::UserRole, _data->getID()); _root->setExpanded(true); + } - void ProjectTreeBase::on_MouseEvent(int eventType, QTreeWidgetItem *item) - { + void ProjectTreeBase::on_MouseEvent(int eventType, QTreeWidgetItem* item) + { _currentItem = item; - // TreeItemType type = (TreeItemType)item->type(); - // if (type == Undefined) return; +// TreeItemType type = (TreeItemType)item->type(); +// if (type == Undefined) return; switch (eventType) { - case 0: - singleClicked(); - break; - case 1: - createContextMenu(); - break; - case 2: - doubleClicked(); - break; - default: - break; + case 0: singleClicked();break; + case 1:createContextMenu();break; + case 2:doubleClicked();break; + default:break; } } - // void ProjectTreeBase::copy(ProjectTreeBase* tree) - // { - // // ProjectTree* tree = new ProjectTree; - // tree->setType(_treeType); - // tree->setName(_name); - // for (int i = 0; i < _itemList.size(); ++i) - // { - // ConfigOption::TreeItem* item = _itemList.at(i); - // ConfigOption::TreeItem* newitem = new ConfigOption::TreeItem; - // newitem->copy(item); - // tree->appendItem(newitem); - // } - // tree->setOutputFileName(_outputFile); - // tree->setDisableItems(_disableItems); - // // _disableItems = tree->getDisableItems(); - // qDebug() << _disableItems; - // // return tree; - // } - void ProjectTreeBase::copy(ConfigOption::ProjectTreeInfo *info) +// void ProjectTreeBase::copy(ProjectTreeBase* tree) +// { +// // ProjectTree* tree = new ProjectTree; +// tree->setType(_treeType); +// tree->setName(_name); +// for (int i = 0; i < _itemList.size(); ++i) +// { +// ConfigOption::TreeItem* item = _itemList.at(i); +// ConfigOption::TreeItem* newitem = new ConfigOption::TreeItem; +// newitem->copy(item); +// tree->appendItem(newitem); +// } +// tree->setOutputFileName(_outputFile); +// tree->setDisableItems(_disableItems); +// // _disableItems = tree->getDisableItems(); +// qDebug() << _disableItems; +// // return tree; +// } + void ProjectTreeBase::copy(ConfigOption::ProjectTreeInfo* info) { _treeType = info->type(); _name = info->getName(); - QList items = info->getItemList(); + QList items = info->getItemList(); for (int i = 0; i < items.size(); ++i) { - ConfigOption::TreeItem *item = items.at(i); - ConfigOption::TreeItem *newitem = new ConfigOption::TreeItem; + ConfigOption::TreeItem* item = items.at(i); + ConfigOption::TreeItem* newitem = new ConfigOption::TreeItem; newitem->copy(item); this->appendItem(newitem); } _outputFile = info->getOutputFileName(); _disableItems = info->getDisableItems(); + } - void ProjectTreeBase::setData(ModelData::ModelDataBase *data) + void ProjectTreeBase::setData(ModelData::ModelDataBase* data) { _data = data; transferData(); } - ModelData::ModelDataBase *ProjectTreeBase::getData() + ModelData::ModelDataBase* ProjectTreeBase::getData() { return _data; } @@ -196,14 +185,15 @@ namespace ProjectTree return _disableItems; } - void ProjectTreeBase::setCurrentItem(QTreeWidgetItem *item) + void ProjectTreeBase::setCurrentItem(QTreeWidgetItem* item) { _currentItem = item; } void ProjectTreeBase::singleClicked() { - // qDebug() << "parent s"; + //qDebug() << "parent s"; + } void ProjectTreeBase::doubleClicked() { @@ -211,22 +201,21 @@ namespace ProjectTree } void ProjectTreeBase::createContextMenu() { - // qDebug() << "parent c"; +// qDebug() << "parent c"; QMenu pop_menu; contextMenu(&pop_menu); pop_menu.exec(QCursor::pos()); } - void ProjectTreeBase::contextMenu(QMenu *menu) + void ProjectTreeBase::contextMenu(QMenu* menu) { - QAction *action = nullptr; + QAction* action = nullptr; int itemindex = _currentItem->data(0, Qt::UserRole + 1).toInt(); TreeItemType type = (TreeItemType)_currentItem->type(); if (itemindex > 0) { - ConfigOption::TreeItem *treeItem = _itemList.at(itemindex - 1); + ConfigOption::TreeItem* treeItem = _itemList.at(itemindex - 1); const int n = treeItem->getContextMenuCount(); - if (n < 1) - return; + if (n < 1) return; for (int i = 0; i < n; ++i) { QString menuText = treeItem->getContextMenuAt(i); @@ -234,44 +223,41 @@ namespace ProjectTree switch (type) { case ProjectPostSetting: - if (0 == i) - connect(action, SIGNAL(triggered()), this, SLOT(openPostWindow())); + if (0 == i) connect(action, SIGNAL(triggered()), this, SLOT(openPostWindow())); break; case ProjectComponent: break; case ProjectSolver: break; - default: - break; + default: break; } } } } void ProjectTreeBase::updateTree() { + } void ProjectTreeBase::updateTreeByType(const TreeItemType type) { - Q_UNUSED(type) + } - QList ProjectTreeBase::getItemByType(const TreeItemType type, QTreeWidgetItem *root) + QList ProjectTreeBase::getItemByType(const TreeItemType type,QTreeWidgetItem* root) { - QList items; - if (root == nullptr) - root = _root; - if (root->type() == type) - items.append(root); + QList items; + if (root == nullptr) root = _root; + if (root->type() == type) items.append(root); const int n = root->childCount(); for (int i = 0; i < n; ++i) { - QTreeWidgetItem *cc = root->child(i); - // qDebug() << cc->text(0); + QTreeWidgetItem* cc = root->child(i); +// qDebug() << cc->text(0); if (cc->type() == type) items.append(cc); if (cc->childCount() > 0) { - QList il = getItemByType(type, cc); + QList il = getItemByType(type, cc); items.append(il); } } @@ -283,29 +269,23 @@ namespace ProjectTree } void ProjectTreeBase::solveBegin(int proIndex) { - ModelData::ModelDataSingleton *s = ModelData::ModelDataSingleton::getinstance(); + ModelData::ModelDataSingleton* s = ModelData::ModelDataSingleton::getinstance(); int id = s->getModelIDByIndex(proIndex); - if (id < 0) - return; - if (id != _data->getID()) - return; + if (id < 0) return; + if (id != _data->getID()) return; _solveStatus = Solving; - if (_timer == nullptr) - _timer = new QElapsedTimer; + if (_timer == nullptr) _timer = new QTime; _timer->start(); emit solveStatusChanged(); } void ProjectTreeBase::solveFinished(int proid) { - if (proid != _data->getID()) - return; + if (proid != _data->getID()) return; _solveStatus = Finished; - if (_timer == nullptr) - return; + if (_timer == nullptr) return; double time = _timer->elapsed(); - // qDebug() << time; - delete _timer; - _timer = nullptr; +// qDebug() << time; + delete _timer; _timer = nullptr; _data->setSolveTime(time); emit solveStatusChanged(); } @@ -316,18 +296,16 @@ namespace ProjectTree void ProjectTreeBase::reTranslate() { QString lang = Setting::BusAPI::instance()->getLanguage(); - QList itemList = _textItemHash.values(); + QList itemList = _textItemHash.values(); const int n = itemList.size(); if (lang == "Chinese") { for (int i = 0; i < n; ++i) { - QTreeWidgetItem *item = itemList.at(i); - if (item == nullptr) - continue; + QTreeWidgetItem* item = itemList.at(i); + if (item == nullptr) continue; QString text = item->data(1, Qt::UserRole + 1).toString(); - if (text.isEmpty()) - continue; + if (text.isEmpty()) continue; item->setText(0, text); } } @@ -335,12 +313,10 @@ namespace ProjectTree { for (int i = 0; i < n; ++i) { - QTreeWidgetItem *item = itemList.at(i); - if (item == nullptr) - continue; + QTreeWidgetItem* item = itemList.at(i); + if (item == nullptr) continue; QString text = item->data(1, Qt::UserRole).toString(); - if (text.isEmpty()) - continue; + if (text.isEmpty()) continue; item->setText(0, text); } } @@ -353,12 +329,13 @@ namespace ProjectTree { return _chinese; } - void ProjectTreeBase::realTimeWindowOpened(Post::RealTimeWindowBase *w, int id) + void ProjectTreeBase::realTimeWindowOpened(Post::RealTimeWindowBase* w, int id) { if (id == _data->getID()) _realTimeWin = w; + } - void ProjectTreeBase::realTimeWindowClosed(Post::RealTimeWindowBase *w) + void ProjectTreeBase::realTimeWindowClosed(Post::RealTimeWindowBase* w) { if (_realTimeWin == w) _realTimeWin = nullptr; @@ -374,4 +351,5 @@ namespace ProjectTree return true; } -} + +} \ No newline at end of file diff --git a/src/ProjectTree/projectTreeBase.h b/src/ProjectTree/projectTreeBase.h index 88c0318..aff2538 100644 --- a/src/ProjectTree/projectTreeBase.h +++ b/src/ProjectTree/projectTreeBase.h @@ -1,25 +1,7 @@ -/** - * @file projectTreeBase.h - * @brief ProjectTreeBase - * @author FastCAE研发小组(fastcae@diso.cn) - * @version 2.5.0 - * @date 2022-07-07 10:27 - * @copyright Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * - * ============================================================================ - * Program: FastCAE - * - * Copyright (c) Since 2020 青岛数智船海科技有限公司 All rights reserved. - * See License or http://www.fastcae.com/ for details. - * - * BSD 3-Clause License - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. - * ================================================================================== - */ +/****************** +ProjectTreeBase操作 +***************** */ + #ifndef PROJECTTREE_H #define PROJECTTREE_H @@ -32,7 +14,7 @@ #include "ProjectTreeAPI.h" class QTreeWidgetItem; -class QElapsedTimer; +class QTime; class QMenu; namespace ModelData @@ -61,6 +43,7 @@ namespace ConfigOption namespace ProjectTree { + enum SolveStatus { @@ -75,14 +58,10 @@ namespace ProjectTree public: ProjectTreeBase(GUI::MainWindow *mainwindow); virtual ~ProjectTreeBase(); - // ProjectTree* copy(); - // void copy(ProjectTreeBase* tree); - /** - * @brief 从配置文件拷贝节点信息 - * @param info 节点 - * @since 2.5.0 - */ - void copy(ConfigOption::ProjectTreeInfo *info); + //ProjectTree* copy(); +// void copy(ProjectTreeBase* tree); + //从配置文件中拷贝信息 + void copy(ConfigOption::ProjectTreeInfo* info); void setOutputFileName(QString fileName); //设置名称 void setName(const QString &name); @@ -91,19 +70,19 @@ namespace ProjectTree //设置树的类型 void setType(ProjectTreeType type); //获取树的类型 - ProjectTreeType type() const { return _treeType; } + ProjectTreeType type() const{ return _treeType; } //根据配置项追加节点 - void appendItem(ConfigOption::TreeItem *item); + void appendItem(ConfigOption::TreeItem* item); //创建树 - virtual void createTree(QTreeWidgetItem *root, GUI::MainWindow *mainwindow); + virtual void createTree(QTreeWidgetItem* root, GUI::MainWindow* mainwindow); //设置模型数据 - virtual void setData(ModelData::ModelDataBase *data); + virtual void setData(ModelData::ModelDataBase* data); //获取模型数据 - ModelData::ModelDataBase *getData(); + ModelData::ModelDataBase* getData(); ///清空QList _itemList{} 会产生严重后果,慎重调用 void clearTreeItems(); //鼠标事件 - void on_MouseEvent(int eventType, QTreeWidgetItem *item); + void on_MouseEvent(int eventType, QTreeWidgetItem* item); //跟新树 virtual void updateTree(); //根据类型更新子树 @@ -121,62 +100,64 @@ namespace ProjectTree //获取不可见节点 QStringList getDisableItems(); //设置当前item - void setCurrentItem(QTreeWidgetItem *item); + void setCurrentItem(QTreeWidgetItem* item); //文件是否存在 static bool isFileExist(QString fileName); //右键菜单 - virtual void contextMenu(QMenu *menu); + virtual void contextMenu(QMenu* menu); protected slots: - // mainwindow 发送的求解模型信号 + //mainwindow 发送的求解模型信号 void solveBegin(int proIndex); virtual void solveFinished(int proid); - void realTimeWindowOpened(Post::RealTimeWindowBase *w, int id); - void realTimeWindowClosed(Post::RealTimeWindowBase *w); + void realTimeWindowOpened(Post::RealTimeWindowBase* w, int id); + void realTimeWindowClosed(Post::RealTimeWindowBase* w); signals: /*显示属性 */ - void disPlayProp(DataProperty::DataBase *pops); + void disPlayProp(DataProperty::DataBase* pops); //显示参数widget - void dispalyParaWidget(QWidget *w); + void dispalyParaWidget(QWidget* w); ///打开后处理窗口 - void openPostWindowSig(Post::PostWindowBase *w); + void openPostWindowSig(Post::PostWindowBase* w); ///展示PostWindow,根据ID和类型过滤 void showPostWindowInfo(int id, int type); //求解状态改变 void solveStatusChanged(); + protected: - virtual void initBasicNode(QTreeWidgetItem *root); + virtual void initBasicNode(QTreeWidgetItem* root); virtual void singleClicked(/*QTreeWidgetItem* item, TreeItemType type */); - virtual void doubleClicked(/*QTreeWidgetItem* item, TreeItemType type */); + virtual void doubleClicked(/*QTreeWidgetItem* item, TreeItemType type */); virtual void createContextMenu(/*QTreeWidgetItem* item, TreeItemType type */); - + ///根据类型获取树节点,根节点为nullptr时遍历全树 - QList getItemByType(const TreeItemType type, QTreeWidgetItem *root = nullptr); + QList getItemByType(const TreeItemType type,QTreeWidgetItem *root = nullptr); private: - virtual void transferData() {} + virtual void transferData(){} protected: QString _name{}; - ProjectTreeType _treeType{ProjectTreeType::UnDefined}; - QList _itemList{}; - + ProjectTreeType _treeType{ ProjectTreeType::UnDefined }; + QList _itemList{}; + QTreeWidgetItem *_root{}; - QTreeWidgetItem *_currentItem{}; - GUI::MainWindow *_mainWindow{}; - QHash _textItemHash{}; - ModelData::ModelDataBase *_data{}; - SolveStatus _solveStatus{UnSolved}; - QElapsedTimer *_timer{}; + QTreeWidgetItem* _currentItem{}; + GUI::MainWindow* _mainWindow{}; + QHash _textItemHash{}; + ModelData::ModelDataBase* _data{}; + SolveStatus _solveStatus{ UnSolved }; + QTime* _timer{}; QString _outputFile{}; QString _chinese{}; QStringList _disableItems{}; - - Post::RealTimeWindowBase *_realTimeWin{}; + + Post::RealTimeWindowBase* _realTimeWin{}; }; } + #endif \ No newline at end of file diff --git a/src/PythonModule/py/Case.py b/src/PythonModule/py/Case.py index e7d7222..607304f 100644 --- a/src/PythonModule/py/Case.py +++ b/src/PythonModule/py/Case.py @@ -1,71 +1,64 @@ -# -------关联C++库--------------- -import ControlPanel -import ctypes +#-------关联C++库--------------- +import ctypes import platform system = platform.system() if system == "Windows": - pre = "./" - suff = ".dll" + pre = "./" + suff = ".dll" else: - pre = "../lib/lib" - suff = ".so" + pre = "./lib" + suff = ".so" libfile = ctypes.cdll.LoadLibrary filename = pre+"ModelData"+suff md = libfile(filename) -# --------------------------------- +import ControlPanel +#--------------------------------- -# -------定义函数------------------ +#-------定义函数------------------ +def setMaterial(modelID, strcpIDs ,mid): + strcpIDs = bytes(strcpIDs,encoding='utf-8') + md.setMaterial(modelID, strcpIDs ,mid) + pass - -def setProperty(modelID, strcpIDs, pid): - strcpIDs = bytes(strcpIDs, encoding='utf-8') - md.setProperty(modelID, strcpIDs, pid) - pass - - -def importComponents(caseId, addcomponentsId): - addcomponentsId = bytes(addcomponentsId, encoding='utf-8') - md.importComponents(caseId, addcomponentsId) - ControlPanel.updateComponentSubTree(caseId) - ControlPanel.updateBCSubTree(caseId) - pass - - -def importGeometry(caseId, addcomponentsId): - addcomponentsId = bytes(addcomponentsId, encoding='utf-8') - md.importGeometry(caseId, addcomponentsId) - ControlPanel.updateGeometrySubTree(caseId) - pass - - -def addBC(caseId, id, bctypetostring): - bctypetostring = bytes(bctypetostring, encoding='utf-8') - md.addBC(caseId, id, bctypetostring) - ControlPanel.updateBCSubTree(caseId) - pass - - -def objValChanged(value, describe, stype): - describe = bytes(describe, encoding='utf-8') - stype = bytes(stype, encoding='utf-8') - md.objValChanged(value, describe, stype) - pass - - -def setValue(caseId, svariable, stype, sValue): - variable = bytes(svariable, encoding='utf-8') - type = bytes(stype, encoding='utf-8') - value = bytes(sValue, encoding='utf-8') - md.setValue(caseId, variable, type, value) - pass - - -def setBCValue(caseId, index, svariable, stype, sValue): - variable = bytes(svariable, encoding='utf-8') - type = bytes(stype, encoding='utf-8') - value = bytes(sValue, encoding='utf-8') - md.setBCValue(caseId, index, variable, type, value) - pass +def importComponents(caseId,addcomponentsId): + addcomponentsId = bytes(addcomponentsId,encoding='utf-8') + md.importComponents(caseId,addcomponentsId) + ControlPanel.updateComponentSubTree(caseId) + ControlPanel.updateBCSubTree(caseId) + pass + +def importGeometry(caseId,addcomponentsId): + addcomponentsId = bytes(addcomponentsId,encoding='utf-8') + md.importGeometry(caseId,addcomponentsId) + ControlPanel.updateGeometrySubTree(caseId) + pass + +def addBC(caseId,id,bctypetostring): + bctypetostring = bytes(bctypetostring,encoding='utf-8') + md.addBC(caseId,id,bctypetostring) + ControlPanel.updateBCSubTree(caseId) + pass +def objValChanged(value,describe,stype): + describe = bytes(describe,encoding='utf-8') + stype = bytes(stype,encoding='utf-8') + md.objValChanged(value,describe,stype) + pass + +def setValue(caseId,svariable,stype,sValue): + variable = bytes(svariable,encoding='utf-8') + type = bytes(stype,encoding='utf-8') + value = bytes(sValue,encoding='utf-8') + md.setValue(caseId, variable, type, value) + pass + +def setBCValue(caseId,index,svariable,stype,sValue): + variable = bytes(svariable,encoding='utf-8') + type = bytes(stype,encoding='utf-8') + value = bytes(sValue,encoding='utf-8') + md.setBCValue(caseId, index,variable, type, value) + pass + + \ No newline at end of file diff --git a/src/PythonModule/py/FastCAE.ini b/src/PythonModule/py/FastCAE.ini index 1d97c80..ff64036 100644 --- a/src/PythonModule/py/FastCAE.ini +++ b/src/PythonModule/py/FastCAE.ini @@ -38,6 +38,10 @@ ShowPoint=true ShowEdge=true ShowSurface=true +[MeshDisplay] +ShowNode=true +ShowEdge=true +ShowFace=true [Plugins] Name= \ No newline at end of file