#3173 Summary plot export. Include error data in plot export

This commit is contained in:
Bjørn Erik Jensen 2018-07-10 13:55:54 +02:00
parent f50497ea72
commit 532cbe01e9
4 changed files with 54 additions and 7 deletions

View File

@ -17,6 +17,8 @@
///////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////
#pragma once #pragma once
#include "RifEclipseSummaryAddress.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmFieldCvfColor.h" #include "cafPdmFieldCvfColor.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
@ -94,7 +96,7 @@ public:
void updateCurveNameNoLegendUpdate(); void updateCurveNameNoLegendUpdate();
QString curveName() const { return m_curveName; } 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 setCustomName(const QString& customName);
void updateCurveVisibility(bool updateParentPlot); void updateCurveVisibility(bool updateParentPlot);
void updateLegendEntryVisibilityAndPlotLegend(); void updateLegendEntryVisibilityAndPlotLegend();

View File

@ -256,6 +256,33 @@ std::vector<double> RimSummaryCurve::valuesY() const
return values; return values;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress RimSummaryCurve::errorSummaryAddressY() const
{
auto addr = summaryAddressY();
addr.setAsErrorResult();
return addr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<double> RimSummaryCurve::errorValuesY() const
{
std::vector<double> 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; RimEnsembleCurveSetCollection* coll;
firstAncestorOrThisOfType(coll); firstAncestorOrThisOfType(coll);
@ -665,14 +692,14 @@ QString RimSummaryCurve::curveExportDescription() const
if (group && group->isEnsemble()) if (group && group->isEnsemble())
{ {
return QString("%1.%2.%3") return QString("%1.%2.%3")
.arg(QString::fromStdString(address.uiText())) .arg(QString::fromStdString(addr.uiText()))
.arg(m_yValuesSummaryCase->caseName()) .arg(m_yValuesSummaryCase->caseName())
.arg(group->name()); .arg(group->name());
} }
else else
{ {
return QString("%1.%2") return QString("%1.%2")
.arg(QString::fromStdString(address.uiText())) .arg(QString::fromStdString(addr.uiText()))
.arg(m_yValuesSummaryCase->caseName()); .arg(m_yValuesSummaryCase->caseName());
} }
} }

View File

@ -58,6 +58,8 @@ public:
RifEclipseSummaryAddress summaryAddressY() const; RifEclipseSummaryAddress summaryAddressY() const;
std::string unitNameY() const; std::string unitNameY() const;
std::vector<double> valuesY() const; std::vector<double> valuesY() const;
RifEclipseSummaryAddress errorSummaryAddressY() const;
std::vector<double> errorValuesY() const;
void setLeftOrRightAxisY(RiaDefines::PlotAxis plotAxis); void setLeftOrRightAxisY(RiaDefines::PlotAxis plotAxis);
RiaDefines::PlotAxis axisY() const; RiaDefines::PlotAxis axisY() const;
const std::vector<time_t>& timeStepsY() const; const std::vector<time_t>& timeStepsY() const;
@ -74,7 +76,7 @@ public:
void updateQwtPlotAxis(); void updateQwtPlotAxis();
void applyCurveAutoNameSettings(const RimSummaryCurveAutoName& autoNameSettings); void applyCurveAutoNameSettings(const RimSummaryCurveAutoName& autoNameSettings);
virtual QString curveExportDescription() const override; virtual QString curveExportDescription(const RifEclipseSummaryAddress& address = RifEclipseSummaryAddress()) const override;
void forceUpdateCurveAppearanceFromCaseType(); void forceUpdateCurveAppearanceFromCaseType();
protected: protected:

View File

@ -1734,16 +1734,32 @@ void populateSummaryCurvesData(std::vector<RimSummaryCurve*> curves, SummaryCurv
} }
CurveData curveData = { curve->curveExportDescription(), curve->summaryAddressY(), curve->valuesY() }; 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) if (casePosInList == cvf::UNDEFINED_SIZE_T)
{ {
auto curveDataList = std::vector<CurveData>({ curveData });
if (hasErrorData) curveDataList.push_back(errorCurveData);
curvesData->caseNames.push_back(curveCaseName); curvesData->caseNames.push_back(curveCaseName);
curvesData->timeSteps.push_back(curve->timeStepsY()); curvesData->timeSteps.push_back(curve->timeStepsY());
curvesData->allCurveData.push_back(std::vector<CurveData>({ curveData })); curvesData->allCurveData.push_back(curveDataList);
} }
else else
{ {
curvesData->allCurveData[casePosInList].push_back(curveData); curvesData->allCurveData[casePosInList].push_back(curveData);
if(hasErrorData) curvesData->allCurveData[casePosInList].push_back(errorCurveData);
} }
} }
} }