fix(nmNum): 重新生成模型后清除旧分析结果

- 新模型成功提交后丢弃旧敏感性分析批次,覆盖手工求解与自动拟合流程。
- 清除旧曲线及撤销记录,关闭结果图和结果列表,禁用 Results 按钮。
- 保留采样配置,修改参数但未求解、求解失败或取消时保留原结果。
feature/Sensitivity-20261012
lvjunjie 1 week ago
parent a66c024f40
commit 4fb38c3022

@ -4937,6 +4937,11 @@ bool nmDataAnalyzeManager::commitPebiResultSnapshot(
m_sCurrentResultWellInstanceId = sNextWellInstanceId; m_sCurrentResultWellInstanceId = sNextWellInstanceId;
pCandidate.clear(); pCandidate.clear();
rebindPebiResultSnapshotToWells(); rebindPebiResultSnapshotToWells();
// 新模型成功发布后丢弃旧敏感性结果,采样设置仍由窗口按新快照刷新。
if(m_pSensitiveData != nullptr && !m_pSensitiveData->getResults().isNull()) {
m_pSensitiveData->setResults(QSharedPointer<nmDataSensitive::BatchResult>());
emit sigSensitiveResultsChanged();
}
emit sigPebiResultSnapshotChanged(); emit sigPebiResultSnapshotChanged();
notifyPebiResultStateChangedIfNeeded(oPreviousResultState); notifyPebiResultStateChangedIfNeeded(oPreviousResultState);
return true; return true;

@ -1874,8 +1874,25 @@ void nmSubWndMain::onShowSensitiveResults()
iSubWndFitting* fitting = m_pResultRefreshFitting.data(); iSubWndFitting* fitting = m_pResultRefreshFitting.data();
if(!manager || !fitting || !manager->getSensitiveData()) return; if(!manager || !fitting || !manager->getSensitiveData()) return;
QSharedPointer<nmDataSensitive::BatchResult> result = manager->getSensitiveData()->getResults(); QSharedPointer<nmDataSensitive::BatchResult> result = manager->getSensitiveData()->getResults();
if(result.isNull()) return;
iGuiPlot* plot = fitting->getPlotByTag(s_Tag_ChartSensitivity); iGuiPlot* plot = fitting->getPlotByTag(s_Tag_ChartSensitivity);
if(result.isNull()) {
// 新模型已丢弃旧批次,同时清除图元与撤销记录,避免窗口恢复或保存后残留旧曲线。
if(plot) {
for(int i = plot->m_pPlot->getObjCount() - 1; i >= 0; --i) {
if(qobject_cast<ZxObjCurve*>(plot->m_pPlot->getObjByIndex(i)))
plot->m_pPlot->removeObjByIndex(i);
}
plot->clearUndoStack();
plot->runUpdate();
QMdiSubWindow* subWindow = nullptr;
for(QWidget* parent = plot->parentWidget(); parent && !subWindow; parent = parent->parentWidget())
subWindow = qobject_cast<QMdiSubWindow*>(parent);
if(subWindow) subWindow->close();
else plot->hide();
}
if(sender() == manager) fitting->setModified(true);
return;
}
const bool created = plot == nullptr; const bool created = plot == nullptr;
// 通用取窗接口未实现敏感性类型,直接复用框架已有的内部 MDI 创建函数。 // 通用取窗接口未实现敏感性类型,直接复用框架已有的内部 MDI 创建函数。
if(created) plot = fitting->initSensitivityPlot(); if(created) plot = fitting->initSensitivityPlot();

@ -1778,6 +1778,11 @@ void nmWxSensitive::onResultsChanged()
resultsButton->setEnabled(!results.isNull()); resultsButton->setEnabled(!results.isNull());
m_sensitiveData.setResults(results); m_sensitiveData.setResults(results);
if(!m_resultsModel.isNull()) m_resultsModel->setResults(results); if(!m_resultsModel.isNull()) m_resultsModel->setResults(results);
// 新模型清除旧批次后关闭结果列表,不能继续操作上一模型的运行记录。
if(results.isNull()) {
if(!m_resultsDialog.isNull()) m_resultsDialog->close();
return;
}
if(!m_resultsDialog.isNull()) { if(!m_resultsDialog.isNull()) {
const QString status = results.isNull() ? QString() : results->m_bStopped ? tr("Stopped") const QString status = results.isNull() ? QString() : results->m_bStopped ? tr("Stopped")
: results->m_bCompleted ? tr("Completed") : tr("Failed"); : results->m_bCompleted ? tr("Completed") : tr("Failed");

Loading…
Cancel
Save