#2427 2d intersection view. Display result info and curves

This commit is contained in:
Bjørn Erik Jensen 2018-02-06 14:39:38 +01:00
parent c695d40266
commit 69cc77e026
7 changed files with 171 additions and 21 deletions

View File

@ -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<const RiuEclipseSelectionItem*>(selectionItem);
const RimEclipseView* eclipseView = eclipseSelectionItem ? eclipseSelectionItem->m_view.p() : NULL;
RiuEclipseSelectionItem* eclipseSelectionItem = dynamic_cast<RiuEclipseSelectionItem*>(const_cast<RiuSelectionItem*>(selectionItem));
RimEclipseView* eclipseView = eclipseSelectionItem ? eclipseSelectionItem->m_view.p() : NULL;
if (!eclipseSelectionItem && !eclipseView)
{
const Riu2dIntersectionSelectionItem* intersectionSelItem = dynamic_cast<const Riu2dIntersectionSelectionItem*>(selectionItem);
if (intersectionSelItem && intersectionSelItem->eclipseSelectionItem())
{
eclipseSelectionItem = intersectionSelItem->eclipseSelectionItem();
eclipseView = eclipseSelectionItem->m_view;
}
}
if (m_targetPlotPanel->isVisible() && eclipseSelectionItem && eclipseView)
{

View File

@ -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<const RiuEclipseSelectionItem*>(selectionItem);
const RimEclipseView* eclipseView = eclipseSelectionItem ? eclipseSelectionItem->m_view.p() : NULL;
RiuEclipseSelectionItem* eclipseSelectionItem = dynamic_cast<RiuEclipseSelectionItem*>(const_cast<RiuSelectionItem*>(selectionItem));
RimEclipseView* eclipseView = eclipseSelectionItem ? eclipseSelectionItem->m_view.p() : NULL;
if (!eclipseSelectionItem && !eclipseView)
{
const Riu2dIntersectionSelectionItem* intersectionSelItem = dynamic_cast<const Riu2dIntersectionSelectionItem*>(selectionItem);
if (intersectionSelItem && intersectionSelItem->eclipseSelectionItem())
{
eclipseSelectionItem = intersectionSelItem->eclipseSelectionItem();
eclipseView = eclipseSelectionItem->m_view;
}
}
if (m_targetPlotPanel->isVisible() && eclipseSelectionItem && eclipseView)
{

View File

@ -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<const Riu2dIntersectionSelectionItem*>(itemAdded);
addCurveFromSelectionItem(_2dSelectionItem);
}
}
//--------------------------------------------------------------------------------------------------
@ -283,11 +307,19 @@ void RiuSelectionChangedHandler::updateResultInfo(const RiuSelectionItem* itemAd
QString resultInfo;
QString pickInfo;
if (itemAdded != NULL)
RiuSelectionItem* selItem = const_cast<RiuSelectionItem*>(itemAdded);
if (selItem != NULL)
{
if (itemAdded->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT)
if (selItem->type() == RiuSelectionItem::INTERSECTION_SELECTION_OBJECT)
{
const RiuEclipseSelectionItem* eclipseSelectionItem = static_cast<const RiuEclipseSelectionItem*>(itemAdded);
const Riu2dIntersectionSelectionItem* wrapperSelItem = dynamic_cast<Riu2dIntersectionSelectionItem*>(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<const RiuEclipseSelectionItem*>(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<const RiuGeoMechSelectionItem*>(itemAdded);
const RiuGeoMechSelectionItem* geomSelectionItem = static_cast<const RiuGeoMechSelectionItem*>(selItem);
RimGeoMechView* geomView = geomSelectionItem->m_view.p();
RiuFemResultTextBuilder textBuilder(geomView, (int)geomSelectionItem->m_gridIndex, (int)geomSelectionItem->m_cellIndex, geomView->currentTimeStep());

View File

@ -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;

View File

@ -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<RiuEclipseSelectionItem*>(selItem);
m_geoMechSelItem = dynamic_cast<RiuGeoMechSelectionItem*>(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;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -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;
};
//==================================================================================================
//
//

View File

@ -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<Rim2dIntersectionView*>(m_reservoirView.p());
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>(m_reservoirView.p());
RimGeoMechView* geomView = dynamic_cast<RimGeoMechView*>(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<RimGeoMechView*>(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<RimEclipseView*>(m_reservoirView.p());
RimGeoMechView* geomView = dynamic_cast<RimGeoMechView*>(m_reservoirView.p());
if (eclipseView)
RimCase* ownerCase = m_reservoirView->ownerCase();
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>(ownerCase);
RimGeoMechCase* geomCase = dynamic_cast<RimGeoMechCase*>(ownerCase);
if (eclipseCase)
{
//RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>(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;