From 3fc99a73bc6e7ebcf78fd83bb38d7baf74b04c89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Fri, 2 Mar 2018 09:33:17 +0100 Subject: [PATCH] #2462 Add fracture template id --- .../RicNewEllipseFractureTemplateFeature.cpp | 4 +- .../RicNewStimPlanFractureTemplateFeature.cpp | 2 +- .../RicPasteEllipseFractureFeature.cpp | 6 +- .../RicPasteStimPlanFractureFeature.cpp | 2 +- .../RimEllipseFractureTemplate.cpp | 1 + .../Completions/RimFracture.cpp | 2 +- .../Completions/RimFractureTemplate.cpp | 19 +++++ .../Completions/RimFractureTemplate.h | 4 +- .../RimFractureTemplateCollection.cpp | 73 ++++++++++++++++--- .../RimFractureTemplateCollection.h | 16 +++- .../RimStimPlanFractureTemplate.cpp | 1 + .../ProjectDataModel/RimEclipseView.cpp | 2 +- .../ProjectDataModel/RimProject.cpp | 2 +- 13 files changed, 107 insertions(+), 27 deletions(-) diff --git a/ApplicationCode/Commands/FractureCommands/RicNewEllipseFractureTemplateFeature.cpp b/ApplicationCode/Commands/FractureCommands/RicNewEllipseFractureTemplateFeature.cpp index f7370be3b0..b23ecc84ab 100644 --- a/ApplicationCode/Commands/FractureCommands/RicNewEllipseFractureTemplateFeature.cpp +++ b/ApplicationCode/Commands/FractureCommands/RicNewEllipseFractureTemplateFeature.cpp @@ -79,9 +79,9 @@ void RicNewEllipseFractureTemplateFeature::onActionTriggered(bool isChecked) { RimEllipseFractureTemplate* ellipseFractureTemplate = new RimEllipseFractureTemplate(); - fracDefColl->fractureDefinitions.push_back(ellipseFractureTemplate); + fracDefColl->addFractureTemplate(ellipseFractureTemplate); ellipseFractureTemplate->setName("Ellipse Fracture Template"); - ellipseFractureTemplate->setFractureTemplateUnit(fracDefColl->defaultUnitsForFracTemplates()); + ellipseFractureTemplate->setFractureTemplateUnit(fracDefColl->defaultUnitSystemType()); ellipseFractureTemplate->setDefaultValuesFromUnit(); selectFractureTemplateAndUpdate(fracDefColl, ellipseFractureTemplate); diff --git a/ApplicationCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp b/ApplicationCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp index 37c43d0726..b0905a59f8 100644 --- a/ApplicationCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp +++ b/ApplicationCode/Commands/FractureCommands/RicNewStimPlanFractureTemplateFeature.cpp @@ -60,7 +60,7 @@ void RicNewStimPlanFractureTemplateFeature::onActionTriggered(bool isChecked) if (fracDefColl) { RimStimPlanFractureTemplate* fractureDef = new RimStimPlanFractureTemplate(); - fracDefColl->fractureDefinitions.push_back(fractureDef); + fracDefColl->addFractureTemplate(fractureDef); QFileInfo stimplanfileFileInfo(fileName); QString name = stimplanfileFileInfo.baseName(); diff --git a/ApplicationCode/Commands/FractureCommands/RicPasteEllipseFractureFeature.cpp b/ApplicationCode/Commands/FractureCommands/RicPasteEllipseFractureFeature.cpp index 37a40d703f..068b7bd101 100644 --- a/ApplicationCode/Commands/FractureCommands/RicPasteEllipseFractureFeature.cpp +++ b/ApplicationCode/Commands/FractureCommands/RicPasteEllipseFractureFeature.cpp @@ -73,12 +73,12 @@ void RicPasteEllipseFractureFeature::onActionTriggered(bool isChecked) for (const auto& source : typedObjects) { - auto rimReservoirView = dynamic_cast( + auto templ = dynamic_cast( source->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance())); - fractureTemplateColl->fractureDefinitions.push_back(rimReservoirView); + fractureTemplateColl->addFractureTemplate(templ); - RicNewEllipseFractureTemplateFeature::selectFractureTemplateAndUpdate(fractureTemplateColl, rimReservoirView); + RicNewEllipseFractureTemplateFeature::selectFractureTemplateAndUpdate(fractureTemplateColl, templ); } return; diff --git a/ApplicationCode/Commands/FractureCommands/RicPasteStimPlanFractureFeature.cpp b/ApplicationCode/Commands/FractureCommands/RicPasteStimPlanFractureFeature.cpp index a5e03ea2d1..ed429b4219 100644 --- a/ApplicationCode/Commands/FractureCommands/RicPasteStimPlanFractureFeature.cpp +++ b/ApplicationCode/Commands/FractureCommands/RicPasteStimPlanFractureFeature.cpp @@ -76,7 +76,7 @@ void RicPasteStimPlanFractureFeature::onActionTriggered(bool isChecked) auto copyOfStimPlanTemplate = dynamic_cast( source->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance())); - fractureTemplateColl->fractureDefinitions.push_back(copyOfStimPlanTemplate); + fractureTemplateColl->addFractureTemplate(copyOfStimPlanTemplate); RicNewEllipseFractureTemplateFeature::selectFractureTemplateAndUpdate(fractureTemplateColl, copyOfStimPlanTemplate); } diff --git a/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp index 38a0adeba5..32cc5da026 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp @@ -377,6 +377,7 @@ void RimEllipseFractureTemplate::defineUiOrdering(QString uiConfigName, caf::Pdm } uiOrdering.add(&m_name); + uiOrdering.add(&m_id); caf::PdmUiGroup* geometryGroup = uiOrdering.addNewGroup("Geometry"); geometryGroup->add(&m_halfLength); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp index 4c97455d26..3ec570aea0 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFracture.cpp @@ -416,7 +416,7 @@ QList RimFracture::calculateValueOptions(const caf::PdmF { RimFractureTemplateCollection* fracDefColl = oilField->fractureDefinitionCollection(); - for (RimFractureTemplate* fracDef : fracDefColl->fractureDefinitions()) + for (RimFractureTemplate* fracDef : fracDefColl->fractureTemplates()) { QString displayText = fracDef->nameAndUnit(); if (fracDef->fractureTemplateUnit() != fractureUnit()) diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp index 822224a258..976ac886a7 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp @@ -98,6 +98,9 @@ RimFractureTemplate::RimFractureTemplate() { CAF_PDM_InitObject("Fracture Template", ":/FractureTemplate16x16.png", "", ""); + CAF_PDM_InitField(&m_id, "Id", -1, "ID", "", "", ""); + m_id.uiCapability()->setUiReadOnly(true); + CAF_PDM_InitField(&m_name, "UserDescription", QString("Fracture Template"), "Name", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_nameAndUnit, "NameAndUnit", "NameAndUnit", "", "", ""); @@ -170,6 +173,14 @@ RimFractureTemplate::~RimFractureTemplate() { } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimFractureTemplate::id() const +{ + return m_id; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -638,6 +649,14 @@ void RimFractureTemplate::disconnectAllFracturesAndRedrawViews() const } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFractureTemplate::setId(int id) +{ + m_id = id; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h index 0a8b2db880..8aa1746957 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h @@ -104,6 +104,7 @@ public: RimFractureTemplate(); virtual ~RimFractureTemplate(); + int id() const; QString name() const; QString nameAndUnit() const; @@ -142,7 +143,7 @@ public: virtual void loadDataAndUpdate() = 0; void disconnectAllFracturesAndRedrawViews() const; - + void setId(int id); protected: virtual caf::PdmFieldHandle* userDescriptionField() override; @@ -161,6 +162,7 @@ private: double fractureWidth() const; protected: + caf::PdmField m_id; caf::PdmField m_name; caf::PdmProxyValueField m_nameAndUnit; diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplateCollection.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplateCollection.cpp index 074ad995c1..2a9c8995bb 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplateCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplateCollection.cpp @@ -52,12 +52,16 @@ RimFractureTemplateCollection::RimFractureTemplateCollection(void) { CAF_PDM_InitObject("Fracture Templates", ":/FractureTemplates16x16.png", "", ""); - CAF_PDM_InitField(&defaultUnitsForFracTemplates, "DefaultUnitForTemplates", + CAF_PDM_InitField(&m_defaultUnitsForFracTemplates, "DefaultUnitForTemplates", caf::AppEnum(RiaEclipseUnitTools::UNITS_METRIC), "Default unit system for fracture templates", "", "", ""); - CAF_PDM_InitFieldNoDefault(&fractureDefinitions, "FractureDefinitions", "", "", "", ""); - fractureDefinitions.uiCapability()->setUiHidden(true); + CAF_PDM_InitFieldNoDefault(&m_fractureDefinitions, "FractureDefinitions", "", "", "", ""); + m_fractureDefinitions.uiCapability()->setUiHidden(true); + + CAF_PDM_InitField(&m_nextValidFractureTemplateId, "NextValidFractureTemplateId", 0, "", "", "", ""); + m_fractureDefinitions.uiCapability()->setUiHidden(true); + } //-------------------------------------------------------------------------------------------------- @@ -65,7 +69,37 @@ RimFractureTemplateCollection::RimFractureTemplateCollection(void) //-------------------------------------------------------------------------------------------------- RimFractureTemplateCollection::~RimFractureTemplateCollection() { - fractureDefinitions.deleteAllChildObjects(); + m_fractureDefinitions.deleteAllChildObjects(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimFractureTemplateCollection::fractureTemplates() const +{ + std::vector templates; + for (auto& templ : m_fractureDefinitions) + { + templates.push_back(templ); + } + return templates; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFractureTemplateCollection::addFractureTemplate(RimFractureTemplate* templ) +{ + templ->setId(nextFractureTemplateId()); + m_fractureDefinitions.push_back(templ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiaEclipseUnitTools::UnitSystemType RimFractureTemplateCollection::defaultUnitSystemType() const +{ + return m_defaultUnitsForFracTemplates; } //-------------------------------------------------------------------------------------------------- @@ -73,7 +107,7 @@ RimFractureTemplateCollection::~RimFractureTemplateCollection() //-------------------------------------------------------------------------------------------------- RimFractureTemplate* RimFractureTemplateCollection::firstFractureOfUnit(RiaEclipseUnitTools::UnitSystem unitSet) const { - for (RimFractureTemplate* f : fractureDefinitions()) + for (RimFractureTemplate* f : m_fractureDefinitions()) { if (f->fractureTemplateUnit() == unitSet) { @@ -91,7 +125,7 @@ std::vector > RimFractureTemplateCollection::resultN { std::set > nameSet; - for (const RimFractureTemplate* f : fractureDefinitions()) + for (const RimFractureTemplate* f : m_fractureDefinitions()) { std::vector > namesAndUnits = f->uiResultNamesWithUnit(); @@ -115,7 +149,7 @@ void RimFractureTemplateCollection::computeMinMax(const QString& uiResultName, c MinMaxAccumulator minMaxAccumulator; PosNegAccumulator posNegAccumulator; - for (const RimFractureTemplate* f : fractureDefinitions()) + for (const RimFractureTemplate* f : m_fractureDefinitions()) { if (f) { @@ -138,7 +172,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni std::vector templatesToBeAdded; - for (RimFractureTemplate* fractureTemplate : fractureDefinitions()) + for (RimFractureTemplate* fractureTemplate : m_fractureDefinitions()) { if (fractureTemplate) { @@ -188,7 +222,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni for (auto templateWithMatchingUnit : templatesToBeAdded) { - fractureDefinitions.push_back(templateWithMatchingUnit); + m_fractureDefinitions.push_back(templateWithMatchingUnit); } } @@ -197,7 +231,7 @@ void RimFractureTemplateCollection::createAndAssignTemplateCopyForNonMatchingUni //-------------------------------------------------------------------------------------------------- void RimFractureTemplateCollection::loadAndUpdateData() { - for (RimFractureTemplate* f : fractureDefinitions()) + for (RimFractureTemplate* f : m_fractureDefinitions()) { RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast(f); if (stimPlanFracture) @@ -212,7 +246,7 @@ void RimFractureTemplateCollection::loadAndUpdateData() //-------------------------------------------------------------------------------------------------- void RimFractureTemplateCollection::setDefaultConductivityResultIfEmpty() { - for (RimFractureTemplate* f : fractureDefinitions()) + for (RimFractureTemplate* f : m_fractureDefinitions()) { RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast(f); if (stimPlanFracture) @@ -227,7 +261,7 @@ void RimFractureTemplateCollection::setDefaultConductivityResultIfEmpty() //-------------------------------------------------------------------------------------------------- void RimFractureTemplateCollection::updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath) { - for (RimFractureTemplate* f : fractureDefinitions()) + for (RimFractureTemplate* f : m_fractureDefinitions()) { RimStimPlanFractureTemplate* stimPlanFracture = dynamic_cast(f); if (stimPlanFracture) @@ -248,6 +282,12 @@ void RimFractureTemplateCollection::updateFilePathsFromProjectPath(const QString //-------------------------------------------------------------------------------------------------- void RimFractureTemplateCollection::initAfterRead() { + // Assign template id if not already assigned + for (auto& templ : m_fractureDefinitions) + { + if (templ->id() < 0) templ->setId(nextFractureTemplateId()); + } + RimProject* proj = nullptr; this->firstAncestorOrThisOfType(proj); if (proj && proj->isProjectFileVersionEqualOrOlderThan("2018.1.0.103")) @@ -347,3 +387,12 @@ void RimFractureTemplateCollection::initAfterRead() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimFractureTemplateCollection::nextFractureTemplateId() +{ + int newId = m_nextValidFractureTemplateId; + m_nextValidFractureTemplateId = m_nextValidFractureTemplateId + 1; + return newId; +} diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplateCollection.h b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplateCollection.h index 2d650b79cf..2852a30afc 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplateCollection.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplateCollection.h @@ -38,10 +38,11 @@ public: RimFractureTemplateCollection(void); virtual ~RimFractureTemplateCollection(void); + std::vector fractureTemplates() const; + void addFractureTemplate(RimFractureTemplate* templ); + RiaEclipseUnitTools::UnitSystemType defaultUnitSystemType() const; + RimFractureTemplate* firstFractureOfUnit(RiaEclipseUnitTools::UnitSystem unitSet) const; - - caf::PdmChildArrayField fractureDefinitions; - caf::PdmField< RiaEclipseUnitTools::UnitSystemType > defaultUnitsForFracTemplates; std::vector > resultNamesAndUnits() const; void computeMinMax(const QString& uiResultName, const QString& unit, double* minValue, double* maxValue, double* posClosestToZero, double* negClosestToZero) const; @@ -52,6 +53,13 @@ public: void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath); protected: - virtual void initAfterRead() override; + virtual void initAfterRead() override; + +private: + int nextFractureTemplateId(); + + caf::PdmChildArrayField m_fractureDefinitions; + caf::PdmField< RiaEclipseUnitTools::UnitSystemType > m_defaultUnitsForFracTemplates; + caf::PdmField m_nextValidFractureTemplateId; // Unique fracture template ID within a project, used to identify a fracture template }; diff --git a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp index 7075042138..b26844710b 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp @@ -734,6 +734,7 @@ std::vector RimStimPlanFractureTemplate::fractureBorderPolygon() void RimStimPlanFractureTemplate::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { uiOrdering.add(&m_name); + uiOrdering.add(&m_id); caf::PdmUiGroup* fileGroup = uiOrdering.addNewGroup("Input"); fileGroup->add(&m_stimPlanFileName); diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index 29e2079333..079e4b25fc 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -1385,7 +1385,7 @@ void RimEclipseView::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering if (oilfield && oilfield->fractureDefinitionCollection().notNull()) { - if (!oilfield->fractureDefinitionCollection()->fractureDefinitions.empty()) + if (!oilfield->fractureDefinitionCollection()->fractureTemplates().empty()) { uiTreeOrdering.add(fractureColors()); } diff --git a/ApplicationCode/ProjectDataModel/RimProject.cpp b/ApplicationCode/ProjectDataModel/RimProject.cpp index b53d3ad220..6395a3c7a0 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationCode/ProjectDataModel/RimProject.cpp @@ -959,7 +959,7 @@ std::vector RimProject::allFractureTemplates() const allOilFields(oilFields); for (RimFractureTemplateCollection* templColl : allFractureTemplateCollections()) { - for (RimFractureTemplate* templ : templColl->fractureDefinitions) + for (RimFractureTemplate* templ : templColl->fractureTemplates()) { templates.push_back(templ); }