diff --git a/ApplicationCode/UserInterface/RiuPvtPlotUpdater.cpp b/ApplicationCode/UserInterface/RiuPvtPlotUpdater.cpp index ef97c9fbe4..082a0f683c 100644 --- a/ApplicationCode/UserInterface/RiuPvtPlotUpdater.cpp +++ b/ApplicationCode/UserInterface/RiuPvtPlotUpdater.cpp @@ -31,6 +31,8 @@ #include "Rim3dView.h" #include "RimEclipseView.h" #include "RimEclipseResultCase.h" +#include "Rim2dIntersectionView.h" +#include "RimIntersection.h" #include "cvfBase.h" //#include "cvfTrace.h" @@ -68,8 +70,18 @@ void RiuPvtPlotUpdater::updateOnSelectionChanged(const RiuSelectionItem* selecti m_sourceEclipseViewOfLastPlot = NULL; bool mustClearPlot = true; - const RiuEclipseSelectionItem* eclipseSelectionItem = dynamic_cast(selectionItem); - const RimEclipseView* eclipseView = eclipseSelectionItem ? eclipseSelectionItem->m_view.p() : NULL; + RiuEclipseSelectionItem* eclipseSelectionItem = dynamic_cast(const_cast(selectionItem)); + RimEclipseView* eclipseView = eclipseSelectionItem ? eclipseSelectionItem->m_view.p() : NULL; + + if (!eclipseSelectionItem && !eclipseView) + { + const Riu2dIntersectionSelectionItem* intersectionSelItem = dynamic_cast(selectionItem); + if (intersectionSelItem && intersectionSelItem->eclipseSelectionItem()) + { + eclipseSelectionItem = intersectionSelItem->eclipseSelectionItem(); + eclipseView = eclipseSelectionItem->m_view; + } + } if (m_targetPlotPanel->isVisible() && eclipseSelectionItem && eclipseView) { diff --git a/ApplicationCode/UserInterface/RiuRelativePermeabilityPlotUpdater.cpp b/ApplicationCode/UserInterface/RiuRelativePermeabilityPlotUpdater.cpp index eb0a96c593..92c89b7c3b 100644 --- a/ApplicationCode/UserInterface/RiuRelativePermeabilityPlotUpdater.cpp +++ b/ApplicationCode/UserInterface/RiuRelativePermeabilityPlotUpdater.cpp @@ -30,6 +30,8 @@ #include "Rim3dView.h" #include "RimEclipseView.h" #include "RimEclipseResultCase.h" +#include "Rim2dIntersectionView.h" +#include "RimIntersection.h" #include "cvfBase.h" //#include "cvfTrace.h" @@ -68,8 +70,18 @@ void RiuRelativePermeabilityPlotUpdater::updateOnSelectionChanged(const RiuSelec m_sourceEclipseViewOfLastPlot = NULL; bool mustClearPlot = true; - const RiuEclipseSelectionItem* eclipseSelectionItem = dynamic_cast(selectionItem); - const RimEclipseView* eclipseView = eclipseSelectionItem ? eclipseSelectionItem->m_view.p() : NULL; + RiuEclipseSelectionItem* eclipseSelectionItem = dynamic_cast(const_cast(selectionItem)); + RimEclipseView* eclipseView = eclipseSelectionItem ? eclipseSelectionItem->m_view.p() : NULL; + + if (!eclipseSelectionItem && !eclipseView) + { + const Riu2dIntersectionSelectionItem* intersectionSelItem = dynamic_cast(selectionItem); + if (intersectionSelItem && intersectionSelItem->eclipseSelectionItem()) + { + eclipseSelectionItem = intersectionSelItem->eclipseSelectionItem(); + eclipseView = eclipseSelectionItem->m_view; + } + } if (m_targetPlotPanel->isVisible() && eclipseSelectionItem && eclipseView) { diff --git a/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp b/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp index 233a5281dd..40818f6243 100644 --- a/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp +++ b/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp @@ -35,6 +35,8 @@ #include "RimGeoMechCase.h" #include "RimGeoMechResultDefinition.h" #include "RimGeoMechView.h" +#include "Rim2dIntersectionView.h" +#include "RimIntersection.h" #include "RimProject.h" #include "RiuFemResultTextBuilder.h" @@ -238,6 +240,21 @@ void RiuSelectionChangedHandler::addCurveFromSelectionItem(const RiuGeoMechSelec } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuSelectionChangedHandler::addCurveFromSelectionItem(const Riu2dIntersectionSelectionItem* selectionItem) const +{ + if (selectionItem->eclipseSelectionItem()) + { + addCurveFromSelectionItem(selectionItem->eclipseSelectionItem()); + } + else if (selectionItem->geoMechSelectionItem()) + { + addCurveFromSelectionItem(selectionItem->geoMechSelectionItem()); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -255,6 +272,13 @@ void RiuSelectionChangedHandler::addCurveFromSelectionItem(const RiuSelectionIte addCurveFromSelectionItem(geomSelectionItem); } + else if (itemAdded->type() == RiuSelectionItem::INTERSECTION_SELECTION_OBJECT) + { + const Riu2dIntersectionSelectionItem* _2dSelectionItem = static_cast(itemAdded); + + addCurveFromSelectionItem(_2dSelectionItem); + } + } //-------------------------------------------------------------------------------------------------- @@ -283,11 +307,19 @@ void RiuSelectionChangedHandler::updateResultInfo(const RiuSelectionItem* itemAd QString resultInfo; QString pickInfo; - if (itemAdded != NULL) + RiuSelectionItem* selItem = const_cast(itemAdded); + if (selItem != NULL) { - if (itemAdded->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT) + if (selItem->type() == RiuSelectionItem::INTERSECTION_SELECTION_OBJECT) { - const RiuEclipseSelectionItem* eclipseSelectionItem = static_cast(itemAdded); + const Riu2dIntersectionSelectionItem* wrapperSelItem = dynamic_cast(selItem); + if (wrapperSelItem && wrapperSelItem->eclipseSelectionItem()) selItem = wrapperSelItem->eclipseSelectionItem(); + else if (wrapperSelItem && wrapperSelItem->geoMechSelectionItem()) selItem = wrapperSelItem->geoMechSelectionItem(); + } + + if (selItem->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT) + { + const RiuEclipseSelectionItem* eclipseSelectionItem = static_cast(selItem); RimEclipseView* eclipseView = eclipseSelectionItem->m_view.p(); @@ -300,9 +332,9 @@ void RiuSelectionChangedHandler::updateResultInfo(const RiuSelectionItem* itemAd pickInfo = textBuilder.geometrySelectionText(", "); } - else if (itemAdded->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT) + else if (selItem->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT) { - const RiuGeoMechSelectionItem* geomSelectionItem = static_cast(itemAdded); + const RiuGeoMechSelectionItem* geomSelectionItem = static_cast(selItem); RimGeoMechView* geomView = geomSelectionItem->m_view.p(); RiuFemResultTextBuilder textBuilder(geomView, (int)geomSelectionItem->m_gridIndex, (int)geomSelectionItem->m_cellIndex, geomView->currentTimeStep()); diff --git a/ApplicationCode/UserInterface/RiuSelectionChangedHandler.h b/ApplicationCode/UserInterface/RiuSelectionChangedHandler.h index 9d6e4c9865..f9d876e95b 100644 --- a/ApplicationCode/UserInterface/RiuSelectionChangedHandler.h +++ b/ApplicationCode/UserInterface/RiuSelectionChangedHandler.h @@ -22,6 +22,7 @@ class RiuSelectionItem; class RiuEclipseSelectionItem; class RiuGeoMechSelectionItem; +class Riu2dIntersectionSelectionItem; //-------------------------------------------------------------------------------------------------- /// @@ -40,6 +41,7 @@ private: void addCurveFromSelectionItem(const RiuSelectionItem* itemAdded) const; void addCurveFromSelectionItem(const RiuEclipseSelectionItem* selectionItem) const; void addCurveFromSelectionItem(const RiuGeoMechSelectionItem* selectionItem) const; + void addCurveFromSelectionItem(const Riu2dIntersectionSelectionItem* selectionItem) const; void scheduleUpdateForAllVisibleViews() const; void updateResultInfo(const RiuSelectionItem* itemAdded) const; diff --git a/ApplicationCode/UserInterface/RiuSelectionManager.cpp b/ApplicationCode/UserInterface/RiuSelectionManager.cpp index c18555d2a2..2406531454 100644 --- a/ApplicationCode/UserInterface/RiuSelectionManager.cpp +++ b/ApplicationCode/UserInterface/RiuSelectionManager.cpp @@ -19,9 +19,11 @@ #include "RiuSelectionManager.h" +#include "RimGridView.h" #include "RimEclipseView.h" #include "RimGeoMechView.h" #include "RimSimWellInView.h" +#include "Rim2dIntersectionView.h" #include "RimWellPath.h" #include "RivSimWellPipeSourceInfo.h" @@ -155,7 +157,13 @@ void RiuSelectionManager::deleteAllItemsFromSelection(int role) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RiuEclipseSelectionItem::RiuEclipseSelectionItem(RimEclipseView* view, size_t gridIndex, size_t cellIndex, size_t nncIndex, cvf::Color3f color, cvf::StructGridInterface::FaceType face, const cvf::Vec3d& localIntersectionPoint) +RiuEclipseSelectionItem::RiuEclipseSelectionItem(RimEclipseView* view, + size_t gridIndex, + size_t cellIndex, + size_t nncIndex, + cvf::Color3f color, + cvf::StructGridInterface::FaceType face, + const cvf::Vec3d& localIntersectionPoint) : m_view(view), m_gridIndex(gridIndex), m_gridLocalCellIndex(cellIndex), @@ -207,6 +215,40 @@ RiuGeoMechSelectionItem::RiuGeoMechSelectionItem(RimGeoMechView* view, } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +Riu2dIntersectionSelectionItem::Riu2dIntersectionSelectionItem(RiuSelectionItem *selItem) +{ + m_eclipseSelItem = dynamic_cast(selItem); + m_geoMechSelItem = dynamic_cast(selItem); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +Riu2dIntersectionSelectionItem::~Riu2dIntersectionSelectionItem() +{ + if (m_eclipseSelItem) delete m_eclipseSelItem; + if (m_geoMechSelItem) delete m_geoMechSelItem; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuEclipseSelectionItem* Riu2dIntersectionSelectionItem::eclipseSelectionItem() const +{ + return m_eclipseSelItem; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RiuGeoMechSelectionItem* Riu2dIntersectionSelectionItem::geoMechSelectionItem() const +{ + return m_geoMechSelItem; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/UserInterface/RiuSelectionManager.h b/ApplicationCode/UserInterface/RiuSelectionManager.h index 9b2798db7a..3b731731a5 100644 --- a/ApplicationCode/UserInterface/RiuSelectionManager.h +++ b/ApplicationCode/UserInterface/RiuSelectionManager.h @@ -32,9 +32,11 @@ // #include "RivWellPathSourceInfo.h" // #include "RivWellPipeSourceInfo.h" +class RimGridView; class RimEclipseView; class RimGeoMechView; class RimSimWellInView; +class Rim2dIntersectionView; class RimWellPath; class RiuSelectionChangedHandler; class RiuSelectionItem; @@ -109,7 +111,8 @@ public: GEOMECH_SELECTION_OBJECT, WELLPATH_SELECTION_OBJECT, SIMWELL_SELECTION_OBJECT, - GENERAL_SELECTION_OBJECT + GENERAL_SELECTION_OBJECT, + INTERSECTION_SELECTION_OBJECT }; public: @@ -128,8 +131,13 @@ public: class RiuEclipseSelectionItem : public RiuSelectionItem { public: - explicit RiuEclipseSelectionItem(RimEclipseView* view, size_t gridIndex, size_t cellIndex, size_t nncIndex, - cvf::Color3f color, cvf::StructGridInterface::FaceType face, const cvf::Vec3d& localIntersectionPoint); + explicit RiuEclipseSelectionItem(RimEclipseView* view, + size_t gridIndex, + size_t cellIndex, + size_t nncIndex, + cvf::Color3f color, + cvf::StructGridInterface::FaceType face, + const cvf::Vec3d& localIntersectionPoint); virtual ~RiuEclipseSelectionItem() {}; @@ -190,6 +198,33 @@ public: }; +//================================================================================================== +// +// +// +//================================================================================================== +class Riu2dIntersectionSelectionItem : public RiuSelectionItem +{ +public: + explicit Riu2dIntersectionSelectionItem(RiuSelectionItem *selItem); + + virtual ~Riu2dIntersectionSelectionItem(); + + virtual RiuSelectionType type() const + { + return INTERSECTION_SELECTION_OBJECT; + } + +public: + RiuEclipseSelectionItem* eclipseSelectionItem() const; + RiuGeoMechSelectionItem* geoMechSelectionItem() const; + +private: + RiuEclipseSelectionItem* m_eclipseSelItem; + RiuGeoMechSelectionItem* m_geoMechSelItem; +}; + + //================================================================================================== // // diff --git a/ApplicationCode/UserInterface/RiuViewerCommands.cpp b/ApplicationCode/UserInterface/RiuViewerCommands.cpp index 39ed07d8b1..b422f82915 100644 --- a/ApplicationCode/UserInterface/RiuViewerCommands.cpp +++ b/ApplicationCode/UserInterface/RiuViewerCommands.cpp @@ -58,6 +58,7 @@ #include "RimPerforationInterval.h" #include "RimStimPlanFractureTemplate.h" #include "RimEllipseFractureTemplate.h" +#include "Rim2dIntersectionView.h" #include "RiuMainWindow.h" #include "RiuSelectionManager.h" @@ -605,27 +606,35 @@ void RiuViewerCommands::handlePickAction(int winPosX, int winPosY, Qt::KeyboardM RiuSelectionItem* selItem = nullptr; { + Rim2dIntersectionView* intersectionView = dynamic_cast(m_reservoirView.p()); RimEclipseView* eclipseView = dynamic_cast(m_reservoirView.p()); + RimGeoMechView* geomView = dynamic_cast(m_reservoirView.p()); + + if (intersectionView) + { + intersectionView->intersection()->firstAncestorOrThisOfType(eclipseView); + intersectionView->intersection()->firstAncestorOrThisOfType(geomView); + } + if (eclipseView) { selItem = new RiuEclipseSelectionItem(eclipseView, gridIndex, cellIndex, nncIndex, curveColor, face, localIntersectionPoint); } - RimGeoMechView* geomView = dynamic_cast(m_reservoirView.p()); - if (geomView ) + if (geomView) { if(intersectionHit) selItem = new RiuGeoMechSelectionItem(geomView, gridIndex, cellIndex, curveColor, gmFace, localIntersectionPoint, intersectionTriangleHit); else selItem = new RiuGeoMechSelectionItem(geomView, gridIndex, cellIndex, curveColor, gmFace, localIntersectionPoint); } - + if (intersectionView) selItem = new Riu2dIntersectionSelectionItem(selItem); } if (appendToSelection) { RiuSelectionManager::instance()->appendItemToSelection(selItem); } - else + else if(selItem) { RiuSelectionManager::instance()->setSelectedItem(selItem); } @@ -648,17 +657,23 @@ void RiuViewerCommands::findCellAndGridIndex(const RivIntersectionSourceInfo* cr { CVF_ASSERT(cellIndex && gridIndex); - RimEclipseView* eclipseView = dynamic_cast(m_reservoirView.p()); - RimGeoMechView* geomView = dynamic_cast(m_reservoirView.p()); - if (eclipseView) + RimCase* ownerCase = m_reservoirView->ownerCase(); + RimEclipseCase* eclipseCase = dynamic_cast(ownerCase); + RimGeoMechCase* geomCase = dynamic_cast(ownerCase); + if (eclipseCase) { + //RimEclipseView* eclipseView = dynamic_cast(m_reservoirView.p()); + RimEclipseView* eclipseView; + crossSectionSourceInfo->crossSection()->firstAncestorOrThisOfType(eclipseView); + size_t globalCellIndex = crossSectionSourceInfo->triangleToCellIndex()[firstPartTriangleIndex]; const RigCell& cell = eclipseView->mainGrid()->globalCellArray()[globalCellIndex]; + *cellIndex = cell.gridLocalCellIndex(); *gridIndex = cell.hostGrid()->gridIndex(); } - else if (geomView) + else if (geomCase) { *cellIndex = crossSectionSourceInfo->triangleToCellIndex()[firstPartTriangleIndex]; *gridIndex = 0;