#7557 Ensemble Fracture Statistics: Reuse existing templates with same name.

This commit is contained in:
Kristian Bendiksen 2021-04-26 14:11:18 +02:00
parent 329b8e114f
commit b777ad9c74
3 changed files with 39 additions and 7 deletions

View File

@ -99,7 +99,8 @@ std::vector<RimStimPlanFractureTemplate*> RicNewStimPlanFractureTemplateFeature:
///
//--------------------------------------------------------------------------------------------------
std::vector<RimStimPlanFractureTemplate*>
RicNewStimPlanFractureTemplateFeature::createNewTemplatesFromFiles( const std::vector<QString>& fileNames )
RicNewStimPlanFractureTemplateFeature::createNewTemplatesFromFiles( const std::vector<QString>& fileNames,
bool reuseExistingTemplatesWithMatchingNames )
{
if ( fileNames.empty() ) return std::vector<RimStimPlanFractureTemplate*>();
@ -112,14 +113,19 @@ std::vector<RimStimPlanFractureTemplate*>
RimFractureTemplateCollection* fracDefColl = oilfield->fractureDefinitionCollection();
if ( !fracDefColl ) return std::vector<RimStimPlanFractureTemplate*>();
auto findTemplateByName = []( RimFractureTemplateCollection* coll,
const QString& name ) -> RimStimPlanFractureTemplate* {
for ( auto t : coll->fractureTemplates() )
if ( t->name() == name ) return dynamic_cast<RimStimPlanFractureTemplate*>( t );
return nullptr;
};
std::vector<RimStimPlanFractureTemplate*> newFractures;
for ( auto fileName : fileNames )
{
if ( fileName.isEmpty() ) continue;
RimStimPlanFractureTemplate* fractureDef = new RimStimPlanFractureTemplate();
fracDefColl->addFractureTemplate( fractureDef );
QFileInfo stimplanfileFileInfo( fileName );
QString name = stimplanfileFileInfo.baseName();
if ( name.isEmpty() )
@ -127,7 +133,15 @@ std::vector<RimStimPlanFractureTemplate*>
name = "StimPlan Fracture Template";
}
fractureDef->setName( name );
RimStimPlanFractureTemplate* fractureDef = nullptr;
if ( reuseExistingTemplatesWithMatchingNames ) fractureDef = findTemplateByName( fracDefColl, name );
if ( fractureDef == nullptr )
{
fractureDef = new RimStimPlanFractureTemplate();
fracDefColl->addFractureTemplate( fractureDef );
fractureDef->setName( name );
}
fractureDef->setFileName( fileName );
fractureDef->loadDataAndUpdate();

View File

@ -35,7 +35,9 @@ class RicNewStimPlanFractureTemplateFeature : public caf::CmdFeature
CAF_CMD_HEADER_INIT;
static void createNewTemplateForFractureAndUpdate( RimFracture* fracture );
static void selectFractureTemplateAndUpdate( RimFractureTemplate* fractureTemplate );
static std::vector<RimStimPlanFractureTemplate*> createNewTemplatesFromFiles( const std::vector<QString>& fileNames );
static std::vector<RimStimPlanFractureTemplate*>
createNewTemplatesFromFiles( const std::vector<QString>& fileNames,
bool reuseExistingTemplatesWithMatchingNames = false );
protected:
static std::vector<RimStimPlanFractureTemplate*> createNewTemplates();

View File

@ -30,6 +30,10 @@
#include "RigStatisticsMath.h"
#include "RigStimPlanFractureDefinition.h"
#include "RimFractureTemplateCollection.h"
#include "RimProject.h"
#include "RimStimPlanFractureTemplate.h"
#include "RifCsvDataTableFormatter.h"
#include "RifEnsembleFractureStatisticsExporter.h"
#include "RifStimPlanXmlReader.h"
@ -250,7 +254,19 @@ void RimEnsembleFractureStatistics::fieldChangedByUi( const caf::PdmFieldHandle*
{
m_computeStatistics = false;
std::vector<QString> filePaths = computeStatistics();
RicNewStimPlanFractureTemplateFeature::createNewTemplatesFromFiles( filePaths );
// Create (or reuse matching) templates for the statistics
auto updatedTemplates = RicNewStimPlanFractureTemplateFeature::createNewTemplatesFromFiles( filePaths, true );
// Update views
if ( !updatedTemplates.empty() )
{
RimFractureTemplateCollection* templateCollection = nullptr;
updatedTemplates.front()->firstAncestorOrThisOfTypeAsserted( templateCollection );
templateCollection->updateConnectedEditors();
RimProject::current()->scheduleCreateDisplayModelAndRedrawAllViews();
}
}
}