#2026 Curve Calculator : Update calculated curves and plots

This commit is contained in:
Magne Sjaastad
2017-10-20 10:20:53 +02:00
parent bb4ac23c07
commit 167f56f95a
5 changed files with 75 additions and 16 deletions

View File

@@ -27,6 +27,7 @@
#include "cafPdmUiListEditor.h" #include "cafPdmUiListEditor.h"
#include "cafPdmUiPushButtonEditor.h" #include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeSelectionEditor.h" #include "cafPdmUiTreeSelectionEditor.h"
#include "RiaSummaryTools.h"
CAF_PDM_SOURCE_INIT(RicSummaryCurveCalculator, "RicSummaryCurveCalculator"); CAF_PDM_SOURCE_INIT(RicSummaryCurveCalculator, "RicSummaryCurveCalculator");
@@ -77,14 +78,26 @@ RimCalculation* RicSummaryCurveCalculator::currentCalculation() const
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicSummaryCurveCalculator::parseExpression() bool RicSummaryCurveCalculator::parseExpression() const
{ {
if (m_currentCalculation()) if (m_currentCalculation())
{ {
m_currentCalculation()->parseExpression(); QString previousCurveName = m_currentCalculation->description();
if (!m_currentCalculation()->parseExpression())
{
return false;
}
this->updateConnectedEditors(); QString currentCurveName = m_currentCalculation->description();
if (previousCurveName != currentCurveName)
{
RiaSummaryTools::notifyCalculatedCurveNameHasChanged(previousCurveName, currentCurveName);
}
m_currentCalculation()->updateDependentCurvesAndPlots();
} }
return true;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -202,12 +215,31 @@ void RicSummaryCurveCalculator::assignPushButtonEditorText(caf::PdmUiEditorAttri
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicSummaryCurveCalculator::calculate() const bool RicSummaryCurveCalculator::calculate() const
{ {
if (m_currentCalculation()) if (m_currentCalculation())
{ {
m_currentCalculation()->calculate(); QString previousCurveName = m_currentCalculation->description();
if (!m_currentCalculation()->parseExpression())
{
return false;
}
QString currentCurveName = m_currentCalculation->description();
if (previousCurveName != currentCurveName)
{
RiaSummaryTools::notifyCalculatedCurveNameHasChanged(previousCurveName, currentCurveName);
}
if (!m_currentCalculation()->calculate())
{
return false;
}
m_currentCalculation()->updateDependentCurvesAndPlots();
} }
return true;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@@ -41,8 +41,8 @@ public:
RimCalculation* currentCalculation() const; RimCalculation* currentCalculation() const;
void parseExpression(); bool parseExpression() const;
void calculate() const; bool calculate() const;
private: private:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;

View File

@@ -186,6 +186,8 @@ QMinimizePanel* RicSummaryCurveCalculatorEditor::updateGroupBoxWithContent(caf::
void RicSummaryCurveCalculatorEditor::slotCalculate() void RicSummaryCurveCalculatorEditor::slotCalculate()
{ {
m_calculator->calculate(); m_calculator->calculate();
m_calculator->updateConnectedEditors();
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@@ -194,5 +196,7 @@ void RicSummaryCurveCalculatorEditor::slotCalculate()
void RicSummaryCurveCalculatorEditor::slotParseExpression() void RicSummaryCurveCalculatorEditor::slotParseExpression()
{ {
m_calculator->parseExpression(); m_calculator->parseExpression();
m_calculator->updateConnectedEditors();
} }

View File

@@ -22,14 +22,18 @@
#include "RiaLogging.h" #include "RiaLogging.h"
#include "RiaSummaryCurveDefinition.h" #include "RiaSummaryCurveDefinition.h"
#include "RiaSummaryTools.h"
#include "RimCalculationCollection.h"
#include "RimCalculationVariable.h" #include "RimCalculationVariable.h"
#include "RimProject.h"
#include "RimSummaryCurve.h" #include "RimSummaryCurve.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "cafPdmUiTextEditor.h" #include "cafPdmUiTextEditor.h"
#include <algorithm> #include <algorithm>
#include <numeric>
CAF_PDM_SOURCE_INIT(RimCalculation, "RimCalculation"); CAF_PDM_SOURCE_INIT(RimCalculation, "RimCalculation");
@@ -166,7 +170,7 @@ bool RimCalculation::parseExpression()
} }
} }
this->updateConnectedEditors(); m_description = buildCalculationName();
return true; return true;
} }
@@ -176,8 +180,6 @@ bool RimCalculation::parseExpression()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RimCalculation::calculate() bool RimCalculation::calculate()
{ {
if (!parseExpression()) return false;
QString leftHandSideVariableName = RimCalculation::findLeftHandSide(m_expression); QString leftHandSideVariableName = RimCalculation::findLeftHandSide(m_expression);
ExpressionParser parser; ExpressionParser parser;
@@ -333,13 +335,35 @@ QString RimCalculation::buildCalculationName() const
} }
return name; return name;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RimCalculation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) void RimCalculation::updateDependentCurvesAndPlots()
{ {
m_description = buildCalculationName(); RimCalculationCollection* calcColl = nullptr;
this->firstAncestorOrThisOfTypeAsserted(calcColl);
calcColl->rebuildCaseMetaData();
RimSummaryPlotCollection* summaryPlotCollection = RiaSummaryTools::summaryPlotCollection();
for (RimSummaryPlot* sumPlot : summaryPlotCollection->summaryPlots())
{
bool plotContainsCalculatedCurves = false;
for (RimSummaryCurve* sumCurve : sumPlot->summaryCurves())
{
if (sumCurve->summaryAddress().category() == RifEclipseSummaryAddress::SUMMARY_CALCULATED)
{
sumCurve->updateConnectedEditors();
plotContainsCalculatedCurves = true;
}
}
if (plotContainsCalculatedCurves)
{
sumPlot->loadDataAndUpdate();
}
}
} }

View File

@@ -47,6 +47,7 @@ public:
bool parseExpression(); bool parseExpression();
bool calculate(); bool calculate();
void updateDependentCurvesAndPlots();
virtual caf::PdmFieldHandle* userDescriptionField() override; virtual caf::PdmFieldHandle* userDescriptionField() override;
@@ -56,8 +57,6 @@ private:
QString buildCalculationName() const; QString buildCalculationName() const;
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
private: private:
caf::PdmField<QString> m_description; caf::PdmField<QString> m_description;
caf::PdmField<QString> m_expression; caf::PdmField<QString> m_expression;