From 532cbe01e9a5740274e354943df2e5b7a3ff7ede Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Tue, 10 Jul 2018 13:55:54 +0200 Subject: [PATCH] #3173 Summary plot export. Include error data in plot export --- .../ProjectDataModel/RimPlotCurve.h | 4 ++- .../Summary/RimSummaryCurve.cpp | 35 ++++++++++++++++--- .../Summary/RimSummaryCurve.h | 4 ++- .../Summary/RimSummaryPlot.cpp | 18 +++++++++- 4 files changed, 54 insertions(+), 7 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimPlotCurve.h b/ApplicationCode/ProjectDataModel/RimPlotCurve.h index b42c170b9b..bda209b157 100644 --- a/ApplicationCode/ProjectDataModel/RimPlotCurve.h +++ b/ApplicationCode/ProjectDataModel/RimPlotCurve.h @@ -17,6 +17,8 @@ ///////////////////////////////////////////////////////////////////////////////// #pragma once +#include "RifEclipseSummaryAddress.h" + #include "cafPdmField.h" #include "cafPdmFieldCvfColor.h" #include "cafPdmObject.h" @@ -94,7 +96,7 @@ public: void updateCurveNameNoLegendUpdate(); QString curveName() const { return m_curveName; } - virtual QString curveExportDescription() const { return m_curveName; } + virtual QString curveExportDescription(const RifEclipseSummaryAddress& address = RifEclipseSummaryAddress()) const { return m_curveName; } void setCustomName(const QString& customName); void updateCurveVisibility(bool updateParentPlot); void updateLegendEntryVisibilityAndPlotLegend(); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index bf3509aee5..d676457927 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -256,6 +256,33 @@ std::vector RimSummaryCurve::valuesY() const return values; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RifEclipseSummaryAddress RimSummaryCurve::errorSummaryAddressY() const +{ + auto addr = summaryAddressY(); + addr.setAsErrorResult(); + return addr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimSummaryCurve::errorValuesY() const +{ + std::vector values; + + RifSummaryReaderInterface* reader = valuesSummaryReaderY(); + + if (!reader) return values; + + RifEclipseSummaryAddress addr = errorSummaryAddressY(); + reader->values(addr, &values); + + return values; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -652,9 +679,9 @@ void RimSummaryCurve::applyCurveAutoNameSettings(const RimSummaryCurveAutoName& //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -QString RimSummaryCurve::curveExportDescription() const +QString RimSummaryCurve::curveExportDescription(const RifEclipseSummaryAddress& address) const { - auto address = m_yValuesCurveVariable->address(); + auto addr = address.isValid() ? address : m_yValuesCurveVariable->address(); RimEnsembleCurveSetCollection* coll; firstAncestorOrThisOfType(coll); @@ -665,14 +692,14 @@ QString RimSummaryCurve::curveExportDescription() const if (group && group->isEnsemble()) { return QString("%1.%2.%3") - .arg(QString::fromStdString(address.uiText())) + .arg(QString::fromStdString(addr.uiText())) .arg(m_yValuesSummaryCase->caseName()) .arg(group->name()); } else { return QString("%1.%2") - .arg(QString::fromStdString(address.uiText())) + .arg(QString::fromStdString(addr.uiText())) .arg(m_yValuesSummaryCase->caseName()); } } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h index f82bbe0573..770aa353ff 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h @@ -58,6 +58,8 @@ public: RifEclipseSummaryAddress summaryAddressY() const; std::string unitNameY() const; std::vector valuesY() const; + RifEclipseSummaryAddress errorSummaryAddressY() const; + std::vector errorValuesY() const; void setLeftOrRightAxisY(RiaDefines::PlotAxis plotAxis); RiaDefines::PlotAxis axisY() const; const std::vector& timeStepsY() const; @@ -74,7 +76,7 @@ public: void updateQwtPlotAxis(); void applyCurveAutoNameSettings(const RimSummaryCurveAutoName& autoNameSettings); - virtual QString curveExportDescription() const override; + virtual QString curveExportDescription(const RifEclipseSummaryAddress& address = RifEclipseSummaryAddress()) const override; void forceUpdateCurveAppearanceFromCaseType(); protected: diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 989bb3e525..f8355a572e 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -1734,16 +1734,32 @@ void populateSummaryCurvesData(std::vector curves, SummaryCurv } CurveData curveData = { curve->curveExportDescription(), curve->summaryAddressY(), curve->valuesY() }; + CurveData errorCurveData; + + // Error data + auto errorValues = curve->errorValuesY(); + bool hasErrorData = !errorValues.empty(); + + if (hasErrorData) + { + errorCurveData.name = curve->curveExportDescription(curve->errorSummaryAddressY()); + errorCurveData.address = curve->errorSummaryAddressY(); + errorCurveData.values = errorValues; + } if (casePosInList == cvf::UNDEFINED_SIZE_T) { + auto curveDataList = std::vector({ curveData }); + if (hasErrorData) curveDataList.push_back(errorCurveData); + curvesData->caseNames.push_back(curveCaseName); curvesData->timeSteps.push_back(curve->timeStepsY()); - curvesData->allCurveData.push_back(std::vector({ curveData })); + curvesData->allCurveData.push_back(curveDataList); } else { curvesData->allCurveData[casePosInList].push_back(curveData); + if(hasErrorData) curvesData->allCurveData[casePosInList].push_back(errorCurveData); } } }