diff --git a/Changelog.md b/Changelog.md index 7a152f3..9d4030f 100644 --- a/Changelog.md +++ b/Changelog.md @@ -3,7 +3,7 @@ Version:2.5.x --- -更新时间:2020-05-08 +更新时间:2020-07-04 **新增功能** - 后处理增加tecplot文件(szplt)的读取。 @@ -11,6 +11,7 @@ Version:2.5.x - 新增自动打包功能,Windows需要NSIS 3.03+、Linux需要dpkg-deb或者rpmbuild(需要python3)。 - 新增文档自动生成功能,需要安装Doxygen和Graphviz。 - 增加vtu、pvtu格式的后处理文件支持 +- 增加OpenFOAM的网格文件支持,目前仅支持ascii格式,且不支持并行划分的网格 **功能优化** - 代码全部采用cmake进行管理,可任意选择vscode、Visual Studio、Clion、Qtcreator等支持cmake系统的IDE。 @@ -26,6 +27,8 @@ Version:2.5.x - 修复linux环境卸载插件时崩溃的问题 - 修复单个窗口下视图控制不正常的问题 - 修复几何绘制线段失败的问题 +- 修复后处理动画崩溃问题 +- 修复因前后处理工具栏的显示边框按钮对象同名导致的后处理无法点击显示边框的问题 **其他** - OpenCASCADE的版本变更(7.5.0->7.6.0)。 diff --git a/src/MainWindow/CustomizerHelper.cpp b/src/MainWindow/CustomizerHelper.cpp index c4cb7cc..2bb28cf 100644 --- a/src/MainWindow/CustomizerHelper.cpp +++ b/src/MainWindow/CustomizerHelper.cpp @@ -348,7 +348,7 @@ namespace GUI { _ui->menuSelect->setEnabled(on); } _ui->actionDisplayNode->setVisible(on); - _ui->actionDisplayWireFrame->setVisible(on); + _ui->actionPreDisplayWireFrame->setVisible(on); _ui->actionDisplaySurface->setVisible(on); // _ui->actionDisplaySurfaceEdge->setVisible(on); diff --git a/src/MainWindow/MainWindow.cpp b/src/MainWindow/MainWindow.cpp index 80e3ae0..c19e3db 100644 --- a/src/MainWindow/MainWindow.cpp +++ b/src/MainWindow/MainWindow.cpp @@ -206,7 +206,7 @@ namespace GUI { connect(this, SIGNAL(closeMainWindow()), this, SLOT(closeWindow())); connect(this, SIGNAL(sendInfoToStatesBar(QString)), this, SLOT(setStatusBarInfo(QString))); // connect(this, SIGNAL(importMeshByNamesSig(QString)), this, - //SLOT(importMesh(QString))); + // SLOT(importMesh(QString))); connect(this, SIGNAL(importMeshDataSetSig(vtkDataSet*)), this, SLOT(importMeshDataset(vtkDataSet*))); connect(this, SIGNAL(printMessageSig(Common::Message, QString)), this, @@ -280,7 +280,7 @@ namespace GUI { // 网格显示模式 // _displayModeSignalMapper = new QSignalMapper(this); connect(_ui->actionDisplayNode, SIGNAL(triggered()), this, SLOT(setMeshDisplay())); - connect(_ui->actionDisplayWireFrame, SIGNAL(triggered()), this, SLOT(setMeshDisplay())); + connect(_ui->actionPreDisplayWireFrame, SIGNAL(triggered()), this, SLOT(setMeshDisplay())); connect(_ui->actionDisplaySurface, SIGNAL(triggered()), this, SLOT(setMeshDisplay())); // 几何显示模式(点、线、面) connect(_ui->actionDisplayPoint, SIGNAL(triggered()), this, SLOT(setGeometryDisplay())); @@ -328,7 +328,7 @@ namespace GUI { connect(this, SIGNAL(updatePreMeshActorSig()), this, SLOT(updatePreMeshActor())); connect(this, SIGNAL(updatePreGeometryActorSig()), this, SLOT(updatePreGeometryActor())); - connect(this, SIGNAL(openPlot()), _signalHandler, SLOT(openPlotFile())); + connect(this, SIGNAL(openPlot()), _signalHandler, SLOT(openPlotFile())); } void MainWindow::registerMoudel() @@ -884,7 +884,7 @@ namespace GUI { void MainWindow::setMeshDisplay() { bool showNode = _ui->actionDisplayNode->isChecked(); - bool showEdge = _ui->actionDisplayWireFrame->isChecked(); + bool showEdge = _ui->actionPreDisplayWireFrame->isChecked(); bool showFace = _ui->actionDisplaySurface->isChecked(); auto gp = Setting::BusAPI::instance()->getGraphOption(); diff --git a/src/MainWindow/MainWindow.ui b/src/MainWindow/MainWindow.ui index bb0ebdc..7e2a584 100644 --- a/src/MainWindow/MainWindow.ui +++ b/src/MainWindow/MainWindow.ui @@ -127,7 +127,7 @@ false - + @@ -362,7 +362,7 @@ View - + @@ -557,7 +557,7 @@ false - + @@ -970,7 +970,7 @@ DisplayNode - + true @@ -1718,7 +1718,7 @@ DisplayPoints - + :/QUI/post/rep_wireFrame.png:/QUI/post/rep_wireFrame.png diff --git a/src/MainWindow/SARibbonMWUi.cpp b/src/MainWindow/SARibbonMWUi.cpp index 25c5243..5265fa4 100644 --- a/src/MainWindow/SARibbonMWUi.cpp +++ b/src/MainWindow/SARibbonMWUi.cpp @@ -9,69 +9,78 @@ #include "SARibbonBar/SARibbonQuickAccessBar.h" #include -namespace Ui -{ - void MainWindowRibbon::setupRibbonUi(QMainWindow *MainWindow) +namespace Ui { + void MainWindowRibbon::setupRibbonUi(QMainWindow* MainWindow) { - SARibbonToolButton *btn; + SARibbonToolButton* btn; SARibbonMainWindow* ribbonwindow = qobject_cast(MainWindow); - if (!ribbonwindow) return; + if(!ribbonwindow) + return; - //BaseUi::setupUi(), but not initialized menu and toolbar - //the actions have initialized but not installed anywhere + // BaseUi::setupUi(), but not initialized menu and toolbar + // the actions have initialized but not installed anywhere { - if (MainWindow->objectName().isEmpty()) + if(MainWindow->objectName().isEmpty()) MainWindow->setObjectName(QString::fromUtf8("MainWindow")); MainWindow->setEnabled(true); MainWindow->resize(1678, 921); actionNew = new QAction(MainWindow); actionNew->setObjectName(QString::fromUtf8("actionNew")); QIcon icon; - icon.addFile(QString::fromUtf8(":/QUI/icon/createNew.png"), QSize(), QIcon::Normal, QIcon::Off); + icon.addFile(QString::fromUtf8(":/QUI/icon/createNew.png"), QSize(), QIcon::Normal, + QIcon::Off); actionNew->setIcon(icon); actionOpen = new QAction(MainWindow); actionOpen->setObjectName(QString::fromUtf8("actionOpen")); QIcon icon1; - icon1.addFile(QString::fromUtf8(":/QUI/icon/open.png"), QSize(), QIcon::Normal, QIcon::Off); + icon1.addFile(QString::fromUtf8(":/QUI/icon/open.png"), QSize(), QIcon::Normal, + QIcon::Off); actionOpen->setIcon(icon1); actionSave = new QAction(MainWindow); actionSave->setObjectName(QString::fromUtf8("actionSave")); actionSave->setEnabled(false); QIcon icon2; - icon2.addFile(QString::fromUtf8(":/QUI/icon/save.png"), QSize(), QIcon::Normal, QIcon::Off); + icon2.addFile(QString::fromUtf8(":/QUI/icon/save.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSave->setIcon(icon2); actionClose = new QAction(MainWindow); actionClose->setObjectName(QString::fromUtf8("actionClose")); QIcon icon3; - icon3.addFile(QString::fromUtf8(":/QUI/icon/stop.png"), QSize(), QIcon::Normal, QIcon::Off); + icon3.addFile(QString::fromUtf8(":/QUI/icon/stop.png"), QSize(), QIcon::Normal, + QIcon::Off); actionClose->setIcon(icon3); actionSaveAs = new QAction(MainWindow); actionSaveAs->setObjectName(QString::fromUtf8("actionSaveAs")); actionSaveAs->setEnabled(false); QIcon icon4; - icon4.addFile(QString::fromUtf8(":/QUI/icon/saveAs.png"), QSize(), QIcon::Normal, QIcon::Off); + icon4.addFile(QString::fromUtf8(":/QUI/icon/saveAs.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSaveAs->setIcon(icon4); actionChinese = new QAction(MainWindow); actionChinese->setObjectName(QString::fromUtf8("actionChinese")); actionChinese->setCheckable(true); QIcon icon5; - icon5.addFile(QString::fromUtf8(":/QUI/icon/chinese_language.png"), QSize(), QIcon::Normal, QIcon::Off); + icon5.addFile(QString::fromUtf8(":/QUI/icon/chinese_language.png"), QSize(), + QIcon::Normal, QIcon::Off); actionChinese->setIcon(icon5); actionEnglish = new QAction(MainWindow); actionEnglish->setObjectName(QString::fromUtf8("actionEnglish")); actionEnglish->setCheckable(true); QIcon icon6; - icon6.addFile(QString::fromUtf8(":/QUI/icon/english_language.png"), QSize(), QIcon::Normal, QIcon::Off); + icon6.addFile(QString::fromUtf8(":/QUI/icon/english_language.png"), QSize(), + QIcon::Normal, QIcon::Off); actionEnglish->setIcon(icon6); actionImportMesh = new QAction(MainWindow); actionImportMesh->setObjectName(QString::fromUtf8("actionImportMesh")); QIcon icon7; - icon7.addFile(QString::fromUtf8(":/QUI/icon/importMesh.png"), QSize(), QIcon::Normal, QIcon::Off); + icon7.addFile(QString::fromUtf8(":/QUI/icon/importMesh.png"), QSize(), QIcon::Normal, + QIcon::Off); actionImportMesh->setIcon(icon7); actionImportGeometry = new QAction(MainWindow); actionImportGeometry->setObjectName(QString::fromUtf8("actionImportGeometry")); QIcon icon8; - icon8.addFile(QString::fromUtf8(":/QUI/icon/importGeometry.png"), QSize(), QIcon::Normal, QIcon::Off); + icon8.addFile(QString::fromUtf8(":/QUI/icon/importGeometry.png"), QSize(), + QIcon::Normal, QIcon::Off); actionImportGeometry->setIcon(icon8); actionWorkingDir = new QAction(MainWindow); actionWorkingDir->setObjectName(QString::fromUtf8("actionWorkingDir")); @@ -80,54 +89,63 @@ namespace Ui actionSolve->setObjectName(QString::fromUtf8("actionSolve")); actionSolve->setEnabled(false); QIcon icon9; - icon9.addFile(QString::fromUtf8(":/QUI/icon/solve.png"), QSize(), QIcon::Normal, QIcon::Off); + icon9.addFile(QString::fromUtf8(":/QUI/icon/solve.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSolve->setIcon(icon9); actionSolver_Manager = new QAction(MainWindow); actionSolver_Manager->setObjectName(QString::fromUtf8("actionSolver_Manager")); QIcon icon10; - icon10.addFile(QString::fromUtf8(":/QUI/icon/setting.png"), QSize(), QIcon::Normal, QIcon::Off); + icon10.addFile(QString::fromUtf8(":/QUI/icon/setting.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSolver_Manager->setIcon(icon10); actionViewXPlus = new QAction(MainWindow); actionViewXPlus->setObjectName(QString::fromUtf8("actionViewXPlus")); actionViewXPlus->setEnabled(false); QIcon icon11; - icon11.addFile(QString::fromUtf8(":/QUI/icon/xPlus.png"), QSize(), QIcon::Normal, QIcon::Off); + icon11.addFile(QString::fromUtf8(":/QUI/icon/xPlus.png"), QSize(), QIcon::Normal, + QIcon::Off); actionViewXPlus->setIcon(icon11); actionViewXMinus = new QAction(MainWindow); actionViewXMinus->setObjectName(QString::fromUtf8("actionViewXMinus")); actionViewXMinus->setEnabled(false); QIcon icon12; - icon12.addFile(QString::fromUtf8(":/QUI/icon/xMinus.png"), QSize(), QIcon::Normal, QIcon::Off); + icon12.addFile(QString::fromUtf8(":/QUI/icon/xMinus.png"), QSize(), QIcon::Normal, + QIcon::Off); actionViewXMinus->setIcon(icon12); actionViewYPlus = new QAction(MainWindow); actionViewYPlus->setObjectName(QString::fromUtf8("actionViewYPlus")); actionViewYPlus->setEnabled(false); QIcon icon13; - icon13.addFile(QString::fromUtf8(":/QUI/icon/yPlus.png"), QSize(), QIcon::Normal, QIcon::Off); + icon13.addFile(QString::fromUtf8(":/QUI/icon/yPlus.png"), QSize(), QIcon::Normal, + QIcon::Off); actionViewYPlus->setIcon(icon13); actionViewYMinus = new QAction(MainWindow); actionViewYMinus->setObjectName(QString::fromUtf8("actionViewYMinus")); actionViewYMinus->setEnabled(false); QIcon icon14; - icon14.addFile(QString::fromUtf8(":/QUI/icon/yMinus.png"), QSize(), QIcon::Normal, QIcon::Off); + icon14.addFile(QString::fromUtf8(":/QUI/icon/yMinus.png"), QSize(), QIcon::Normal, + QIcon::Off); actionViewYMinus->setIcon(icon14); actionViewZPlus = new QAction(MainWindow); actionViewZPlus->setObjectName(QString::fromUtf8("actionViewZPlus")); actionViewZPlus->setEnabled(false); QIcon icon15; - icon15.addFile(QString::fromUtf8(":/QUI/icon/zPlus.png"), QSize(), QIcon::Normal, QIcon::Off); + icon15.addFile(QString::fromUtf8(":/QUI/icon/zPlus.png"), QSize(), QIcon::Normal, + QIcon::Off); actionViewZPlus->setIcon(icon15); actionViewZMinus = new QAction(MainWindow); actionViewZMinus->setObjectName(QString::fromUtf8("actionViewZMinus")); actionViewZMinus->setEnabled(false); QIcon icon16; - icon16.addFile(QString::fromUtf8(":/QUI/icon/zMinus.png"), QSize(), QIcon::Normal, QIcon::Off); + icon16.addFile(QString::fromUtf8(":/QUI/icon/zMinus.png"), QSize(), QIcon::Normal, + QIcon::Off); actionViewZMinus->setIcon(icon16); actionFitView = new QAction(MainWindow); actionFitView->setObjectName(QString::fromUtf8("actionFitView")); actionFitView->setEnabled(false); QIcon icon17; - icon17.addFile(QString::fromUtf8(":/QUI/icon/fit.png"), QSize(), QIcon::Normal, QIcon::Off); + icon17.addFile(QString::fromUtf8(":/QUI/icon/fit.png"), QSize(), QIcon::Normal, + QIcon::Off); actionFitView->setIcon(icon17); actionSelectOff = new QAction(MainWindow); actionSelectOff->setObjectName(QString::fromUtf8("actionSelectOff")); @@ -135,21 +153,24 @@ namespace Ui actionSelectOff->setChecked(true); actionSelectOff->setEnabled(false); QIcon icon18; - icon18.addFile(QString::fromUtf8(":/QUI/icon/selectOff.png"), QSize(), QIcon::Normal, QIcon::Off); + icon18.addFile(QString::fromUtf8(":/QUI/icon/selectOff.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSelectOff->setIcon(icon18); actionSelectMeshNode = new QAction(MainWindow); actionSelectMeshNode->setObjectName(QString::fromUtf8("actionSelectMeshNode")); actionSelectMeshNode->setCheckable(true); actionSelectMeshNode->setEnabled(false); QIcon icon19; - icon19.addFile(QString::fromUtf8(":/QUI/icon/selectNode.png"), QSize(), QIcon::Normal, QIcon::Off); + icon19.addFile(QString::fromUtf8(":/QUI/icon/selectNode.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSelectMeshNode->setIcon(icon19); actionSelectMeshCell = new QAction(MainWindow); actionSelectMeshCell->setObjectName(QString::fromUtf8("actionSelectMeshCell")); actionSelectMeshCell->setCheckable(true); actionSelectMeshCell->setEnabled(false); QIcon icon20; - icon20.addFile(QString::fromUtf8(":/QUI/icon/selectElement.png"), QSize(), QIcon::Normal, QIcon::Off); + icon20.addFile(QString::fromUtf8(":/QUI/icon/selectElement.png"), QSize(), + QIcon::Normal, QIcon::Off); actionSelectMeshCell->setIcon(icon20); actionSolve_Options = new QAction(MainWindow); actionSolve_Options->setObjectName(QString::fromUtf8("actionSolve_Options")); @@ -157,401 +178,473 @@ namespace Ui actionGraph_Options = new QAction(MainWindow); actionGraph_Options->setObjectName(QString::fromUtf8("actionGraph_Options")); QIcon icon21; - icon21.addFile(QString::fromUtf8(":/QUI/icon/graphOption.png"), QSize(), QIcon::Normal, QIcon::Off); + icon21.addFile(QString::fromUtf8(":/QUI/icon/graphOption.png"), QSize(), QIcon::Normal, + QIcon::Off); actionGraph_Options->setIcon(icon21); actionSurfaceMesh = new QAction(MainWindow); actionSurfaceMesh->setObjectName(QString::fromUtf8("actionSurfaceMesh")); actionSurfaceMesh->setEnabled(false); QIcon icon22; - icon22.addFile(QString::fromUtf8(":/QUI/icon/surfaceMesh.png"), QSize(), QIcon::Normal, QIcon::Off); + icon22.addFile(QString::fromUtf8(":/QUI/icon/surfaceMesh.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSurfaceMesh->setIcon(icon22); actionSolidMesh = new QAction(MainWindow); actionSolidMesh->setObjectName(QString::fromUtf8("actionSolidMesh")); actionSolidMesh->setEnabled(false); QIcon icon23; - icon23.addFile(QString::fromUtf8(":/QUI/icon/solidMesh.png"), QSize(), QIcon::Normal, QIcon::Off); + icon23.addFile(QString::fromUtf8(":/QUI/icon/solidMesh.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSolidMesh->setIcon(icon23); actionExportMesh = new QAction(MainWindow); actionExportMesh->setObjectName(QString::fromUtf8("actionExportMesh")); actionExportMesh->setEnabled(false); QIcon icon24; - icon24.addFile(QString::fromUtf8(":/QUI/icon/exportMesh.png"), QSize(), QIcon::Normal, QIcon::Off); + icon24.addFile(QString::fromUtf8(":/QUI/icon/exportMesh.png"), QSize(), QIcon::Normal, + QIcon::Off); actionExportMesh->setIcon(icon24); actionUser_Manual = new QAction(MainWindow); actionUser_Manual->setObjectName(QString::fromUtf8("actionUser_Manual")); actionUser_Manual->setCheckable(true); actionUser_Manual->setChecked(true); QIcon icon25; - icon25.addFile(QString::fromUtf8(":/QUI/icon/help.png"), QSize(), QIcon::Normal, QIcon::Off); + icon25.addFile(QString::fromUtf8(":/QUI/icon/help.png"), QSize(), QIcon::Normal, + QIcon::Off); actionUser_Manual->setIcon(icon25); actionAbout = new QAction(MainWindow); actionAbout->setObjectName(QString::fromUtf8("actionAbout")); QIcon icon26; - icon26.addFile(QString::fromUtf8(":/QUI/icon/about_us.png"), QSize(), QIcon::Normal, QIcon::Off); + icon26.addFile(QString::fromUtf8(":/QUI/icon/about_us.png"), QSize(), QIcon::Normal, + QIcon::Off); actionAbout->setIcon(icon26); actionDisplayNode = new QAction(MainWindow); actionDisplayNode->setObjectName(QString::fromUtf8("actionDisplayNode")); actionDisplayNode->setCheckable(true); actionDisplayNode->setEnabled(false); QIcon icon27; - icon27.addFile(QString::fromUtf8(":/QUI/icon/node.png"), QSize(), QIcon::Normal, QIcon::Off); + icon27.addFile(QString::fromUtf8(":/QUI/icon/node.png"), QSize(), QIcon::Normal, + QIcon::Off); actionDisplayNode->setIcon(icon27); - actionDisplayWireFrame = new QAction(MainWindow); - actionDisplayWireFrame->setObjectName(QString::fromUtf8("actionDisplayWireFrame")); - actionDisplayWireFrame->setCheckable(true); - actionDisplayWireFrame->setChecked(false); - actionDisplayWireFrame->setEnabled(false); + actionPreDisplayWireFrame = new QAction(MainWindow); + actionPreDisplayWireFrame->setObjectName( + QString::fromUtf8("actionPreDisplayWireFrame")); + actionPreDisplayWireFrame->setCheckable(true); + actionPreDisplayWireFrame->setChecked(false); + actionPreDisplayWireFrame->setEnabled(false); QIcon icon28; - icon28.addFile(QString::fromUtf8(":/QUI/icon/wireFrame.png"), QSize(), QIcon::Normal, QIcon::Off); - actionDisplayWireFrame->setIcon(icon28); + icon28.addFile(QString::fromUtf8(":/QUI/icon/wireFrame.png"), QSize(), QIcon::Normal, + QIcon::Off); + actionPreDisplayWireFrame->setIcon(icon28); actionDisplaySurface = new QAction(MainWindow); actionDisplaySurface->setObjectName(QString::fromUtf8("actionDisplaySurface")); actionDisplaySurface->setCheckable(true); actionDisplaySurface->setEnabled(false); QIcon icon29; - icon29.addFile(QString::fromUtf8(":/QUI/icon/face.png"), QSize(), QIcon::Normal, QIcon::Off); + icon29.addFile(QString::fromUtf8(":/QUI/icon/face.png"), QSize(), QIcon::Normal, + QIcon::Off); actionDisplaySurface->setIcon(icon29); actionCreate_Set = new QAction(MainWindow); actionCreate_Set->setObjectName(QString::fromUtf8("actionCreate_Set")); actionCreate_Set->setEnabled(false); QIcon icon30; - icon30.addFile(QString::fromUtf8(":/QUI/icon/meshComponent.png"), QSize(), QIcon::Normal, QIcon::Off); + icon30.addFile(QString::fromUtf8(":/QUI/icon/meshComponent.png"), QSize(), + QIcon::Normal, QIcon::Off); actionCreate_Set->setIcon(icon30); action2DPlot = new QAction(MainWindow); action2DPlot->setObjectName(QString::fromUtf8("action2DPlot")); QIcon icon31; - icon31.addFile(QString::fromUtf8(":/QUI/window/2dplot.png"), QSize(), QIcon::Normal, QIcon::Off); + icon31.addFile(QString::fromUtf8(":/QUI/window/2dplot.png"), QSize(), QIcon::Normal, + QIcon::Off); action2DPlot->setIcon(icon31); action3DGraph = new QAction(MainWindow); action3DGraph->setObjectName(QString::fromUtf8("action3DGraph")); QIcon icon32; - icon32.addFile(QString::fromUtf8(":/QUI/window/3dgraph.png"), QSize(), QIcon::Normal, QIcon::Off); + icon32.addFile(QString::fromUtf8(":/QUI/window/3dgraph.png"), QSize(), QIcon::Normal, + QIcon::Off); action3DGraph->setIcon(icon32); actionSave_Script = new QAction(MainWindow); actionSave_Script->setObjectName(QString::fromUtf8("actionSave_Script")); QIcon icon33; - icon33.addFile(QString::fromUtf8(":/QUI/icon/saveScript.png"), QSize(), QIcon::Normal, QIcon::Off); + icon33.addFile(QString::fromUtf8(":/QUI/icon/saveScript.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSave_Script->setIcon(icon33); actionExecute_Script = new QAction(MainWindow); actionExecute_Script->setObjectName(QString::fromUtf8("actionExecute_Script")); QIcon icon34; - icon34.addFile(QString::fromUtf8(":/QUI/icon/execScript.png"), QSize(), QIcon::Normal, QIcon::Off); + icon34.addFile(QString::fromUtf8(":/QUI/icon/execScript.png"), QSize(), QIcon::Normal, + QIcon::Off); actionExecute_Script->setIcon(icon34); actionGenMesh = new QAction(MainWindow); actionGenMesh->setObjectName(QString::fromUtf8("actionGenMesh")); actionGenMesh->setEnabled(false); QIcon icon35; - icon35.addFile(QString::fromUtf8(":/QUI/icon/solumationsetting.png"), QSize(), QIcon::Normal, QIcon::Off); + icon35.addFile(QString::fromUtf8(":/QUI/icon/solumationsetting.png"), QSize(), + QIcon::Normal, QIcon::Off); actionGenMesh->setIcon(icon35); actionSave_Picture = new QAction(MainWindow); actionSave_Picture->setObjectName(QString::fromUtf8("actionSave_Picture")); QIcon icon36; - icon36.addFile(QString::fromUtf8(":/QUI/icon/saveImage.png"), QSize(), QIcon::Normal, QIcon::Off); + icon36.addFile(QString::fromUtf8(":/QUI/icon/saveImage.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSave_Picture->setIcon(icon36); actionBoxMeshNode = new QAction(MainWindow); actionBoxMeshNode->setObjectName(QString::fromUtf8("actionBoxMeshNode")); actionBoxMeshNode->setCheckable(true); actionBoxMeshNode->setEnabled(false); QIcon icon37; - icon37.addFile(QString::fromUtf8(":/QUI/icon/boxNode.png"), QSize(), QIcon::Normal, QIcon::Off); + icon37.addFile(QString::fromUtf8(":/QUI/icon/boxNode.png"), QSize(), QIcon::Normal, + QIcon::Off); actionBoxMeshNode->setIcon(icon37); actionBoxMeshCell = new QAction(MainWindow); actionBoxMeshCell->setObjectName(QString::fromUtf8("actionBoxMeshCell")); actionBoxMeshCell->setCheckable(true); actionBoxMeshCell->setEnabled(false); QIcon icon38; - icon38.addFile(QString::fromUtf8(":/QUI/icon/boxCell.png"), QSize(), QIcon::Normal, QIcon::Off); + icon38.addFile(QString::fromUtf8(":/QUI/icon/boxCell.png"), QSize(), QIcon::Normal, + QIcon::Off); actionBoxMeshCell->setIcon(icon38); actionStart_Page = new QAction(MainWindow); actionStart_Page->setObjectName(QString::fromUtf8("actionStart_Page")); QIcon icon39; - icon39.addFile(QString::fromUtf8(":/QUI/window/startpage.png"), QSize(), QIcon::Normal, QIcon::Off); + icon39.addFile(QString::fromUtf8(":/QUI/window/startpage.png"), QSize(), QIcon::Normal, + QIcon::Off); actionStart_Page->setIcon(icon39); actionPre_Window = new QAction(MainWindow); actionPre_Window->setObjectName(QString::fromUtf8("actionPre_Window")); QIcon icon40; - icon40.addFile(QString::fromUtf8(":/QUI/window/preWindow.png"), QSize(), QIcon::Normal, QIcon::Off); + icon40.addFile(QString::fromUtf8(":/QUI/window/preWindow.png"), QSize(), QIcon::Normal, + QIcon::Off); actionPre_Window->setIcon(icon40); actionChecking = new QAction(MainWindow); actionChecking->setObjectName(QString::fromUtf8("actionChecking")); actionChecking->setEnabled(false); QIcon icon41; - icon41.addFile(QString::fromUtf8(":/QUI/icon/meshChecking.png"), QSize(), QIcon::Active, QIcon::On); + icon41.addFile(QString::fromUtf8(":/QUI/icon/meshChecking.png"), QSize(), QIcon::Active, + QIcon::On); actionChecking->setIcon(icon41); actionCreateBox = new QAction(MainWindow); actionCreateBox->setObjectName(QString::fromUtf8("actionCreateBox")); QIcon icon42; - icon42.addFile(QString::fromUtf8(":/QUI/geometry/box.png"), QSize(), QIcon::Normal, QIcon::Off); + icon42.addFile(QString::fromUtf8(":/QUI/geometry/box.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateBox->setIcon(icon42); actionCreateCylinder = new QAction(MainWindow); actionCreateCylinder->setObjectName(QString::fromUtf8("actionCreateCylinder")); QIcon icon43; - icon43.addFile(QString::fromUtf8(":/QUI/geometry/cylinder.png"), QSize(), QIcon::Normal, QIcon::Off); + icon43.addFile(QString::fromUtf8(":/QUI/geometry/cylinder.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateCylinder->setIcon(icon43); actionCreaterSphere = new QAction(MainWindow); actionCreaterSphere->setObjectName(QString::fromUtf8("actionCreaterSphere")); QIcon icon44; - icon44.addFile(QString::fromUtf8(":/QUI/geometry/sphere.png"), QSize(), QIcon::Normal, QIcon::Off); + icon44.addFile(QString::fromUtf8(":/QUI/geometry/sphere.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreaterSphere->setIcon(icon44); actionChamfer = new QAction(MainWindow); actionChamfer->setObjectName(QString::fromUtf8("actionChamfer")); QIcon icon45; - icon45.addFile(QString::fromUtf8(":/QUI/geometry/chamfer.png"), QSize(), QIcon::Normal, QIcon::Off); + icon45.addFile(QString::fromUtf8(":/QUI/geometry/chamfer.png"), QSize(), QIcon::Normal, + QIcon::Off); actionChamfer->setIcon(icon45); actionFillet = new QAction(MainWindow); actionFillet->setObjectName(QString::fromUtf8("actionFillet")); QIcon icon46; - icon46.addFile(QString::fromUtf8(":/QUI/geometry/fillet.png"), QSize(), QIcon::Normal, QIcon::Off); + icon46.addFile(QString::fromUtf8(":/QUI/geometry/fillet.png"), QSize(), QIcon::Normal, + QIcon::Off); actionFillet->setIcon(icon46); actionBoolCut = new QAction(MainWindow); actionBoolCut->setObjectName(QString::fromUtf8("actionBoolCut")); QIcon icon47; - icon47.addFile(QString::fromUtf8(":/QUI/geometry/cut.png"), QSize(), QIcon::Normal, QIcon::Off); + icon47.addFile(QString::fromUtf8(":/QUI/geometry/cut.png"), QSize(), QIcon::Normal, + QIcon::Off); actionBoolCut->setIcon(icon47); actionBoolFause = new QAction(MainWindow); actionBoolFause->setObjectName(QString::fromUtf8("actionBoolFause")); QIcon icon48; - icon48.addFile(QString::fromUtf8(":/QUI/geometry/fuse.png"), QSize(), QIcon::Normal, QIcon::Off); + icon48.addFile(QString::fromUtf8(":/QUI/geometry/fuse.png"), QSize(), QIcon::Normal, + QIcon::Off); actionBoolFause->setIcon(icon48); actionBoolCommon = new QAction(MainWindow); actionBoolCommon->setObjectName(QString::fromUtf8("actionBoolCommon")); QIcon icon49; - icon49.addFile(QString::fromUtf8(":/QUI/geometry/common.png"), QSize(), QIcon::Normal, QIcon::Off); + icon49.addFile(QString::fromUtf8(":/QUI/geometry/common.png"), QSize(), QIcon::Normal, + QIcon::Off); actionBoolCommon->setIcon(icon49); actionUndo = new QAction(MainWindow); actionUndo->setObjectName(QString::fromUtf8("actionUndo")); QIcon icon50; - icon50.addFile(QString::fromUtf8(":/QUI/geometry/undo.png"), QSize(), QIcon::Normal, QIcon::Off); + icon50.addFile(QString::fromUtf8(":/QUI/geometry/undo.png"), QSize(), QIcon::Normal, + QIcon::Off); actionUndo->setIcon(icon50); actionRedo = new QAction(MainWindow); actionRedo->setObjectName(QString::fromUtf8("actionRedo")); QIcon icon51; - icon51.addFile(QString::fromUtf8(":/QUI/geometry/redo.png"), QSize(), QIcon::Normal, QIcon::Off); + icon51.addFile(QString::fromUtf8(":/QUI/geometry/redo.png"), QSize(), QIcon::Normal, + QIcon::Off); actionRedo->setIcon(icon51); actionExportGeometry = new QAction(MainWindow); actionExportGeometry->setObjectName(QString::fromUtf8("actionExportGeometry")); QIcon icon52; - icon52.addFile(QString::fromUtf8(":/QUI/icon/exportGeometry.png"), QSize(), QIcon::Normal, QIcon::Off); + icon52.addFile(QString::fromUtf8(":/QUI/icon/exportGeometry.png"), QSize(), + QIcon::Normal, QIcon::Off); actionExportGeometry->setIcon(icon52); actionCreaterCone = new QAction(MainWindow); actionCreaterCone->setObjectName(QString::fromUtf8("actionCreaterCone")); QIcon icon53; - icon53.addFile(QString::fromUtf8(":/QUI/geometry/cone.png"), QSize(), QIcon::Normal, QIcon::Off); + icon53.addFile(QString::fromUtf8(":/QUI/geometry/cone.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreaterCone->setIcon(icon53); actionMirrorFeature = new QAction(MainWindow); actionMirrorFeature->setObjectName(QString::fromUtf8("actionMirrorFeature")); QIcon icon54; - icon54.addFile(QString::fromUtf8(":/QUI/geometry/mirror.png"), QSize(), QIcon::Normal, QIcon::Off); + icon54.addFile(QString::fromUtf8(":/QUI/geometry/mirror.png"), QSize(), QIcon::Normal, + QIcon::Off); actionMirrorFeature->setIcon(icon54); actionVariable_Fillet = new QAction(MainWindow); actionVariable_Fillet->setObjectName(QString::fromUtf8("actionVariable_Fillet")); QIcon icon55; - icon55.addFile(QString::fromUtf8(":/QUI/geometry/variableFillet.png"), QSize(), QIcon::Normal, QIcon::Off); + icon55.addFile(QString::fromUtf8(":/QUI/geometry/variableFillet.png"), QSize(), + QIcon::Normal, QIcon::Off); actionVariable_Fillet->setIcon(icon55); actionExtrude = new QAction(MainWindow); actionExtrude->setObjectName(QString::fromUtf8("actionExtrude")); QIcon icon56; - icon56.addFile(QString::fromUtf8(":/QUI/geometry/extrude.png"), QSize(), QIcon::Normal, QIcon::Off); + icon56.addFile(QString::fromUtf8(":/QUI/geometry/extrude.png"), QSize(), QIcon::Normal, + QIcon::Off); actionExtrude->setIcon(icon56); actionCreate_Point = new QAction(MainWindow); actionCreate_Point->setObjectName(QString::fromUtf8("actionCreate_Point")); QIcon icon57; - icon57.addFile(QString::fromUtf8(":/QUI/geometry/point.png"), QSize(), QIcon::Normal, QIcon::Off); + icon57.addFile(QString::fromUtf8(":/QUI/geometry/point.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreate_Point->setIcon(icon57); actionCreate_Line = new QAction(MainWindow); actionCreate_Line->setObjectName(QString::fromUtf8("actionCreate_Line")); QIcon icon58; - icon58.addFile(QString::fromUtf8(":/QUI/geometry/line.png"), QSize(), QIcon::Normal, QIcon::Off); + icon58.addFile(QString::fromUtf8(":/QUI/geometry/line.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreate_Line->setIcon(icon58); actionCreate_Face = new QAction(MainWindow); actionCreate_Face->setObjectName(QString::fromUtf8("actionCreate_Face")); QIcon icon59; - icon59.addFile(QString::fromUtf8(":/QUI/geometry/face.png"), QSize(), QIcon::Normal, QIcon::Off); + icon59.addFile(QString::fromUtf8(":/QUI/geometry/face.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreate_Face->setIcon(icon59); actionMoveFeature = new QAction(MainWindow); actionMoveFeature->setObjectName(QString::fromUtf8("actionMoveFeature")); QIcon icon60; - icon60.addFile(QString::fromUtf8(":/QUI/geometry/move.png"), QSize(), QIcon::Normal, QIcon::Off); + icon60.addFile(QString::fromUtf8(":/QUI/geometry/move.png"), QSize(), QIcon::Normal, + QIcon::Off); actionMoveFeature->setIcon(icon60); actionRotateFeature = new QAction(MainWindow); actionRotateFeature->setObjectName(QString::fromUtf8("actionRotateFeature")); QIcon icon61; - icon61.addFile(QString::fromUtf8(":/QUI/geometry/Rotate.png"), QSize(), QIcon::Normal, QIcon::Off); + icon61.addFile(QString::fromUtf8(":/QUI/geometry/Rotate.png"), QSize(), QIcon::Normal, + QIcon::Off); actionRotateFeature->setIcon(icon61); actionRevol = new QAction(MainWindow); actionRevol->setObjectName(QString::fromUtf8("actionRevol")); QIcon icon62; - icon62.addFile(QString::fromUtf8(":/QUI/geometry/revolve.png"), QSize(), QIcon::Normal, QIcon::Off); + icon62.addFile(QString::fromUtf8(":/QUI/geometry/revolve.png"), QSize(), QIcon::Normal, + QIcon::Off); actionRevol->setIcon(icon62); actionLoft = new QAction(MainWindow); actionLoft->setObjectName(QString::fromUtf8("actionLoft")); QIcon icon63; - icon63.addFile(QString::fromUtf8(":/QUI/geometry/loft.png"), QSize(), QIcon::Normal, QIcon::Off); + icon63.addFile(QString::fromUtf8(":/QUI/geometry/loft.png"), QSize(), QIcon::Normal, + QIcon::Off); actionLoft->setIcon(icon63); actionCreateDatumPlane = new QAction(MainWindow); actionCreateDatumPlane->setObjectName(QString::fromUtf8("actionCreateDatumPlane")); QIcon icon64; - icon64.addFile(QString::fromUtf8(":/QUI/icon/datumPlane.png"), QSize(), QIcon::Normal, QIcon::Off); + icon64.addFile(QString::fromUtf8(":/QUI/icon/datumPlane.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateDatumPlane->setIcon(icon64); actionDrawLine = new QAction(MainWindow); actionDrawLine->setObjectName(QString::fromUtf8("actionDrawLine")); actionDrawLine->setCheckable(false); QIcon icon65; - icon65.addFile(QString::fromUtf8(":/QUI/icon/sketchLine.png"), QSize(), QIcon::Normal, QIcon::Off); + icon65.addFile(QString::fromUtf8(":/QUI/icon/sketchLine.png"), QSize(), QIcon::Normal, + QIcon::Off); actionDrawLine->setIcon(icon65); actionDrawRectangle = new QAction(MainWindow); actionDrawRectangle->setObjectName(QString::fromUtf8("actionDrawRectangle")); actionDrawRectangle->setCheckable(false); QIcon icon66; - icon66.addFile(QString::fromUtf8(":/QUI/icon/sketchRectangle.png"), QSize(), QIcon::Normal, QIcon::Off); + icon66.addFile(QString::fromUtf8(":/QUI/icon/sketchRectangle.png"), QSize(), + QIcon::Normal, QIcon::Off); actionDrawRectangle->setIcon(icon66); actionDrawCircle = new QAction(MainWindow); actionDrawCircle->setObjectName(QString::fromUtf8("actionDrawCircle")); actionDrawCircle->setCheckable(false); QIcon icon67; - icon67.addFile(QString::fromUtf8(":/QUI/icon/sketchCircle.png"), QSize(), QIcon::Normal, QIcon::Off); + icon67.addFile(QString::fromUtf8(":/QUI/icon/sketchCircle.png"), QSize(), QIcon::Normal, + QIcon::Off); actionDrawCircle->setIcon(icon67); actionCreate_Sketch = new QAction(MainWindow); actionCreate_Sketch->setObjectName(QString::fromUtf8("actionCreate_Sketch")); actionCreate_Sketch->setCheckable(true); QIcon icon68; - icon68.addFile(QString::fromUtf8(":/QUI/icon/createSketch.png"), QSize(), QIcon::Normal, QIcon::Off); + icon68.addFile(QString::fromUtf8(":/QUI/icon/createSketch.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreate_Sketch->setIcon(icon68); actionDrawArc = new QAction(MainWindow); actionDrawArc->setObjectName(QString::fromUtf8("actionDrawArc")); actionDrawArc->setCheckable(false); actionDrawArc->setEnabled(true); QIcon icon69; - icon69.addFile(QString::fromUtf8(":/QUI/icon/sketchArc.png"), QSize(), QIcon::Normal, QIcon::Off); + icon69.addFile(QString::fromUtf8(":/QUI/icon/sketchArc.png"), QSize(), QIcon::Normal, + QIcon::Off); actionDrawArc->setIcon(icon69); actionDrawPolyline = new QAction(MainWindow); actionDrawPolyline->setObjectName(QString::fromUtf8("actionDrawPolyline")); QIcon icon70; - icon70.addFile(QString::fromUtf8(":/QUI/icon/sketchPolyLine.png"), QSize(), QIcon::Normal, QIcon::Off); + icon70.addFile(QString::fromUtf8(":/QUI/icon/sketchPolyLine.png"), QSize(), + QIcon::Normal, QIcon::Off); actionDrawPolyline->setIcon(icon70); actionMakeMatrix = new QAction(MainWindow); actionMakeMatrix->setObjectName(QString::fromUtf8("actionMakeMatrix")); QIcon icon71; - icon71.addFile(QString::fromUtf8(":/QUI/geometry/matrix.png"), QSize(), QIcon::Normal, QIcon::Off); + icon71.addFile(QString::fromUtf8(":/QUI/geometry/matrix.png"), QSize(), QIcon::Normal, + QIcon::Off); actionMakeMatrix->setIcon(icon71); actionSweep = new QAction(MainWindow); actionSweep->setObjectName(QString::fromUtf8("actionSweep")); QIcon icon72; - icon72.addFile(QString::fromUtf8(":/QUI/geometry/sweep.png"), QSize(), QIcon::Normal, QIcon::Off); + icon72.addFile(QString::fromUtf8(":/QUI/geometry/sweep.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSweep->setIcon(icon72); actionDrawSpline = new QAction(MainWindow); actionDrawSpline->setObjectName(QString::fromUtf8("actionDrawSpline")); QIcon icon73; - icon73.addFile(QString::fromUtf8(":/QUI/icon/sketchSpline.png"), QSize(), QIcon::Normal, QIcon::Off); + icon73.addFile(QString::fromUtf8(":/QUI/icon/sketchSpline.png"), QSize(), QIcon::Normal, + QIcon::Off); actionDrawSpline->setIcon(icon73); actionDisplayPoint = new QAction(MainWindow); actionDisplayPoint->setObjectName(QString::fromUtf8("actionDisplayPoint")); actionDisplayPoint->setCheckable(true); actionDisplayPoint->setChecked(false); QIcon icon74; - icon74.addFile(QString::fromUtf8(":/QUI/geometry/pointDisplay.png"), QSize(), QIcon::Normal, QIcon::Off); + icon74.addFile(QString::fromUtf8(":/QUI/geometry/pointDisplay.png"), QSize(), + QIcon::Normal, QIcon::Off); actionDisplayPoint->setIcon(icon74); actionDisplayCurve = new QAction(MainWindow); actionDisplayCurve->setObjectName(QString::fromUtf8("actionDisplayCurve")); actionDisplayCurve->setCheckable(true); actionDisplayCurve->setChecked(false); QIcon icon75; - icon75.addFile(QString::fromUtf8(":/QUI/geometry/edgeDisplay.png"), QSize(), QIcon::Normal, QIcon::Off); + icon75.addFile(QString::fromUtf8(":/QUI/geometry/edgeDisplay.png"), QSize(), + QIcon::Normal, QIcon::Off); actionDisplayCurve->setIcon(icon75); actionDisplayFace = new QAction(MainWindow); actionDisplayFace->setObjectName(QString::fromUtf8("actionDisplayFace")); actionDisplayFace->setCheckable(true); actionDisplayFace->setChecked(true); QIcon icon76; - icon76.addFile(QString::fromUtf8(":/QUI/geometry/facedisplay.png"), QSize(), QIcon::Normal, QIcon::Off); + icon76.addFile(QString::fromUtf8(":/QUI/geometry/facedisplay.png"), QSize(), + QIcon::Normal, QIcon::Off); actionDisplayFace->setIcon(icon76); actionSelectPoint = new QAction(MainWindow); actionSelectPoint->setObjectName(QString::fromUtf8("actionSelectPoint")); actionSelectPoint->setCheckable(true); QIcon icon77; - icon77.addFile(QString::fromUtf8(":/QUI/geometry/selectpoint.png"), QSize(), QIcon::Normal, QIcon::Off); + icon77.addFile(QString::fromUtf8(":/QUI/geometry/selectpoint.png"), QSize(), + QIcon::Normal, QIcon::Off); actionSelectPoint->setIcon(icon77); actionSelectCurve = new QAction(MainWindow); actionSelectCurve->setObjectName(QString::fromUtf8("actionSelectCurve")); actionSelectCurve->setCheckable(true); QIcon icon78; - icon78.addFile(QString::fromUtf8(":/QUI/geometry/selectwire.png"), QSize(), QIcon::Normal, QIcon::Off); + icon78.addFile(QString::fromUtf8(":/QUI/geometry/selectwire.png"), QSize(), + QIcon::Normal, QIcon::Off); actionSelectCurve->setIcon(icon78); actionSelectFace = new QAction(MainWindow); actionSelectFace->setObjectName(QString::fromUtf8("actionSelectFace")); actionSelectFace->setCheckable(true); QIcon icon79; - icon79.addFile(QString::fromUtf8(":/QUI/geometry/selectface.png"), QSize(), QIcon::Normal, QIcon::Off); + icon79.addFile(QString::fromUtf8(":/QUI/geometry/selectface.png"), QSize(), + QIcon::Normal, QIcon::Off); actionSelectFace->setIcon(icon79); actionSelectGeometryBody = new QAction(MainWindow); actionSelectGeometryBody->setObjectName(QString::fromUtf8("actionSelectGeometryBody")); actionSelectGeometryBody->setCheckable(true); QIcon icon80; - icon80.addFile(QString::fromUtf8(":/QUI/geometry/selectbody.png"), QSize(), QIcon::Normal, QIcon::Off); + icon80.addFile(QString::fromUtf8(":/QUI/geometry/selectbody.png"), QSize(), + QIcon::Normal, QIcon::Off); actionSelectGeometryBody->setIcon(icon80); actionPluginManager = new QAction(MainWindow); actionPluginManager->setObjectName(QString::fromUtf8("actionPluginManager")); QIcon icon81; - icon81.addFile(QString::fromUtf8(":/QUI/icon/pluginManager.png"), QSize(), QIcon::Normal, QIcon::Off); + icon81.addFile(QString::fromUtf8(":/QUI/icon/pluginManager.png"), QSize(), + QIcon::Normal, QIcon::Off); actionPluginManager->setIcon(icon81); actionUser_Guidance = new QAction(MainWindow); actionUser_Guidance->setObjectName(QString::fromUtf8("actionUser_Guidance")); actionUser_Guidance->setCheckable(true); actionUser_Guidance->setChecked(true); QIcon icon82; - icon82.addFile(QString::fromUtf8(":/QUI/icon/userguidance.png"), QSize(), QIcon::Normal, QIcon::Off); + icon82.addFile(QString::fromUtf8(":/QUI/icon/userguidance.png"), QSize(), QIcon::Normal, + QIcon::Off); actionUser_Guidance->setIcon(icon82); actionMeasure_Distance = new QAction(MainWindow); actionMeasure_Distance->setObjectName(QString::fromUtf8("actionMeasure_Distance")); QIcon icon83; - icon83.addFile(QString::fromUtf8(":/QUI/geometry/geoMeasure.png"), QSize(), QIcon::Normal, QIcon::Off); + icon83.addFile(QString::fromUtf8(":/QUI/geometry/geoMeasure.png"), QSize(), + QIcon::Normal, QIcon::Off); actionMeasure_Distance->setIcon(icon83); actionMeasure = new QAction(MainWindow); actionMeasure->setObjectName(QString::fromUtf8("actionMeasure")); actionGeoSplitter = new QAction(MainWindow); actionGeoSplitter->setObjectName(QString::fromUtf8("actionGeoSplitter")); QIcon icon84; - icon84.addFile(QString::fromUtf8(":/QUI/geometry/geoSSplit.png"), QSize(), QIcon::Normal, QIcon::Off); + icon84.addFile(QString::fromUtf8(":/QUI/geometry/geoSSplit.png"), QSize(), + QIcon::Normal, QIcon::Off); actionGeoSplitter->setIcon(icon84); actionCreateGeoComponent = new QAction(MainWindow); actionCreateGeoComponent->setObjectName(QString::fromUtf8("actionCreateGeoComponent")); actionCreateGeoComponent->setEnabled(false); QIcon icon85; - icon85.addFile(QString::fromUtf8(":/QUI/geometry/geoComponent.png"), QSize(), QIcon::Normal, QIcon::Off); + icon85.addFile(QString::fromUtf8(":/QUI/geometry/geoComponent.png"), QSize(), + QIcon::Normal, QIcon::Off); actionCreateGeoComponent->setIcon(icon85); actionFluidMesh = new QAction(MainWindow); actionFluidMesh->setObjectName(QString::fromUtf8("actionFluidMesh")); actionFluidMesh->setEnabled(false); QIcon icon86; - icon86.addFile(QString::fromUtf8(":/QUI/icon/meshFluid.png"), QSize(), QIcon::Normal, QIcon::Off); + icon86.addFile(QString::fromUtf8(":/QUI/icon/meshFluid.png"), QSize(), QIcon::Normal, + QIcon::Off); actionFluidMesh->setIcon(icon86); actionFilterMesh = new QAction(MainWindow); actionFilterMesh->setObjectName(QString::fromUtf8("actionFilterMesh")); actionFilterMesh->setEnabled(false); QIcon icon87; - icon87.addFile(QString::fromUtf8(":/QUI/icon/meshFilter.png"), QSize(), QIcon::Normal, QIcon::Off); + icon87.addFile(QString::fromUtf8(":/QUI/icon/meshFilter.png"), QSize(), QIcon::Normal, + QIcon::Off); actionFilterMesh->setIcon(icon87); actionFillHole = new QAction(MainWindow); actionFillHole->setObjectName(QString::fromUtf8("actionFillHole")); QIcon icon88; - icon88.addFile(QString::fromUtf8(":/QUI/geometry/geoFillHole.png"), QSize(), QIcon::Normal, QIcon::Off); + icon88.addFile(QString::fromUtf8(":/QUI/geometry/geoFillHole.png"), QSize(), + QIcon::Normal, QIcon::Off); actionFillHole->setIcon(icon88); actionRemoveSurface = new QAction(MainWindow); actionRemoveSurface->setObjectName(QString::fromUtf8("actionRemoveSurface")); QIcon icon89; - icon89.addFile(QString::fromUtf8(":/QUI/geometry/geoRemoveFace.png"), QSize(), QIcon::Normal, QIcon::Off); + icon89.addFile(QString::fromUtf8(":/QUI/geometry/geoRemoveFace.png"), QSize(), + QIcon::Normal, QIcon::Off); actionRemoveSurface->setIcon(icon89); actionFillGap = new QAction(MainWindow); actionFillGap->setObjectName(QString::fromUtf8("actionFillGap")); QIcon icon90; - icon90.addFile(QString::fromUtf8(":/QUI/geometry/geoFixSurface.png"), QSize(), QIcon::Normal, QIcon::Off); + icon90.addFile(QString::fromUtf8(":/QUI/geometry/geoFixSurface.png"), QSize(), + QIcon::Normal, QIcon::Off); actionFillGap->setIcon(icon90); actionVTKTranslation = new QAction(MainWindow); actionVTKTranslation->setObjectName(QString::fromUtf8("actionVTKTranslation")); actionVTKTranslation->setCheckable(false); actionVTKTranslation->setEnabled(false); QIcon icon91; - icon91.addFile(QString::fromUtf8(":/QUI/icon/meshmodeling.png"), QSize(), QIcon::Normal, QIcon::Off); + icon91.addFile(QString::fromUtf8(":/QUI/icon/meshmodeling.png"), QSize(), QIcon::Normal, + QIcon::Off); actionVTKTranslation->setIcon(icon91); actionNormal = new QAction(MainWindow); actionNormal->setObjectName(QString::fromUtf8("actionNormal")); @@ -561,85 +654,103 @@ namespace Ui actionRibbon->setCheckable(false); actionOpenPostFile = new QAction(MainWindow); actionOpenPostFile->setObjectName(QString::fromUtf8("actionOpenPostFile")); - QIcon iconOpenPostFile; - iconOpenPostFile.addFile(QString::fromUtf8(":/QUI/post/open.png"), QSize(), QIcon::Normal, QIcon::Off); - actionOpenPostFile->setIcon(iconOpenPostFile); + QIcon iconOpenPostFile; + iconOpenPostFile.addFile(QString::fromUtf8(":/QUI/post/open.png"), QSize(), + QIcon::Normal, QIcon::Off); + actionOpenPostFile->setIcon(iconOpenPostFile); actionDisplayPoints = new QAction(MainWindow); actionDisplayPoints->setObjectName(QString::fromUtf8("actionDisplayPoints")); QIcon icon92; - icon92.addFile(QString::fromUtf8(":/QUI/post/rep_point.png"), QSize(), QIcon::Normal, QIcon::Off); + icon92.addFile(QString::fromUtf8(":/QUI/post/rep_point.png"), QSize(), QIcon::Normal, + QIcon::Off); actionDisplayPoints->setIcon(icon92); - actionDisplayWireframe = new QAction(MainWindow); - actionDisplayWireframe->setObjectName(QString::fromUtf8("actionDisplayWireframe")); + actionPostDisplayWireframe = new QAction(MainWindow); + actionPostDisplayWireframe->setObjectName(QString::fromUtf8("actionDisplayWireframe")); QIcon icon93; - icon93.addFile(QString::fromUtf8(":/QUI/post/rep_wireFrame.png"), QSize(), QIcon::Normal, QIcon::Off); - actionDisplayWireframe->setIcon(icon93); + icon93.addFile(QString::fromUtf8(":/QUI/post/rep_wireFrame.png"), QSize(), + QIcon::Normal, QIcon::Off); + actionPostDisplayWireframe->setIcon(icon93); actionDisplaySurfaceWithoutEdge = new QAction(MainWindow); - actionDisplaySurfaceWithoutEdge->setObjectName(QString::fromUtf8("actionDisplaySurfaceWithoutEdge")); + actionDisplaySurfaceWithoutEdge->setObjectName( + QString::fromUtf8("actionDisplaySurfaceWithoutEdge")); QIcon icon94; - icon94.addFile(QString::fromUtf8(":/QUI/post/rep_surface.png"), QSize(), QIcon::Normal, QIcon::Off); + icon94.addFile(QString::fromUtf8(":/QUI/post/rep_surface.png"), QSize(), QIcon::Normal, + QIcon::Off); actionDisplaySurfaceWithoutEdge->setIcon(icon94); actionDisplaySurfaceWithEdge = new QAction(MainWindow); - actionDisplaySurfaceWithEdge->setObjectName(QString::fromUtf8("actionDisplaySurfaceWithEdge")); + actionDisplaySurfaceWithEdge->setObjectName( + QString::fromUtf8("actionDisplaySurfaceWithEdge")); QIcon icon95; - icon95.addFile(QString::fromUtf8(":/QUI/post/rep_surfaceWithEdge.png"), QSize(), QIcon::Normal, QIcon::Off); + icon95.addFile(QString::fromUtf8(":/QUI/post/rep_surfaceWithEdge.png"), QSize(), + QIcon::Normal, QIcon::Off); actionDisplaySurfaceWithEdge->setIcon(icon95); actionCreateVector = new QAction(MainWindow); actionCreateVector->setObjectName(QString::fromUtf8("actionCreateVector")); QIcon icon96; - icon96.addFile(QString::fromUtf8(":/QUI/post/vector.png"), QSize(), QIcon::Normal, QIcon::Off); + icon96.addFile(QString::fromUtf8(":/QUI/post/vector.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateVector->setIcon(icon96); actionCreateClip = new QAction(MainWindow); actionCreateClip->setObjectName(QString::fromUtf8("actionCreateClip")); QIcon icon97; - icon97.addFile(QString::fromUtf8(":/QUI/post/clip.png"), QSize(), QIcon::Normal, QIcon::Off); + icon97.addFile(QString::fromUtf8(":/QUI/post/clip.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateClip->setIcon(icon97); actionCreateSlice = new QAction(MainWindow); actionCreateSlice->setObjectName(QString::fromUtf8("actionCreateSlice")); QIcon icon98; - icon98.addFile(QString::fromUtf8(":/QUI/post/slice.png"), QSize(), QIcon::Normal, QIcon::Off); + icon98.addFile(QString::fromUtf8(":/QUI/post/slice.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateSlice->setIcon(icon98); actionCreateStreamLine = new QAction(MainWindow); actionCreateStreamLine->setObjectName(QString::fromUtf8("actionCreateStreamLine")); QIcon icon99; - icon99.addFile(QString::fromUtf8(":/QUI/post/streamline.png"), QSize(), QIcon::Normal, QIcon::Off); + icon99.addFile(QString::fromUtf8(":/QUI/post/streamline.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateStreamLine->setIcon(icon99); actionCreateISOCurve = new QAction(MainWindow); actionCreateISOCurve->setObjectName(QString::fromUtf8("actionCreateISOCurve")); - QIcon iconISOCurve; - iconISOCurve.addFile(QString::fromUtf8(":/QUI/post/isocurve.png"), QSize(), QIcon::Normal, QIcon::Off); - actionCreateISOCurve->setIcon(iconISOCurve); + QIcon iconISOCurve; + iconISOCurve.addFile(QString::fromUtf8(":/QUI/post/isocurve.png"), QSize(), + QIcon::Normal, QIcon::Off); + actionCreateISOCurve->setIcon(iconISOCurve); actionCreateISOSurface = new QAction(MainWindow); actionCreateISOSurface->setObjectName(QString::fromUtf8("actionCreateISOSurface")); QIcon icon100; - icon100.addFile(QString::fromUtf8(":/QUI/post/isosurf.png"), QSize(), QIcon::Normal, QIcon::Off); + icon100.addFile(QString::fromUtf8(":/QUI/post/isosurf.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateISOSurface->setIcon(icon100); actionCreateCalculator = new QAction(MainWindow); actionCreateCalculator->setObjectName(QString::fromUtf8("actionCreateCalculator")); QIcon icon101; - icon101.addFile(QString::fromUtf8(":/QUI/post/calculator.png"), QSize(), QIcon::Normal, QIcon::Off); + icon101.addFile(QString::fromUtf8(":/QUI/post/calculator.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateCalculator->setIcon(icon101); actionCreateReflection = new QAction(MainWindow); actionCreateReflection->setObjectName(QString::fromUtf8("actionCreateReflection")); QIcon icon102; - icon102.addFile(QString::fromUtf8(":/QUI/post/Reflection.png"), QSize(), QIcon::Normal, QIcon::Off); + icon102.addFile(QString::fromUtf8(":/QUI/post/Reflection.png"), QSize(), QIcon::Normal, + QIcon::Off); actionCreateReflection->setIcon(icon102); actionSaveImage = new QAction(MainWindow); actionSaveImage->setObjectName(QString::fromUtf8("actionSaveImage")); QIcon icon103; - icon103.addFile(QString::fromUtf8(":/QUI/post/saveImage.png"), QSize(), QIcon::Normal, QIcon::Off); + icon103.addFile(QString::fromUtf8(":/QUI/post/saveImage.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSaveImage->setIcon(icon103); actionSaveVideo = new QAction(MainWindow); actionSaveVideo->setObjectName(QString::fromUtf8("actionSaveVideo")); QIcon icon104; - icon104.addFile(QString::fromUtf8(":/QUI/post/video.png"), QSize(), QIcon::Normal, QIcon::Off); + icon104.addFile(QString::fromUtf8(":/QUI/post/video.png"), QSize(), QIcon::Normal, + QIcon::Off); actionSaveVideo->setIcon(icon104); actionGeoMeshRotate = new QAction(MainWindow); actionGeoMeshRotate->setObjectName(QString::fromUtf8("actionGeoMeshRotate")); QIcon icon105; - icon105.addFile(QString::fromUtf8(":/QUI/icon/vector.png"), QSize(), QIcon::Normal, QIcon::Off); - actionGeoMeshRotate->setIcon(icon105); + icon105.addFile(QString::fromUtf8(":/QUI/icon/vector.png"), QSize(), QIcon::Normal, + QIcon::Off); + actionGeoMeshRotate->setIcon(icon105); centralwidget = new QWidget(MainWindow); centralwidget->setObjectName(QString::fromUtf8("centralwidget")); @@ -664,7 +775,7 @@ namespace Ui ribbon->quickAccessBar()->addAction(actionSave); { QPushButton* filebutton = dynamic_cast(ribbon->applicationButton()); - menuFile = new QMenu(ribbonwindow); + menuFile = new QMenu(ribbonwindow); { filebutton->setText(QObject::tr("File")); menuFile->addAction(actionNew); @@ -688,16 +799,16 @@ namespace Ui filebutton->setMenu(menuFile); } - //home - home_page = ribbon->addCategoryPage(QObject::tr("Home")); - new_pannel = home_page->addPannel(QObject::tr("File")); - solve_pannel = home_page->addPannel(QObject::tr("Case")); - import_mesh_pannel = home_page->addPannel(QObject::tr("Import Mesh")); - import_geometry_pannel = home_page->addPannel(QObject::tr("Import Geometry")); - exec_script_pannel = home_page->addPannel(QObject::tr("Script")); - adapt_window_pannel_home = home_page->addPannel(QObject::tr("View")); - save_picture_pannel = home_page->addPannel(QObject::tr("Save Picture")); - plugin_manager_pannel = home_page->addPannel(QObject::tr("Plugin Manager")); + // home + home_page = ribbon->addCategoryPage(QObject::tr("Home")); + new_pannel = home_page->addPannel(QObject::tr("File")); + solve_pannel = home_page->addPannel(QObject::tr("Case")); + import_mesh_pannel = home_page->addPannel(QObject::tr("Import Mesh")); + import_geometry_pannel = home_page->addPannel(QObject::tr("Import Geometry")); + exec_script_pannel = home_page->addPannel(QObject::tr("Script")); + adapt_window_pannel_home = home_page->addPannel(QObject::tr("View")); + save_picture_pannel = home_page->addPannel(QObject::tr("Save Picture")); + plugin_manager_pannel = home_page->addPannel(QObject::tr("Plugin Manager")); drawing_option_pannel_home = home_page->addPannel(QObject::tr("Other")); { new_pannel->addLargeAction(actionNew); @@ -722,10 +833,12 @@ namespace Ui languageMenu->addAction(actionChinese); languageMenu->addAction(actionEnglish); QAction* languageAction = new QAction(MainWindow); - QIcon language_Icon; - language_Icon.addFile(QString::fromUtf8(":/QUI/icon/language.png"), QSize(), QIcon::Normal, QIcon::Off); + QIcon language_Icon; + language_Icon.addFile(QString::fromUtf8(":/QUI/icon/language.png"), QSize(), + QIcon::Normal, QIcon::Off); languageAction->setIcon(language_Icon); - languageAction->setText(QCoreApplication::translate("MainWindow", "Language", nullptr)); + languageAction->setText( + QCoreApplication::translate("MainWindow", "Language", nullptr)); languageAction->setMenu(languageMenu); btn = drawing_option_pannel_home->addLargeAction(languageAction); btn->setPopupMode(QToolButton::InstantPopup); @@ -734,8 +847,9 @@ namespace Ui styleMenu->addAction(actionNormal); styleMenu->addAction(actionRibbon); QAction* styleAction = new QAction(MainWindow); - QIcon style_Icon; - style_Icon.addFile(QString::fromUtf8(":/QUI/icon/graphOption.png"), QSize(), QIcon::Normal, QIcon::Off); + QIcon style_Icon; + style_Icon.addFile(QString::fromUtf8(":/QUI/icon/graphOption.png"), QSize(), + QIcon::Normal, QIcon::Off); styleAction->setIcon(style_Icon); styleAction->setText(QCoreApplication::translate("MainWindow", "Style", nullptr)); styleAction->setMenu(styleMenu); @@ -743,19 +857,19 @@ namespace Ui btn->setPopupMode(QToolButton::InstantPopup); } - //geometry - geometry_page = ribbon->addCategoryPage(QObject::tr("Geometry")); + // geometry + geometry_page = ribbon->addCategoryPage(QObject::tr("Geometry")); sketch_pannel_geometry = geometry_page->addPannel(QObject::tr("Geometry Sketch")); - cube_pannel = geometry_page->addPannel(QObject::tr("Create Solid Geometry")); - create_point_pannel = geometry_page->addPannel(QObject::tr("Create Plane Geometry")); - base_plate_pannel = geometry_page->addPannel(QObject::tr("Create Datum Plane")); - sum_pannel = geometry_page->addPannel(QObject::tr("Calculate")); - stretch_pannel = geometry_page->addPannel(QObject::tr("Operation")); + cube_pannel = geometry_page->addPannel(QObject::tr("Create Solid Geometry")); + create_point_pannel = geometry_page->addPannel(QObject::tr("Create Plane Geometry")); + base_plate_pannel = geometry_page->addPannel(QObject::tr("Create Datum Plane")); + sum_pannel = geometry_page->addPannel(QObject::tr("Calculate")); + stretch_pannel = geometry_page->addPannel(QObject::tr("Operation")); display_surface_pannel = geometry_page->addPannel(QObject::tr("Display")); clear_choice_pannel_geometry = geometry_page->addPannel(QObject::tr("Select")); - segmentation_pannel = geometry_page->addPannel(QObject::tr("Modify")); - chamfer_pannel = geometry_page->addPannel(QObject::tr("Chamfer")); - measure_pannel = geometry_page->addPannel(QObject::tr("Measure and Create")); + segmentation_pannel = geometry_page->addPannel(QObject::tr("Modify")); + chamfer_pannel = geometry_page->addPannel(QObject::tr("Chamfer")); + measure_pannel = geometry_page->addPannel(QObject::tr("Measure and Create")); undo_redo_pannel_geometry = geometry_page->addPannel(QObject::tr("Edit")); { sketch_pannel_geometry->addLargeAction(actionCreate_Sketch); @@ -766,7 +880,7 @@ namespace Ui create_point_pannel->addLargeAction(actionCreate_Point); create_point_pannel->addMediumAction(actionCreate_Line); create_point_pannel->addMediumAction(actionCreate_Face); -// base_plate_pannel->addLargeAction(actionCreateDatumPlane); + // base_plate_pannel->addLargeAction(actionCreateDatumPlane); base_plate_pannel->addLargeAction(actionGeoMeshRotate); sum_pannel->addLargeAction(actionBoolFause); sum_pannel->addMediumAction(actionBoolCut); @@ -795,18 +909,18 @@ namespace Ui chamfer_pannel->addMediumAction(actionFillet); chamfer_pannel->addMediumAction(actionVariable_Fillet); measure_pannel->addMediumAction(actionMeasure_Distance); - measure_pannel->addMediumAction(actionCreateGeoComponent); + measure_pannel->addMediumAction(actionCreateGeoComponent); undo_redo_pannel_geometry->addLargeAction(actionUndo); undo_redo_pannel_geometry->addLargeAction(actionRedo); } - //mesh - mesh_page = ribbon->addCategoryPage(QObject::tr("Mesh")); + // mesh + mesh_page = ribbon->addCategoryPage(QObject::tr("Mesh")); surface_mesh_subdivision_pannel = mesh_page->addPannel(QObject::tr("Mesh Subdivision")); - mesh_quailty_examine_pannel = mesh_page->addPannel(QObject::tr("Mesh Operation")); - clear_choice_pannel_mesh = mesh_page->addPannel(QObject::tr("Mesh Selection")); - display_node_pannel = mesh_page->addPannel(QObject::tr("Mesh Display")); - create_set_pannel = mesh_page->addPannel(QObject::tr("Mesh Creation")); + mesh_quailty_examine_pannel = mesh_page->addPannel(QObject::tr("Mesh Operation")); + clear_choice_pannel_mesh = mesh_page->addPannel(QObject::tr("Mesh Selection")); + display_node_pannel = mesh_page->addPannel(QObject::tr("Mesh Display")); + create_set_pannel = mesh_page->addPannel(QObject::tr("Mesh Creation")); { surface_mesh_subdivision_pannel->addLargeAction(actionSurfaceMesh); surface_mesh_subdivision_pannel->addMediumAction(actionSolidMesh); @@ -821,23 +935,23 @@ namespace Ui clear_choice_pannel_mesh->addSmallAction(actionBoxMeshCell); display_node_pannel->addLargeAction(actionDisplayNode); display_node_pannel->addSmallAction(actionDisplaySurface); - display_node_pannel->addSmallAction(actionDisplayWireFrame); + display_node_pannel->addSmallAction(actionPreDisplayWireFrame); create_set_pannel->addLargeAction(actionCreate_Set); create_set_pannel->addLargeAction(actionGenMesh); } - //solve - solve_page = ribbon->addCategoryPage(QObject::tr("Solve")); + // solve + solve_page = ribbon->addCategoryPage(QObject::tr("Solve")); solver_management_pannel = solve_page->addPannel(QObject::tr("Solver Manager")); { solver_management_pannel->addLargeAction(actionSolver_Manager); solver_management_pannel->addLargeAction(actionSolve); } - //window - window_page = ribbon->addCategoryPage(QObject::tr("Windows")); - start_page_pannel = window_page->addPannel(QObject::tr("Start Page")); - adapt_window_pannel_window = window_page->addPannel(QObject::tr("Adapt Page")); + // window + window_page = ribbon->addCategoryPage(QObject::tr("Windows")); + start_page_pannel = window_page->addPannel(QObject::tr("Start Page")); + adapt_window_pannel_window = window_page->addPannel(QObject::tr("Adapt Page")); drawing_option_pannel_window = window_page->addPannel(QObject::tr("Drawing Option")); { start_page_pannel->addLargeAction(actionStart_Page); @@ -854,9 +968,9 @@ namespace Ui drawing_option_pannel_window->addLargeAction(actionGraph_Options); } - //post - post_page = ribbon->addCategoryPage(QObject::tr("3DRender")); - post_base_pannel = post_page->addPannel(QString()); + // post + post_page = ribbon->addCategoryPage(QObject::tr("3DRender")); + post_base_pannel = post_page->addPannel(QString()); post_viewer_pannel = post_page->addPannel(QString()); post_editor_pannel = post_page->addPannel(QString()); { @@ -864,7 +978,7 @@ namespace Ui post_base_pannel->addLargeAction(actionSaveImage); post_base_pannel->addLargeAction(actionSaveVideo); post_viewer_pannel->addSmallAction(actionDisplayPoints); - post_viewer_pannel->addSmallAction(actionDisplayWireFrame); + post_viewer_pannel->addSmallAction(actionPostDisplayWireframe); post_viewer_pannel->addSmallAction(actionDisplaySurfaceWithoutEdge); post_viewer_pannel->addSmallAction(actionDisplaySurfaceWithEdge); post_editor_pannel->addSmallAction(actionCreateClip); @@ -877,8 +991,8 @@ namespace Ui post_editor_pannel->addSmallAction(actionCreateReflection); } - //help - help_page = ribbon->addCategoryPage(QObject::tr( "Help")); + // help + help_page = ribbon->addCategoryPage(QObject::tr("Help")); user_guide_pannel = help_page->addPannel(QObject::tr("User Guide")); { user_guide_pannel->addLargeAction(actionUser_Guidance); @@ -886,12 +1000,12 @@ namespace Ui user_guide_pannel->addLargeAction(actionAbout); } - //sketch_tool + // sketch_tool sketch_tool_context = ribbon->addContextCategory(QString(), Qt::red, "sketch tool"); - sketch_tool_page = sketch_tool_context->addCategoryPage(QObject::tr("Sketch Tool")); + sketch_tool_page = sketch_tool_context->addCategoryPage(QObject::tr("Sketch Tool")); sketch_pannel_sketch_tool = sketch_tool_page->addPannel(QObject::tr("Sketch")); - draw_line_pannel = sketch_tool_page->addPannel(QObject::tr("Sketch Drawing")); - undo_redo_pannel_sketch = sketch_tool_page->addPannel(QObject::tr("Sketch Edit")); + draw_line_pannel = sketch_tool_page->addPannel(QObject::tr("Sketch Drawing")); + undo_redo_pannel_sketch = sketch_tool_page->addPannel(QObject::tr("Sketch Edit")); { sketch_pannel_sketch_tool->addLargeAction(actionCreate_Sketch); draw_line_pannel->addLargeAction(actionDrawLine); @@ -902,17 +1016,18 @@ namespace Ui draw_line_pannel->addLargeAction(actionDrawSpline); undo_redo_pannel_sketch->addLargeAction(actionUndo); undo_redo_pannel_sketch->addLargeAction(actionRedo); - } + } } retranslateRibbonUi(MainWindow); QMetaObject::connectSlotsByName(MainWindow); } - void MainWindowRibbon::retranslateRibbonUi(QMainWindow *MainWindow) + void MainWindowRibbon::retranslateRibbonUi(QMainWindow* MainWindow) { - //BaseUi::retranslateUi() + // BaseUi::retranslateUi() { - MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "FastCAE", nullptr)); + MainWindow->setWindowTitle( + QCoreApplication::translate("MainWindow", "FastCAE", nullptr)); actionNew->setText(QCoreApplication::translate("MainWindow", "New", nullptr)); #if QT_CONFIG(tooltip) actionNew->setToolTip(QCoreApplication::translate("MainWindow", "New", nullptr)); @@ -940,80 +1055,124 @@ namespace Ui #endif // QT_CONFIG(shortcut) actionSaveAs->setText(QCoreApplication::translate("MainWindow", "SaveAs", nullptr)); #if QT_CONFIG(shortcut) - actionSaveAs->setShortcut(QCoreApplication::translate("MainWindow", "Ctrl+Shift+S", nullptr)); + actionSaveAs->setShortcut( + QCoreApplication::translate("MainWindow", "Ctrl+Shift+S", nullptr)); #endif // QT_CONFIG(shortcut) actionChinese->setText(QCoreApplication::translate("MainWindow", "Chinese", nullptr)); #if QT_CONFIG(tooltip) - actionChinese->setToolTip(QCoreApplication::translate("MainWindow", "Chinese", nullptr)); + actionChinese->setToolTip( + QCoreApplication::translate("MainWindow", "Chinese", nullptr)); #endif // QT_CONFIG(tooltip) actionEnglish->setText(QCoreApplication::translate("MainWindow", "English", nullptr)); #if QT_CONFIG(tooltip) - actionEnglish->setToolTip(QCoreApplication::translate("MainWindow", "English", nullptr)); + actionEnglish->setToolTip( + QCoreApplication::translate("MainWindow", "English", nullptr)); #endif // QT_CONFIG(tooltip) - actionImportMesh->setText(QCoreApplication::translate("MainWindow", "Import Mesh", nullptr)); + actionImportMesh->setText( + QCoreApplication::translate("MainWindow", "Import Mesh", nullptr)); #if QT_CONFIG(shortcut) - actionImportMesh->setShortcut(QCoreApplication::translate("MainWindow", "Ctrl+I", nullptr)); + actionImportMesh->setShortcut( + QCoreApplication::translate("MainWindow", "Ctrl+I", nullptr)); #endif // QT_CONFIG(shortcut) - actionImportGeometry->setText(QCoreApplication::translate("MainWindow", "Import Geometry", nullptr)); + actionImportGeometry->setText( + QCoreApplication::translate("MainWindow", "Import Geometry", nullptr)); #if QT_CONFIG(shortcut) - actionImportGeometry->setShortcut(QCoreApplication::translate("MainWindow", "Ctrl+G", nullptr)); + actionImportGeometry->setShortcut( + QCoreApplication::translate("MainWindow", "Ctrl+G", nullptr)); #endif // QT_CONFIG(shortcut) - actionWorkingDir->setText(QCoreApplication::translate("MainWindow", "WorkingDir", nullptr)); + actionWorkingDir->setText( + QCoreApplication::translate("MainWindow", "WorkingDir", nullptr)); actionSolve->setText(QCoreApplication::translate("MainWindow", "Solve", nullptr)); #if QT_CONFIG(shortcut) actionSolve->setShortcut(QCoreApplication::translate("MainWindow", "F5", nullptr)); #endif // QT_CONFIG(shortcut) - actionSolver_Manager->setText(QCoreApplication::translate("MainWindow", "Solver Manager", nullptr)); - actionViewXPlus->setText(QCoreApplication::translate("MainWindow", "ViewXPlus", nullptr)); - actionViewXMinus->setText(QCoreApplication::translate("MainWindow", "ViewXMinus", nullptr)); - actionViewYPlus->setText(QCoreApplication::translate("MainWindow", "ViewYPlus", nullptr)); - actionViewYMinus->setText(QCoreApplication::translate("MainWindow", "ViewYMinus", nullptr)); - actionViewZPlus->setText(QCoreApplication::translate("MainWindow", "ViewZPlus", nullptr)); - actionViewZMinus->setText(QCoreApplication::translate("MainWindow", "ViewZMinus", nullptr)); + actionSolver_Manager->setText( + QCoreApplication::translate("MainWindow", "Solver Manager", nullptr)); + actionViewXPlus->setText( + QCoreApplication::translate("MainWindow", "ViewXPlus", nullptr)); + actionViewXMinus->setText( + QCoreApplication::translate("MainWindow", "ViewXMinus", nullptr)); + actionViewYPlus->setText( + QCoreApplication::translate("MainWindow", "ViewYPlus", nullptr)); + actionViewYMinus->setText( + QCoreApplication::translate("MainWindow", "ViewYMinus", nullptr)); + actionViewZPlus->setText( + QCoreApplication::translate("MainWindow", "ViewZPlus", nullptr)); + actionViewZMinus->setText( + QCoreApplication::translate("MainWindow", "ViewZMinus", nullptr)); actionFitView->setText(QCoreApplication::translate("MainWindow", "FitView", nullptr)); - actionSelectOff->setText(QCoreApplication::translate("MainWindow", "selectOff", nullptr)); - actionSelectMeshNode->setText(QCoreApplication::translate("MainWindow", "selectMeshNode", nullptr)); - actionSelectMeshCell->setText(QCoreApplication::translate("MainWindow", "selectMeshCell", nullptr)); - actionSolve_Options->setText(QCoreApplication::translate("MainWindow", "Solve Options", nullptr)); - actionGraph_Options->setText(QCoreApplication::translate("MainWindow", "Graph Options", nullptr)); - actionSurfaceMesh->setText(QCoreApplication::translate("MainWindow", "SurfaceMesh", nullptr)); - actionSolidMesh->setText(QCoreApplication::translate("MainWindow", "SolidMesh", nullptr)); - actionExportMesh->setText(QCoreApplication::translate("MainWindow", "Export Mesh", nullptr)); + actionSelectOff->setText( + QCoreApplication::translate("MainWindow", "selectOff", nullptr)); + actionSelectMeshNode->setText( + QCoreApplication::translate("MainWindow", "selectMeshNode", nullptr)); + actionSelectMeshCell->setText( + QCoreApplication::translate("MainWindow", "selectMeshCell", nullptr)); + actionSolve_Options->setText( + QCoreApplication::translate("MainWindow", "Solve Options", nullptr)); + actionGraph_Options->setText( + QCoreApplication::translate("MainWindow", "Graph Options", nullptr)); + actionSurfaceMesh->setText( + QCoreApplication::translate("MainWindow", "SurfaceMesh", nullptr)); + actionSolidMesh->setText( + QCoreApplication::translate("MainWindow", "SolidMesh", nullptr)); + actionExportMesh->setText( + QCoreApplication::translate("MainWindow", "Export Mesh", nullptr)); #if QT_CONFIG(shortcut) - actionExportMesh->setShortcut(QCoreApplication::translate("MainWindow", "Ctrl+E", nullptr)); + actionExportMesh->setShortcut( + QCoreApplication::translate("MainWindow", "Ctrl+E", nullptr)); #endif // QT_CONFIG(shortcut) - actionUser_Manual->setText(QCoreApplication::translate("MainWindow", "User Manual", nullptr)); + actionUser_Manual->setText( + QCoreApplication::translate("MainWindow", "User Manual", nullptr)); actionAbout->setText(QCoreApplication::translate("MainWindow", "About", nullptr)); - actionDisplayNode->setText(QCoreApplication::translate("MainWindow", "DisplayNode", nullptr)); - actionDisplayWireFrame->setText(QCoreApplication::translate("MainWindow", "DisplayWireFrame", nullptr)); - actionDisplaySurface->setText(QCoreApplication::translate("MainWindow", "DisplaySurface", nullptr)); -// actionDisplaySurfaceEdge->setText(QCoreApplication::translate("MainWindow", "DisplaySurfaceEdge", nullptr)); + actionDisplayNode->setText( + QCoreApplication::translate("MainWindow", "DisplayNode", nullptr)); + actionPreDisplayWireFrame->setText( + QCoreApplication::translate("MainWindow", "DisplayWireFrame", nullptr)); + actionDisplaySurface->setText( + QCoreApplication::translate("MainWindow", "DisplaySurface", nullptr)); +// actionDisplaySurfaceEdge->setText(QCoreApplication::translate("MainWindow", +//"DisplaySurfaceEdge", nullptr)); #if QT_CONFIG(tooltip) -// actionDisplaySurfaceEdge->setToolTip(QCoreApplication::translate("MainWindow", "DisplaySurfaceEdge", nullptr)); +// actionDisplaySurfaceEdge->setToolTip(QCoreApplication::translate("MainWindow", +//"DisplaySurfaceEdge", nullptr)); #endif // QT_CONFIG(tooltip) - actionCreate_Set->setText(QCoreApplication::translate("MainWindow", "Create Set", nullptr)); + actionCreate_Set->setText( + QCoreApplication::translate("MainWindow", "Create Set", nullptr)); action2DPlot->setText(QCoreApplication::translate("MainWindow", "2D Plot", nullptr)); action3DGraph->setText(QCoreApplication::translate("MainWindow", "3D Graph", nullptr)); - actionSave_Script->setText(QCoreApplication::translate("MainWindow", "Save Script", nullptr)); - actionExecute_Script->setText(QCoreApplication::translate("MainWindow", "Execute Script", nullptr)); + actionSave_Script->setText( + QCoreApplication::translate("MainWindow", "Save Script", nullptr)); + actionExecute_Script->setText( + QCoreApplication::translate("MainWindow", "Execute Script", nullptr)); #if QT_CONFIG(shortcut) - actionExecute_Script->setShortcut(QCoreApplication::translate("MainWindow", "Ctrl+R", nullptr)); + actionExecute_Script->setShortcut( + QCoreApplication::translate("MainWindow", "Ctrl+R", nullptr)); #endif // QT_CONFIG(shortcut) actionGenMesh->setText(QCoreApplication::translate("MainWindow", "GenMesh", nullptr)); - actionSave_Picture->setText(QCoreApplication::translate("MainWindow", "Save Picture", nullptr)); - actionBoxMeshNode->setText(QCoreApplication::translate("MainWindow", "BoxMeshNode", nullptr)); - actionBoxMeshCell->setText(QCoreApplication::translate("MainWindow", "BoxMeshCell", nullptr)); - actionStart_Page->setText(QCoreApplication::translate("MainWindow", "Start Page", nullptr)); - actionPre_Window->setText(QCoreApplication::translate("MainWindow", "Pre Window", nullptr)); + actionSave_Picture->setText( + QCoreApplication::translate("MainWindow", "Save Picture", nullptr)); + actionBoxMeshNode->setText( + QCoreApplication::translate("MainWindow", "BoxMeshNode", nullptr)); + actionBoxMeshCell->setText( + QCoreApplication::translate("MainWindow", "BoxMeshCell", nullptr)); + actionStart_Page->setText( + QCoreApplication::translate("MainWindow", "Start Page", nullptr)); + actionPre_Window->setText( + QCoreApplication::translate("MainWindow", "Pre Window", nullptr)); actionChecking->setText(QCoreApplication::translate("MainWindow", "Checking", nullptr)); - actionCreateBox->setText(QCoreApplication::translate("MainWindow", "CreateBox", nullptr)); - actionCreateCylinder->setText(QCoreApplication::translate("MainWindow", "CreateCylinder", nullptr)); - actionCreaterSphere->setText(QCoreApplication::translate("MainWindow", "CreaterSphere", nullptr)); + actionCreateBox->setText( + QCoreApplication::translate("MainWindow", "CreateBox", nullptr)); + actionCreateCylinder->setText( + QCoreApplication::translate("MainWindow", "CreateCylinder", nullptr)); + actionCreaterSphere->setText( + QCoreApplication::translate("MainWindow", "CreaterSphere", nullptr)); actionChamfer->setText(QCoreApplication::translate("MainWindow", "Chamfer", nullptr)); actionFillet->setText(QCoreApplication::translate("MainWindow", "Fillet", nullptr)); actionBoolCut->setText(QCoreApplication::translate("MainWindow", "BoolCut", nullptr)); - actionBoolFause->setText(QCoreApplication::translate("MainWindow", "BoolFause", nullptr)); - actionBoolCommon->setText(QCoreApplication::translate("MainWindow", "BoolCommon", nullptr)); + actionBoolFause->setText( + QCoreApplication::translate("MainWindow", "BoolFause", nullptr)); + actionBoolCommon->setText( + QCoreApplication::translate("MainWindow", "BoolCommon", nullptr)); actionUndo->setText(QCoreApplication::translate("MainWindow", "undo", nullptr)); #if QT_CONFIG(shortcut) actionUndo->setShortcut(QCoreApplication::translate("MainWindow", "Ctrl+Z", nullptr)); @@ -1022,73 +1181,122 @@ namespace Ui #if QT_CONFIG(shortcut) actionRedo->setShortcut(QCoreApplication::translate("MainWindow", "Ctrl+Y", nullptr)); #endif // QT_CONFIG(shortcut) - actionExportGeometry->setText(QCoreApplication::translate("MainWindow", "ExportGeometry", nullptr)); - actionCreaterCone->setText(QCoreApplication::translate("MainWindow", "CreaterCone", nullptr)); - actionMirrorFeature->setText(QCoreApplication::translate("MainWindow", "MirrorFeature", nullptr)); - actionVariable_Fillet->setText(QCoreApplication::translate("MainWindow", "Variable Fillet", nullptr)); + actionExportGeometry->setText( + QCoreApplication::translate("MainWindow", "ExportGeometry", nullptr)); + actionCreaterCone->setText( + QCoreApplication::translate("MainWindow", "CreaterCone", nullptr)); + actionMirrorFeature->setText( + QCoreApplication::translate("MainWindow", "MirrorFeature", nullptr)); + actionVariable_Fillet->setText( + QCoreApplication::translate("MainWindow", "Variable Fillet", nullptr)); actionExtrude->setText(QCoreApplication::translate("MainWindow", "Extrude", nullptr)); - actionCreate_Point->setText(QCoreApplication::translate("MainWindow", "Create Point", nullptr)); - actionCreate_Line->setText(QCoreApplication::translate("MainWindow", "Create Line", nullptr)); - actionCreate_Face->setText(QCoreApplication::translate("MainWindow", "Create_Surface", nullptr)); + actionCreate_Point->setText( + QCoreApplication::translate("MainWindow", "Create Point", nullptr)); + actionCreate_Line->setText( + QCoreApplication::translate("MainWindow", "Create Line", nullptr)); + actionCreate_Face->setText( + QCoreApplication::translate("MainWindow", "Create_Surface", nullptr)); actionMoveFeature->setText(QCoreApplication::translate("MainWindow", "Move", nullptr)); - actionRotateFeature->setText(QCoreApplication::translate("MainWindow", "Rotate", nullptr)); + actionRotateFeature->setText( + QCoreApplication::translate("MainWindow", "Rotate", nullptr)); actionRevol->setText(QCoreApplication::translate("MainWindow", "Revol", nullptr)); actionLoft->setText(QCoreApplication::translate("MainWindow", "loft", nullptr)); - actionCreateDatumPlane->setText(QCoreApplication::translate("MainWindow", "Create Datum Plane", nullptr)); + actionCreateDatumPlane->setText( + QCoreApplication::translate("MainWindow", "Create Datum Plane", nullptr)); actionDrawLine->setText(QCoreApplication::translate("MainWindow", "DrawLine", nullptr)); - actionDrawRectangle->setText(QCoreApplication::translate("MainWindow", "DrawRectangle", nullptr)); - actionDrawCircle->setText(QCoreApplication::translate("MainWindow", "DrawCircle", nullptr)); - actionCreate_Sketch->setText(QCoreApplication::translate("MainWindow", "Create Sketch", nullptr)); + actionDrawRectangle->setText( + QCoreApplication::translate("MainWindow", "DrawRectangle", nullptr)); + actionDrawCircle->setText( + QCoreApplication::translate("MainWindow", "DrawCircle", nullptr)); + actionCreate_Sketch->setText( + QCoreApplication::translate("MainWindow", "Create Sketch", nullptr)); actionDrawArc->setText(QCoreApplication::translate("MainWindow", "DrawArc", nullptr)); - actionDrawPolyline->setText(QCoreApplication::translate("MainWindow", "DrawPolyline", nullptr)); - actionMakeMatrix->setText(QCoreApplication::translate("MainWindow", "MakeMatrix", nullptr)); + actionDrawPolyline->setText( + QCoreApplication::translate("MainWindow", "DrawPolyline", nullptr)); + actionMakeMatrix->setText( + QCoreApplication::translate("MainWindow", "MakeMatrix", nullptr)); #if QT_CONFIG(tooltip) - actionMakeMatrix->setToolTip(QCoreApplication::translate("MainWindow", "MakeMatrix", nullptr)); + actionMakeMatrix->setToolTip( + QCoreApplication::translate("MainWindow", "MakeMatrix", nullptr)); #endif // QT_CONFIG(tooltip) actionSweep->setText(QCoreApplication::translate("MainWindow", "Sweep", nullptr)); - actionDrawSpline->setText(QCoreApplication::translate("MainWindow", "DrawSpline", nullptr)); - actionDisplayPoint->setText(QCoreApplication::translate("MainWindow", "DisplayPoint", nullptr)); - actionDisplayCurve->setText(QCoreApplication::translate("MainWindow", "DisplayCurve", nullptr)); - actionDisplayFace->setText(QCoreApplication::translate("MainWindow", "DisplayFace", nullptr)); - actionSelectPoint->setText(QCoreApplication::translate("MainWindow", "SelectPoint", nullptr)); - actionSelectCurve->setText(QCoreApplication::translate("MainWindow", "SelectCurve", nullptr)); - actionSelectFace->setText(QCoreApplication::translate("MainWindow", "SelectFace", nullptr)); - actionSelectGeometryBody->setText(QCoreApplication::translate("MainWindow", "SelectGeometryBody", nullptr)); - actionPluginManager->setText(QCoreApplication::translate("MainWindow", "Plugin Manager", nullptr)); + actionDrawSpline->setText( + QCoreApplication::translate("MainWindow", "DrawSpline", nullptr)); + actionDisplayPoint->setText( + QCoreApplication::translate("MainWindow", "DisplayPoint", nullptr)); + actionDisplayCurve->setText( + QCoreApplication::translate("MainWindow", "DisplayCurve", nullptr)); + actionDisplayFace->setText( + QCoreApplication::translate("MainWindow", "DisplayFace", nullptr)); + actionSelectPoint->setText( + QCoreApplication::translate("MainWindow", "SelectPoint", nullptr)); + actionSelectCurve->setText( + QCoreApplication::translate("MainWindow", "SelectCurve", nullptr)); + actionSelectFace->setText( + QCoreApplication::translate("MainWindow", "SelectFace", nullptr)); + actionSelectGeometryBody->setText( + QCoreApplication::translate("MainWindow", "SelectGeometryBody", nullptr)); + actionPluginManager->setText( + QCoreApplication::translate("MainWindow", "Plugin Manager", nullptr)); #if QT_CONFIG(tooltip) - actionPluginManager->setToolTip(QCoreApplication::translate("MainWindow", "Plugin Manager", nullptr)); + actionPluginManager->setToolTip( + QCoreApplication::translate("MainWindow", "Plugin Manager", nullptr)); #endif // QT_CONFIG(tooltip) - actionUser_Guidance->setText(QCoreApplication::translate("MainWindow", "User Guidance", nullptr)); - actionMeasure_Distance->setText(QCoreApplication::translate("MainWindow", "Measure Distance", nullptr)); + actionUser_Guidance->setText( + QCoreApplication::translate("MainWindow", "User Guidance", nullptr)); + actionMeasure_Distance->setText( + QCoreApplication::translate("MainWindow", "Measure Distance", nullptr)); actionMeasure->setText(QCoreApplication::translate("MainWindow", "Measure", nullptr)); actionGeoSplitter->setText(QCoreApplication::translate("MainWindow", "Split", nullptr)); - actionCreateGeoComponent->setText(QCoreApplication::translate("MainWindow", "CreateGeoComponent", nullptr)); - actionFluidMesh->setText(QCoreApplication::translate("MainWindow", "FluidMesh", nullptr)); - actionFilterMesh->setText(QCoreApplication::translate("MainWindow", "FilterMesh", nullptr)); + actionCreateGeoComponent->setText( + QCoreApplication::translate("MainWindow", "CreateGeoComponent", nullptr)); + actionFluidMesh->setText( + QCoreApplication::translate("MainWindow", "FluidMesh", nullptr)); + actionFilterMesh->setText( + QCoreApplication::translate("MainWindow", "FilterMesh", nullptr)); actionFillHole->setText(QCoreApplication::translate("MainWindow", "FillHole", nullptr)); - actionRemoveSurface->setText(QCoreApplication::translate("MainWindow", "RemoveSurface", nullptr)); + actionRemoveSurface->setText( + QCoreApplication::translate("MainWindow", "RemoveSurface", nullptr)); actionFillGap->setText(QCoreApplication::translate("MainWindow", "FillGap", nullptr)); - actionVTKTranslation->setText(QCoreApplication::translate("MainWindow", "Mesh Modeling", nullptr)); - actionGeoMeshRotate->setText(QCoreApplication::translate("MainWindow", "GeoMeshRotate", nullptr)); + actionVTKTranslation->setText( + QCoreApplication::translate("MainWindow", "Mesh Modeling", nullptr)); + actionGeoMeshRotate->setText( + QCoreApplication::translate("MainWindow", "GeoMeshRotate", nullptr)); actionNormal->setText(QCoreApplication::translate("MainWindow", "Normal", nullptr)); actionRibbon->setText(QCoreApplication::translate("MainWindow", "Ribbon", nullptr)); - actionOpenPostFile->setText(QCoreApplication::translate("MainWindow", "OpenPostFile", nullptr)); - actionDisplayPoints->setText(QCoreApplication::translate("MainWindow", "DisplayPoints", nullptr)); - actionDisplayWireframe->setText(QCoreApplication::translate("MainWindow", "DisplayWireframe", nullptr)); - actionDisplaySurfaceWithoutEdge->setText(QCoreApplication::translate("MainWindow", "DisplaySurfaceWithoutEdge", nullptr)); - actionDisplaySurfaceWithEdge->setText(QCoreApplication::translate("MainWindow", "DisplaySurfaceWithEdge", nullptr)); - actionCreateVector->setText(QCoreApplication::translate("MainWindow", "CreateVector", nullptr)); - actionCreateClip->setText(QCoreApplication::translate("MainWindow", "CreateClip", nullptr)); - actionCreateSlice->setText(QCoreApplication::translate("MainWindow", "CreateSlice", nullptr)); - actionCreateStreamLine->setText(QCoreApplication::translate("MainWindow", "CreateStreamLine", nullptr)); - actionCreateISOCurve->setText(QCoreApplication::translate("MainWindow", "CreateISOCurve", nullptr)); - actionCreateISOSurface->setText(QCoreApplication::translate("MainWindow", "CreateISOSurface", nullptr)); - actionCreateCalculator->setText(QCoreApplication::translate("MainWindow", "CreateCalculator", nullptr)); - actionCreateReflection->setText(QCoreApplication::translate("MainWindow", "CreateReflection", nullptr)); - actionSaveImage->setText(QCoreApplication::translate("MainWindow", "SaveImage", nullptr)); - actionSaveVideo->setText(QCoreApplication::translate("MainWindow", "SaveVideo", nullptr)); + actionOpenPostFile->setText( + QCoreApplication::translate("MainWindow", "OpenPostFile", nullptr)); + actionDisplayPoints->setText( + QCoreApplication::translate("MainWindow", "DisplayPoints", nullptr)); + actionPostDisplayWireframe->setText( + QCoreApplication::translate("MainWindow", "DisplayWireframe", nullptr)); + actionDisplaySurfaceWithoutEdge->setText( + QCoreApplication::translate("MainWindow", "DisplaySurfaceWithoutEdge", nullptr)); + actionDisplaySurfaceWithEdge->setText( + QCoreApplication::translate("MainWindow", "DisplaySurfaceWithEdge", nullptr)); + actionCreateVector->setText( + QCoreApplication::translate("MainWindow", "CreateVector", nullptr)); + actionCreateClip->setText( + QCoreApplication::translate("MainWindow", "CreateClip", nullptr)); + actionCreateSlice->setText( + QCoreApplication::translate("MainWindow", "CreateSlice", nullptr)); + actionCreateStreamLine->setText( + QCoreApplication::translate("MainWindow", "CreateStreamLine", nullptr)); + actionCreateISOCurve->setText( + QCoreApplication::translate("MainWindow", "CreateISOCurve", nullptr)); + actionCreateISOSurface->setText( + QCoreApplication::translate("MainWindow", "CreateISOSurface", nullptr)); + actionCreateCalculator->setText( + QCoreApplication::translate("MainWindow", "CreateCalculator", nullptr)); + actionCreateReflection->setText( + QCoreApplication::translate("MainWindow", "CreateReflection", nullptr)); + actionSaveImage->setText( + QCoreApplication::translate("MainWindow", "SaveImage", nullptr)); + actionSaveVideo->setText( + QCoreApplication::translate("MainWindow", "SaveVideo", nullptr)); #if QT_CONFIG(tooltip) - actionSaveVideo->setToolTip(QCoreApplication::translate("MainWindow", "SaveVideo", nullptr)); + actionSaveVideo->setToolTip( + QCoreApplication::translate("MainWindow", "SaveVideo", nullptr)); #endif // QT_CONFIG(tooltip) } @@ -1105,4 +1313,4 @@ namespace Ui actions.at(1)->setText(QObject::tr("Language")); actions.at(2)->setText(QObject::tr("Style")); } // retranslateUi -} +} // namespace Ui diff --git a/src/MainWindow/SignalHandler.cpp b/src/MainWindow/SignalHandler.cpp index de76191..e9ac631 100644 --- a/src/MainWindow/SignalHandler.cpp +++ b/src/MainWindow/SignalHandler.cpp @@ -218,7 +218,7 @@ namespace GUI { SLOT(openPostFile())); connect(mainwindow->getUi()->actionDisplayPoints, &QAction::triggered, [=] { this->setPostDisplayMode(0); }); - connect(mainwindow->getUi()->actionDisplayWireframe, &QAction::triggered, + connect(mainwindow->getUi()->actionPostDisplayWireframe, &QAction::triggered, [=] { this->setPostDisplayMode(1); }); connect(mainwindow->getUi()->actionDisplaySurfaceWithoutEdge, &QAction::triggered, [=] { this->setPostDisplayMode(2); }); @@ -568,7 +568,7 @@ namespace GUI { ui->actionDisplayNode->setEnabled(false); ui->actionDisplaySurface->setEnabled(false); // ui->actionDisplaySurfaceEdge->setEnabled(false); - ui->actionDisplayWireFrame->setEnabled(false); + ui->actionPreDisplayWireFrame->setEnabled(false); ui->actionCreate_Set->setEnabled(false); ui->actionChecking->setEnabled(false); ui->actionFilterMesh->setEnabled(false); @@ -586,7 +586,7 @@ namespace GUI { ui->actionSaveImage->setEnabled(false); ui->actionSaveVideo->setEnabled(false); ui->actionDisplayPoints->setEnabled(false); - ui->actionDisplayWireframe->setEnabled(false); + ui->actionPostDisplayWireframe->setEnabled(false); ui->actionDisplaySurfaceWithEdge->setEnabled(false); ui->actionDisplaySurfaceWithoutEdge->setEnabled(false); ui->actionCreateClip->setEnabled(false); @@ -649,13 +649,13 @@ namespace GUI { ui->actionDisplayNode->setEnabled(true); ui->actionDisplaySurface->setEnabled(true); // ui->actionDisplaySurfaceEdge->setEnabled(true); - ui->actionDisplayWireFrame->setEnabled(true); + ui->actionPreDisplayWireFrame->setEnabled(true); ui->actionVTKTranslation->setEnabled(true); auto gp = Setting::BusAPI::instance()->getGraphOption(); ui->actionDisplayNode->setChecked(gp->isShowMeshNode()); ui->actionDisplaySurface->setChecked(gp->isShowMeshFace()); - ui->actionDisplayWireFrame->setChecked(gp->isShowMeshEdge()); + ui->actionPreDisplayWireFrame->setChecked(gp->isShowMeshEdge()); } if(subwins->isPostWindowOpened()) { ui->actionViewXPlus->setEnabled(true); @@ -671,7 +671,7 @@ namespace GUI { ui->actionSaveImage->setEnabled(true); ui->actionSaveVideo->setEnabled(true); ui->actionDisplayPoints->setEnabled(true); - ui->actionDisplayWireframe->setEnabled(true); + ui->actionPostDisplayWireframe->setEnabled(true); ui->actionDisplaySurfaceWithEdge->setEnabled(true); ui->actionDisplaySurfaceWithoutEdge->setEnabled(true); ui->actionCreateClip->setEnabled(true); @@ -1247,8 +1247,8 @@ namespace GUI { return; FileDirectoryDialog dlg; - QStringList filterTypes = { "VTK(*.vtk)", "CGNS(*.cgns)", "Plot3D(*.x)", - "Tecplot(*.szplt)","VTU(*.vtu)","PVTU(*.pvtu)" }; + QStringList filterTypes = { "VTK(*.vtk)", "CGNS(*.cgns)", "Plot3D(*.x)", + "Tecplot(*.szplt)", "VTU(*.vtu)", "PVTU(*.pvtu)" }; dlg.iniFileFilterType(filterTypes); if(dlg.exec() != QDialog::Accepted) return; diff --git a/src/MeshData/meshSet.cpp b/src/MeshData/meshSet.cpp index 3fc0236..ecc0fe6 100644 --- a/src/MeshData/meshSet.cpp +++ b/src/MeshData/meshSet.cpp @@ -360,4 +360,20 @@ QString MeshSet::setTypeToString(SetType type) } return qtype; } + +BoundMeshSet::BoundMeshSet(): MeshSet() +{ + +} + +void BoundMeshSet::setCellFaces(const QMap> cellFaces) +{ + m_CellFaces = cellFaces; +} + +QMap> BoundMeshSet::getCellFaces() +{ + return m_CellFaces; +} + } diff --git a/src/MeshData/meshSet.h b/src/MeshData/meshSet.h index d8c986c..33052b7 100644 --- a/src/MeshData/meshSet.h +++ b/src/MeshData/meshSet.h @@ -6,6 +6,7 @@ #include #include #include +#include class vtkDataSet; class vtkUnstructuredGrid; @@ -102,7 +103,19 @@ namespace MeshData // static int maxID; }; + //用于流体网格边界信息存储。边界由多个单元的一个或多个面组成。 + class MESHDATAAPI BoundMeshSet : public MeshSet + { + public: + BoundMeshSet(); + ~BoundMeshSet() = default; + void setCellFaces(const QMap> cellFaces); + QMap> getCellFaces(); + protected: + //key为单元索引,value为该单元的面索引 + QMap> m_CellFaces{}; + }; } diff --git a/src/PluginCustomizer/ParaImportMeshSetup.cpp b/src/PluginCustomizer/ParaImportMeshSetup.cpp index 63e3573..13ec972 100644 --- a/src/PluginCustomizer/ParaImportMeshSetup.cpp +++ b/src/PluginCustomizer/ParaImportMeshSetup.cpp @@ -40,6 +40,7 @@ namespace FastCAEDesigner{ { ui->chk_cgns->setChecked(true); ui->chk_flunet->setChecked(true); + ui->chk_openfoam->setChecked(true); ui->chk_gambit->setChecked(true); ui->chk_stl->setChecked(true); ui->chk_tecplot->setChecked(true); @@ -55,6 +56,7 @@ namespace FastCAEDesigner{ { ui->chk_cgns->setChecked(false); ui->chk_flunet->setChecked(false); + ui->chk_openfoam->setChecked(false); ui->chk_gambit->setChecked(false); ui->chk_stl->setChecked(false); ui->chk_tecplot->setChecked(false); @@ -79,6 +81,10 @@ namespace FastCAEDesigner{ { sl.append("msh"); } + if (ui->chk_openfoam->isChecked()) + { + sl.append("foam"); + } if (ui->chk_gambit->isChecked()) { sl.append("neu"); @@ -147,6 +153,11 @@ namespace FastCAEDesigner{ ui->chk_flunet->setChecked(true); a = a + 1; } + if (sl.at(i) == "foam") + { + ui->chk_openfoam->setChecked(true); + a = a + 1; + } if (sl.at(i) == "neu") { ui->chk_gambit->setChecked(true); @@ -208,6 +219,7 @@ namespace FastCAEDesigner{ void ParaImportMeshSetup::CancelCheckAll() { if ((ui->chk_cgns->isChecked()) && (ui->chk_flunet->isChecked()) && (ui->chk_gambit->isChecked()) && + (ui->chk_openfoam->isChecked()) && (ui->chk_stl->isChecked()) && (ui->chk_tecplot->isChecked()) && (ui->chk_vtk->isChecked()) && (ui->chk_inp->isChecked()) && (ui->chk_cntm->isChecked()) && (ui->chk_su2->isChecked()) && (ui->chk_key->isChecked()) && (ui->chk_pdb->isChecked()) && (ui->chk_bdf->isChecked())) @@ -224,4 +236,4 @@ namespace FastCAEDesigner{ { return _sffix; } -} \ No newline at end of file +} diff --git a/src/PluginCustomizer/ParaImportMeshSetup.ui b/src/PluginCustomizer/ParaImportMeshSetup.ui index 25534dc..0bc921c 100644 --- a/src/PluginCustomizer/ParaImportMeshSetup.ui +++ b/src/PluginCustomizer/ParaImportMeshSetup.ui @@ -13,8 +13,8 @@ Import mesh setup - - + + @@ -45,7 +45,7 @@ - + @@ -64,7 +64,7 @@ - 110 + 120 0 @@ -88,7 +88,7 @@ - + @@ -107,7 +107,7 @@ - 110 + 120 0 @@ -131,7 +131,50 @@ - + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 120 + 0 + + + + OpenFOAM(*.foam) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + @@ -150,7 +193,7 @@ - 110 + 120 0 @@ -174,7 +217,7 @@ - + @@ -193,7 +236,7 @@ - 110 + 120 0 @@ -217,7 +260,7 @@ - + @@ -236,7 +279,7 @@ - 110 + 120 0 @@ -260,7 +303,7 @@ - + @@ -279,7 +322,7 @@ - 110 + 120 0 @@ -303,7 +346,7 @@ - + @@ -322,7 +365,7 @@ - 110 + 120 0 @@ -346,7 +389,7 @@ - + @@ -365,7 +408,7 @@ - 110 + 120 0 @@ -389,13 +432,13 @@ - + - 110 + 120 0 @@ -432,13 +475,13 @@ - + - 110 + 120 0 @@ -475,7 +518,7 @@ - + @@ -494,7 +537,7 @@ - 110 + 120 0 @@ -518,7 +561,7 @@ - + @@ -537,7 +580,7 @@ - 110 + 120 0 @@ -561,7 +604,7 @@ - + diff --git a/src/PluginMeshDataExchange/FoamDataExchange.cpp b/src/PluginMeshDataExchange/FoamDataExchange.cpp new file mode 100644 index 0000000..b98359c --- /dev/null +++ b/src/PluginMeshDataExchange/FoamDataExchange.cpp @@ -0,0 +1,528 @@ +#include "FoamDataExchange.h" +#include "MeshData/meshSingleton.h" +#include "MeshData/meshKernal.h" +#include "MeshData/meshSet.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace MeshData { + FoamDataExchange::FoamDataExchange(const QString& fileName, MeshOperation operation, + GUI::MainWindow* mw, int modelId) + : // _fileName(fileName), + _operation(operation) + , _meshData(MeshData::getInstance()) + , MeshThreadBase(fileName, operation, mw) + , _modelId(modelId) + { + _fileName = fileName; + _file = new QFile(_fileName); + } + + FoamDataExchange::~FoamDataExchange() + { + if(_stream != nullptr) + delete _stream; + if(_file != nullptr) + delete _file; + _file = nullptr; + _stream = nullptr; + } + + bool FoamDataExchange::readHeader() + { + QFileInfo tempinfo(_fileName); + if(!tempinfo.exists()) + return false; + QString name = tempinfo.fileName(); + QString path = tempinfo.filePath(); + QFile tempfile(_fileName); + if(!tempfile.open(QIODevice::ReadOnly)) + return false; + // QTextStream* tempStream=new QTextStream(&tempfile); + QTextStream tempStream(&tempfile); + while(!tempStream.atEnd()) { + if(!_threadRuning) + return false; + QString line = tempStream.readLine().simplified(); + } + // delete tempStream; + return false; + } + + bool FoamDataExchange::write() + { + return _modelId >= 1; + } + + void FoamDataExchange::run() + { + ModuleBase::ThreadTask::run(); + bool result = false; + switch(_operation) { + case MESH_READ: + emit showInformation(tr("Import MSH Mesh File From \"%1\"").arg(_fileName)); + result = read(); + setReadResult(result); + break; + case MESH_WRITE: + emit showInformation(tr("Export MSH Mesh File From \"%1\"").arg(_fileName)); + // result = write(); + // setWriteResult(result); + break; + } + defaultMeshFinished(); + } + + bool FoamDataExchange::read() + { + _file = new QFile(); + QFileInfo info(_fileName); + if(!info.exists()) + return false; + _baseFileName = info.fileName(); + _filePath = info.filePath(); + _file->setFileName(_fileName); + if(!_file->open(QIODevice::ReadOnly)) + return false; + _stream = new QTextStream(_file); + OpenFoamMeshReader* reader = new OpenFoamMeshReader; + CFDOpenfoamMeshParser* parser = new CFDOpenfoamMeshParser; + reader->setMeshFileParser(parser); + bool ok = reader->readFile(_fileName.toStdString()); + if(!ok) + return ok; + vtkSmartPointer dataset = reader->getGrid(); + MeshKernal* k = new MeshKernal; + k->setName(_baseFileName); + k->setPath(_filePath); + k->setMeshData((vtkDataSet*)dataset); + _meshData->appendMeshKernal(k); + int kid = k->getID(); + std::unordered_map zones = parser->getZones(); + QMap zoneNames{}; + for(auto zone : zones) { + zoneNames.insert(zone.first, zone.second); + } + std::unordered_map> zoneIndexes = parser->getCellZones(); + for(auto it : zoneIndexes) { + int setid = it.first; + MeshSet* set = new MeshSet; + set->setType(SetType::Element); + if(zoneNames.contains(setid)) + set->setName(QString::fromStdString(zoneNames[setid])); + else + set->setName("ElementSet" + QString::number(it.first)); + MeshSet* s = _idsetList.value(setid); + if(s != nullptr) { + delete s; + _idsetList.remove(setid); + } + _idsetList[setid] = set; + int firstIndex = it.second.first; + int lastIndex = it.second.second; + for(int i = firstIndex; i <= lastIndex; ++i) + set->appendTempMem(i - 1); + } + std::unordered_map> faceZones = parser->getPointZones(); + for(auto it : faceZones) { + int setid = it.first; + MeshSet* set = new MeshSet; + set->setType(SetType::Node); + if(zoneNames.contains(setid)) + set->setName(QString::fromStdString(zoneNames[setid])); + else + set->setName("PointSet" + QString::number(it.first)); + MeshSet* s = _idsetList.value(setid); + if(s != nullptr) { + delete s; + _idsetList.remove(setid); + } + _idsetList[setid] = set; + int firstIndex = it.second.first; + int lastIndex = it.second.second; + for(int i = firstIndex; i <= lastIndex; ++i) + set->appendTempMem(i - 1); + } + std::unordered_map> face2CellIndex = + parser->getFaceIDtoCellIndex(); + for(auto faceZone : parser->getFaceZones()) { + int zoneId = faceZone.first; + if(zoneNames.contains(zoneId)) { + BoundMeshSet* set = new BoundMeshSet; + set->setName(QString::fromStdString(zoneNames[zoneId])); + QMap> cellFaces{}; + int firstIndex = faceZone.second.first; + int lastIndex = faceZone.second.second; + for(int i = firstIndex; i <= lastIndex; ++i) { + int cellIndex = face2CellIndex[i].first; + int index = face2CellIndex[i].second; + cellFaces[cellIndex - 1].push_back(index - 1); + } + MeshSet* s = _idsetList.value(zoneId); + if(s != nullptr) { + delete s; + _idsetList.remove(zoneId); + } + _idsetList[zoneId] = set; + } + } + QList setList = _idsetList.values(); + for(int i = 0; i < _idsetList.size(); ++i) { + MeshSet* set = setList.at(i); + set->setKeneralID(kid); + _meshData->appendMeshSet(set); + } + delete parser; + delete reader; + return ok; + } + + void CFDOpenfoamMeshParser::stringSplit(const std::string str, const const char split, + std::vector& vec) + { + std::istringstream iss(str); + std::string token; + while(getline(iss, token, split)) { + if(token.size() != 0) + vec.push_back(token); + } + } + + void CFDOpenfoamMeshParser::stringTrimmed(std::string& str) + { + int first = str.find_first_not_of(" "); + str.erase(0, first); + int last = str.find_last_not_of(" "); + if(last + 1 < str.size()) + str.erase(last + 1); + } + + bool CFDOpenfoamMeshParser::setFile(const std::string& file) + { + m_File = file; + return this->read(); + } + + std::vector CFDOpenfoamMeshParser::getPoints() + { + return m_Points; + } + + std::unordered_map> CFDOpenfoamMeshParser::getFaces() + { + return m_Faces; + } + + std::unordered_map> CFDOpenfoamMeshParser::getCells() + { + return m_Cells; + } + + std::unordered_map CFDOpenfoamMeshParser::getCellsType() + { + return m_CellsType; + } + + std::unordered_map> CFDOpenfoamMeshParser::getPointZones() + { + return m_PointZones; + } + + std::unordered_map> CFDOpenfoamMeshParser::getFaceZones() + { + return m_FaceZones; + } + + std::unordered_map> CFDOpenfoamMeshParser::getCellZones() + { + return m_CellZones; + } + + std::unordered_map> CFDOpenfoamMeshParser::getFaceIDtoCellIndex() + { + return m_FaceIdToCellFaceIndex; + } + + std::unordered_map CFDOpenfoamMeshParser::getZones() + { + return m_Zones; + } + + bool CFDOpenfoamMeshParser::read() + { + QFileInfo f{ QString::fromStdString(m_File) }; + QString path = f.absoluteDir().absolutePath() + "/constant/polyMesh/"; + std::string pointsFile = path.toStdString() + "/points"; + std::string facesFile = path.toStdString() + "/faces"; + std::string ownerFile = path.toStdString() + "/owner"; + std::string neighbourFile = path.toStdString() + "/neighbour"; + std::string boundaryFile = path.toStdString() + "/boundary"; + + std::ifstream inPoints{}; + inPoints.open(pointsFile, std::ios_base::in); + if(!inPoints.is_open()) + return false; + std::stringstream buffer; + buffer << inPoints.rdbuf(); + m_PointsString = std::string(buffer.str()); + inPoints.close(); + bool p = this->readPoints(); + if(!p) + return p; + + std::ifstream inFaces{}; + inFaces.open(facesFile, std::ios_base::in); + if(!inFaces.is_open()) + return false; + std::stringstream buffer1; + buffer1 << inFaces.rdbuf(); + m_FacesString = std::string(buffer1.str()); + inFaces.close(); + bool fa = this->readFaces(); + if(!fa) + return fa; + + std::ifstream inOwner{}; + inOwner.open(ownerFile, std::ios_base::in); + if(!inOwner.is_open()) + return false; + std::stringstream buffer2; + buffer2 << inOwner.rdbuf(); + m_OwnerString = std::string(buffer2.str()); + inOwner.close(); + bool c = this->readOwner(); + if(!c) + return c; + + std::ifstream inNeigh{}; + inNeigh.open(neighbourFile, std::ios_base::in); + if(!inNeigh.is_open()) + return false; + std::stringstream buffer3; + buffer3 << inNeigh.rdbuf(); + m_NeighbourString = std::string(buffer3.str()); + inNeigh.close(); + bool n = this->readNeighbour(); + if(!n) + return n; + + std::ifstream inBoundary{}; + inBoundary.open(boundaryFile, std::ios_base::in); + if(!inBoundary.is_open()) + return false; + std::stringstream buffer4; + buffer4 << inBoundary.rdbuf(); + m_NeighbourString = std::string(buffer4.str()); + inBoundary.close(); + bool b = this->readBoundary(); + if(!b) + return b; + return true; + } + + bool CFDOpenfoamMeshParser::readPoints() + { + int index = m_PointsString.find(m_FoamLabel); + if(index == -1) + return false; + int end = m_PointsString.find("}", index); + if(end == -1) + return false; + int start = m_PointsString.find("(", end); + int finish = m_PointsString.find_last_of(")", start); + std::string ps = m_PointsString.substr(start + 1, end - start - 1); + // std::vector strList{}; + // CFDMeshFileParserBase::stringSplit(m_PointsString.substr(end + 1), '\n', strList); + QStringList strList = + QString::fromStdString(ps).split(QRegExp("[()]+"), QString::SkipEmptyParts); + for(auto str : strList) { + str = str.trimmed(); + if(str.size() == 0) + continue; + QStringList coords = str.split(" ", Qt::SkipEmptyParts); + if(coords.size() == 3) { + for(auto& coord : coords) { + double x = coord.toDouble(); + m_Points.push_back(x); + } + } + } + return true; + } + + bool CFDOpenfoamMeshParser::readFaces() + { + int index = m_FacesString.find(m_FoamLabel); + if(index == -1) + return false; + int end = m_FacesString.find("}", index); + if(end == -1) + return false; + std::vector strList{}; + this->stringSplit(m_FacesString.substr(end + 1), '\n', strList); + int faceID{ 1 }; + for(auto& str : strList) { + this->stringTrimmed(str); + if(str.size() == 0) + continue; + if(isdigit(str[0])) { + int start = str.find_first_of('('); + if(start == -1) + continue; + int end = str.find_last_of(')'); + if(end == -1) + continue; + std::string numStr = str.substr(0, start); + int num{}; + sscanf(numStr.c_str(), "%d", &num); + std::string coordsStr = str.substr(start + 1, end - start - 1); + std::vector coords{}; + this->stringSplit(coordsStr, ' ', coords); + std::vector pointIdS{}; + if(coords.size() >= 3) { + for(auto& coord : coords) { + int id{ 0 }; + sscanf(coord.c_str(), "%d", &id); + pointIdS.push_back(id + 1); + } + m_Faces[faceID++] = pointIdS; + } + } + } + return true; + } + + bool CFDOpenfoamMeshParser::readOwner() + { + int index = m_OwnerString.find(m_FoamLabel); + if(index == -1) + return false; + int end = m_OwnerString.find("}", index); + if(end == -1) + return false; + int start = m_OwnerString.find("(", end); + if(start == -1) + return false; + end = m_OwnerString.find(")", start); + if(end == -1) + return false; + QString owners = QString::fromStdString(m_OwnerString.substr(start + 1, end - start - 1)); + QStringList strList = owners.split(QRegExp("\\s+"), Qt::SkipEmptyParts); + int faceID{ 1 }; + for(auto& str : strList) { + int cellID = str.toInt(); + m_Cells[cellID].push_back(faceID); + m_FaceIdToCellFaceIndex[faceID] = std::make_pair(cellID, m_Cells[cellID].size()); + ++faceID; + } + return true; + } + + bool CFDOpenfoamMeshParser::readNeighbour() + { + int index = m_NeighbourString.find(m_FoamLabel); + if(index == -1) + return false; + int end = m_NeighbourString.find("}", index); + if(end == -1) + return false; + int start = m_NeighbourString.find("(", end); + if(start == -1) + return false; + end = m_NeighbourString.find(")", start); + if(end == -1) + return false; + QString neighbours = + QString::fromStdString(m_NeighbourString.substr(start + 1, end - start - 1)); + QStringList strList = neighbours.split(QRegExp("\\s+"), Qt::SkipEmptyParts); + int faceID{ 1 }; + for(auto& str : strList) { + int cellID = str.toInt(); + if(cellID == -1) + continue; + m_Cells[cellID].push_back(faceID); + m_FaceIdToCellFaceIndex[faceID] = std::make_pair(cellID, m_Cells[cellID].size()); + ++faceID; + } + return true; + } + + bool CFDOpenfoamMeshParser::readBoundary() + { + return true; + } + + void OpenFoamMeshReader::setMeshFileParser(CFDOpenfoamMeshParser* parser) + { + m_Parser = parser; + } + + bool OpenFoamMeshReader::readFile(const std::string& file) + { + if(m_Parser == nullptr) + return false; + bool ok = m_Parser->setFile(file); + if(!ok) + return ok; + m_ugrid = vtkSmartPointer::New(); + vtkSmartPointer points = vtkSmartPointer::New(); + const std::vector ps = m_Parser->getPoints(); + const std::unordered_map> cells = m_Parser->getCells(); + const std::unordered_map> faces = m_Parser->getFaces(); + const std::unordered_map cellTyps = m_Parser->getCellsType(); + std::set usedFaces{}; + int num = ps.size() / 3; + for(int i = 0; i < num; ++i) { + double coord[3]{ ps[i * 3], ps[i * 3 + 1], ps[i * 3 + 2] }; + points->InsertNextPoint(coord); + } + m_ugrid->SetPoints(points); + std::unordered_map>::const_iterator it = cells.cbegin(); + while(it != cells.cend()) { + std::vector pointIds{}; + vtkSmartPointer facesIDS = vtkSmartPointer::New(); + std::vector faceids = it->second; + int index = it->first; + for(int id : faceids) { + auto it = faces.find(id); + if(it == faces.cend()) + continue; + const std::vector pids = it->second; + usedFaces.insert(it->first); + facesIDS->InsertNextId(pids.size()); + for(int pid : pids) { + pointIds.push_back(pid - 1); + facesIDS->InsertNextId(pid - 1); + } + } + + std::sort(pointIds.begin(), pointIds.end()); + auto ii = std::unique(pointIds.begin(), pointIds.end()); + pointIds.erase(ii, pointIds.end()); + m_ugrid->InsertNextCell(VTK_POLYHEDRON, pointIds.size(), pointIds.data(), + faceids.size(), facesIDS->GetPointer(0)); + ++it; + } + return true; + } + + vtkSmartPointer OpenFoamMeshReader::getGrid() + { + return m_ugrid; + } + +} // namespace MeshData diff --git a/src/PluginMeshDataExchange/FoamDataExchange.h b/src/PluginMeshDataExchange/FoamDataExchange.h new file mode 100644 index 0000000..036d23f --- /dev/null +++ b/src/PluginMeshDataExchange/FoamDataExchange.h @@ -0,0 +1,106 @@ +#pragma once +#include "MeshThreadBase.h" +#include "meshDataExchangePlugin.h" +#include +#include +#include + +class QTextStream; +class vtkUnstructuredGrid; +class QFile; + +namespace MeshData +{ + class MeshData; + class MeshSet; + + class MESHDATAEXCHANGEPLUGINAPI FoamDataExchange : public MeshThreadBase + { + public: + FoamDataExchange(const QString& fileName, MeshOperation operation, GUI::MainWindow *mw, int modelId = -1); + ~FoamDataExchange(); + + bool read(); + bool readHeader(); + bool write(); + void run(); + + private: + QFile *_file; + QString _baseFileName{}; + QString _filePath{}; + QString _fileName{}; + MeshData* _meshData{}; + QTextStream* _stream{}; + QHash _idsetList{}; + + QString _describe{}; + int _ND{ 3 }; + int _staticid{ 0 }; + int _modelId; + MeshOperation _operation; + }; + /** + * @brief OpenFOAM Mesh文件解析类。解析后所得信息中索引均以1开始,使用vtk渲染时注意索引的转换。 + */ + class CFDOpenfoamMeshParser + { + public: + static void stringSplit(const std::string str, const char split, std::vector &vec); + static void stringTrimmed(std::string& str); + public: + CFDOpenfoamMeshParser() = default; + ~CFDOpenfoamMeshParser() = default; + bool setFile(const std::string& file); + std::vector getPoints(); + std::unordered_map> getFaces(); + std::unordered_map> getCells(); + std::unordered_map getCellsType(); + std::unordered_map> getPointZones(); + std::unordered_map> getFaceZones(); + std::unordered_map> getCellZones(); + std::unordered_map> getFaceIDtoCellIndex(); + std::unordered_map getZones(); + protected: + bool read(); + private: + bool readPoints(); + bool readFaces(); + bool readOwner(); + bool readNeighbour(); + bool readBoundary(); + private: + std::string m_File{}; + std::string m_PointsString{}; + std::string m_FacesString{}; + std::string m_OwnerString{}; + std::string m_NeighbourString{}; + std::string m_BoundaryString{}; + std::vector m_Points{}; + std::unordered_map> m_Faces{}; + std::unordered_map> m_Cells{}; + std::unordered_map m_CellsType{}; + std::unordered_map> m_PointZones{}; + std::unordered_map> m_FaceZones{}; + std::unordered_map> m_CellZones{}; + std::unordered_map> m_FaceIdToCellFaceIndex{}; + std::unordered_map < int, std::string > m_Zones{}; + const std::string m_FoamLabel{ "FoamFile" }; + + }; + + class OpenFoamMeshReader + { + public: + OpenFoamMeshReader() = default; + ~OpenFoamMeshReader() = default; + void setMeshFileParser(CFDOpenfoamMeshParser* parser); + bool readFile(const std::string& file); + vtkSmartPointer getGrid(); + + private: + CFDOpenfoamMeshParser* m_Parser{ nullptr }; + vtkSmartPointer m_ugrid{ nullptr }; + }; +} + diff --git a/src/PluginMeshDataExchange/MSHdataExchange.cpp b/src/PluginMeshDataExchange/MSHdataExchange.cpp index dcb571d..f449334 100644 --- a/src/PluginMeshDataExchange/MSHdataExchange.cpp +++ b/src/PluginMeshDataExchange/MSHdataExchange.cpp @@ -11,6 +11,12 @@ #include #include #include +#include +#include +#include +#include +#include +#include namespace MeshData { @@ -114,37 +120,134 @@ namespace MeshData bool MSHdataExchange::read() { - if (!readHeader()) { // QMessageBox::warning(nullptr, tr("Prompt"), tr("The file format could not parse the amount!"), QMessageBox::Ok); return false; } - //_file = new QFile(); + _file = new QFile(); QFileInfo info(_fileName); if (!info.exists()) return false; _baseFileName = info.fileName(); _filePath = info.filePath(); - //_file->setFileName(_fileName); + _file->setFileName(_fileName); if (!_file->open(QIODevice::ReadOnly)) return false; _stream = new QTextStream(_file); - vtkSmartPointer dataset = vtkSmartPointer::New(); - if (mMeshType == typeGambit) + CFDMeshReader* reader = new CFDMeshReader; + CFDMshFileParser* parser = new CFDMshFileParser; + reader->setMeshFileParser(parser); + bool ok = reader->readFile(_fileName.toStdString()); + if (!ok) + return ok; + vtkSmartPointer dataset = reader->getGrid(); + MeshKernal *k = new MeshKernal; + k->setName(_baseFileName); + k->setPath(_filePath); + k->setMeshData((vtkDataSet *)dataset); + _meshData->appendMeshKernal(k); + int kid = k->getID(); + std::unordered_map zones = parser->getZones(); + QMap zoneNames{}; + for (auto zone : zones) { - if (!readGambitFile(dataset)) - return false; + zoneNames.insert(zone.first, zone.second); + } + std::unordered_map> zoneIndexes = parser->getCellZones(); + for (auto it : zoneIndexes) + { + int setid = it.first; + MeshSet* set = new MeshSet; + set->setType(SetType::Element); + if (zoneNames.contains(setid)) + set->setName(QString::fromStdString(zoneNames[setid])); else - return true; + set->setName("ElementSet" + QString::number(it.first)); + MeshSet *s = _idsetList.value(setid); + if (s != nullptr) + { + delete s; + _idsetList.remove(setid); + } + _idsetList[setid] = set; + int firstIndex = it.second.first; + int lastIndex = it.second.second; + for (int i = firstIndex; i <= lastIndex; ++i) + set->appendTempMem(i - 1); } - else if (mMeshType == typeFluent) + std::unordered_map> faceZones = parser->getPointZones(); + for (auto it : faceZones) { - if (!readFluentFile(dataset)) - return false; + int setid = it.first; + MeshSet* set = new MeshSet; + set->setType(SetType::Node); + if (zoneNames.contains(setid)) + set->setName(QString::fromStdString(zoneNames[setid])); + else + set->setName("PointSet" + QString::number(it.first)); + MeshSet* s = _idsetList.value(setid); + if (s != nullptr) + { + delete s; + _idsetList.remove(setid); + } + _idsetList[setid] = set; + int firstIndex = it.second.first; + int lastIndex = it.second.second; + for (int i = firstIndex; i <= lastIndex; ++i) + set->appendTempMem(i - 1); } - return true; + std::unordered_map> face2CellIndex = parser->getFaceIDtoCellIndex(); + for (auto faceZone : parser->getFaceZones()) + { + int zoneId = faceZone.first; + if (zoneNames.contains(zoneId)) + { + BoundMeshSet* set = new BoundMeshSet; + set->setName(QString::fromStdString(zoneNames[zoneId])); + QMap> cellFaces{}; + int firstIndex = faceZone.second.first; + int lastIndex = faceZone.second.second; + for (int i = firstIndex; i <= lastIndex; ++i) + { + int cellIndex = face2CellIndex[i].first; + int index = face2CellIndex[i].second; + cellFaces[cellIndex - 1].push_back(index - 1); + } + MeshSet* s = _idsetList.value(zoneId); + if (s != nullptr) + { + delete s; + _idsetList.remove(zoneId); + } + _idsetList[zoneId] = set; + } + } + QList setList = _idsetList.values(); + for (int i = 0; i < _idsetList.size(); ++i) + { + MeshSet *set = setList.at(i); + set->setKeneralID(kid); + _meshData->appendMeshSet(set); + } + delete parser; + delete reader; + return ok; + //if (mMeshType == typeGambit) + //{ + // if (!readGambitFile(dataset)) + // return false; + // else + // return true; + //} + //else if (mMeshType == typeFluent) + //{ + // if (!readFluentFile(dataset)) + // return false; + //} + //return true; } void MSHdataExchange::readPoints10(vtkUnstructuredGrid *dataset, QString info) @@ -683,4 +786,487 @@ namespace MeshData _idsetList.clear(); return false; } + + + bool CFDMshFileParser::setFile(const std::string& file) + { + m_File = file; + return this->read(); + } + + std::vector CFDMshFileParser::getPoints() + { + return m_Points; + } + + std::unordered_map> CFDMshFileParser::getFaces() + { + return m_Faces; + } + + std::unordered_map> CFDMshFileParser::getCells() + { + return m_Cells; + } + + std::unordered_map CFDMshFileParser::getCellsType() + { + return m_CellsType; + } + + std::unordered_map> CFDMshFileParser::getPointZones() + { + return m_PointZones; + } + + std::unordered_map> CFDMshFileParser::getFaceZones() + { + return m_FaceZones; + } + + std::unordered_map> CFDMshFileParser::getCellZones() + { + return m_CellZones; + } + + std::unordered_map> CFDMshFileParser::getFaceIDtoCellIndex() + { + return m_FaceIdToCellFaceIndex; + } + + std::unordered_map CFDMshFileParser::getZones() + { + return m_Zones; + } + + bool CFDMshFileParser::read() + { + std::ifstream in{}; + in.open(m_File, std::ios_base::in); + if (!in.is_open()) + { + return false; + } + std::stringstream buffer; + buffer << in.rdbuf(); + m_ByteArray = std::string(buffer.str()); + in.close(); + bool p = this->readPoints(); + if (!p) + return p; + bool f = this->readFaces(); + if (!f) + return f; + bool c = this->readCellsType(); + if (!c) + return c; + this->readZones(); + return true; + } + + bool CFDMshFileParser::readPoints() + { + //读取点 + const std::string nodeLabel{"\n(10"}; + int nlSize = nodeLabel.size(); + int first = m_ByteArray.find(nodeLabel); + if (first == -1) + return false; + while (first != -1) + { + int end = m_ByteArray.find("\n", first+nlSize); + if (end == -1) + return false; + std::string element{m_ByteArray.substr(first+1, end-first)}; + stringTrimmed(element); + std::vector list{}; + this->stringSplit(element, ' ', list); + if (list.size() < 5) + return false; + bool ok; + std::string zoneIdStr = list.at(1).substr(1); + int zoneID{-1}; + sscanf(zoneIdStr.c_str(), "%X", &zoneID); + std::string firstIndex = list.at(2); + std::string lastIndex = list.at(3); + int fIndex{ 0 }, lIndex{ 0 }; + sscanf(firstIndex.c_str(), "%X", &fIndex); + sscanf(lastIndex.c_str(), "%X", &lIndex); + if (zoneID == 0) + { + std::string pnStr = list.at(3); + m_PointNumber = strtol(pnStr.c_str(), 0, 16); + } + else + { + m_PointZones[zoneID] = std::make_pair(fIndex, lIndex); + int first = m_ByteArray.find(")", end + 1); + if (first == -1) + break; + std::string nodes = m_ByteArray.substr(end+1, first-end); + std::vector arrays{}; + stringSplit(nodes, '\n', arrays); + for (auto& array : arrays) + { + std::string coords {array}; + stringTrimmed(coords); + std::vector cs{}; + stringSplit(coords, ' ', cs); + if (cs.size() == 3) + { + m_Points.push_back(atof(cs.at(0).c_str())); + m_Points.push_back(atof(cs.at(1).c_str())); + m_Points.push_back(atof(cs.at(2).c_str())); + } + } + end = first; + } + first = m_ByteArray.find(nodeLabel, end); + } + return true; + } + + bool CFDMshFileParser::readZones() + { + std::string zoneLable{ "\n(39" }; + int first = m_ByteArray.find(zoneLable); + if (first == -1) + { + zoneLable = "\n(45"; + first = m_ByteArray.find(zoneLable); + } + if (first == -1) + return false; + int clSize = zoneLable.size(); + while (first != -1) + { + int end = m_ByteArray.find("\n", first + clSize); + std::string line = m_ByteArray.substr(first + clSize, end - first - clSize); + int i = line.find("("); + if (i == -1) + return false; + int j = line.find(")"); + if (j == -1) + return false; + std::string element = line.substr(i + 1, j - i - 1); + stringTrimmed(element); + std::vector segs{}; + stringSplit(element, ' ', segs); + if (segs.size() >= 3) + { + std::string name = segs.at(2); + int zoneID = strtol(segs.at(0).c_str(), 0, 10); + m_Zones[zoneID] = name; + } + first = m_ByteArray.find(zoneLable, end); + } + return true; + } + + bool CFDMshFileParser::readFaces() + { + //读取面及单元 + const std::string faceLable{"\n(13"}; + int flSize = faceLable.size(); + int first = m_ByteArray.find(faceLable); + if (first == -1) + return false; + while (first != -1) + { + int end = m_ByteArray.find("\n", first+flSize); + if (end == -1) + return false; + //以(13开头的整行 + std::string element{m_ByteArray.substr(first+1, end-first)}; + int a = element.find("(", 3); + int b = element.find_last_of(")"); + element = element.substr(a+1, b-a-1); + stringTrimmed(element); + std::vector list{}; + stringSplit(element, ' ', list); + if (list.size() < 4) + return false; + std::string zoneStr = list.at(0); + int zoneId{ -1 }; + sscanf(zoneStr.c_str(), "%x", &zoneId); + int startFaceIndex = strtol(list.at(1).c_str(), 0 ,16); + int endFaceIndex = strtol(list.at(2).c_str(), 0, 16); + if (zoneId == 0) + { + m_FaceNumber = strtol(list.at(2).c_str(), 0 , 16); + } + else + { + m_FaceZones[zoneId] = std::make_pair(startFaceIndex, endFaceIndex); + int bcType; + sscanf(list.at(3).c_str(), "%d", &bcType); + int faceType; + sscanf(list.at(4).c_str(), "%d", &faceType); + int first = m_ByteArray.find(")",end+1); + if (first == -1) + break; + std::string faces = m_ByteArray.substr(end+1, first-end); + std::vector arrays{}; + stringSplit(faces, '\n', arrays); + for (auto& array : arrays) + { + std::string coords {array}; + stringTrimmed(coords); + std::vector cs{}; + stringSplit(coords, ' ', cs); + this->parseFaceAndCells(startFaceIndex, cs, faceType); + ++startFaceIndex; + } + end = first; + } + first = m_ByteArray.find(faceLable, end); + } + return true; + } + + bool CFDMshFileParser::readCellsType() + { + //读取单元类型 + const std::string cellLable{ "\n(12" }; + int clSize = cellLable.size(); + int first = m_ByteArray.find(cellLable); + if (first == -1) + return false; + while (first != -1) + { + int end = m_ByteArray.find("\n", first + clSize); + if (end == -1) + return false; + std::string element{ m_ByteArray.substr(first + cellLable.size(), end - first-cellLable.size()) }; + stringTrimmed(element); + std::vector list{}; + stringSplit(element, ' ', list); + if (list.size() < 4) + return false; + bool ok; + int zoneId = strtol(list.at(0).substr(1).c_str(), 0, 16); + int startIndex = strtol(list.at(1).c_str(),0, 16); + int endIndex = strtol(list.at(2).c_str(), 0, 16); + int type = strtol(list.at(3).c_str(), 0 , 16); + if (zoneId == 0) + ; + else + { + m_CellZones[zoneId] = std::make_pair(startIndex, endIndex); + std::string str = list.at(4); + int elementType{ -1 }; + std::string etStr = str.substr(0, str.find_first_of(")")); + sscanf(etStr.c_str(), "%x", &elementType); + if (elementType == 0) + { + int bodyEnd = m_ByteArray.find(")", end + 1); + if (bodyEnd != -1) + { + std::string body{ m_ByteArray.substr(end + 1, bodyEnd - end - 1) }; + stringTrimmed(body); + if (body.at(0) == '(') + body = body.substr(1); + std::vector types{}; + stringSplit(body, ' ', types); + for (const std::string& ty : types) + { + int type{}; + sscanf(ty.c_str(), "%d", &type); + m_CellsType[startIndex] = type; + ++startIndex; + } + end = bodyEnd; + } + } + else + { + for (int i = startIndex; i <= endIndex; ++i) + m_CellsType[i] = elementType; + } + } + first = m_ByteArray.find(cellLable, end); + } + return true; + } + + void CFDMshFileParser::parseFaceAndCells(int faceIndex, const std::vector& faceLineSegs, int faceType) + { + bool ok; + switch (faceType) + { + case 0: case 5: + { + if (faceLineSegs.size() >= 5) + { + std::string pnStr = faceLineSegs.front(); + int pointNum{ 0 }; + sscanf(pnStr.c_str(), "%d", &pointNum); + std::vector pointIDs{}; + int i = 1; + for (; i <= pointNum; ++i) + { + std::string idStr = faceLineSegs.at(i); + int id = strtol(idStr.c_str(), 0, 16); + pointIDs.push_back(id); + } + m_Faces.insert(make_pair(faceIndex, pointIDs)); + std::string ownerStr = faceLineSegs.at(i); + int owner = strtol(ownerStr.c_str(), 0, 16); + ++i; + std::string nbStr = faceLineSegs.at(i); + int neigbur = strtol(nbStr.c_str(), 0, 16); + if (owner != 0) + { + m_Cells[owner].push_back(faceIndex); + m_FaceIdToCellFaceIndex[faceIndex] = std::make_pair(owner, m_Cells[owner].size()); + } + if (neigbur != 0) + { + m_Cells[neigbur].push_back(faceIndex); + m_FaceIdToCellFaceIndex[faceIndex] = std::make_pair(neigbur, m_Cells[neigbur].size()); + } + } + } + break; + case 3: + { + if (faceLineSegs.size() != 5) + return; + std::vector pointIds{ }; + for (int i = 0; i< 3; ++i) + { + int id = strtol(faceLineSegs.at(i).c_str(), 0, 16); + pointIds.push_back(id); + } + m_Faces.insert(make_pair(faceIndex, pointIds)); + std::string ownerStr{ faceLineSegs.at(3) }; + int owner = strtol(ownerStr.c_str(), 0, 16); + std::string nbStr{ faceLineSegs.at(4) }; + int neighber = strtol(nbStr.c_str(), 0 , 16); + if (owner != 0) + { + m_Cells[owner].push_back(faceIndex); + m_FaceIdToCellFaceIndex[faceIndex] = std::make_pair(owner, m_Cells[owner].size()); + } + if (neighber != 0) + { + m_Cells[neighber].push_back(faceIndex); + m_FaceIdToCellFaceIndex[faceIndex] = std::make_pair(neighber, m_Cells[neighber].size()); + } + } + break; + case 4: + { + if (faceLineSegs.size() != 6) + return; + std::vector pointIds{ }; + for (int i = 0; i < 4; ++i) + { + int id = strtol(faceLineSegs.at(i).c_str(), 0, 16); + pointIds.push_back(id); + } + m_Faces.insert(make_pair(faceIndex, pointIds)); + std::string ownerStr{ faceLineSegs.at(4) }; + int owner = strtol(ownerStr.c_str(), 0, 16); + std::string nbStr{ faceLineSegs.at(5) }; + int neighber = strtol(nbStr.c_str(), 0, 16); + if (owner != 0) + { + m_Cells[owner].push_back(faceIndex); + m_FaceIdToCellFaceIndex[faceIndex] = std::make_pair(owner, m_Cells[owner].size()); + } + if (neighber != 0) + { + m_Cells[neighber].push_back(faceIndex); + m_FaceIdToCellFaceIndex[faceIndex] = std::make_pair(neighber, m_Cells[neighber].size()); + } + } + break; + default: + break; + } + } + + void CFDMshFileParser::stringSplit(const std::string str, const const char split, std::vector &vec) + { + std::istringstream iss(str); + std::string token; + while (getline(iss, token, split)) + { + if (token.size() != 0) + vec.push_back(token); + } + } + + void CFDMshFileParser::stringTrimmed(std::string& str) + { + int first = str.find_first_not_of(" "); + str.erase(0, first); + int last = str.find_last_not_of(" "); + if (last+1 < str.size()) + str.erase(last + 1); + } + + void CFDMeshReader::setMeshFileParser(CFDMshFileParser* parser) + { + m_Parser = parser; + } + + bool CFDMeshReader::readFile(const std::string& file) + { + if (m_Parser == nullptr) + return false; + bool ok = m_Parser->setFile(file); + if (!ok) + return ok; + m_ugrid = vtkSmartPointer::New(); + vtkSmartPointer points = vtkSmartPointer::New(); + const std::vector ps = m_Parser->getPoints(); + const std::unordered_map> cells = m_Parser->getCells(); + const std::unordered_map> faces = m_Parser->getFaces(); + const std::unordered_map cellTyps = m_Parser->getCellsType(); + std::set usedFaces{}; + int num = ps.size() / 3; + for (int i = 0; i < num; ++i) + { + double coord[3]{ ps[i * 3], ps[i * 3 + 1], ps[i * 3 + 2] }; + points->InsertNextPoint(coord); + } + m_ugrid->SetPoints(points); + std::unordered_map>::const_iterator it = cells.cbegin(); + while (it != cells.cend()) + { + std::vector pointIds{}; + vtkSmartPointer facesIDS = vtkSmartPointer::New(); + std::vector faceids = it->second; + int index = it->first; + for (int id : faceids) + { + auto it = faces.find(id); + if (it == faces.cend()) + continue; + const std::vector pids =it->second; + usedFaces.insert(it->first); + facesIDS->InsertNextId(pids.size()); + for (int pid : pids) + { + pointIds.push_back(pid - 1); + facesIDS->InsertNextId(pid - 1); + } + } + + std::sort(pointIds.begin(), pointIds.end()); + auto ii = std::unique(pointIds.begin(), pointIds.end()); + pointIds.erase(ii, pointIds.end()); + m_ugrid->InsertNextCell(VTK_POLYHEDRON, pointIds.size(), pointIds.data(), faceids.size(), facesIDS->GetPointer(0)); + ++it; + } + return true; + } + + vtkSmartPointer CFDMeshReader::getGrid() + { + return m_ugrid; + } + } \ No newline at end of file diff --git a/src/PluginMeshDataExchange/MSHdataExchange.h b/src/PluginMeshDataExchange/MSHdataExchange.h index 5269f80..76955b1 100644 --- a/src/PluginMeshDataExchange/MSHdataExchange.h +++ b/src/PluginMeshDataExchange/MSHdataExchange.h @@ -4,6 +4,8 @@ #include "MeshThreadBase.h" #include "meshDataExchangePlugin.h" #include +#include +#include class QTextStream; class vtkUnstructuredGrid; @@ -90,5 +92,111 @@ namespace MeshData int _modelId; MeshOperation _operation; }; + /** + * @brief msh文件解析类。解析后所得信息中索引均以1开始,使用vtk渲染时注意索引的转换。 + */ + class CFDMshFileParser + { + public: + CFDMshFileParser() = default; + ~CFDMshFileParser() = default; + /** + * 指定要解析的文件并执行解析。 + * @param file + * @return 成功则返回true,否则返回false。 + */ + bool setFile(const std::string& file); + /** + * 获取点坐标信息。 + * @return 以[x1,y1,z1,x2,y2,z2,...]形式存储的所有点的坐标信息。 + */ + std::vector getPoints() ; + /** + * 获取面拓扑信息。 + * @return key为面ID,value为点ID数组。ID均以1开始。 + */ + std::unordered_map> getFaces() ; + /** + * 获取单元拓扑信息。 + * @return key为单元ID,value为面ID数组。ID均以1开始。 + */ + std::unordered_map> getCells() ; + /** + * 获取单元类型信息。 + * @return key为面ID,value为整型类型,表示的单元类型如下: + * 1:三节点三角形;2:四节点四面体;3:四节点四边形;4:八节点六面体;5:五节点金字塔形;6:六节点五面体;7:多面体。 + */ + std::unordered_map getCellsType() ; + /** + * 获取点域。 + * @return key为域ID,value为由点起始索引和结束索引组成的pair。 + * @since 1.0.0 + */ + std::unordered_map> getPointZones(); + /** + * 获取面域。 + * @return key为域ID,value为由面起始索引和结束索引组成的pair。 + * @since 1.0.0 + */ + std::unordered_map> getFaceZones(); + /** + * 获取单元域。 + * @return key为域ID,value为由单元起始索引和结束索引组成的pair。 + * @since 1.0.0 + */ + std::unordered_map> getCellZones(); + /** + * 获取面ID与单元面索引的映射。 + * @return key为面ID,value为由单元索引及其面索引组成的pair。索引均以1开始。 + * @since 1.0.0 + */ + std::unordered_map> getFaceIDtoCellIndex(); + /** + * 获取域名称。 + * @return key为域ID,value为域名称。 + * @since 1.0.0 + */ + std::unordered_map getZones(); + protected: + bool read(); + + private: + std::string m_File{}; + bool readPoints(); + bool readFaces(); + bool readCellsType(); + bool readZones(); + void parseFaceAndCells(int, const std::vector&, int); + void stringSplit(const std::string str, const char split, std::vector &vec); + void stringTrimmed(std::string& str); + private: + std::string m_ByteArray{}; + double m_Progress; + int m_PointNumber{0}; + int m_FaceNumber{0}; + std::vector m_Points{}; + std::unordered_map> m_Faces{}; + std::unordered_map> m_Cells{}; + std::unordered_map m_CellsType{}; + std::unordered_map> m_PointZones{}; + std::unordered_map> m_FaceZones{}; + std::unordered_map> m_CellZones{}; + std::unordered_map> m_FaceIdToCellFaceIndex{}; + std::unordered_map m_Zones{}; + }; + + class CFDMeshReader + { + public: + CFDMeshReader() = default; + ~CFDMeshReader() = default; + void setMeshFileParser(CFDMshFileParser* parser); + bool readFile(const std::string& file); + vtkSmartPointer getGrid(); + + private: + CFDMshFileParser* m_Parser{ nullptr }; + vtkSmartPointer m_ugrid{ nullptr }; + }; } #endif \ No newline at end of file diff --git a/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp b/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp index 1166dcd..4e176b1 100644 --- a/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp +++ b/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp @@ -14,6 +14,7 @@ #include "PDBdataExchange.h" #include "SU2dataExchange.h" #include "VTKdataExchange.h" +#include "FoamDataExchange.h" #include @@ -29,6 +30,7 @@ namespace MeshData { { IO::IOConfigure::RegisterMeshImporter("CGNS(*.cgns)", CGNSimportMesh); IO::IOConfigure::RegisterMeshImporter("Fluent(*.msh)", MSHimportMesh); + IO::IOConfigure::RegisterMeshImporter("OpenFOAM(*.foam)", FOAMimportMesh); IO::IOConfigure::RegisterMeshImporter("Gambit(*.neu)", NEUimportMesh); IO::IOConfigure::RegisterMeshImporter("STL(*.stl)", VTK_DAT_STL_importMesh); IO::IOConfigure::RegisterMeshImporter("Tecplot(*.dat)", VTK_DAT_STL_importMesh); @@ -42,6 +44,7 @@ namespace MeshData { IO::IOConfigure::RegisterMeshExporter("CGNS(*.cgns)", CGNSexportMesh); IO::IOConfigure::RegisterMeshExporter("Fluent(*.msh)", MSHexportMesh); + IO::IOConfigure::RegisterMeshExporter("OpenFOAM(*.foam)", FOAMexportMesh); IO::IOConfigure::RegisterMeshExporter("Gambit(*.neu)", NEUexportMesh); IO::IOConfigure::RegisterMeshExporter("STL(*.stl)", VTK_DAT_STL_exportMesh); IO::IOConfigure::RegisterMeshExporter("Tecplot(*.dat)", VTK_DAT_STL_exportMesh); @@ -302,3 +305,21 @@ bool MESHDATAEXCHANGEPLUGINAPI PDBexportMesh(QString AbFileName, int modelId) // emit PDBWriter->start(); return false; } + +bool MESHDATAEXCHANGEPLUGINAPI FOAMimportMesh(QString AbFileName, int modelId) +{ + auto foamReader = new MeshData::FoamDataExchange(AbFileName, MeshData::MESH_READ, + MeshData::MeshDataExchangePlugin::getMWpt()); + ModuleBase::ThreadControl* tc = new ModuleBase::ThreadControl(foamReader); + emit tc->threadStart(); // emit MSHreader->start(); + return false; +} + +bool MESHDATAEXCHANGEPLUGINAPI FOAMexportMesh(QString AbFileName, int id) +{ + auto FoamWriter = new MeshData::FoamDataExchange( + AbFileName, MeshData::MESH_WRITE, MeshData::MeshDataExchangePlugin::getMWpt(), id); + ModuleBase::ThreadControl* tc = new ModuleBase::ThreadControl(FoamWriter); + emit tc->threadStart(); // emit MSHwriter->start(); + return false; +} diff --git a/src/PluginMeshDataExchange/meshDataExchangePlugin.h b/src/PluginMeshDataExchange/meshDataExchangePlugin.h index d03849e..f9cf089 100644 --- a/src/PluginMeshDataExchange/meshDataExchangePlugin.h +++ b/src/PluginMeshDataExchange/meshDataExchangePlugin.h @@ -35,6 +35,7 @@ extern "C" //函数返回值是无效的,不要通过返回值判断 bool MESHDATAEXCHANGEPLUGINAPI CGNSimportMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI MSHimportMesh(QString AbFileName, int modelId); + bool MESHDATAEXCHANGEPLUGINAPI FOAMimportMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI NEUimportMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI VTK_DAT_STL_importMesh(QString AbFileName, int modelId); bool MESHDATAEXCHANGEPLUGINAPI INPimportMesh(QString AbFileName, int modelId); @@ -47,6 +48,7 @@ extern "C" bool MESHDATAEXCHANGEPLUGINAPI CGNSexportMesh(QString AbFileName, int id); bool MESHDATAEXCHANGEPLUGINAPI MSHexportMesh(QString AbFileName, int id); + bool MESHDATAEXCHANGEPLUGINAPI FOAMexportMesh(QString AbFileName, int id); bool MESHDATAEXCHANGEPLUGINAPI NEUexportMesh(QString AbFileName, int id); bool MESHDATAEXCHANGEPLUGINAPI VTK_DAT_STL_exportMesh(QString AbFileName, int id); bool MESHDATAEXCHANGEPLUGINAPI INPexportMesh(QString AbFileName, int id);