mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#4118 Limit data points in grid cross plot by cells visible in view
This commit is contained in:
@@ -30,9 +30,11 @@
|
||||
|
||||
#include "RimCase.h"
|
||||
#include "RimEclipseCase.h"
|
||||
#include "RimEclipseView.h"
|
||||
#include "RimEclipseResultDefinition.h"
|
||||
#include "RimGridCrossPlot.h"
|
||||
#include "RimGridCrossPlotCurve.h"
|
||||
#include "RimGridView.h"
|
||||
#include "RimProject.h"
|
||||
#include "RimTools.h"
|
||||
|
||||
@@ -68,6 +70,8 @@ RimGridCrossPlotCurveSet::RimGridCrossPlotCurveSet()
|
||||
CAF_PDM_InitField(&m_timeStep, "TimeStep", -1, "Time Step", "", "", "");
|
||||
m_timeStep.uiCapability()->setUiEditorTypeName(caf::PdmUiComboBoxEditor::uiEditorTypeName());
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_cellFilterView, "VisibleCellView", "Limit to Cells Visible in View", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_categorization, "Categorization", "Data Categorization", "", "", "");
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&m_xAxisProperty, "XAxisProperty", "X-Axis Property", "", "", "");
|
||||
@@ -240,6 +244,17 @@ void RimGridCrossPlotCurveSet::detachAllCurves()
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimGridCrossPlotCurveSet::cellFilterViewUpdated()
|
||||
{
|
||||
if (m_cellFilterView())
|
||||
{
|
||||
loadDataAndUpdate(true);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -295,8 +310,10 @@ void RimGridCrossPlotCurveSet::onLoadDataAndUpdate(bool updateParentPlot)
|
||||
RigEclipseResultAddress yAddress(m_yAxisProperty->resultType(), m_yAxisProperty->resultVariable());
|
||||
RigEclipseResultAddress catAddress(m_categoryProperty->resultType(), m_categoryProperty->resultVariable());
|
||||
|
||||
std::map<int, cvf::UByteArray> timeStepCellVisibilityMap = calculateCellVisibility(eclipseCase);
|
||||
|
||||
RigEclipseCrossPlotResult result = RigEclipseCrossPlotDataExtractor::extract(
|
||||
eclipseCase->eclipseCaseData(), m_timeStep(), xAddress, yAddress, m_categorization(), catAddress, m_categoryBinCount);
|
||||
eclipseCase->eclipseCaseData(), m_timeStep(), xAddress, yAddress, m_categorization(), catAddress, m_categoryBinCount, timeStepCellVisibilityMap);
|
||||
|
||||
for (const auto& sampleCategory : result.categorySamplesMap)
|
||||
{
|
||||
@@ -327,6 +344,38 @@ void RimGridCrossPlotCurveSet::onLoadDataAndUpdate(bool updateParentPlot)
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::map<int, cvf::UByteArray> RimGridCrossPlotCurveSet::calculateCellVisibility(RimEclipseCase* eclipseCase) const
|
||||
{
|
||||
std::map<int, cvf::UByteArray> timeStepCellVisibilityMap;
|
||||
if (m_cellFilterView)
|
||||
{
|
||||
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>(m_cellFilterView());
|
||||
if (eclipseView)
|
||||
{
|
||||
std::set<int> timeSteps;
|
||||
if (m_timeStep() == -1)
|
||||
{
|
||||
for (int i = 0; i < (int)eclipseCase->timeStepDates().size(); ++i)
|
||||
{
|
||||
timeSteps.insert(i);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
timeSteps.insert(m_timeStep());
|
||||
}
|
||||
for (int i : timeSteps)
|
||||
{
|
||||
eclipseView->calculateCurrentTotalCellVisibility(&timeStepCellVisibilityMap[i], i);
|
||||
}
|
||||
}
|
||||
}
|
||||
return timeStepCellVisibilityMap;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -336,6 +385,7 @@ void RimGridCrossPlotCurveSet::defineUiOrdering(QString uiConfigName, caf::PdmUi
|
||||
if (m_case)
|
||||
{
|
||||
uiOrdering.add(&m_timeStep);
|
||||
uiOrdering.add(&m_cellFilterView);
|
||||
uiOrdering.add(&m_categorization);
|
||||
|
||||
if (m_categorization() == RESULT_CATEGORIZATION)
|
||||
@@ -389,6 +439,10 @@ void RimGridCrossPlotCurveSet::fieldChangedByUi(const caf::PdmFieldHandle* chang
|
||||
{
|
||||
loadDataAndUpdate(true);
|
||||
}
|
||||
else if (changedField == &m_cellFilterView)
|
||||
{
|
||||
loadDataAndUpdate(true);
|
||||
}
|
||||
else if (changedField == &m_isChecked)
|
||||
{
|
||||
triggerReplotAndTreeRebuild();
|
||||
@@ -425,6 +479,18 @@ QList<caf::PdmOptionItemInfo> RimGridCrossPlotCurveSet::calculateValueOptions(co
|
||||
options.push_back(caf::PdmOptionItemInfo(timeStepNames[i], i));
|
||||
}
|
||||
}
|
||||
else if (fieldNeedingOptions == &m_cellFilterView)
|
||||
{
|
||||
RimEclipseCase* eclipseCase = dynamic_cast<RimEclipseCase*>(m_case());
|
||||
if (eclipseCase)
|
||||
{
|
||||
options.push_back(caf::PdmOptionItemInfo("Disabled", nullptr));
|
||||
for (RimEclipseView* view : eclipseCase->reservoirViews.childObjects())
|
||||
{
|
||||
options.push_back(caf::PdmOptionItemInfo(view->name(), view, false, view->uiIcon()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return options;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user