diff --git a/ApplicationCode/Commands/RicNewSimWellFractureAtPosFeature.cpp b/ApplicationCode/Commands/RicNewSimWellFractureAtPosFeature.cpp index 7aeccf01bd..d8af2d5070 100644 --- a/ApplicationCode/Commands/RicNewSimWellFractureAtPosFeature.cpp +++ b/ApplicationCode/Commands/RicNewSimWellFractureAtPosFeature.cpp @@ -75,6 +75,7 @@ void RicNewSimWellFractureAtPosFeature::onActionTriggered(bool isChecked) fracture->name = "Simulation Well Fracture"; fracture->setIJK(simWellItem->i, simWellItem->j, simWellItem->k); + fracture->setCellCenterPosition(); RimOilField* oilfield = nullptr; diff --git a/ApplicationCode/Commands/RicNewSimWellFractureFeature.cpp b/ApplicationCode/Commands/RicNewSimWellFractureFeature.cpp index cf3847057c..ecc71c419e 100644 --- a/ApplicationCode/Commands/RicNewSimWellFractureFeature.cpp +++ b/ApplicationCode/Commands/RicNewSimWellFractureFeature.cpp @@ -72,6 +72,8 @@ void RicNewSimWellFractureFeature::onActionTriggered(bool isChecked) fracture->fractureDefinition = fracDef; } + fracture->setIJK(0, 0, 0); + fracture->setCellCenterPosition(); fractureCollection->updateConnectedEditors(); RiuMainWindow::instance()->selectAsCurrentItem(fracture); diff --git a/ApplicationCode/ProjectDataModel/RimFracture.h b/ApplicationCode/ProjectDataModel/RimFracture.h index 5a26a6f50a..0947e5e980 100644 --- a/ApplicationCode/ProjectDataModel/RimFracture.h +++ b/ApplicationCode/ProjectDataModel/RimFracture.h @@ -53,6 +53,8 @@ class RimFracture : public caf::PdmObject private: bool isRecomputeGeometryFlagSet(); +// cvf::Vec3d fracturePositionForUi() const; + private: cvf::ref m_rigFracture; diff --git a/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp b/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp index 2c196d27de..8e7e5ead3f 100644 --- a/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimSimWellFracture.cpp @@ -60,6 +60,14 @@ RimSimWellFracture::RimSimWellFracture(void) CAF_PDM_InitField(&m_j, "J", 1, "Fracture location cell J", "", "", ""); CAF_PDM_InitField(&m_k, "K", 1, "Fracture location cell K", "", "", ""); + CAF_PDM_InitField(&cellCenterPosition, "cellCenterPosition", cvf::Vec3d::ZERO, "Fracture Position cell center", "", "", ""); + + CAF_PDM_InitFieldNoDefault(&ui_cellCenterPosition, "ui_cellCenterPosition", "Fracture Position cell center", "", "", ""); + ui_cellCenterPosition.registerGetMethod(this, &RimSimWellFracture::fracturePositionForUi); + ui_cellCenterPosition.uiCapability()->setUiReadOnly(true); + + cellCenterPosition.uiCapability()->setUiReadOnly(true); + CAF_PDM_InitFieldNoDefault(&fractureDefinition, "FractureDef", "FractureDef", "", "", ""); } @@ -120,7 +128,7 @@ cvf::Vec3d RimSimWellFracture::centerPointForFracture() const RigMainGrid* mainGrid = mainView->eclipseCase()->reservoirData()->mainGrid(); if (!mainGrid) return undef; - size_t gridCellIndex = mainGrid->cellIndexFromIJK(m_i, m_j, m_k); + size_t gridCellIndex = mainGrid->cellIndexFromIJK(m_i-1, m_j-1, m_k-1); // cellIndexFromIJK uses 0-based indexing const RigCell& rigCell = mainGrid->cell(gridCellIndex); cvf::Vec3d center = rigCell.center(); return center; @@ -134,6 +142,24 @@ RimFractureDefinition* RimSimWellFracture::attachedFractureDefinition() return fractureDefinition(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSimWellFracture::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) +{ + + if (changedField == &m_i || changedField == &m_j || changedField == &m_k) + { + cellCenterPosition = centerPointForFracture(); + } + + setRecomputeGeometryFlag(); + + RimProject* proj; + this->firstAncestorOrThisOfType(proj); + if (proj) proj->createDisplayModelAndRedrawAllViews(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -153,6 +179,14 @@ void RimSimWellFracture::setIJK(size_t i, size_t j, size_t k) } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimSimWellFracture::setCellCenterPosition() +{ + cellCenterPosition = centerPointForFracture(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -166,7 +200,20 @@ void RimSimWellFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderi geometryGroup->add(&m_i); geometryGroup->add(&m_j); geometryGroup->add(&m_k); + geometryGroup->add(&ui_cellCenterPosition); uiOrdering.setForgetRemainingFields(true); } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3d RimSimWellFracture::fracturePositionForUi() const +{ + cvf::Vec3d v = cellCenterPosition; + + v.z() = -v.z(); + + return v; +} diff --git a/ApplicationCode/ProjectDataModel/RimSimWellFracture.h b/ApplicationCode/ProjectDataModel/RimSimWellFracture.h index 4c259d2e8f..dbd5ad5cdb 100644 --- a/ApplicationCode/ProjectDataModel/RimSimWellFracture.h +++ b/ApplicationCode/ProjectDataModel/RimSimWellFracture.h @@ -24,6 +24,7 @@ #include "cafAppEnum.h" #include "cafPdmField.h" #include "cafPdmObject.h" +#include "cafPdmProxyValueField.h" #include "cafPdmPtrField.h" #include "cvfBase.h" @@ -51,16 +52,21 @@ class RimSimWellFracture : public RimFracture virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) override; virtual caf::PdmFieldHandle* userDescriptionField() override; void setIJK(size_t i, size_t j, size_t k); - + void setCellCenterPosition(); // Overrides from RimFracture virtual cvf::Vec3d centerPointForFracture() override; virtual RimFractureDefinition* attachedFractureDefinition() override; + virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; + protected: virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); + cvf::Vec3d fracturePositionForUi() const; private: caf::PdmField m_i; //Eclipse indexing, lowest value is 1 caf::PdmField m_j; caf::PdmField m_k; + caf::PdmField cellCenterPosition; + caf::PdmProxyValueField ui_cellCenterPosition; }; diff --git a/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp b/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp index a7d4cbf8c1..85500a873d 100644 --- a/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp +++ b/ApplicationCode/ProjectDataModel/RimWellPathFracture.cpp @@ -56,11 +56,9 @@ RimWellPathFracture::RimWellPathFracture(void) CAF_PDM_InitField( &positionAtWellpath, "PositionAtWellpath", cvf::Vec3d::ZERO, "Fracture Position along Well Path", "", "", ""); CAF_PDM_InitFieldNoDefault(&ui_positionAtWellpath, "ui_positionAtWellpath", "Fracture Position at Well Path", "", "", ""); - ui_positionAtWellpath.registerGetMethod(this, &RimWellPathFracture::wellPositionForUi); - ui_positionAtWellpath.registerSetMethod(this, &RimWellPathFracture::setWellPositionFromUi); + ui_positionAtWellpath.registerGetMethod(this, &RimWellPathFracture::fracturePositionForUi); ui_positionAtWellpath.uiCapability()->setUiReadOnly(true); - CAF_PDM_InitField(&i, "I", 1, "Fracture location cell I", "", "", ""); CAF_PDM_InitField(&j, "J", 1, "Fracture location cell J", "", "", ""); CAF_PDM_InitField(&k, "K", 1, "Fracture location cell K", "", "", ""); @@ -178,26 +176,15 @@ void RimWellPathFracture::defineUiOrdering(QString uiConfigName, caf::PdmUiOrder } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -cvf::Vec3d RimWellPathFracture::wellPositionForUi() const -{ - cvf::Vec3d v = positionAtWellpath(); - - v.z() = -v.z(); - - return v; -} //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimWellPathFracture::setWellPositionFromUi(const cvf::Vec3d& vec) +cvf::Vec3d RimWellPathFracture::fracturePositionForUi() const { - cvf::Vec3d v = vec; + cvf::Vec3d v = positionAtWellpath; v.z() = -v.z(); - positionAtWellpath = v; + return v; } diff --git a/ApplicationCode/ProjectDataModel/RimWellPathFracture.h b/ApplicationCode/ProjectDataModel/RimWellPathFracture.h index 474df0dfa7..f89f60b487 100644 --- a/ApplicationCode/ProjectDataModel/RimWellPathFracture.h +++ b/ApplicationCode/ProjectDataModel/RimWellPathFracture.h @@ -67,8 +67,6 @@ class RimWellPathFracture : public RimFracture protected: virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering); + cvf::Vec3d fracturePositionForUi() const; -private: - cvf::Vec3d wellPositionForUi() const; - void setWellPositionFromUi(const cvf::Vec3d& vec); };