From 779b2b183e13b02b5d3c595ab4815bb044ca85e8 Mon Sep 17 00:00:00 2001 From: lvjunjie Date: Wed, 27 May 2026 15:36:00 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=BD=91=E6=A0=BC=E7=95=8C?= =?UTF-8?q?=E9=9D=A2=E6=97=B6=EF=BC=8C=E6=B8=85=E7=90=86=E7=BD=91=E6=A0=BC?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nmNum/nmCalculation/nmCalculationPebiGrid.h | 2 ++ Include/nmNum/nmData/nmDataAnalyzeManager.h | 2 ++ Include/nmNum/nmSubWnd/nmSubWndGrid.h | 1 + .../nmCalculation/nmCalculationPebiGrid.cpp | 11 ++++++++++- Src/nmNum/nmData/nmDataAnalyzeManager.cpp | 6 ++++++ Src/nmNum/nmSubWnd/nmSubWndGrid.cpp | 17 +++++++++++++++++ 6 files changed, 38 insertions(+), 1 deletion(-) diff --git a/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h b/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h index 47a7fb5..6ddb222 100644 --- a/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h +++ b/Include/nmNum/nmCalculation/nmCalculationPebiGrid.h @@ -21,6 +21,8 @@ public: bool meshGenPebi(); // 设置PEBI GridControl控制参数 void setGridControl(double gridControl); + // 清理单例中的网格输入输出数据 + void clearGridData(); private: // 边界 diff --git a/Include/nmNum/nmData/nmDataAnalyzeManager.h b/Include/nmNum/nmData/nmDataAnalyzeManager.h index 3824e59..f212b20 100644 --- a/Include/nmNum/nmData/nmDataAnalyzeManager.h +++ b/Include/nmNum/nmData/nmDataAnalyzeManager.h @@ -446,6 +446,8 @@ class NM_DATA_EXPORT nmDataAnalyzeManager : public ZxDataObjectBin void setUnstructuredGrid(vtkSmartPointer grid); // 获取当前分析下的VTK网格对象 vtkSmartPointer getUnstructuredGrid() const; + // 清理当前分析下的VTK网格对象 + void clearUnstructuredGrid(); // 获取当前分析下的VTK网格对象的深拷贝对象,一般复制给m_pResultBaseGrid,使用深拷贝,防止场图污染网格 vtkSmartPointer getUnstructuredGridCopy() const; diff --git a/Include/nmNum/nmSubWnd/nmSubWndGrid.h b/Include/nmNum/nmSubWnd/nmSubWndGrid.h index a2aa19b..950aa9f 100644 --- a/Include/nmNum/nmSubWnd/nmSubWndGrid.h +++ b/Include/nmNum/nmSubWnd/nmSubWndGrid.h @@ -23,6 +23,7 @@ class NM_SUB_WND_EXPORT nmSubWndGrid : public iSubWndBaseFit { // 成果保存加载 virtual bool loadRsts(); virtual bool saveRsts(); + virtual bool onConfirmClosing(); public slots: void updateGrid(); diff --git a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp index d8c12d8..1a90978 100644 --- a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp +++ b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp @@ -91,6 +91,15 @@ void nmCalculationPebiGrid::setGridControl(double gridControl) } } +void nmCalculationPebiGrid::clearGridData() +{ + // 关闭网格窗口后清空PEBI单例缓存,避免后续求解误用旧网格输入输出。 + p0 = HX_NWTM_GRID_INPUT(); + p1 = HX_NWTM_GRID_OUTPUT1(); + p2 = HX_NWTM_GRID_OUTPUT2(); + m_dGridControl = p0.GridControl; +} + void nmCalculationPebiGrid::logInputParameters(const HX_NWTM_GRID_INPUT& input) { QString logMsg = "Input Parameters:\n"; @@ -1074,4 +1083,4 @@ bool nmCalculationPebiGrid::generateOutputPara() FreeLibrary(dll); return true; -} \ No newline at end of file +} diff --git a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp index c5278e2..d2812ed 100644 --- a/Src/nmNum/nmData/nmDataAnalyzeManager.cpp +++ b/Src/nmNum/nmData/nmDataAnalyzeManager.cpp @@ -3561,6 +3561,12 @@ void nmDataAnalyzeManager::setUnstructuredGrid(vtkSmartPointer nmDataAnalyzeManager::getUnstructuredGridCopy() const { vtkSmartPointer pCopyGrid = vtkSmartPointer::New(); diff --git a/Src/nmNum/nmSubWnd/nmSubWndGrid.cpp b/Src/nmNum/nmSubWnd/nmSubWndGrid.cpp index ba3fc21..4f10d93 100644 --- a/Src/nmNum/nmSubWnd/nmSubWndGrid.cpp +++ b/Src/nmNum/nmSubWnd/nmSubWndGrid.cpp @@ -100,6 +100,23 @@ bool nmSubWndGrid::saveRsts() return pRstWnd->save(); } +bool nmSubWndGrid::onConfirmClosing() +{ + // 先走基类关闭确认;用户取消关闭时不清理网格数据。 + if(!iSubWndBaseFit::onConfirmClosing()) { + return false; + } + + nmCalculationPebiGrid::getInstance()->clearGridData(); + + nmDataAnalyzeManager* pDataManager = nmDataAnalyzeManager::getCurrentInstance(); + if(pDataManager != nullptr) { + pDataManager->clearUnstructuredGrid(); + } + + return true; +} + void nmSubWndGrid::initUI() { QWidget* mainWidget = new QWidget(this);