mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#7557 Ensemble Fracture Statistics: Reuse existing templates with same name.
This commit is contained in:
parent
329b8e114f
commit
b777ad9c74
@ -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();
|
||||
|
@ -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();
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user