(#612) Improved user interaction for adding/deleting curves

When time hist plot is visible,
CTRL + mouse click on a cell adds curve to plot
Mouse click outside clears curve plot
This commit is contained in:
Magne Sjaastad 2015-11-05 12:32:29 +01:00
parent ff6e2755aa
commit e3d76be0aa
3 changed files with 52 additions and 39 deletions

View File

@ -225,7 +225,7 @@ void RiuViewer::mouseReleaseEvent(QMouseEvent* event)
if (event->button() == Qt::LeftButton) if (event->button() == Qt::LeftButton)
{ {
m_viewerCommands->handlePickAction(event->x(), event->y()); m_viewerCommands->handlePickAction(event->x(), event->y(), event->modifiers());
return; return;
} }
else if (event->button() == Qt::RightButton) else if (event->button() == Qt::RightButton)

View File

@ -404,9 +404,8 @@ void RiuViewerCommands::slotAddGeoMechPropertyFilter()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiuViewerCommands::handlePickAction(int winPosX, int winPosY) void RiuViewerCommands::handlePickAction(int winPosX, int winPosY, Qt::KeyboardModifiers keyboardModifiers)
{ {
size_t gridIndex = cvf::UNDEFINED_SIZE_T; size_t gridIndex = cvf::UNDEFINED_SIZE_T;
size_t cellIndex = cvf::UNDEFINED_SIZE_T; size_t cellIndex = cvf::UNDEFINED_SIZE_T;
size_t nncIndex = cvf::UNDEFINED_SIZE_T; size_t nncIndex = cvf::UNDEFINED_SIZE_T;
@ -474,13 +473,18 @@ void RiuViewerCommands::handlePickAction(int winPosX, int winPosY)
} }
RiuMainWindow* mainWnd = RiuMainWindow::instance();
// Compose a info text regarding the hit // Compose a info text regarding the hit
QString pickInfo = "No hits"; QString pickInfo = "No hits";
QString resultInfo = ""; QString resultInfo = "";
bool addCurveToTimeHistoryPlot = false;
if (keyboardModifiers & Qt::ControlModifier)
{
addCurveToTimeHistoryPlot = true;
}
if (cellIndex != cvf::UNDEFINED_SIZE_T || nncIndex != cvf::UNDEFINED_SIZE_T) if (cellIndex != cvf::UNDEFINED_SIZE_T || nncIndex != cvf::UNDEFINED_SIZE_T)
{ {
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>(m_reservoirView.p()); RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>(m_reservoirView.p());
@ -497,12 +501,7 @@ void RiuViewerCommands::handlePickAction(int winPosX, int winPosY)
pickInfo = textBuilder.topologyText(", "); pickInfo = textBuilder.topologyText(", ");
if (eclipseView->cellResult()->hasDynamicResult() && if (addCurveToTimeHistoryPlot) addTimeHistoryCurve(eclipseView, gridIndex, cellIndex);
eclipseView->eclipseCase() &&
eclipseView->eclipseCase()->reservoirData())
{
addTimeHistoryCurve(eclipseView, gridIndex, cellIndex);
}
} }
else if (geomView) else if (geomView)
{ {
@ -515,24 +514,26 @@ void RiuViewerCommands::handlePickAction(int winPosX, int winPosY)
pickInfo = textBuilder.topologyText(", "); pickInfo = textBuilder.topologyText(", ");
if (geomView->cellResult() && if (addCurveToTimeHistoryPlot) addTimeHistoryCurve(geomView, gridIndex, cellIndex, localIntersectionPoint);
geomView->cellResult()->hasResult())
{
addTimeHistoryCurve(geomView, gridIndex, cellIndex, localIntersectionPoint);
}
} }
} }
else
{
// Delete all curves if no cell is hit
mainWnd->timeHistoryPlot()->deleteAllCurves();
}
if (wellPath) if (wellPath)
{ {
pickInfo = QString("Well path hit: %1").arg(wellPath->name()); pickInfo = QString("Well path hit: %1").arg(wellPath->name());
} }
RiuMainWindow* mainWnd = RiuMainWindow::instance();
if (cellIndex == cvf::UNDEFINED_SIZE_T &&
!(keyboardModifiers & Qt::ControlModifier))
{
if (mainWnd->timeHistoryPlot()->isVisible())
{
// Delete all curves if no cell is hit
mainWnd->timeHistoryPlot()->deleteAllCurves();
}
}
mainWnd->statusBar()->showMessage(pickInfo); mainWnd->statusBar()->showMessage(pickInfo);
mainWnd->setResultInfo(resultInfo); mainWnd->setResultInfo(resultInfo);
} }
@ -542,25 +543,33 @@ void RiuViewerCommands::handlePickAction(int winPosX, int winPosY)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiuViewerCommands::addTimeHistoryCurve(RimEclipseView* eclipseView, size_t gridIndex, size_t cellIndex) void RiuViewerCommands::addTimeHistoryCurve(RimEclipseView* eclipseView, size_t gridIndex, size_t cellIndex)
{ {
RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(eclipseView->cellResult()->porosityModel());
std::vector<QDateTime> timeStepDates = eclipseView->eclipseCase()->reservoirData()->results(porosityModel)->timeStepDates(eclipseView->cellResult()->scalarResultIndex());
RigTimeHistoryResultAccessor timeHistResultAccessor(eclipseView->eclipseCase()->reservoirData(), gridIndex, cellIndex, eclipseView->cellResult()->scalarResultIndex(), porosityModel);
QString curveName = eclipseView->eclipseCase()->caseUserDescription();
curveName += " - Result : ";
curveName += eclipseView->cellResult()->resultVariable();
curveName += " - ";
curveName += timeHistResultAccessor.topologyText();
std::vector<double> timeHistoryValues = timeHistResultAccessor.timeHistoryValues();
CVF_ASSERT(timeStepDates.size() == timeHistoryValues.size());
RiuMainWindow* mainWnd = RiuMainWindow::instance(); RiuMainWindow* mainWnd = RiuMainWindow::instance();
if (!mainWnd->timeHistoryPlot()->isVisible()) return;
if (eclipseView->cellResult()->hasDynamicResult() &&
eclipseView->eclipseCase() &&
eclipseView->eclipseCase()->reservoirData())
{
RifReaderInterface::PorosityModelResultType porosityModel = RigCaseCellResultsData::convertFromProjectModelPorosityModel(eclipseView->cellResult()->porosityModel());
std::vector<QDateTime> timeStepDates = eclipseView->eclipseCase()->reservoirData()->results(porosityModel)->timeStepDates(eclipseView->cellResult()->scalarResultIndex());
RigTimeHistoryResultAccessor timeHistResultAccessor(eclipseView->eclipseCase()->reservoirData(), gridIndex, cellIndex, eclipseView->cellResult()->scalarResultIndex(), porosityModel);
QString curveName = eclipseView->eclipseCase()->caseUserDescription();
curveName += ", ";
curveName += eclipseView->cellResult()->resultVariable();
curveName += ", ";
curveName += QString("Grid index %1").arg(gridIndex);
curveName += ", ";
curveName += timeHistResultAccessor.topologyText();
std::vector<double> timeHistoryValues = timeHistResultAccessor.timeHistoryValues();
CVF_ASSERT(timeStepDates.size() == timeHistoryValues.size());
mainWnd->timeHistoryPlot()->addCurve(curveName, timeStepDates, timeHistoryValues); mainWnd->timeHistoryPlot()->addCurve(curveName, timeStepDates, timeHistoryValues);
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -568,8 +577,12 @@ void RiuViewerCommands::addTimeHistoryCurve(RimEclipseView* eclipseView, size_t
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiuViewerCommands::addTimeHistoryCurve(RimGeoMechView* geoMechView, size_t gridIndex, size_t cellIndex, const cvf::Vec3d& localIntersectionPoint) void RiuViewerCommands::addTimeHistoryCurve(RimGeoMechView* geoMechView, size_t gridIndex, size_t cellIndex, const cvf::Vec3d& localIntersectionPoint)
{ {
RiuMainWindow* mainWnd = RiuMainWindow::instance();
if (!mainWnd->timeHistoryPlot()->isVisible()) return;
if (geoMechView && if (geoMechView &&
geoMechView->cellResult() && geoMechView->cellResult() &&
geoMechView->cellResult()->hasResult() &&
geoMechView->geoMechCase() && geoMechView->geoMechCase() &&
geoMechView->geoMechCase()->geoMechData()) geoMechView->geoMechCase()->geoMechData())
{ {

View File

@ -47,7 +47,7 @@ public:
void setOwnerView(RimView * owner); void setOwnerView(RimView * owner);
void displayContextMenu(QMouseEvent* event); void displayContextMenu(QMouseEvent* event);
void handlePickAction(int winPosX, int winPosY); void handlePickAction(int winPosX, int winPosY, Qt::KeyboardModifiers keyboardModifiers);
private slots: private slots: