#12614 Histogram: make it easier to create histograms.

This commit is contained in:
Kristian Bendiksen committed 2025-08-11 15:26:10 +02:00
1 parent f6ca88f54b
commit 35a77b9778
7 files changed
+95 -26

No files matched your search

@@ -45,7 +45,9 @@ void RicNewDefaultHistogramPlotFeature::onActionTriggered( bool isChecked )
RimHistogramMultiPlot* multiPlot = dynamic_cast<RimHistogramMultiPlot*>( caf::SelectionManager::instance()->selectedItem() );
if ( multiPlot )
{
RicHistogramPlotTools::addNewHistogramPlot( multiPlot );
auto dataSourceType = caf::AppEnum<RicHistogramPlotTools::DataSourceType>::fromText( userData().toString() );
auto plot = RicHistogramPlotTools::addNewHistogramPlot( multiPlot );
RicHistogramPlotTools::createDefaultHistogramCurve( plot, dataSourceType );
}
}
@@ -52,25 +52,11 @@ bool RicNewHistogramCurveFeature::isCommandEnabled() const
//--------------------------------------------------------------------------------------------------
void RicNewHistogramCurveFeature::onActionTriggered( bool isChecked )
{
auto getDataSourceFromString = []( const QString& dataSourceType ) -> RimHistogramDataSource*
{
if ( dataSourceType == "Ensemble Parameter" )
return new RimEnsembleParameterHistogramDataSource();
else if ( dataSourceType == "Grid Statistics" )
return new RimGridStatisticsHistogramDataSource();
else if ( dataSourceType == "Summary Vector" )
return new RimEnsembleSummaryVectorHistogramDataSource();
else if ( dataSourceType == "Ensemble Fracture Statistics" )
return new RimEnsembleFractureHistogramDataSource();
return nullptr;
};
RimHistogramPlot* plot = selectedHistogramPlot();
if ( plot )
{
RimHistogramDataSource* dataSource = getDataSourceFromString( userData().toString() );
dataSource->setDefaults();
RicHistogramPlotTools::createHistogramCurve( plot, dataSource );
auto dataSourceType = caf::AppEnum<RicHistogramPlotTools::DataSourceType>::fromText( userData().toString() );
RicHistogramPlotTools::createDefaultHistogramCurve( plot, dataSourceType );
}
}
@@ -50,7 +50,10 @@ void RicNewHistogramMultiPlotFeature::onActionTriggered( bool isChecked )
if ( RimHistogramMultiPlotCollection* coll = selectedItems[0] )
{
RicHistogramPlotTools::addNewHistogramMultiplot( coll );
auto dataSourceType = caf::AppEnum<RicHistogramPlotTools::DataSourceType>::fromText( userData().toString() );
auto multiplot = RicHistogramPlotTools::addNewHistogramMultiplot( coll );
auto plot = RicHistogramPlotTools::addNewHistogramPlot( multiplot );
RicHistogramPlotTools::createDefaultHistogramCurve( plot, dataSourceType );
}
}
@@ -18,6 +18,10 @@
#include "RicHistogramPlotTools.h"
#include "Histogram/RimEnsembleFractureHistogramDataSource.h"
#include "Histogram/RimEnsembleParameterHistogramDataSource.h"
#include "Histogram/RimEnsembleSummaryVectorHistogramDataSource.h"
#include "Histogram/RimGridStatisticsHistogramDataSource.h"
#include "Histogram/RimHistogramCurve.h"
#include "Histogram/RimHistogramDataSource.h"
#include "Histogram/RimHistogramMultiPlot.h"
@@ -32,6 +36,53 @@
#include "RiuPlotMainWindow.h"
#include "RiuPlotMainWindowTools.h"
namespace caf
{
template <>
void caf::AppEnum<RicHistogramPlotTools::DataSourceType>::setUp()
{
addItem( RicHistogramPlotTools::DataSourceType::ENSEMBLE_PARAMETER, "ENSEMBLE_PARAMETER", "Ensemble Parameter" );
addItem( RicHistogramPlotTools::DataSourceType::GRID_STATISTICS, "GRID_STATISTICS", "Grid Statistics" );
addItem( RicHistogramPlotTools::DataSourceType::SUMMARY_VECTOR, "SUMMARY_VECTOR", "Summary Vector" );
addItem( RicHistogramPlotTools::DataSourceType::ENSEMBLE_FRACTURE_STATISTICS, "ENSEMBLE_FRACTURE_STATISTICS", "Ensemble Fracture Statistics" );
setDefault( RicHistogramPlotTools::DataSourceType::SUMMARY_VECTOR );
}
}; // namespace caf
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RicHistogramPlotTools::DataSourceType> RicHistogramPlotTools::allDataSourceTypes()
{
return { RicHistogramPlotTools::DataSourceType::ENSEMBLE_PARAMETER,
RicHistogramPlotTools::DataSourceType::GRID_STATISTICS,
RicHistogramPlotTools::DataSourceType::SUMMARY_VECTOR,
RicHistogramPlotTools::DataSourceType::ENSEMBLE_FRACTURE_STATISTICS };
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicHistogramPlotTools::createDefaultHistogramCurve( RimHistogramPlot* plot, RicHistogramPlotTools::DataSourceType dataSourceType )
{
auto getDataSourceFromType = []( DataSourceType dataSourceType ) -> RimHistogramDataSource*
{
if ( dataSourceType == DataSourceType::ENSEMBLE_PARAMETER )
return new RimEnsembleParameterHistogramDataSource();
else if ( dataSourceType == DataSourceType::GRID_STATISTICS )
return new RimGridStatisticsHistogramDataSource();
else if ( dataSourceType == DataSourceType::SUMMARY_VECTOR )
return new RimEnsembleSummaryVectorHistogramDataSource();
else if ( dataSourceType == DataSourceType::ENSEMBLE_FRACTURE_STATISTICS )
return new RimEnsembleFractureHistogramDataSource();
return nullptr;
};
RimHistogramDataSource* dataSource = getDataSourceFromType( dataSourceType );
dataSource->setDefaults();
return createHistogramCurve( plot, dataSource );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -18,6 +18,8 @@
#pragma once
#include <vector>
class RimHistogramDataSource;
class RimHistogramPlot;
class RimHistogramMultiPlot;
@@ -29,6 +31,17 @@ class RimHistogramMultiPlotCollection;
class RicHistogramPlotTools
{
public:
enum class DataSourceType
{
ENSEMBLE_PARAMETER,
GRID_STATISTICS,
SUMMARY_VECTOR,
ENSEMBLE_FRACTURE_STATISTICS
};
static std::vector<DataSourceType> allDataSourceTypes();
static void createDefaultHistogramCurve( RimHistogramPlot* plot, DataSourceType dataSourceType );
static void createHistogramCurve( RimHistogramPlot* plot, RimHistogramDataSource* dataSource );
static RimHistogramMultiPlot* addNewHistogramMultiplot();
@@ -18,6 +18,7 @@
#include "RimHistogramMultiPlotCollection.h"
#include "RicHistogramPlotTools.h"
#include "RimHistogramMultiPlot.h"
#include "RimMainPlotCollection.h"
#include "RimProject.h"
@@ -94,5 +95,12 @@ size_t RimHistogramMultiPlotCollection::plotCount() const
//--------------------------------------------------------------------------------------------------
void RimHistogramMultiPlotCollection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const
{
menuBuilder.addCmdFeature( "RicNewHistogramMultiPlotFeature", "New Histogram Plot" );
menuBuilder.subMenuStart( "New Histogram Plot" );
for ( RicHistogramPlotTools::DataSourceType dataSourceType : RicHistogramPlotTools::allDataSourceTypes() )
{
caf::AppEnum<RicHistogramPlotTools::DataSourceType> dstEnum( dataSourceType );
menuBuilder.addCmdFeatureWithUserData( "RicNewHistogramMultiPlotFeature", dstEnum.uiText(), QVariant( dstEnum.text() ) );
}
menuBuilder.subMenuEnd();
}
@@ -163,6 +163,7 @@
#include "RiuMainWindow.h"
#include "OctaveScriptCommands/RicExecuteScriptForCasesFeature.h"
#include "RicHistogramPlotTools.h"
#include "ToggleCommands/RicToggleItemsFeatureImpl.h"
#include "cafCmdFeature.h"
@@ -979,19 +980,24 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
}
else if ( dynamic_cast<RimHistogramMultiPlot*>( firstUiItem ) )
{
menuBuilder << "RicNewDefaultHistogramPlotFeature";
menuBuilder.subMenuStart( "New Histogram Plot" );
for ( RicHistogramPlotTools::DataSourceType dataSourceType : RicHistogramPlotTools::allDataSourceTypes() )
{
caf::AppEnum<RicHistogramPlotTools::DataSourceType> dstEnum( dataSourceType );
menuBuilder.addCmdFeatureWithUserData( "RicNewDefaultHistogramPlotFeature", dstEnum.uiText(), QVariant( dstEnum.text() ) );
}
menuBuilder.subMenuEnd();
}
else if ( dynamic_cast<RimHistogramPlot*>( firstUiItem ) )
{
menuBuilder.subMenuStart( "New Histogram Curve" );
// TODO: make an enum of these?
std::vector<QString> curveTypes = { "Ensemble Parameter", "Grid Statistics", "Summary Vector", "Ensemble Fracture Statistics" };
for ( const QString& curveType : curveTypes )
for ( RicHistogramPlotTools::DataSourceType dataSourceType : RicHistogramPlotTools::allDataSourceTypes() )
{
QString menuText = curveType;
menuBuilder.addCmdFeatureWithUserData( "RicNewHistogramCurveFeature", menuText, QVariant( curveType ) );
caf::AppEnum<RicHistogramPlotTools::DataSourceType> dstEnum( dataSourceType );
menuBuilder.addCmdFeatureWithUserData( "RicNewHistogramCurveFeature", dstEnum.uiText(), QVariant( dstEnum.text() ) );
}
menuBuilder.subMenuEnd();