mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4195 Grid Cross Plot: Add annotation item to axis
This commit is contained in:
parent
edc6dad0f7
commit
15f2a76ee1
@ -129,6 +129,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimScaleLegendConfig.h
|
|||||||
${CMAKE_CURRENT_LIST_DIR}/RimReloadCaseTools.h
|
${CMAKE_CURRENT_LIST_DIR}/RimReloadCaseTools.h
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimRiuQwtPlotOwnerInterface.h
|
${CMAKE_CURRENT_LIST_DIR}/RimRiuQwtPlotOwnerInterface.h
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimPlotAxisProperties.h
|
${CMAKE_CURRENT_LIST_DIR}/RimPlotAxisProperties.h
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/RimPlotAxisAnnotation.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -261,6 +262,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimViewNameConfig.cpp
|
|||||||
${CMAKE_CURRENT_LIST_DIR}/RimScaleLegendConfig.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RimScaleLegendConfig.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimReloadCaseTools.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RimReloadCaseTools.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RimPlotAxisProperties.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RimPlotAxisProperties.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/RimPlotAxisAnnotation.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND CODE_HEADER_FILES
|
list(APPEND CODE_HEADER_FILES
|
||||||
|
@ -279,6 +279,10 @@ void RimGridCrossPlot::updateAxisDisplay()
|
|||||||
{
|
{
|
||||||
updateAxisInQwt(RiaDefines::PLOT_AXIS_BOTTOM);
|
updateAxisInQwt(RiaDefines::PLOT_AXIS_BOTTOM);
|
||||||
updateAxisInQwt(RiaDefines::PLOT_AXIS_LEFT);
|
updateAxisInQwt(RiaDefines::PLOT_AXIS_LEFT);
|
||||||
|
|
||||||
|
m_qwtPlot->updateAnnotationObjects(m_xAxisProperties);
|
||||||
|
m_qwtPlot->updateAnnotationObjects(m_yAxisProperties);
|
||||||
|
|
||||||
m_qwtPlot->replot();
|
m_qwtPlot->replot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
83
ApplicationCode/ProjectDataModel/RimPlotAxisAnnotation.cpp
Normal file
83
ApplicationCode/ProjectDataModel/RimPlotAxisAnnotation.cpp
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright (C) 2019- Equinor ASA
|
||||||
|
//
|
||||||
|
// ResInsight is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
//
|
||||||
|
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
||||||
|
// for more details.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "RimPlotAxisAnnotation.h"
|
||||||
|
|
||||||
|
CAF_PDM_SOURCE_INIT(RimPlotAxisAnnotation, "RimPlotAxisAnnotation");
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RimPlotAxisAnnotation::RimPlotAxisAnnotation()
|
||||||
|
{
|
||||||
|
CAF_PDM_InitObject("Plot Axis Annotation", ":/LeftAxis16x16.png", "", "");
|
||||||
|
|
||||||
|
CAF_PDM_InitField(&m_isActive, "Active", true, "Active", "", "", "");
|
||||||
|
m_isActive.uiCapability()->setUiHidden(true);
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_name, "Name", "Name", "", "", "");
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_value, "Value", "Value", "", "", "");
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimPlotAxisAnnotation::setName(const QString& name)
|
||||||
|
{
|
||||||
|
m_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimPlotAxisAnnotation::setValue(double value)
|
||||||
|
{
|
||||||
|
m_value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
QString RimPlotAxisAnnotation::name() const
|
||||||
|
{
|
||||||
|
return m_name();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
double RimPlotAxisAnnotation::value() const
|
||||||
|
{
|
||||||
|
return m_value();
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
caf::PdmFieldHandle* RimPlotAxisAnnotation::userDescriptionField()
|
||||||
|
{
|
||||||
|
return &m_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
caf::PdmFieldHandle* RimPlotAxisAnnotation::objectToggleField()
|
||||||
|
{
|
||||||
|
return &m_isActive;
|
||||||
|
}
|
52
ApplicationCode/ProjectDataModel/RimPlotAxisAnnotation.h
Normal file
52
ApplicationCode/ProjectDataModel/RimPlotAxisAnnotation.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// Copyright (C) 2019- Equinor ASA
|
||||||
|
//
|
||||||
|
// ResInsight is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
//
|
||||||
|
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
//
|
||||||
|
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
||||||
|
// for more details.
|
||||||
|
//
|
||||||
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "cafAppEnum.h"
|
||||||
|
#include "cafPdmField.h"
|
||||||
|
#include "cafPdmObject.h"
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
//==================================================================================================
|
||||||
|
///
|
||||||
|
///
|
||||||
|
//==================================================================================================
|
||||||
|
class RimPlotAxisAnnotation : public caf::PdmObject
|
||||||
|
{
|
||||||
|
CAF_PDM_HEADER_INIT;
|
||||||
|
|
||||||
|
public:
|
||||||
|
RimPlotAxisAnnotation();
|
||||||
|
|
||||||
|
void setName(const QString& name);
|
||||||
|
void setValue(double value);
|
||||||
|
|
||||||
|
QString name() const;
|
||||||
|
double value() const;
|
||||||
|
|
||||||
|
caf::PdmFieldHandle* userDescriptionField() override;
|
||||||
|
caf::PdmFieldHandle* objectToggleField() override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
caf::PdmField<bool> m_isActive;
|
||||||
|
|
||||||
|
caf::PdmField<QString> m_name;
|
||||||
|
caf::PdmField<double> m_value;
|
||||||
|
};
|
@ -22,6 +22,7 @@
|
|||||||
#include "RiaDefines.h"
|
#include "RiaDefines.h"
|
||||||
|
|
||||||
#include "RimRiuQwtPlotOwnerInterface.h"
|
#include "RimRiuQwtPlotOwnerInterface.h"
|
||||||
|
#include "RimPlotAxisAnnotation.h"
|
||||||
|
|
||||||
#include "cafPdmUiSliderEditor.h"
|
#include "cafPdmUiSliderEditor.h"
|
||||||
|
|
||||||
@ -90,6 +91,11 @@ RimPlotAxisProperties::RimPlotAxisProperties()
|
|||||||
CAF_PDM_InitField(&isLogarithmicScaleEnabled, "LogarithmicScale", false, "Logarithmic Scale", "", "", "");
|
CAF_PDM_InitField(&isLogarithmicScaleEnabled, "LogarithmicScale", false, "Logarithmic Scale", "", "", "");
|
||||||
CAF_PDM_InitField(&m_isAxisInverted, "AxisInverted", false, "Invert Axis", "", "", "");
|
CAF_PDM_InitField(&m_isAxisInverted, "AxisInverted", false, "Invert Axis", "", "", "");
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault(&m_annotations, "Annotations", "", "", "", "");
|
||||||
|
|
||||||
|
m_annotations.uiCapability()->setUiHidden(true);
|
||||||
|
m_annotations.push_back(new RimPlotAxisAnnotation);
|
||||||
|
|
||||||
updateOptionSensitivity();
|
updateOptionSensitivity();
|
||||||
}
|
}
|
||||||
// clang-format on
|
// clang-format on
|
||||||
@ -289,6 +295,14 @@ bool RimPlotAxisProperties::isAxisInverted() const
|
|||||||
return m_isAxisInverted();
|
return m_isAxisInverted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<RimPlotAxisAnnotation*> RimPlotAxisProperties::annotations() const
|
||||||
|
{
|
||||||
|
return m_annotations.childObjects();
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -30,6 +30,8 @@
|
|||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
|
class RimPlotAxisAnnotation;
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
@ -67,6 +69,8 @@ public:
|
|||||||
void setAutoZoom(bool enableAutoZoom);
|
void setAutoZoom(bool enableAutoZoom);
|
||||||
bool isAxisInverted() const;
|
bool isAxisInverted() const;
|
||||||
|
|
||||||
|
std::vector<RimPlotAxisAnnotation*> annotations() const;
|
||||||
|
|
||||||
caf::PdmField<QString> customTitle;
|
caf::PdmField<QString> customTitle;
|
||||||
caf::PdmField<int> titleFontSize;
|
caf::PdmField<int> titleFontSize;
|
||||||
caf::PdmField<caf::AppEnum<AxisTitlePositionType>> titlePositionEnum;
|
caf::PdmField<caf::AppEnum<AxisTitlePositionType>> titlePositionEnum;
|
||||||
@ -110,4 +114,6 @@ private:
|
|||||||
QwtPlot::Axis m_axis;
|
QwtPlot::Axis m_axis;
|
||||||
|
|
||||||
bool m_enableTitleTextSettings;
|
bool m_enableTitleTextSettings;
|
||||||
|
|
||||||
|
caf::PdmChildArrayField<RimPlotAxisAnnotation*> m_annotations;
|
||||||
};
|
};
|
||||||
|
@ -28,6 +28,10 @@
|
|||||||
#include "cafSelectionManager.h"
|
#include "cafSelectionManager.h"
|
||||||
#include "cafTitledOverlayFrame.h"
|
#include "cafTitledOverlayFrame.h"
|
||||||
|
|
||||||
|
#include "RimPlotAxisProperties.h"
|
||||||
|
#include "RimPlotAxisAnnotation.h"
|
||||||
|
#include "RiuPlotAnnotationTool.h"
|
||||||
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QResizeEvent>
|
#include <QResizeEvent>
|
||||||
|
|
||||||
@ -37,6 +41,7 @@
|
|||||||
RiuGridCrossQwtPlot::RiuGridCrossQwtPlot(RimViewWindow* ownerViewWindow, QWidget* parent /*= nullptr*/)
|
RiuGridCrossQwtPlot::RiuGridCrossQwtPlot(RimViewWindow* ownerViewWindow, QWidget* parent /*= nullptr*/)
|
||||||
: RiuQwtPlot(ownerViewWindow, parent)
|
: RiuQwtPlot(ownerViewWindow, parent)
|
||||||
{
|
{
|
||||||
|
m_annotationTool = std::unique_ptr<RiuPlotAnnotationTool>(new RiuPlotAnnotationTool());
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -65,7 +70,6 @@ void RiuGridCrossQwtPlot::addOrUpdateCurveSetLegend(RimGridCrossPlotCurveSet* cu
|
|||||||
caf::TitledOverlayFrame* overlayItem = curveSet->legendConfig()->titledOverlayFrame();
|
caf::TitledOverlayFrame* overlayItem = curveSet->legendConfig()->titledOverlayFrame();
|
||||||
resizeOverlayItemToFitPlot(overlayItem);
|
resizeOverlayItemToFitPlot(overlayItem);
|
||||||
overlayWidget->updateFromOverlayItem(overlayItem);
|
overlayWidget->updateFromOverlayItem(overlayItem);
|
||||||
|
|
||||||
}
|
}
|
||||||
this->updateLegendLayout();
|
this->updateLegendLayout();
|
||||||
}
|
}
|
||||||
@ -121,6 +125,26 @@ void RiuGridCrossQwtPlot::updateLegendSizesToMatchPlot()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RiuGridCrossQwtPlot::updateAnnotationObjects(RimPlotAxisProperties* axisProperties)
|
||||||
|
{
|
||||||
|
std::vector<QString> names;
|
||||||
|
std::vector<double> positions;
|
||||||
|
|
||||||
|
for (auto a : axisProperties->annotations())
|
||||||
|
{
|
||||||
|
names.push_back(a->name());
|
||||||
|
positions.push_back(a->value());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!names.empty())
|
||||||
|
{
|
||||||
|
m_annotationTool->attachWellPicks(this, names, positions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -197,12 +221,12 @@ bool RiuGridCrossQwtPlot::resizeOverlayItemToFitPlot(caf::TitledOverlayFrame* ov
|
|||||||
|
|
||||||
bool sizeAltered = false;
|
bool sizeAltered = false;
|
||||||
|
|
||||||
if (plotSize.width() > 0 && (double) legendSize.x() > 0.9 * plotSize.width())
|
if (plotSize.width() > 0 && (double)legendSize.x() > 0.9 * plotSize.width())
|
||||||
{
|
{
|
||||||
legendSize.x() = (plotSize.width() * 9) / 10;
|
legendSize.x() = (plotSize.width() * 9) / 10;
|
||||||
sizeAltered = true;
|
sizeAltered = true;
|
||||||
}
|
}
|
||||||
if (plotSize.height() > 0 && (double) legendSize.y() > 0.9 * plotSize.height())
|
if (plotSize.height() > 0 && (double)legendSize.y() > 0.9 * plotSize.height())
|
||||||
{
|
{
|
||||||
legendSize.y() = (plotSize.height() * 9) / 10;
|
legendSize.y() = (plotSize.height() * 9) / 10;
|
||||||
sizeAltered = true;
|
sizeAltered = true;
|
||||||
@ -211,7 +235,6 @@ bool RiuGridCrossQwtPlot::resizeOverlayItemToFitPlot(caf::TitledOverlayFrame* ov
|
|||||||
return sizeAltered;
|
return sizeAltered;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
|
|
||||||
class RimGridCrossPlotCurveSet;
|
class RimGridCrossPlotCurveSet;
|
||||||
class RiuCvfOverlayItemWidget;
|
class RiuCvfOverlayItemWidget;
|
||||||
|
class RiuPlotAnnotationTool;
|
||||||
|
class RimPlotAxisProperties;
|
||||||
|
|
||||||
namespace caf
|
namespace caf
|
||||||
{
|
{
|
||||||
@ -47,12 +49,16 @@ public:
|
|||||||
void addOrUpdateCurveSetLegend(RimGridCrossPlotCurveSet* curveSetToShowLegendFor);
|
void addOrUpdateCurveSetLegend(RimGridCrossPlotCurveSet* curveSetToShowLegendFor);
|
||||||
void removeCurveSetLegend(RimGridCrossPlotCurveSet* curveSetToShowLegendFor);
|
void removeCurveSetLegend(RimGridCrossPlotCurveSet* curveSetToShowLegendFor);
|
||||||
void updateLegendSizesToMatchPlot();
|
void updateLegendSizesToMatchPlot();
|
||||||
|
void updateAnnotationObjects(RimPlotAxisProperties* axisProperties);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void updateLayout() override;
|
void updateLayout() override;
|
||||||
void updateLegendLayout();
|
void updateLegendLayout();
|
||||||
void resizeEvent(QResizeEvent *e) override;
|
void resizeEvent(QResizeEvent *e) override;
|
||||||
bool resizeOverlayItemToFitPlot(caf::TitledOverlayFrame* overlayItem);
|
bool resizeOverlayItemToFitPlot(caf::TitledOverlayFrame* overlayItem);
|
||||||
void contextMenuEvent(QContextMenuEvent*) override;
|
void contextMenuEvent(QContextMenuEvent*) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<caf::PdmPointer<RimGridCrossPlotCurveSet>, QPointer<RiuCvfOverlayItemWidget>> m_legendWidgets;
|
std::map<caf::PdmPointer<RimGridCrossPlotCurveSet>, QPointer<RiuCvfOverlayItemWidget>> m_legendWidgets;
|
||||||
|
std::unique_ptr<RiuPlotAnnotationTool> m_annotationTool;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user