#5539 First actual data in Analysis plot

This commit is contained in:
Jacob Støren 2020-02-18 11:48:04 +01:00
parent 591e5ab503
commit 31b215ac78
6 changed files with 219 additions and 25 deletions

View File

@ -22,6 +22,7 @@
#include "RimAnalysisPlotDataEntry.h"
#include "RiuGroupedBarChartBuilder.h"
#include "RiuSummaryQwtPlot.h"
#include "RiuSummaryVectorSelectionDialog.h"
#include "qwt_column_symbol.h"
#include "qwt_legend.h"
@ -29,6 +30,11 @@
#include "qwt_plot_barchart.h"
#include "qwt_scale_draw.h"
#include "cafPdmUiActionPushButtonEditor.h"
#include "cafPdmUiGroup.h"
#include "RifSummaryReaderInterface.h"
#include "RimSummaryCase.h"
#include <limits>
#include <map>
@ -63,9 +69,20 @@ RimAnalysisPlot::RimAnalysisPlot()
CAF_PDM_InitField( &m_useAutoPlotTitle, "IsUsingAutoName", true, "Auto Title", "", "", "" );
CAF_PDM_InitField( &m_description, "PlotDescription", QString( "Summary Plot" ), "Name", "", "", "" );
CAF_PDM_InitField( &m_description, "PlotDescription", QString( "Analysis Plot" ), "Name", "", "", "" );
CAF_PDM_InitFieldNoDefault( &m_selectedVarsUiField, "selectedVarsUiField", "Selected Variables", "", "", "" );
m_selectedVarsUiField.xmlCapability()->disableIO();
m_selectedVarsUiField.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::HIDDEN );
m_selectedVarsUiField.uiCapability()->setUiReadOnly( true );
// CAF_PDM_InitField( &m_selectVariablesButtonField, "BrowseButton", false, "...", ":/Histogram16x16.png", "", "" );
CAF_PDM_InitField( &m_selectVariablesButtonField, "BrowseButton", false, "...", "", "", "" );
caf::PdmUiActionPushButtonEditor::configureEditorForField( &m_selectVariablesButtonField );
CAF_PDM_InitFieldNoDefault( &m_data, "AnalysisPlotData", "", "", "", "" );
m_data.uiCapability()->setUiTreeChildrenHidden( true );
m_data.uiCapability()->setUiTreeHidden( true );
CAF_PDM_InitFieldNoDefault( &m_selectedTimeSteps, "TimeSteps", "", "", "", "" );
@ -118,17 +135,24 @@ void RimAnalysisPlot::setShowPlotTitle( bool showTitle )
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::detachAllCurves() {}
void RimAnalysisPlot::detachAllCurves()
{
if ( m_plotWidget ) m_plotWidget->detachItems();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::reattachAllCurves() {}
void RimAnalysisPlot::reattachAllCurves()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::updateAxes() {}
void RimAnalysisPlot::updateAxes()
{
}
//--------------------------------------------------------------------------------------------------
///
@ -157,7 +181,9 @@ QString RimAnalysisPlot::asciiDataForPlotExport() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::updateLegend() {}
void RimAnalysisPlot::updateLegend()
{
}
//--------------------------------------------------------------------------------------------------
///
@ -181,27 +207,37 @@ bool RimAnalysisPlot::applyFontSize( RiaDefines::FontSettingType fontSettingType
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::setAutoScaleXEnabled( bool enabled ) {}
void RimAnalysisPlot::setAutoScaleXEnabled( bool enabled )
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::setAutoScaleYEnabled( bool enabled ) {}
void RimAnalysisPlot::setAutoScaleYEnabled( bool enabled )
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::zoomAll() {}
void RimAnalysisPlot::zoomAll()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::updateZoomInQwt() {}
void RimAnalysisPlot::updateZoomInQwt()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::updateZoomFromQwt() {}
void RimAnalysisPlot::updateZoomFromQwt()
{
}
//--------------------------------------------------------------------------------------------------
///
@ -214,7 +250,9 @@ caf::PdmObject* RimAnalysisPlot::findPdmObjectFromQwtCurve( const QwtPlotCurve*
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::onAxisSelected( int axis, bool toggle ) {}
void RimAnalysisPlot::onAxisSelected( int axis, bool toggle )
{
}
//--------------------------------------------------------------------------------------------------
///
@ -260,12 +298,16 @@ RiuQwtPlotWidget* RimAnalysisPlot::doCreatePlotViewWidget( QWidget* mainWindowPa
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::doUpdateLayout() {}
void RimAnalysisPlot::doUpdateLayout()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::doRemoveFromCollection() {}
void RimAnalysisPlot::doRemoveFromCollection()
{
}
//--------------------------------------------------------------------------------------------------
///
@ -298,18 +340,77 @@ void RimAnalysisPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedField,
const QVariant& oldValue,
const QVariant& newValue )
{
if ( changedField == &m_selectVariablesButtonField )
{
// Do select variables
RiuSummaryVectorSelectionDialog dlg( nullptr );
// RimSummaryCase* candidateCase = m_yValuesSummaryCase();
// RifEclipseSummaryAddress candicateAddress = m_yValuesSummaryAddress->address();
// if ( candidateCase == nullptr )
//{
// candidateCase = m_xValuesSummaryCase();
//}
//
// if ( !candicateAddress.isValid() )
//{
// candicateAddress = m_xValuesSummaryAddress->address();
//}
// dlg.hideEnsembles();
dlg.enableMultiSelect( true );
dlg.setCaseAndAddress( nullptr, RifEclipseSummaryAddress() );
if ( dlg.exec() == QDialog::Accepted )
{
std::vector<RiaSummaryCurveDefinition> summaryVectorDefinitions = dlg.curveSelection();
m_data.deleteAllChildObjects();
for ( const RiaSummaryCurveDefinition& vectorDef : summaryVectorDefinitions )
{
auto plotEntry = new RimAnalysisPlotDataEntry();
plotEntry->setFromCurveDefinition( vectorDef );
m_data.push_back( plotEntry );
}
}
m_selectVariablesButtonField = false;
}
this->loadDataAndUpdate();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= "" */ ) {}
void RimAnalysisPlot::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= "" */ )
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) {}
void RimAnalysisPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
uiOrdering.add( &m_showPlotTitle );
uiOrdering.add( &m_useAutoPlotTitle );
uiOrdering.add( &m_description );
caf::PdmUiGroup* selVectorsGrp = uiOrdering.addNewGroup( "Selected Vectors" );
selVectorsGrp->add( &m_selectedVarsUiField );
selVectorsGrp->add( &m_selectVariablesButtonField, {false} );
caf::PdmUiGroup* timeStepGrp = uiOrdering.addNewGroup( "Time Steps" );
timeStepGrp->add( &m_selectedTimeSteps );
caf::PdmUiGroup* sortGrp = uiOrdering.addNewGroup( "Sorting and Grouping" );
sortGrp->add( &m_sortGroupSortingOrder );
caf::PdmUiGroup* legendGrp = uiOrdering.addNewGroup( "Legends And Labels" );
legendGrp->add( &m_showPlotLegends );
legendGrp->add( &m_sortGroupForLegend );
legendGrp->add( &m_legendFontSize );
uiOrdering.skipRemainingFields( true );
}
//--------------------------------------------------------------------------------------------------
///
@ -320,9 +421,13 @@ void RimAnalysisPlot::onLoadDataAndUpdate()
if ( m_plotWidget )
{
m_plotWidget->detachItems( QwtPlotItem::Rtti_PlotBarChart );
m_plotWidget->detachItems( QwtPlotItem::Rtti_PlotScale );
RiuGroupedBarChartBuilder chartBuilder;
buildTestPlot( chartBuilder );
// buildTestPlot( chartBuilder );
buildChart( chartBuilder );
chartBuilder.addBarChartToPlot( m_plotWidget, Qt::Horizontal );
@ -331,7 +436,7 @@ void RimAnalysisPlot::onLoadDataAndUpdate()
QwtLegend* legend = new QwtLegend( m_plotWidget );
m_plotWidget->insertLegend( legend, QwtPlot::RightLegend );
}
else
else if ( !m_showPlotLegends )
{
m_plotWidget->insertLegend( nullptr );
}
@ -340,6 +445,34 @@ void RimAnalysisPlot::onLoadDataAndUpdate()
}
this->updateAxes();
this->updatePlotTitle();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::buildChart( RiuGroupedBarChartBuilder& chartBuilder )
{
for ( const RimAnalysisPlotDataEntry* dataEntry : m_data )
{
if ( !dataEntry->summaryCase() ) continue; // Todo, ensembles
RifSummaryReaderInterface* reader = dataEntry->summaryCase()->summaryReader();
if ( !reader ) continue;
const std::vector<time_t>& timesteps = reader->timeSteps( dataEntry->summaryAddress() );
std::vector<double> values;
reader->values( dataEntry->summaryAddress(), &values );
// Todo: find selected timestep indices
int timestepIdx = values.size() * 0.5;
QString description = dataEntry->summaryCase()->displayCaseName() + " : " +
QString::fromStdString( dataEntry->summaryAddress().uiText() );
chartBuilder.addBarEntry( "", "", "", std::numeric_limits<double>::infinity(), "", description, values[timestepIdx] );
}
}
//--------------------------------------------------------------------------------------------------
@ -392,3 +525,17 @@ void RimAnalysisPlot::buildTestPlot( RiuGroupedBarChartBuilder& chartBuilder )
chartBuilder.addBarEntry( "", "", "", 1.6, "", "E", 1.6 );
chartBuilder.addBarEntry( "", "", "", 2.4, "", "F", -2.4 );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlot::updatePlotTitle()
{
if ( m_plotWidget )
{
QString plotTitle = description();
m_plotWidget->setPlotTitle( plotTitle );
m_plotWidget->setPlotTitleEnabled( m_showPlotTitle && isMdiWindow() );
m_plotWidget->scheduleReplot();
}
}

View File

@ -100,14 +100,14 @@ private:
// Overridden PDM methods
caf::PdmFieldHandle* userDescriptionField() override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField,
const QVariant& oldValue,
const QVariant& newValue ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "" ) override;
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void onLoadDataAndUpdate() override;
void buildChart( RiuGroupedBarChartBuilder& chartBuilder );
void buildTestPlot( RiuGroupedBarChartBuilder& chartBuilder );
void updatePlotTitle();
private:
QPointer<RiuQwtPlotWidget> m_plotWidget;
@ -116,6 +116,9 @@ private:
caf::PdmField<bool> m_useAutoPlotTitle;
caf::PdmField<QString> m_description;
caf::PdmField<QString> m_selectedVarsUiField;
caf::PdmField<bool> m_selectVariablesButtonField;
caf::PdmChildArrayField<RimAnalysisPlotDataEntry*> m_data;
caf::PdmField<std::vector<QDateTime>> m_selectedTimeSteps;

View File

@ -17,7 +17,12 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RimAnalysisPlotDataEntry.h"
#include "RiaSummaryCurveDefinition.h"
#include "RifEclipseSummaryAddress.h"
#include "RimSummaryCaseCollection.h"
#include "RimSummaryAddress.h"
#include "RimSummaryCase.h"
@ -34,6 +39,10 @@ RimAnalysisPlotDataEntry::RimAnalysisPlotDataEntry()
m_summaryCase.uiCapability()->setUiTreeChildrenHidden( true );
m_summaryCase.uiCapability()->setAutoAddingOptionFromValue( false );
CAF_PDM_InitFieldNoDefault( &m_ensemble, "Ensemble", "Ensemble", "", "", "" );
m_summaryCase.uiCapability()->setUiTreeChildrenHidden( true );
m_summaryCase.uiCapability()->setAutoAddingOptionFromValue( false );
CAF_PDM_InitFieldNoDefault( &m_summaryAddress, "SummaryAddress", "Summary Address", "", "", "" );
m_summaryAddress.uiCapability()->setUiHidden( true );
m_summaryAddress.uiCapability()->setUiTreeChildrenHidden( true );
@ -43,7 +52,19 @@ RimAnalysisPlotDataEntry::RimAnalysisPlotDataEntry()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimAnalysisPlotDataEntry::~RimAnalysisPlotDataEntry() {}
RimAnalysisPlotDataEntry::~RimAnalysisPlotDataEntry()
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimAnalysisPlotDataEntry::setFromCurveDefinition( const RiaSummaryCurveDefinition& curveDef )
{
m_summaryAddress->setAddress( curveDef.summaryAddress() );
m_ensemble = curveDef.ensemble();
m_summaryCase = curveDef.summaryCase();
}
//--------------------------------------------------------------------------------------------------
///
@ -61,6 +82,14 @@ RimSummaryCase* RimAnalysisPlotDataEntry::summaryCase() const
return m_summaryCase;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCaseCollection* RimAnalysisPlotDataEntry::ensemble() const
{
return m_ensemble;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -25,6 +25,8 @@
class RimSummaryCase;
class RimSummaryAddress;
class RimSummaryCaseCollection;
class RiaSummaryCurveDefinition;
class RimAnalysisPlotDataEntry : public caf::PdmObject
{
@ -34,13 +36,17 @@ public:
RimAnalysisPlotDataEntry();
~RimAnalysisPlotDataEntry() override;
void setSummaryCase( RimSummaryCase* sumCase );
RimSummaryCase* summaryCase() const;
void setFromCurveDefinition( const RiaSummaryCurveDefinition& curveDef );
void setSummaryCase( RimSummaryCase* sumCase );
RimSummaryCase* summaryCase() const;
RimSummaryCaseCollection* ensemble() const;
void setSummaryAddress( const RifEclipseSummaryAddress& address );
RifEclipseSummaryAddress summaryAddress() const;
private:
caf::PdmPtrField<RimSummaryCase*> m_summaryCase;
caf::PdmChildField<RimSummaryAddress*> m_summaryAddress;
caf::PdmPtrField<RimSummaryCase*> m_summaryCase;
caf::PdmPtrField<RimSummaryCaseCollection*> m_ensemble;
caf::PdmChildField<RimSummaryAddress*> m_summaryAddress;
};

View File

@ -131,6 +131,14 @@ void RiuSummaryVectorSelectionDialog::hideSummaryCases()
summaryAddressSelection()->hideSummaryCases( true );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuSummaryVectorSelectionDialog::enableMultiSelect( bool enable )
{
summaryAddressSelection()->setMultiSelectionMode(enable);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -45,6 +45,7 @@ public:
void hideEnsembles();
void hideSummaryCases();
void enableMultiSelect(bool enable);
private:
RiuSummaryVectorSelectionUi* summaryAddressSelection() const;