select case if many cases present

This commit is contained in:
Magne Sjaastad 2019-03-19 14:54:24 +01:00
parent 3579667cd8
commit 221afb38d3
7 changed files with 146 additions and 6 deletions

View File

@ -5,6 +5,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RicCreateGridCrossPlotCurveSetFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicSwapGridCrossPlotCurveSetAxesFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicPasteGridCrossPlotCurveSetFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicCreateSaturationPressurePlotsFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicSaturationPressureUi.h
)
set (SOURCE_GROUP_SOURCE_FILES
@ -13,6 +14,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RicCreateGridCrossPlotCurveSetFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicSwapGridCrossPlotCurveSetAxesFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicPasteGridCrossPlotCurveSetFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicCreateSaturationPressurePlotsFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicSaturationPressureUi.cpp
)
list(APPEND CODE_HEADER_FILES

View File

@ -17,6 +17,7 @@
/////////////////////////////////////////////////////////////////////////////////
#include "RicCreateSaturationPressurePlotsFeature.h"
#include "RicSaturationPressureUi.h"
#include "RiaApplication.h"
@ -26,8 +27,10 @@
#include "RimSaturationPressurePlot.h"
#include "RimSaturationPressurePlotCollection.h"
#include "RiuPlotMainWindow.h"
#include "RiuPlotMainWindowTools.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cafSelectionManager.h"
#include <QAction>
@ -75,9 +78,28 @@ void RicCreateSaturationPressurePlotsFeature::onActionTriggered(bool isChecked)
}
RimEclipseResultCase* eclipseResultCase = nullptr;
if (eclipseCases.size() == 1)
if (!eclipseCases.empty())
{
eclipseResultCase = eclipseCases[0];
if (eclipseCases.size() == 1)
{
eclipseResultCase = eclipseCases[0];
}
else
{
RicSaturationPressureUi saturationPressureUi;
saturationPressureUi.setSelectedCase(eclipseCases[0]);
RiuPlotMainWindow* plotwindow = RiaApplication::instance()->mainPlotWindow();
caf::PdmUiPropertyViewDialog propertyDialog(
plotwindow, &saturationPressureUi, "Select Case to create Pressure Saturation plots", "");
if (propertyDialog.exec() == QDialog::Accepted)
{
eclipseResultCase = dynamic_cast<RimEclipseResultCase*>(saturationPressureUi.selectedCase());
}
}
}
if (eclipseResultCase)

View File

@ -0,0 +1,67 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2017- Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RicSaturationPressureUi.h"
#include "RimTools.h"
#include "cafPdmUiFilePathEditor.h"
CAF_PDM_SOURCE_INIT(RicSaturationPressureUi, "RicSaturationPressureUi");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RicSaturationPressureUi::RicSaturationPressureUi()
{
CAF_PDM_InitObject("RicSaturationPressureUi", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_caseToApply, "CaseToApply", "Case to Apply", "", "", "");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicSaturationPressureUi::setSelectedCase(RimEclipseCase* eclipseCase)
{
m_caseToApply = eclipseCase;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseCase* RicSaturationPressureUi::selectedCase() const
{
return m_caseToApply();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RicSaturationPressureUi::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
bool* useOptionsOnly)
{
QList<caf::PdmOptionItemInfo> options;
if (fieldNeedingOptions == &m_caseToApply)
{
RimTools::caseOptionItems(&options);
}
return options;
}

View File

@ -0,0 +1,47 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2017- Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "RimEclipseCase.h"
#include "cafPdmField.h"
#include "cafPdmObject.h"
#include "cafPdmPtrField.h"
//==================================================================================================
///
///
//==================================================================================================
class RicSaturationPressureUi : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
RicSaturationPressureUi();
void setSelectedCase(RimEclipseCase* eclipseCase);
RimEclipseCase* selectedCase() const;
protected:
QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions,
bool* useOptionsOnly) override;
private:
caf::PdmPtrField<RimEclipseCase*> m_caseToApply;
};

View File

@ -43,7 +43,7 @@ RimSaturationPressurePlot::RimSaturationPressurePlot()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion(RiaDefines::PorosityModelType porosityType,
void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion(RiaDefines::PorosityModelType porosityModel,
RimEclipseResultCase* eclipseResultCase,
int zeroBasedEquilRegionIndex)
{
@ -85,7 +85,7 @@ void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion(RiaDefines::Poros
curveSet->addCellFilter(cellFilter);
{
RigCaseCellResultsData* caseCellResultsData = eclipseResultCase->eclipseCaseData()->results(porosityType);
RigCaseCellResultsData* caseCellResultsData = eclipseResultCase->eclipseCaseData()->results(porosityModel);
if (caseCellResultsData)
{
RigEclipseResultAddress depthResultAddress(RiaDefines::STATIC_NATIVE, "DEPTH");
@ -128,7 +128,7 @@ void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion(RiaDefines::Poros
}
{
RigCaseCellResultsData* caseCellResultsData = eclipseResultCase->eclipseCaseData()->results(porosityType);
RigCaseCellResultsData* caseCellResultsData = eclipseResultCase->eclipseCaseData()->results(porosityModel);
if (caseCellResultsData)
{
RigEclipseResultAddress depthResultAddress(RiaDefines::STATIC_NATIVE, "DEPTH");

View File

@ -35,7 +35,7 @@ class RimSaturationPressurePlot : public RimGridCrossPlot
public:
RimSaturationPressurePlot();
void assignCaseAndEquilibriumRegion(RiaDefines::PorosityModelType porosityType,
void assignCaseAndEquilibriumRegion(RiaDefines::PorosityModelType porosityModel,
RimEclipseResultCase* eclipseResultCase,
int zeroBasedEquilRegionIndex);

View File

@ -52,6 +52,8 @@ void RimSaturationPressurePlotCollection::createSaturationPressurePlots(RimEclip
RigEclipseCaseData* eclipseCaseData = eclipseResultCase->eclipseCaseData();
if (!eclipseCaseData) return;
m_saturationPressurePlots.deleteAllChildObjects();
std::vector<RigEquil> equilData = eclipseCaseData->equilData();
for (size_t i = 0; i < equilData.size(); i++)
{