#4796 Summary Plot Template : Move code to SummaryPlotTemplateTools

This commit is contained in:
Magne Sjaastad 2019-09-29 12:42:38 +02:00
parent fbfba745c3
commit 18e6bec1bf
6 changed files with 105 additions and 196 deletions

View File

@ -18,28 +18,18 @@
#include "RicCreatePlotFromSelectionFeature.h" #include "RicCreatePlotFromSelectionFeature.h"
#include "RiaGuiApplication.h"
#include "RicSelectPlotTemplateUi.h" #include "RicSelectPlotTemplateUi.h"
#include "RicSummaryPlotTemplateTools.h" #include "RicSummaryPlotTemplateTools.h"
#include "RiaGuiApplication.h"
#include "RiaLogging.h"
#include "RiaSummaryTools.h"
#include "RifSummaryReaderInterface.h"
#include "PlotTemplates/RimPlotTemplateFileItem.h" #include "PlotTemplates/RimPlotTemplateFileItem.h"
#include "RimDialogData.h" #include "RimDialogData.h"
#include "RimMainPlotCollection.h"
#include "RimProject.h" #include "RimProject.h"
#include "RimSummaryCase.h" #include "RimSummaryCase.h"
#include "RimSummaryCurve.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "RimWellPath.h"
#include "RiuPlotMainWindow.h" #include "RiuPlotMainWindow.h"
#include "cafPdmObject.h"
#include "cafPdmUiPropertyViewDialog.h" #include "cafPdmUiPropertyViewDialog.h"
#include "cafSelectionManager.h" #include "cafSelectionManager.h"
@ -61,8 +51,7 @@ bool RicCreatePlotFromSelectionFeature::isCommandEnabled()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RicCreatePlotFromSelectionFeature::onActionTriggered( bool isChecked ) void RicCreatePlotFromSelectionFeature::onActionTriggered( bool isChecked )
{ {
RiuPlotMainWindow* plotwindow = RiaGuiApplication::instance()->mainPlotWindow(); RiuPlotMainWindow* plotwindow = RiaGuiApplication::instance()->mainPlotWindow();
RicSelectPlotTemplateUi* ui = RiaGuiApplication::instance()->project()->dialogData()->selectPlotTemplateUi(); RicSelectPlotTemplateUi* ui = RiaGuiApplication::instance()->project()->dialogData()->selectPlotTemplateUi();
caf::PdmUiPropertyViewDialog propertyDialog( plotwindow, ui, "Select Plot Template", "" ); caf::PdmUiPropertyViewDialog propertyDialog( plotwindow, ui, "Select Plot Template", "" );
@ -75,60 +64,7 @@ void RicCreatePlotFromSelectionFeature::onActionTriggered( bool isChecked )
std::vector<RimSummaryCase*> sumCases = selectedSummaryCases(); std::vector<RimSummaryCase*> sumCases = selectedSummaryCases();
RimSummaryPlot* newSummaryPlot = RicSummaryPlotTemplateTools::createPlotFromTemplateFile( fileName ); RimSummaryPlot* newSummaryPlot = RicSummaryPlotTemplateTools::createPlotFromTemplateFile( fileName );
if ( newSummaryPlot ) RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection( newSummaryPlot, sumCases );
{
RimSummaryPlotCollection* plotColl =
RiaApplication::instance()->project()->mainPlotCollection()->summaryPlotCollection();
plotColl->summaryPlots.push_back( newSummaryPlot );
newSummaryPlot->resolveReferencesRecursively();
newSummaryPlot->initAfterReadRecursively();
auto summaryCurves = newSummaryPlot->summaryCurves();
for ( const auto& curve : summaryCurves )
{
auto fieldHandle = curve->findField( "SummaryCase" );
if ( fieldHandle )
{
auto referenceString = fieldHandle->xmlCapability()->referenceString();
auto stringList = referenceString.split( " " );
if ( stringList.size() == 2 )
{
QString indexAsString = stringList[1];
bool conversionOk = false;
auto index = indexAsString.toUInt( &conversionOk );
if ( conversionOk && index < sumCases.size() )
{
auto summaryCaseY = sumCases[index];
curve->setSummaryCaseY( summaryCaseY );
auto currentAddressY = curve->summaryAddressY();
if ( summaryCaseY->summaryReader() &&
!summaryCaseY->summaryReader()->hasAddress( currentAddressY ) )
{
auto allAddresses = summaryCaseY->summaryReader()->allResultAddresses();
auto candidate = RicCreatePlotFromSelectionFeature::firstAddressByQuantity( currentAddressY,
allAddresses );
if ( candidate.category() != RifEclipseSummaryAddress::SUMMARY_INVALID )
{
curve->setSummaryAddressY( candidate );
}
}
}
}
}
}
// TODO: Create additional curves in selected case count is larger than template count
plotColl->updateConnectedEditors();
newSummaryPlot->loadDataAndUpdate();
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -150,21 +86,3 @@ std::vector<RimSummaryCase*> RicCreatePlotFromSelectionFeature::selectedSummaryC
return objects; return objects;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress
RicCreatePlotFromSelectionFeature::firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses )
{
for ( const auto& a : allAddresses )
{
if ( sourceAddress.quantityName() == a.quantityName() )
{
return a;
}
}
return RifEclipseSummaryAddress();
}

View File

@ -18,12 +18,8 @@
#pragma once #pragma once
#include "RifEclipseSummaryAddress.h"
#include "cafCmdFeature.h" #include "cafCmdFeature.h"
#include <set>
class RimSummaryCase; class RimSummaryCase;
//================================================================================================== //==================================================================================================
@ -39,7 +35,5 @@ protected:
void setupActionLook( QAction* actionToSetup ) override; void setupActionLook( QAction* actionToSetup ) override;
private: private:
std::vector<RimSummaryCase*> selectedSummaryCases() const; std::vector<RimSummaryCase*> selectedSummaryCases() const;
static RifEclipseSummaryAddress firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses );
}; };

View File

@ -18,33 +18,12 @@
#include "RicCreatePlotFromTemplateFeature.h" #include "RicCreatePlotFromTemplateFeature.h"
#include "RicSelectPlotTemplateUi.h"
#include "RicSummaryPlotTemplateTools.h" #include "RicSummaryPlotTemplateTools.h"
#include "RiaGuiApplication.h"
#include "RiaLogging.h"
#include "RiaSummaryTools.h"
#include "RifSummaryReaderInterface.h"
#include "PlotTemplates/RimPlotTemplateFileItem.h"
#include "RimDialogData.h"
#include "RimMainPlotCollection.h"
#include "RimProject.h"
#include "RimSummaryCase.h" #include "RimSummaryCase.h"
#include "RimSummaryCurve.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "RimWellPath.h"
#include "RiuPlotMainWindow.h"
#include "cafPdmObject.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cafSelectionManager.h" #include "cafSelectionManager.h"
#include <QAction> #include <QAction>
#include <QFileDialog>
CAF_CMD_SOURCE_INIT( RicCreatePlotFromTemplateFeature, "RicCreatePlotFromTemplateFeature" ); CAF_CMD_SOURCE_INIT( RicCreatePlotFromTemplateFeature, "RicCreatePlotFromTemplateFeature" );
@ -65,60 +44,7 @@ void RicCreatePlotFromTemplateFeature::onActionTriggered( bool isChecked )
std::vector<RimSummaryCase*> sumCases = selectedSummaryCases(); std::vector<RimSummaryCase*> sumCases = selectedSummaryCases();
RimSummaryPlot* newSummaryPlot = RicSummaryPlotTemplateTools::createPlotFromTemplateFile( fileName ); RimSummaryPlot* newSummaryPlot = RicSummaryPlotTemplateTools::createPlotFromTemplateFile( fileName );
if ( newSummaryPlot ) RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection( newSummaryPlot, sumCases );
{
RimSummaryPlotCollection* plotColl =
RiaApplication::instance()->project()->mainPlotCollection()->summaryPlotCollection();
plotColl->summaryPlots.push_back( newSummaryPlot );
newSummaryPlot->resolveReferencesRecursively();
newSummaryPlot->initAfterReadRecursively();
auto summaryCurves = newSummaryPlot->summaryCurves();
for ( const auto& curve : summaryCurves )
{
auto fieldHandle = curve->findField( "SummaryCase" );
if ( fieldHandle )
{
auto referenceString = fieldHandle->xmlCapability()->referenceString();
auto stringList = referenceString.split( " " );
if ( stringList.size() == 2 )
{
QString indexAsString = stringList[1];
bool conversionOk = false;
auto index = indexAsString.toUInt( &conversionOk );
if ( conversionOk && index < sumCases.size() )
{
auto summaryCaseY = sumCases[index];
curve->setSummaryCaseY( summaryCaseY );
auto currentAddressY = curve->summaryAddressY();
if ( summaryCaseY->summaryReader() &&
!summaryCaseY->summaryReader()->hasAddress( currentAddressY ) )
{
auto allAddresses = summaryCaseY->summaryReader()->allResultAddresses();
auto candidate = RicCreatePlotFromTemplateFeature::firstAddressByQuantity( currentAddressY,
allAddresses );
if ( candidate.category() != RifEclipseSummaryAddress::SUMMARY_INVALID )
{
curve->setSummaryAddressY( candidate );
}
}
}
}
}
}
// TODO: Create additional curves in selected case count is larger than template count
plotColl->updateConnectedEditors();
newSummaryPlot->loadDataAndUpdate();
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -140,21 +66,3 @@ std::vector<RimSummaryCase*> RicCreatePlotFromTemplateFeature::selectedSummaryCa
return objects; return objects;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress
RicCreatePlotFromTemplateFeature::firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses )
{
for ( const auto& a : allAddresses )
{
if ( sourceAddress.quantityName() == a.quantityName() )
{
return a;
}
}
return RifEclipseSummaryAddress();
}

View File

@ -18,11 +18,9 @@
#pragma once #pragma once
#include "RifEclipseSummaryAddress.h"
#include "cafCmdFeature.h" #include "cafCmdFeature.h"
#include <set> #include <vector>
class RimSummaryCase; class RimSummaryCase;
@ -39,7 +37,5 @@ protected:
void setupActionLook( QAction* actionToSetup ) override; void setupActionLook( QAction* actionToSetup ) override;
private: private:
std::vector<RimSummaryCase*> selectedSummaryCases() const; std::vector<RimSummaryCase*> selectedSummaryCases() const;
static RifEclipseSummaryAddress firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses );
}; };

View File

@ -18,11 +18,17 @@
#include "RicSummaryPlotTemplateTools.h" #include "RicSummaryPlotTemplateTools.h"
#include "RiaApplication.h"
#include "RiaLogging.h" #include "RiaLogging.h"
#include "RiaSummaryCurveAnalyzer.h" #include "RiaSummaryCurveAnalyzer.h"
#include "RifSummaryReaderInterface.h"
#include "RimMainPlotCollection.h"
#include "RimProject.h"
#include "RimSummaryCase.h"
#include "RimSummaryCurve.h" #include "RimSummaryCurve.h"
#include "RimSummaryPlot.h" #include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include <QFile> #include <QFile>
@ -56,6 +62,68 @@ RimSummaryPlot* RicSummaryPlotTemplateTools::createPlotFromTemplateFile( const Q
return nullptr; return nullptr;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection(
RimSummaryPlot* summaryPlot, const std::vector<RimSummaryCase*>& selectedSummaryCases )
{
if ( summaryPlot )
{
RimSummaryPlotCollection* plotColl =
RiaApplication::instance()->project()->mainPlotCollection()->summaryPlotCollection();
plotColl->summaryPlots.push_back( summaryPlot );
summaryPlot->resolveReferencesRecursively();
summaryPlot->initAfterReadRecursively();
auto summaryCurves = summaryPlot->summaryCurves();
for ( const auto& curve : summaryCurves )
{
auto fieldHandle = curve->findField( "SummaryCase" );
if ( fieldHandle )
{
auto referenceString = fieldHandle->xmlCapability()->referenceString();
auto stringList = referenceString.split( " " );
if ( stringList.size() == 2 )
{
QString indexAsString = stringList[1];
bool conversionOk = false;
auto index = indexAsString.toUInt( &conversionOk );
if ( conversionOk && index < selectedSummaryCases.size() )
{
auto summaryCaseY = selectedSummaryCases[index];
curve->setSummaryCaseY( summaryCaseY );
auto currentAddressY = curve->summaryAddressY();
if ( summaryCaseY->summaryReader() &&
!summaryCaseY->summaryReader()->hasAddress( currentAddressY ) )
{
auto allAddresses = summaryCaseY->summaryReader()->allResultAddresses();
auto candidate = RicSummaryPlotTemplateTools::firstAddressByQuantity( currentAddressY,
allAddresses );
if ( candidate.category() != RifEclipseSummaryAddress::SUMMARY_INVALID )
{
curve->setSummaryAddressY( candidate );
}
}
}
}
}
}
// TODO: Create additional curves in selected case count is larger than template count
plotColl->updateConnectedEditors();
summaryPlot->loadDataAndUpdate();
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -156,3 +224,21 @@ QString RicSummaryPlotTemplateTools::htmlTextFromCount( const QString& itemText,
return text; return text;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RifEclipseSummaryAddress
RicSummaryPlotTemplateTools::firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses )
{
for ( const auto& a : allAddresses )
{
if ( sourceAddress.quantityName() == a.quantityName() )
{
return a;
}
}
return RifEclipseSummaryAddress();
}

View File

@ -29,7 +29,7 @@ class PdmObject;
} }
class RimSummaryPlot; class RimSummaryPlot;
class RimSummaryPlot; class RimSummaryCase;
class RifEclipseSummaryAddress; class RifEclipseSummaryAddress;
//================================================================================================== //==================================================================================================
@ -39,9 +39,16 @@ class RicSummaryPlotTemplateTools
{ {
public: public:
static RimSummaryPlot* createPlotFromTemplateFile( const QString& fileName ); static RimSummaryPlot* createPlotFromTemplateFile( const QString& fileName );
static QString htmlTextFromPlotAndSelection( const RimSummaryPlot* templatePlot, static void appendSummaryPlotToPlotCollection( RimSummaryPlot* summaryPlot,
const std::set<RifEclipseSummaryAddress>& selectedSummaryAddresses, const std::vector<RimSummaryCase*>& selectedSummaryCases );
const std::vector<caf::PdmObject*>& selectedSources );
static QString htmlTextFromPlotAndSelection( const RimSummaryPlot* templatePlot,
const std::set<RifEclipseSummaryAddress>& selectedSummaryAddresses,
const std::vector<caf::PdmObject*>& selectedSources );
static QString htmlTextFromCount( const QString& itemText, size_t requiredItemCount, size_t selectionCount ); static QString htmlTextFromCount( const QString& itemText, size_t requiredItemCount, size_t selectionCount );
private:
static RifEclipseSummaryAddress firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses );
}; };