//////////////////////////////////////////////////////////////////////////////// // // Copyright (C) 2021- 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 // for more details. // ///////////////////////////////////////////////////////////////////////////////// #pragma once class RimPlot; class RimMultiPlot; class RifEclipseSummaryAddress; class RimSummaryCase; class RimSummaryCaseCollection; class RimSummaryPlot; class RimEnsembleCurveSet; class RimSummaryCurve; class RimSummaryMultiPlot; namespace caf { class PdmObject; class PdmObjectHandle; } // namespace caf #include #include //================================================================================================== /// //================================================================================================== class RicSummaryPlotBuilder { public: enum class RicGraphCurveGrouping { SINGLE_CURVES, CURVES_FOR_OBJECT, NONE }; public: RicSummaryPlotBuilder(); void setDataSources( const std::vector& summaryCases, const std::vector& ensembles ); void setAddresses( const std::set& addresses ); void setIndividualPlotPerDataSource( bool enable ); void setGrouping( RicGraphCurveGrouping groping ); std::vector createPlots() const; // Static helper functions static std::set addressesForSource( caf::PdmObject* summarySource ); static RimEnsembleCurveSet* createCurveSet( RimSummaryCaseCollection* ensemble, const RifEclipseSummaryAddress& addr ); static RimSummaryCurve* createCurve( RimSummaryCase* summaryCase, const RifEclipseSummaryAddress& addr ); static std::vector duplicatePlots( const std::vector& plots ); static std::vector duplicateSummaryPlots( const std::vector& plots ); static RimMultiPlot* createAndAppendMultiPlot( const std::vector& plots ); static void appendPlotsToMultiPlot( RimMultiPlot* multiPlot, const std::vector& plots ); static RimSummaryMultiPlot* createAndAppendDefaultSummaryMultiPlot( const std::vector& cases, const std::vector& ensembles ); static RimSummaryMultiPlot* createAndAppendSingleSummaryMultiPlot( RimSummaryPlot* plot ); static RimSummaryMultiPlot* createAndAppendSummaryMultiPlot( const std::vector& plots ); static RimSummaryMultiPlot* createAndAppendSummaryMultiPlot( const std::vector& objects ); static void appendPlotsToSummaryMultiPlot( RimSummaryMultiPlot* multiPlot, const std::vector& plots ); static RimSummaryPlot* createPlot( const std::vector& summaryCurves ); static RimSummaryPlot* createPlot( const std::set& addresses, const std::vector& summaryCases, const std::vector& ensembles ); static void appendCurvesToPlot( RimSummaryPlot* summaryPlot, const std::set& addresses, const std::vector& summaryCases, const std::vector& ensembles ); private: std::set m_addresses; std::vector m_summaryCases; std::vector m_ensembles; bool m_individualPlotPerDataSource; RicGraphCurveGrouping m_graphCurveGrouping; };