diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp index 03bbc40134..0580b7ce64 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.cpp @@ -142,6 +142,9 @@ RimSummaryCurve::RimSummaryCurve() m_curveNameConfig = new RimSummaryCurveAutoName; + CAF_PDM_InitField(&m_isTopZWithinCategory, "isTopZWithinCategory", false, "", "", "", ""); + m_isTopZWithinCategory.uiCapability()->setUiHidden(true); + m_symbolSkipPixelDistance = 10.0f; m_curveThickness = 2; } @@ -670,25 +673,34 @@ void RimSummaryCurve::setZIndexFromCurveInfo() auto sumAddr = summaryAddressY(); auto sumCase = summaryCaseY(); + double zOrder = 0.0; + if (sumCase && sumAddr.isValid()) { if (sumCase->isObservedData()) { - setZOrder(RiuQwtPlotCurve::Z_SINGLE_CURVE_OBSERVED); + zOrder = RiuQwtPlotCurve::Z_SINGLE_CURVE_OBSERVED; } else if (sumAddr.category() == RifEclipseSummaryAddress::SUMMARY_ENSEMBLE_STATISTICS) { - setZOrder(RiuQwtPlotCurve::Z_ENSEMBLE_STAT_CURVE); + zOrder = RiuQwtPlotCurve::Z_ENSEMBLE_STAT_CURVE; } else if (sumCase->ensemble()) { - setZOrder(RiuQwtPlotCurve::Z_ENSEMBLE_CURVE); + zOrder = RiuQwtPlotCurve::Z_ENSEMBLE_CURVE; } else { - setZOrder(RiuQwtPlotCurve::Z_SINGLE_CURVE_NON_OBSERVED); + zOrder = RiuQwtPlotCurve::Z_SINGLE_CURVE_NON_OBSERVED; } } + + if (m_isTopZWithinCategory) + { + zOrder += 1.0; + } + + setZOrder(zOrder); } //-------------------------------------------------------------------------------------------------- @@ -778,6 +790,14 @@ void RimSummaryCurve::markCachedDataForPurge() if(reader) reader->markForCachePurge(m_yValuesCurveVariable->address()); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurve::setAsTopZWithinCategory(bool enable) +{ + m_isTopZWithinCategory = enable; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -816,6 +836,11 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField, RiuPlotMainWindow* mainPlotWindow = RiaApplication::instance()->mainPlotWindow(); mainPlotWindow->updateSummaryPlotToolBar(); + + if (m_showCurve() == true) + { + plot->summaryCurveCollection()->setCurveAsTopZWithinCategory(this); + } } else if (changedField == &m_plotAxis) { diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h index 1e0258e118..8e5305a682 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurve.h @@ -80,6 +80,9 @@ public: void forceUpdateCurveAppearanceFromCaseType(); void markCachedDataForPurge(); + + void setAsTopZWithinCategory(bool enable); + void setZIndexFromCurveInfo(); protected: // RimPlotCurve overrides @@ -106,7 +109,6 @@ private: static void appendOptionItemsForSummaryAddresses(QList* options, RimSummaryCase* summaryCase, RimSummaryFilter* summaryFilter); - void setZIndexFromCurveInfo(); private: // Y values @@ -127,4 +129,5 @@ private: caf::PdmChildField m_curveNameConfig; caf::PdmField> m_plotAxis; + caf::PdmField m_isTopZWithinCategory; }; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp index c218bb1159..221b0686f9 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.cpp @@ -335,6 +335,26 @@ void RimSummaryCurveCollection::handleKeyPressEvent(QKeyEvent* keyEvent) } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryCurveCollection::setCurveAsTopZWithinCategory(RimSummaryCurve* curve) +{ + for (const auto& c : m_curves) + { + if (c == curve) + { + c->setAsTopZWithinCategory(true); + } + else + { + c->setAsTopZWithinCategory(false); + } + + c->setZIndexFromCurveInfo(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h index 66539de4be..b0684669ec 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryCurveCollection.h @@ -67,6 +67,8 @@ public: void handleKeyPressEvent(QKeyEvent* keyEvent); + void setCurveAsTopZWithinCategory(RimSummaryCurve* curve); + private: caf::PdmFieldHandle* objectToggleField() override; void defineObjectEditorAttribute(QString uiConfigName,