diff --git a/ApplicationCode/Application/RiaDefines.h b/ApplicationCode/Application/RiaDefines.h index 6c96a9da09..79af883c7d 100644 --- a/ApplicationCode/Application/RiaDefines.h +++ b/ApplicationCode/Application/RiaDefines.h @@ -97,7 +97,8 @@ namespace RiaDefines enum PlotAxis { PLOT_AXIS_LEFT, - PLOT_AXIS_RIGHT + PLOT_AXIS_RIGHT, + PLOT_AXIS_BOTTOM }; double minimumDefaultValuePlot(); diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryAxisProperties.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryAxisProperties.cpp index 7b6c20a73d..b6dcecb473 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryAxisProperties.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryAxisProperties.cpp @@ -141,6 +141,7 @@ void RimSummaryAxisProperties::setNameAndAxis(const QString& name, QwtPlot::Axis m_axis = axis; if (axis == QwtPlot::yRight) this->setUiIcon(QIcon(":/RightAxis16x16.png")); + if (axis == QwtPlot::xBottom) this->setUiIcon(QIcon(":/BottomAxis16x16.png")); } //-------------------------------------------------------------------------------------------------- @@ -157,6 +158,7 @@ QwtPlot::Axis RimSummaryAxisProperties::qwtPlotAxisType() const RiaDefines::PlotAxis RimSummaryAxisProperties::plotAxisType() const { if (m_axis == QwtPlot::yRight) return RiaDefines::PLOT_AXIS_RIGHT; + if (m_axis == QwtPlot::xBottom) return RiaDefines::PLOT_AXIS_BOTTOM; return RiaDefines::PLOT_AXIS_LEFT; } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index 3aed00d0a4..9e243aae33 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -134,7 +134,14 @@ void RimSummaryPlot::updateAxes() updateZoomInQwt(); - updateTimeAxis(); + if (m_isCrossPlot) + { + updateBottomXAxis(); + } + else + { + updateTimeAxis(); + } } //-------------------------------------------------------------------------------------------------- @@ -169,7 +176,14 @@ void RimSummaryPlot::selectAxisInPropertyEditor(int axis) } else if (axis == QwtPlot::xBottom) { - plotwindow->selectAsCurrentItem(m_timeAxisProperties); + if (m_isCrossPlot) + { + plotwindow->selectAsCurrentItem(m_bottomAxisProperties); + } + else + { + plotwindow->selectAsCurrentItem(m_timeAxisProperties); + } } } @@ -576,37 +590,53 @@ std::vector RimSummaryPlot::visibleSummaryCurvesForAxis(RiaDef { std::vector curves; - for (RimSummaryCurve* curve : m_summaryCurves_OBSOLETE) + if (plotAxis == RiaDefines::PLOT_AXIS_BOTTOM) { - if (curve->isCurveVisible() && curve->yAxis() == plotAxis) + if (m_summaryCurveCollection && m_summaryCurveCollection->isCurvesVisible()) { - curves.push_back(curve); - } - } - - for (RimSummaryCurveFilter * curveFilter : m_curveFilters_OBSOLETE) - { - if (curveFilter->isCurvesVisible()) - { - for (RimSummaryCurve* curve : curveFilter->curves()) + for (RimSummaryCurve* curve : m_summaryCurveCollection->curves()) { - if (curve->isCurveVisible() && curve->yAxis() == plotAxis) + if (curve->isCurveVisible()) { curves.push_back(curve); } } } } - - if (m_summaryCurveCollection && m_summaryCurveCollection->isCurvesVisible()) + else { - for (RimSummaryCurve* curve : m_summaryCurveCollection->curves()) + for (RimSummaryCurve* curve : m_summaryCurves_OBSOLETE) { if (curve->isCurveVisible() && curve->yAxis() == plotAxis) { curves.push_back(curve); } } + + for (RimSummaryCurveFilter * curveFilter : m_curveFilters_OBSOLETE) + { + if (curveFilter->isCurvesVisible()) + { + for (RimSummaryCurve* curve : curveFilter->curves()) + { + if (curve->isCurveVisible() && curve->yAxis() == plotAxis) + { + curves.push_back(curve); + } + } + } + } + + if (m_summaryCurveCollection && m_summaryCurveCollection->isCurvesVisible()) + { + for (RimSummaryCurve* curve : m_summaryCurveCollection->curves()) + { + if (curve->isCurveVisible() && curve->yAxis() == plotAxis) + { + curves.push_back(curve); + } + } + } } return curves; @@ -665,9 +695,12 @@ std::vector RimSummaryPlot::visibleTimeHistoryCurvesFo for (auto c : m_gridTimeHistoryCurves) { - if (c->isCurveVisible() && c->yAxis() == plotAxis) + if (c->isCurveVisible()) { - curves.push_back(c); + if (c->yAxis() == plotAxis || plotAxis == RiaDefines::PLOT_AXIS_BOTTOM) + { + curves.push_back(c); + } } } @@ -683,9 +716,12 @@ std::vector RimSummaryPlot::visibleAsciiDataCurvesForAxis(Ri for (auto c : m_asciiDataCurves) { - if (c->isCurveVisible() && c->yAxis() == plotAxis) + if (c->isCurveVisible()) { - curves.push_back(c); + if (c->yAxis() == plotAxis || plotAxis == RiaDefines::PLOT_AXIS_BOTTOM) + { + curves.push_back(c); + } } } @@ -749,7 +785,35 @@ void RimSummaryPlot::updateTimeAxis() timeAxisFont.setPixelSize(m_timeAxisProperties->fontSize); m_qwtPlot->setAxisFont(QwtPlot::xBottom, timeAxisFont); } +} +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSummaryPlot::updateBottomXAxis() +{ + if (!m_qwtPlot) return; + + QwtPlot::Axis qwtAxis = QwtPlot::xBottom; + + RimSummaryAxisProperties* yAxisProperties = m_bottomAxisProperties(); + + if (yAxisProperties->isActive()) + { + m_qwtPlot->enableAxis(qwtAxis, true); + + std::set timeHistoryQuantities; + + RimSummaryPlotYAxisFormatter calc(yAxisProperties, + visibleSummaryCurvesForAxis(RiaDefines::PLOT_AXIS_BOTTOM), + visibleAsciiDataCurvesForAxis(RiaDefines::PLOT_AXIS_BOTTOM), + timeHistoryQuantities); + calc.applyYAxisPropertiesToPlot(m_qwtPlot); + } + else + { + m_qwtPlot->enableAxis(qwtAxis, false); + } } //-------------------------------------------------------------------------------------------------- @@ -788,9 +852,18 @@ void RimSummaryPlot::setZoomWindow(const QwtInterval& leftAxis, const QwtInterva m_rightYAxisProperties->visibleRangeMin = rightAxis.minValue(); m_rightYAxisProperties->updateConnectedEditors(); - m_timeAxisProperties->setVisibleRangeMin(timeAxis.minValue()); - m_timeAxisProperties->setVisibleRangeMax(timeAxis.maxValue()); - m_timeAxisProperties->updateConnectedEditors(); + if (m_isCrossPlot) + { + m_bottomAxisProperties->visibleRangeMax = timeAxis.maxValue(); + m_bottomAxisProperties->visibleRangeMin = timeAxis.minValue(); + m_bottomAxisProperties->updateConnectedEditors(); + } + else + { + m_timeAxisProperties->setVisibleRangeMin(timeAxis.minValue()); + m_timeAxisProperties->setVisibleRangeMax(timeAxis.maxValue()); + m_timeAxisProperties->updateConnectedEditors(); + } disableAutoZoom(); } @@ -1017,13 +1090,13 @@ void RimSummaryPlot::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering { caf::PdmUiTreeOrdering* axisFolder = uiTreeOrdering.add("Axes", ":/Axes16x16.png"); - if (!m_isCrossPlot) + if (m_isCrossPlot) { - axisFolder->add(&m_timeAxisProperties); + axisFolder->add(&m_bottomAxisProperties); } else { - axisFolder->add(&m_bottomAxisProperties); + axisFolder->add(&m_timeAxisProperties); } axisFolder->add(&m_leftYAxisProperties); axisFolder->add(&m_rightYAxisProperties); @@ -1102,8 +1175,17 @@ void RimSummaryPlot::setZoomIntervalsInQwtPlot() left.setMaxValue(m_leftYAxisProperties->visibleRangeMax()); right.setMinValue(m_rightYAxisProperties->visibleRangeMin()); right.setMaxValue(m_rightYAxisProperties->visibleRangeMax()); - time.setMinValue(m_timeAxisProperties->visibleRangeMin()); - time.setMaxValue(m_timeAxisProperties->visibleRangeMax()); + + if (m_isCrossPlot) + { + time.setMinValue(m_bottomAxisProperties->visibleRangeMin()); + time.setMaxValue(m_bottomAxisProperties->visibleRangeMax()); + } + else + { + time.setMinValue(m_timeAxisProperties->visibleRangeMin()); + time.setMaxValue(m_timeAxisProperties->visibleRangeMax()); + } m_qwtPlot->setZoomWindow(left, right, time); } diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h index 74f58e3bf7..b5d73626a1 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -133,6 +133,7 @@ private: void updateZoomForAxis(RiaDefines::PlotAxis plotAxis); void updateTimeAxis(); + void updateBottomXAxis(); void setZoomIntervalsInQwtPlot(); private: