mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4828 Summary Plot Templates : Robustification
This commit is contained in:
parent
5a410ca8be
commit
cc746a20cb
@ -170,7 +170,7 @@ QString RicSavePlotTemplateFeature::createTextFromObject( RimSummaryPlot* summar
|
|||||||
{
|
{
|
||||||
std::set<QString> ensembleReferenceStrings;
|
std::set<QString> ensembleReferenceStrings;
|
||||||
|
|
||||||
const QString summaryGroupFieldKeyword = RicSummaryPlotTemplateTools::summaryGroupFieldName();
|
const QString summaryGroupFieldKeyword = RicSummaryPlotTemplateTools::summaryGroupFieldKeyword();
|
||||||
|
|
||||||
for ( const auto& curveSet : newSummaryPlot->ensembleCurveSetCollection()->curveSets() )
|
for ( const auto& curveSet : newSummaryPlot->ensembleCurveSetCollection()->curveSets() )
|
||||||
{
|
{
|
||||||
|
@ -84,20 +84,24 @@ void RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection(
|
|||||||
const std::vector<RimSummaryCase*>& selectedSummaryCases,
|
const std::vector<RimSummaryCase*>& selectedSummaryCases,
|
||||||
const std::vector<RimSummaryCaseCollection*>& selectedEnsembles )
|
const std::vector<RimSummaryCaseCollection*>& selectedEnsembles )
|
||||||
{
|
{
|
||||||
if ( summaryPlot )
|
if ( !summaryPlot ) return;
|
||||||
{
|
|
||||||
RimSummaryPlotCollection* plotColl =
|
if ( selectedSummaryCases.empty() && selectedEnsembles.empty() ) return;
|
||||||
RiaApplication::instance()->project()->mainPlotCollection()->summaryPlotCollection();
|
|
||||||
|
RimSummaryPlotCollection* plotColl = RiaApplication::instance()->project()->mainPlotCollection()->summaryPlotCollection();
|
||||||
|
|
||||||
plotColl->summaryPlots.push_back( summaryPlot );
|
plotColl->summaryPlots.push_back( summaryPlot );
|
||||||
summaryPlot->resolveReferencesRecursively();
|
summaryPlot->resolveReferencesRecursively();
|
||||||
summaryPlot->initAfterReadRecursively();
|
summaryPlot->initAfterReadRecursively();
|
||||||
|
|
||||||
{
|
{
|
||||||
|
// Replace single summary curves data sources
|
||||||
|
|
||||||
auto summaryCurves = summaryPlot->summaryCurves();
|
auto summaryCurves = summaryPlot->summaryCurves();
|
||||||
|
|
||||||
const QString summaryFieldKeyword = RicSummaryPlotTemplateTools::summaryCaseFieldKeyword();
|
const QString summaryFieldKeyword = RicSummaryPlotTemplateTools::summaryCaseFieldKeyword();
|
||||||
|
|
||||||
|
int maximumIndexValue = -1;
|
||||||
for ( const auto& curve : summaryCurves )
|
for ( const auto& curve : summaryCurves )
|
||||||
{
|
{
|
||||||
auto fieldHandle = curve->findField( summaryFieldKeyword );
|
auto fieldHandle = curve->findField( summaryFieldKeyword );
|
||||||
@ -111,14 +115,15 @@ void RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection(
|
|||||||
referenceString,
|
referenceString,
|
||||||
&conversionOk );
|
&conversionOk );
|
||||||
|
|
||||||
|
maximumIndexValue = std::max( maximumIndexValue, indexValue );
|
||||||
|
|
||||||
if ( conversionOk && indexValue >= 0 && indexValue < static_cast<int>( selectedSummaryCases.size() ) )
|
if ( conversionOk && indexValue >= 0 && indexValue < static_cast<int>( selectedSummaryCases.size() ) )
|
||||||
{
|
{
|
||||||
auto summaryCaseY = selectedSummaryCases[static_cast<int>( indexValue )];
|
auto summaryCaseY = selectedSummaryCases[static_cast<int>( indexValue )];
|
||||||
curve->setSummaryCaseY( summaryCaseY );
|
curve->setSummaryCaseY( summaryCaseY );
|
||||||
|
|
||||||
auto currentAddressY = curve->summaryAddressY();
|
auto currentAddressY = curve->summaryAddressY();
|
||||||
if ( summaryCaseY->summaryReader() &&
|
if ( summaryCaseY->summaryReader() && !summaryCaseY->summaryReader()->hasAddress( currentAddressY ) )
|
||||||
!summaryCaseY->summaryReader()->hasAddress( currentAddressY ) )
|
|
||||||
{
|
{
|
||||||
auto allAddresses = summaryCaseY->summaryReader()->allResultAddresses();
|
auto allAddresses = summaryCaseY->summaryReader()->allResultAddresses();
|
||||||
|
|
||||||
@ -132,43 +137,87 @@ void RicSummaryPlotTemplateTools::appendSummaryPlotToPlotCollection(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( selectedSummaryCases.size() > static_cast<size_t>( maximumIndexValue ) )
|
||||||
|
{
|
||||||
|
// Use the curve style of the last curve in template, and duplicate this for remaining data sources
|
||||||
|
|
||||||
|
if ( !summaryCurves.empty() )
|
||||||
|
{
|
||||||
|
auto lastSummaryCurve = summaryCurves.back();
|
||||||
|
|
||||||
|
for ( size_t i = maximumIndexValue; i < selectedSummaryCases.size(); i++ )
|
||||||
|
{
|
||||||
|
auto newCurve = dynamic_cast<RimSummaryCurve*>(
|
||||||
|
lastSummaryCurve->xmlCapability()->copyByXmlSerialization(
|
||||||
|
caf::PdmDefaultObjectFactory::instance() ) );
|
||||||
|
|
||||||
|
auto summaryCaseY = selectedSummaryCases[i];
|
||||||
|
newCurve->setSummaryCaseY( summaryCaseY );
|
||||||
|
summaryPlot->addCurveAndUpdate( newCurve );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
auto summaryCurves = summaryPlot->ensembleCurveSetCollection()->curveSets();
|
// Replace ensemble data sources
|
||||||
|
|
||||||
const QString summaryGroupFieldKeyword = RicSummaryPlotTemplateTools::summaryGroupFieldName();
|
auto summaryCurveSets = summaryPlot->ensembleCurveSetCollection()->curveSets();
|
||||||
|
|
||||||
for ( const auto& curveSet : summaryCurves )
|
const QString summaryGroupFieldKeyword = RicSummaryPlotTemplateTools::summaryGroupFieldKeyword();
|
||||||
|
|
||||||
|
int maximumIndexValue = -1;
|
||||||
|
|
||||||
|
for ( const auto& curveSet : summaryCurveSets )
|
||||||
{
|
{
|
||||||
auto fieldHandle = curveSet->findField( summaryGroupFieldKeyword );
|
auto fieldHandle = curveSet->findField( summaryGroupFieldKeyword );
|
||||||
if ( fieldHandle )
|
if ( fieldHandle )
|
||||||
{
|
{
|
||||||
auto referenceString = fieldHandle->xmlCapability()->referenceString();
|
|
||||||
auto stringList = referenceString.split( " " );
|
|
||||||
if ( stringList.size() == 2 )
|
|
||||||
{
|
|
||||||
QString indexAsString = stringList[1];
|
|
||||||
|
|
||||||
bool conversionOk = false;
|
bool conversionOk = false;
|
||||||
auto index = indexAsString.toUInt( &conversionOk );
|
const QString placeholderString = RicSummaryPlotTemplateTools::placeholderTextForSummaryGroup();
|
||||||
|
|
||||||
if ( conversionOk && index < selectedEnsembles.size() )
|
auto referenceString = fieldHandle->xmlCapability()->referenceString();
|
||||||
|
int indexValue = RicSummaryPlotTemplateTools::findValueForKeyword( placeholderString,
|
||||||
|
referenceString,
|
||||||
|
&conversionOk );
|
||||||
|
|
||||||
|
maximumIndexValue = std::max( maximumIndexValue, indexValue );
|
||||||
|
|
||||||
|
if ( conversionOk && indexValue < selectedEnsembles.size() )
|
||||||
{
|
{
|
||||||
auto summaryCaseY = selectedEnsembles[index];
|
auto summaryCaseY = selectedEnsembles[indexValue];
|
||||||
curveSet->setSummaryCaseCollection( summaryCaseY );
|
curveSet->setSummaryCaseCollection( summaryCaseY );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Create additional curves in selected case count is larger than template count
|
if ( selectedEnsembles.size() > static_cast<size_t>( maximumIndexValue ) )
|
||||||
|
{
|
||||||
|
// Use the curve style of the last curve in template, and duplicate this for remaining data sources
|
||||||
|
|
||||||
|
if ( !summaryCurveSets.empty() )
|
||||||
|
{
|
||||||
|
auto lastSummaryCurveSet = summaryCurveSets.back();
|
||||||
|
|
||||||
|
for ( size_t i = maximumIndexValue; i < selectedEnsembles.size(); i++ )
|
||||||
|
{
|
||||||
|
auto newCurveSet = dynamic_cast<RimEnsembleCurveSet*>(
|
||||||
|
lastSummaryCurveSet->xmlCapability()->copyByXmlSerialization(
|
||||||
|
caf::PdmDefaultObjectFactory::instance() ) );
|
||||||
|
|
||||||
|
auto ensembleDataSource = selectedEnsembles[i];
|
||||||
|
newCurveSet->setSummaryCaseCollection( ensembleDataSource );
|
||||||
|
|
||||||
|
summaryPlot->ensembleCurveSetCollection()->addCurveSet( newCurveSet );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
plotColl->updateConnectedEditors();
|
plotColl->updateConnectedEditors();
|
||||||
|
|
||||||
summaryPlot->loadDataAndUpdate();
|
summaryPlot->loadDataAndUpdate();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -325,7 +374,7 @@ QString RicSummaryPlotTemplateTools::summaryCaseFieldKeyword()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
QString RicSummaryPlotTemplateTools::summaryGroupFieldName()
|
QString RicSummaryPlotTemplateTools::summaryGroupFieldKeyword()
|
||||||
{
|
{
|
||||||
return "SummaryGroup";
|
return "SummaryGroup";
|
||||||
}
|
}
|
||||||
@ -343,7 +392,7 @@ QString RicSummaryPlotTemplateTools::placeholderTextForSummaryCase()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
QString RicSummaryPlotTemplateTools::placeholderTextForSummaryGroup()
|
QString RicSummaryPlotTemplateTools::placeholderTextForSummaryGroup()
|
||||||
{
|
{
|
||||||
return "ENSEMBLE";
|
return "ENSEMBLE_NAME";
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -56,7 +56,7 @@ public:
|
|||||||
static std::vector<RimSummaryCaseCollection*> selectedSummaryCaseCollections();
|
static std::vector<RimSummaryCaseCollection*> selectedSummaryCaseCollections();
|
||||||
|
|
||||||
static QString summaryCaseFieldKeyword();
|
static QString summaryCaseFieldKeyword();
|
||||||
static QString summaryGroupFieldName();
|
static QString summaryGroupFieldKeyword();
|
||||||
static QString placeholderTextForSummaryCase();
|
static QString placeholderTextForSummaryCase();
|
||||||
static QString placeholderTextForSummaryGroup();
|
static QString placeholderTextForSummaryGroup();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user