diff --git a/ApplicationCode/Commands/RicConvertAllFractureTemplatesToFieldFeature.cpp b/ApplicationCode/Commands/RicConvertAllFractureTemplatesToFieldFeature.cpp index de93e781f1..3b282b9378 100644 --- a/ApplicationCode/Commands/RicConvertAllFractureTemplatesToFieldFeature.cpp +++ b/ApplicationCode/Commands/RicConvertAllFractureTemplatesToFieldFeature.cpp @@ -66,6 +66,8 @@ void RicConvertAllFractureTemplatesToFieldFeature::onActionTriggered(bool isChec if (ellipseFracTemplate->fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_METRIC) { ellipseFracTemplate->changeUnits(); + + ellipseFracTemplate->disconnectAllFracturesAndRedrawViews(); } } } diff --git a/ApplicationCode/Commands/RicConvertAllFractureTemplatesToMetricFeature.cpp b/ApplicationCode/Commands/RicConvertAllFractureTemplatesToMetricFeature.cpp index 78627f2e54..6390b1140c 100644 --- a/ApplicationCode/Commands/RicConvertAllFractureTemplatesToMetricFeature.cpp +++ b/ApplicationCode/Commands/RicConvertAllFractureTemplatesToMetricFeature.cpp @@ -66,6 +66,8 @@ void RicConvertAllFractureTemplatesToMetricFeature::onActionTriggered(bool isChe if (ellipseFracTemplate->fractureTemplateUnit() == RiaEclipseUnitTools::UNITS_FIELD) { ellipseFracTemplate->changeUnits(); + + ellipseFracTemplate->disconnectAllFracturesAndRedrawViews(); } } diff --git a/ApplicationCode/Commands/RicConvertFractureTemplateUnitFeature.cpp b/ApplicationCode/Commands/RicConvertFractureTemplateUnitFeature.cpp index 0b7eb50294..a86b82d747 100644 --- a/ApplicationCode/Commands/RicConvertFractureTemplateUnitFeature.cpp +++ b/ApplicationCode/Commands/RicConvertFractureTemplateUnitFeature.cpp @@ -68,6 +68,8 @@ void RicConvertFractureTemplateUnitFeature::onActionTriggered(bool isChecked) fractureTemplate->convertToUnitSystem(RiaEclipseUnitTools::UNITS_METRIC); } + fractureTemplate->disconnectAllFracturesAndRedrawViews(); + fractureTemplate->updateConnectedEditors(); } diff --git a/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp index 588973d454..0d007a77fa 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimEllipseFractureTemplate.cpp @@ -324,6 +324,8 @@ std::vector> RimEllipseFractureTemplate::uiResultNam //-------------------------------------------------------------------------------------------------- void RimEllipseFractureTemplate::convertToUnitSystem(RiaEclipseUnitTools::UnitSystem neededUnit) { + if (m_fractureTemplateUnit() == neededUnit) return; + setFractureTemplateUnit(neededUnit); RimFractureTemplate::convertToUnitSystem(neededUnit); diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp index b99f6908fe..5f434ba49b 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.cpp @@ -582,6 +582,34 @@ void RimFractureTemplate::convertToUnitSystem(RiaEclipseUnitTools::UnitSystem ne // TODO : Convert NON-darcy values } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimFractureTemplate::disconnectAllFracturesAndRedrawViews() const +{ + // The unit has changed. Disconnect all fractures referencing this fracture template to avoid mix of units between fracture + // and template + + std::vector referringObjects; + this->objectsWithReferringPtrFields(referringObjects); + + for (auto objHandle : referringObjects) + { + RimFracture* fracture = dynamic_cast(objHandle); + if (fracture) + { + fracture->setFractureTemplate(nullptr); + } + } + + RimProject* proj; + this->firstAncestorOrThisOfType(proj); + if (proj) + { + proj->createDisplayModelAndRedrawAllViews(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h index 8ab1a5ce8d..820907d693 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h +++ b/ApplicationCode/ProjectDataModel/Completions/RimFractureTemplate.h @@ -144,6 +144,8 @@ public: virtual void loadDataAndUpdate() = 0; + void disconnectAllFracturesAndRedrawViews() const; + protected: virtual caf::PdmFieldHandle* userDescriptionField() override; diff --git a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp index 1a707785dd..82d8370028 100644 --- a/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp @@ -501,6 +501,8 @@ bool RimStimPlanFractureTemplate::showStimPlanMesh() const //-------------------------------------------------------------------------------------------------- void RimStimPlanFractureTemplate::convertToUnitSystem(RiaEclipseUnitTools::UnitSystem neededUnit) { + if (m_fractureTemplateUnit() == neededUnit) return; + setFractureTemplateUnit(neededUnit); RimFractureTemplate::convertToUnitSystem(neededUnit);