mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2153 Cross Plot : Show warning when no overlapping time steps are present
This commit is contained in:
parent
a51b4be1dc
commit
d19089710c
@ -35,6 +35,7 @@
|
|||||||
#include "RimSummaryFilter.h"
|
#include "RimSummaryFilter.h"
|
||||||
#include "RimSummaryPlot.h"
|
#include "RimSummaryPlot.h"
|
||||||
#include "RimSummaryTimeAxisProperties.h"
|
#include "RimSummaryTimeAxisProperties.h"
|
||||||
|
#include "RimTools.h"
|
||||||
|
|
||||||
#include "RiuLineSegmentQwtPlotCurve.h"
|
#include "RiuLineSegmentQwtPlotCurve.h"
|
||||||
#include "RiuSummaryCurveDefSelectionDialog.h"
|
#include "RiuSummaryCurveDefSelectionDialog.h"
|
||||||
@ -47,6 +48,8 @@
|
|||||||
|
|
||||||
#include "qwt_date.h"
|
#include "qwt_date.h"
|
||||||
|
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
|
||||||
// See also corresponding fake implementations in RimSummaryCurveFilter
|
// See also corresponding fake implementations in RimSummaryCurveFilter
|
||||||
QTextStream& operator << (QTextStream& str, const RifEclipseSummaryAddress& sobj)
|
QTextStream& operator << (QTextStream& str, const RifEclipseSummaryAddress& sobj)
|
||||||
@ -268,7 +271,7 @@ std::vector<double> RimSummaryCurve::valuesX() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
const std::vector<time_t>& RimSummaryCurve::timeSteps() const
|
const std::vector<time_t>& RimSummaryCurve::timeStepsY() const
|
||||||
{
|
{
|
||||||
static std::vector<time_t> emptyVector;
|
static std::vector<time_t> emptyVector;
|
||||||
RifSummaryReaderInterface* reader = valuesSummaryReaderY();
|
RifSummaryReaderInterface* reader = valuesSummaryReaderY();
|
||||||
@ -394,7 +397,7 @@ void RimSummaryCurve::onLoadDataAndUpdate(bool updateParentPlot)
|
|||||||
auto curveValuesX = this->valuesX();
|
auto curveValuesX = this->valuesX();
|
||||||
auto curveTimeStepsX = timeStepsX();
|
auto curveTimeStepsX = timeStepsX();
|
||||||
|
|
||||||
auto curveTimeStepsY = timeSteps();
|
auto curveTimeStepsY = timeStepsY();
|
||||||
|
|
||||||
if (curveValuesY.empty() || curveValuesX.empty())
|
if (curveValuesY.empty() || curveValuesX.empty())
|
||||||
{
|
{
|
||||||
@ -421,7 +424,7 @@ void RimSummaryCurve::onLoadDataAndUpdate(bool updateParentPlot)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::vector<time_t> curveTimeStepsY = this->timeSteps();
|
std::vector<time_t> curveTimeStepsY = this->timeStepsY();
|
||||||
if (curveTimeStepsY.size() > 0 && curveTimeStepsY.size() == curveValuesY.size())
|
if (curveTimeStepsY.size() > 0 && curveTimeStepsY.size() == curveValuesY.size())
|
||||||
{
|
{
|
||||||
if (plot->timeAxisProperties()->timeMode() == RimSummaryTimeAxisProperties::DATE)
|
if (plot->timeAxisProperties()->timeMode() == RimSummaryTimeAxisProperties::DATE)
|
||||||
@ -616,6 +619,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
|
|||||||
CVF_ASSERT(plot);
|
CVF_ASSERT(plot);
|
||||||
|
|
||||||
bool loadAndUpdate = false;
|
bool loadAndUpdate = false;
|
||||||
|
bool crossPlotTestForMatchingTimeSteps = false;
|
||||||
|
|
||||||
if(changedField == &m_yValuesUiFilterResultSelection)
|
if(changedField == &m_yValuesUiFilterResultSelection)
|
||||||
{
|
{
|
||||||
@ -661,6 +665,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
|
|||||||
m_yValuesSummaryCase = curveSelection[0].summaryCase();
|
m_yValuesSummaryCase = curveSelection[0].summaryCase();
|
||||||
m_yValuesCurveVariable->setAddress(curveSelection[0].summaryAddress());
|
m_yValuesCurveVariable->setAddress(curveSelection[0].summaryAddress());
|
||||||
|
|
||||||
|
crossPlotTestForMatchingTimeSteps = true;
|
||||||
loadAndUpdate = true;
|
loadAndUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -680,6 +685,7 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
|
|||||||
m_xValuesSummaryCase = curveSelection[0].summaryCase();
|
m_xValuesSummaryCase = curveSelection[0].summaryCase();
|
||||||
m_xValuesCurveVariable->setAddress(curveSelection[0].summaryAddress());
|
m_xValuesCurveVariable->setAddress(curveSelection[0].summaryAddress());
|
||||||
|
|
||||||
|
crossPlotTestForMatchingTimeSteps = true;
|
||||||
loadAndUpdate = true;
|
loadAndUpdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -687,6 +693,61 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
|
|||||||
m_xPushButtonSelectSummaryAddress = false;
|
m_xPushButtonSelectSummaryAddress = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (crossPlotTestForMatchingTimeSteps)
|
||||||
|
{
|
||||||
|
auto curveValuesX = this->valuesX();
|
||||||
|
auto curveTimeStepsX = timeStepsX();
|
||||||
|
|
||||||
|
auto curveValuesY = this->valuesY();
|
||||||
|
auto curveTimeStepsY = timeStepsY();
|
||||||
|
|
||||||
|
if (!curveValuesX.empty() && !curveValuesY.empty())
|
||||||
|
{
|
||||||
|
RigTimeHistoryCurveMerger curveMerger;
|
||||||
|
curveMerger.addCurveData(curveValuesX, curveTimeStepsX);
|
||||||
|
curveMerger.addCurveData(curveValuesY, curveTimeStepsY);
|
||||||
|
curveMerger.computeInterpolatedValues();
|
||||||
|
|
||||||
|
if (curveMerger.validIntervalsForAllTimeSteps().size() == 0)
|
||||||
|
{
|
||||||
|
QString description;
|
||||||
|
|
||||||
|
{
|
||||||
|
QDateTime first = QDateTime::fromTime_t(curveTimeStepsX.front());
|
||||||
|
QDateTime last = QDateTime::fromTime_t(curveTimeStepsX.back());
|
||||||
|
|
||||||
|
std::vector<QDateTime> timeSteps;
|
||||||
|
timeSteps.push_back(first);
|
||||||
|
timeSteps.push_back(last);
|
||||||
|
|
||||||
|
QString formatString = RimTools::createTimeFormatStringFromDates(timeSteps);
|
||||||
|
|
||||||
|
description += QString("Time step range for X : '%1' - '%2'")
|
||||||
|
.arg(first.toString(formatString))
|
||||||
|
.arg(last.toString(formatString));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
QDateTime first = QDateTime::fromTime_t(curveTimeStepsY.front());
|
||||||
|
QDateTime last = QDateTime::fromTime_t(curveTimeStepsY.back());
|
||||||
|
|
||||||
|
std::vector<QDateTime> timeSteps;
|
||||||
|
timeSteps.push_back(first);
|
||||||
|
timeSteps.push_back(last);
|
||||||
|
|
||||||
|
QString formatString = RimTools::createTimeFormatStringFromDates(timeSteps);
|
||||||
|
|
||||||
|
description += "\n";
|
||||||
|
description += QString("Time step range for Y : '%1' - '%2'")
|
||||||
|
.arg(first.toString(formatString))
|
||||||
|
.arg(last.toString(formatString));
|
||||||
|
}
|
||||||
|
|
||||||
|
QMessageBox::warning(NULL, "Detected no overlapping time steps", description);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (loadAndUpdate)
|
if (loadAndUpdate)
|
||||||
{
|
{
|
||||||
this->loadDataAndUpdate(true);
|
this->loadDataAndUpdate(true);
|
||||||
|
@ -60,6 +60,7 @@ public:
|
|||||||
std::vector<double> valuesY() const;
|
std::vector<double> valuesY() 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;
|
||||||
|
|
||||||
// X Axis functions
|
// X Axis functions
|
||||||
RifEclipseSummaryAddress summaryAddressX() const;
|
RifEclipseSummaryAddress summaryAddressX() const;
|
||||||
@ -67,7 +68,6 @@ public:
|
|||||||
std::vector<double> valuesX() const;
|
std::vector<double> valuesX() const;
|
||||||
|
|
||||||
// Other
|
// Other
|
||||||
const std::vector<time_t>& timeSteps() const;
|
|
||||||
void updateQwtPlotAxis();
|
void updateQwtPlotAxis();
|
||||||
void applyCurveAutoNameSettings(const RimSummaryCurveAutoName& autoNameSettings);
|
void applyCurveAutoNameSettings(const RimSummaryCurveAutoName& autoNameSettings);
|
||||||
|
|
||||||
|
@ -228,9 +228,9 @@ time_t RimSummaryPlot::firstTimeStepOfFirstCurve()
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstCurve && firstCurve->timeSteps().size() > 0)
|
if (firstCurve && firstCurve->timeStepsY().size() > 0)
|
||||||
{
|
{
|
||||||
return firstCurve->timeSteps()[0];
|
return firstCurve->timeStepsY()[0];
|
||||||
}
|
}
|
||||||
else return time_t(0);
|
else return time_t(0);
|
||||||
}
|
}
|
||||||
@ -278,7 +278,7 @@ QString RimSummaryPlot::asciiDataForPlotExport() const
|
|||||||
{
|
{
|
||||||
caseNames.push_back(curveCaseName);
|
caseNames.push_back(curveCaseName);
|
||||||
|
|
||||||
std::vector<time_t> curveTimeSteps = curve->timeSteps();
|
std::vector<time_t> curveTimeSteps = curve->timeStepsY();
|
||||||
timeSteps.push_back(curveTimeSteps);
|
timeSteps.push_back(curveTimeSteps);
|
||||||
|
|
||||||
std::vector<std::vector<double> > curveDataForCase;
|
std::vector<std::vector<double> > curveDataForCase;
|
||||||
|
Loading…
Reference in New Issue
Block a user