#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 "RiaGuiApplication.h"
#include "RicSelectPlotTemplateUi.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 "RimSummaryCurve.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "RimWellPath.h"
#include "RiuPlotMainWindow.h"
#include "cafPdmObject.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cafSelectionManager.h"
@ -61,8 +51,7 @@ bool RicCreatePlotFromSelectionFeature::isCommandEnabled()
//--------------------------------------------------------------------------------------------------
void RicCreatePlotFromSelectionFeature::onActionTriggered( bool isChecked )
{
RiuPlotMainWindow* plotwindow = RiaGuiApplication::instance()->mainPlotWindow();
RiuPlotMainWindow* plotwindow = RiaGuiApplication::instance()->mainPlotWindow();
RicSelectPlotTemplateUi* ui = RiaGuiApplication::instance()->project()->dialogData()->selectPlotTemplateUi();
caf::PdmUiPropertyViewDialog propertyDialog( plotwindow, ui, "Select Plot Template", "" );
@ -75,60 +64,7 @@ void RicCreatePlotFromSelectionFeature::onActionTriggered( bool isChecked )
std::vector<RimSummaryCase*> sumCases = selectedSummaryCases();
RimSummaryPlot* newSummaryPlot = RicSummaryPlotTemplateTools::createPlotFromTemplateFile( fileName );
if ( newSummaryPlot )
{
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();
}
RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection( newSummaryPlot, sumCases );
}
//--------------------------------------------------------------------------------------------------
@ -150,21 +86,3 @@ std::vector<RimSummaryCase*> RicCreatePlotFromSelectionFeature::selectedSummaryC
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
#include "RifEclipseSummaryAddress.h"
#include "cafCmdFeature.h"
#include <set>
class RimSummaryCase;
//==================================================================================================
@ -39,7 +35,5 @@ protected:
void setupActionLook( QAction* actionToSetup ) override;
private:
std::vector<RimSummaryCase*> selectedSummaryCases() const;
static RifEclipseSummaryAddress firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses );
std::vector<RimSummaryCase*> selectedSummaryCases() const;
};

View File

@ -18,33 +18,12 @@
#include "RicCreatePlotFromTemplateFeature.h"
#include "RicSelectPlotTemplateUi.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 "RimSummaryCurve.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "RimWellPath.h"
#include "RiuPlotMainWindow.h"
#include "cafPdmObject.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cafSelectionManager.h"
#include <QAction>
#include <QFileDialog>
CAF_CMD_SOURCE_INIT( RicCreatePlotFromTemplateFeature, "RicCreatePlotFromTemplateFeature" );
@ -65,60 +44,7 @@ void RicCreatePlotFromTemplateFeature::onActionTriggered( bool isChecked )
std::vector<RimSummaryCase*> sumCases = selectedSummaryCases();
RimSummaryPlot* newSummaryPlot = RicSummaryPlotTemplateTools::createPlotFromTemplateFile( fileName );
if ( newSummaryPlot )
{
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();
}
RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection( newSummaryPlot, sumCases );
}
//--------------------------------------------------------------------------------------------------
@ -140,21 +66,3 @@ std::vector<RimSummaryCase*> RicCreatePlotFromTemplateFeature::selectedSummaryCa
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
#include "RifEclipseSummaryAddress.h"
#include "cafCmdFeature.h"
#include <set>
#include <vector>
class RimSummaryCase;
@ -39,7 +37,5 @@ protected:
void setupActionLook( QAction* actionToSetup ) override;
private:
std::vector<RimSummaryCase*> selectedSummaryCases() const;
static RifEclipseSummaryAddress firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses );
std::vector<RimSummaryCase*> selectedSummaryCases() const;
};

View File

@ -18,11 +18,17 @@
#include "RicSummaryPlotTemplateTools.h"
#include "RiaApplication.h"
#include "RiaLogging.h"
#include "RiaSummaryCurveAnalyzer.h"
#include "RifSummaryReaderInterface.h"
#include "RimMainPlotCollection.h"
#include "RimProject.h"
#include "RimSummaryCase.h"
#include "RimSummaryCurve.h"
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include <QFile>
@ -56,6 +62,68 @@ RimSummaryPlot* RicSummaryPlotTemplateTools::createPlotFromTemplateFile( const Q
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;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
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 RimSummaryCase;
class RifEclipseSummaryAddress;
//==================================================================================================
@ -39,9 +39,16 @@ class RicSummaryPlotTemplateTools
{
public:
static RimSummaryPlot* createPlotFromTemplateFile( const QString& fileName );
static QString htmlTextFromPlotAndSelection( const RimSummaryPlot* templatePlot,
const std::set<RifEclipseSummaryAddress>& selectedSummaryAddresses,
const std::vector<caf::PdmObject*>& selectedSources );
static void appendSummaryPlotToPlotCollection( RimSummaryPlot* summaryPlot,
const std::vector<RimSummaryCase*>& selectedSummaryCases );
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 );
private:
static RifEclipseSummaryAddress firstAddressByQuantity( const RifEclipseSummaryAddress& sourceAddress,
const std::set<RifEclipseSummaryAddress>& allAddresses );
};