mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#282 Use value selection to filter cells
This commit is contained in:
parent
c5d4519eb1
commit
eae6012b77
@ -781,11 +781,8 @@ void RivReservoirViewPartMgr::computePropertyVisibility(cvf::UByteArray* cellVis
|
||||
{
|
||||
RimEclipsePropertyFilter* propertyFilter = propFilterColl->propertyFilters()[i];
|
||||
|
||||
if (propertyFilter->isActive()&& propertyFilter->resultDefinition->hasResult())
|
||||
if (propertyFilter->isActive() && propertyFilter->resultDefinition->hasResult())
|
||||
{
|
||||
const double lowerBound = propertyFilter->lowerBound();
|
||||
const double upperBound = propertyFilter->upperBound();
|
||||
|
||||
const RimCellFilter::FilterModeType filterType = propertyFilter->filterMode();
|
||||
|
||||
RigCaseData* eclipseCase = propFilterColl->reservoirView()->eclipseCase()->reservoirData();
|
||||
@ -803,26 +800,65 @@ void RivReservoirViewPartMgr::computePropertyVisibility(cvf::UByteArray* cellVis
|
||||
|
||||
CVF_ASSERT(resultAccessor.notNull());
|
||||
|
||||
//#pragma omp parallel for schedule(dynamic)
|
||||
for (int cellIndex = 0; cellIndex < static_cast<int>(grid->cellCount()); cellIndex++)
|
||||
if (propertyFilter->isValueSelectionActive())
|
||||
{
|
||||
if ( (*cellVisibility)[cellIndex] )
|
||||
std::vector<int> integerVector = propertyFilter->selectedValues();
|
||||
std::set<int> integerSet;
|
||||
for (auto val : integerVector)
|
||||
{
|
||||
size_t resultValueIndex = cellIndex;
|
||||
|
||||
double scalarValue = resultAccessor->cellScalar(resultValueIndex);
|
||||
if (lowerBound <= scalarValue && scalarValue <= upperBound)
|
||||
integerSet.insert(val);
|
||||
}
|
||||
|
||||
for (int cellIndex = 0; cellIndex < static_cast<int>(grid->cellCount()); cellIndex++)
|
||||
{
|
||||
if ((*cellVisibility)[cellIndex])
|
||||
{
|
||||
if (filterType == RimCellFilter::EXCLUDE)
|
||||
size_t resultValueIndex = cellIndex;
|
||||
|
||||
double scalarValue = resultAccessor->cellScalar(resultValueIndex);
|
||||
if (integerSet.find(scalarValue) != integerSet.end())
|
||||
{
|
||||
(*cellVisibility)[cellIndex] = false;
|
||||
if (filterType == RimCellFilter::EXCLUDE)
|
||||
{
|
||||
(*cellVisibility)[cellIndex] = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (filterType == RimCellFilter::INCLUDE)
|
||||
{
|
||||
(*cellVisibility)[cellIndex] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
double lowerBound = 0.0;
|
||||
double upperBound = 0.0;
|
||||
propertyFilter->rangeValues(&lowerBound, &upperBound);
|
||||
|
||||
for (int cellIndex = 0; cellIndex < static_cast<int>(grid->cellCount()); cellIndex++)
|
||||
{
|
||||
if ((*cellVisibility)[cellIndex])
|
||||
{
|
||||
if (filterType == RimCellFilter::INCLUDE)
|
||||
size_t resultValueIndex = cellIndex;
|
||||
|
||||
double scalarValue = resultAccessor->cellScalar(resultValueIndex);
|
||||
if (lowerBound <= scalarValue && scalarValue <= upperBound)
|
||||
{
|
||||
(*cellVisibility)[cellIndex] = false;
|
||||
if (filterType == RimCellFilter::EXCLUDE)
|
||||
{
|
||||
(*cellVisibility)[cellIndex] = false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (filterType == RimCellFilter::INCLUDE)
|
||||
{
|
||||
(*cellVisibility)[cellIndex] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -69,16 +69,16 @@ RimEclipsePropertyFilter::RimEclipsePropertyFilter()
|
||||
resultDefinition.uiCapability()->setUiHidden(true);
|
||||
resultDefinition.uiCapability()->setUiChildrenHidden(true);
|
||||
|
||||
CAF_PDM_InitField(&lowerBound, "LowerBound", 0.0, "Min", "", "", "");
|
||||
lowerBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName());
|
||||
CAF_PDM_InitField(&m_lowerBound, "LowerBound", 0.0, "Min", "", "", "");
|
||||
m_lowerBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName());
|
||||
|
||||
CAF_PDM_InitField(&upperBound, "UpperBound", 0.0, "Max", "", "", "");
|
||||
upperBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName());
|
||||
CAF_PDM_InitField(&m_upperBound, "UpperBound", 0.0, "Max", "", "", "");
|
||||
m_upperBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName());
|
||||
|
||||
CAF_PDM_InitFieldNoDefault(&selectedCategoryValues, "SelectedCategoryValues", "Categories", "", "", "");
|
||||
CAF_PDM_InitFieldNoDefault(&m_selectedValues, "SelectedValues", "Values", "", "", "");
|
||||
|
||||
CAF_PDM_InitField(&useRangeInsteadOfCategories, "UseRangeInsteadOfCategories", false, "Use Range selection for Categories", "", "", "");
|
||||
upperBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName());
|
||||
CAF_PDM_InitField(&m_valueSelection, "Value Selection", true, "Value Selection", "", "", "");
|
||||
m_upperBound.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName());
|
||||
|
||||
updateIconState();
|
||||
|
||||
@ -94,19 +94,53 @@ RimEclipsePropertyFilter::~RimEclipsePropertyFilter()
|
||||
delete resultDefinition;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipsePropertyFilter::rangeValues(double* lower, double* upper) const
|
||||
{
|
||||
*lower = this->m_lowerBound;
|
||||
*upper = this->m_upperBound;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimEclipsePropertyFilter::isValueSelectionActive() const
|
||||
{
|
||||
if (resultDefinition->hasCategoryResult() && m_valueSelection)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<int> RimEclipsePropertyFilter::selectedValues() const
|
||||
{
|
||||
return m_selectedValues;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimEclipsePropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
||||
{
|
||||
if (&name == changedField)
|
||||
if (&m_valueSelection == changedField)
|
||||
{
|
||||
updateFieldVisibility();
|
||||
}
|
||||
else if ( &lowerBound == changedField
|
||||
|| &upperBound == changedField
|
||||
|
||||
if ( &m_lowerBound == changedField
|
||||
|| &m_upperBound == changedField
|
||||
|| &obsoleteField_evaluationRegion == changedField
|
||||
|| &isActive == changedField
|
||||
|| &filterMode == changedField)
|
||||
|| &filterMode == changedField
|
||||
|| &m_selectedValues == changedField
|
||||
|| &m_valueSelection == changedField)
|
||||
{
|
||||
updateFilterName();
|
||||
this->updateIconState();
|
||||
@ -114,10 +148,6 @@ void RimEclipsePropertyFilter::fieldChangedByUi(const caf::PdmFieldHandle* chang
|
||||
|
||||
parentContainer()->updateDisplayModelNotifyManagedViews();
|
||||
}
|
||||
else if (&useRangeInsteadOfCategories == changedField)
|
||||
{
|
||||
updateFieldVisibility();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -137,11 +167,11 @@ void RimEclipsePropertyFilter::setToDefaultValues()
|
||||
|
||||
computeResultValueRange();
|
||||
|
||||
lowerBound = m_minimumResultValue;
|
||||
upperBound = m_maximumResultValue;
|
||||
m_lowerBound = m_minimumResultValue;
|
||||
m_upperBound = m_maximumResultValue;
|
||||
|
||||
selectedCategoryValues = std::vector<int>();
|
||||
useRangeInsteadOfCategories = false;
|
||||
m_selectedValues = m_uniqueCellValues;
|
||||
m_valueSelection = true;
|
||||
|
||||
updateFieldVisibility();
|
||||
}
|
||||
@ -163,13 +193,13 @@ void RimEclipsePropertyFilter::defineUiOrdering(QString uiConfigName, caf::PdmUi
|
||||
// Fields declared in RimCellFilter
|
||||
uiOrdering.add(&isActive);
|
||||
uiOrdering.add(&filterMode);
|
||||
uiOrdering.add(&useRangeInsteadOfCategories);
|
||||
uiOrdering.add(&m_valueSelection);
|
||||
|
||||
// Fields declared in this class (RimCellPropertyFilter)
|
||||
uiOrdering.add(&lowerBound);
|
||||
uiOrdering.add(&upperBound);
|
||||
uiOrdering.add(&m_lowerBound);
|
||||
uiOrdering.add(&m_upperBound);
|
||||
|
||||
uiOrdering.add(&selectedCategoryValues);
|
||||
uiOrdering.add(&m_selectedValues);
|
||||
|
||||
updateReadOnlyStateOfAllFields();
|
||||
}
|
||||
@ -191,7 +221,7 @@ QList<caf::PdmOptionItemInfo> RimEclipsePropertyFilter::calculateValueOptions(co
|
||||
{
|
||||
QList<caf::PdmOptionItemInfo> optionList;
|
||||
|
||||
if (&selectedCategoryValues == fieldNeedingOptions)
|
||||
if (&m_selectedValues == fieldNeedingOptions)
|
||||
{
|
||||
if (useOptionsOnly) *useOptionsOnly = true;
|
||||
|
||||
@ -260,28 +290,28 @@ void RimEclipsePropertyFilter::updateFieldVisibility()
|
||||
{
|
||||
if (resultDefinition->hasCategoryResult())
|
||||
{
|
||||
useRangeInsteadOfCategories.uiCapability()->setUiHidden(false);
|
||||
m_valueSelection.uiCapability()->setUiHidden(false);
|
||||
|
||||
if (useRangeInsteadOfCategories)
|
||||
if (!m_valueSelection)
|
||||
{
|
||||
selectedCategoryValues.uiCapability()->setUiHidden(true);
|
||||
lowerBound.uiCapability()->setUiHidden(false);
|
||||
upperBound.uiCapability()->setUiHidden(false);
|
||||
m_selectedValues.uiCapability()->setUiHidden(true);
|
||||
m_lowerBound.uiCapability()->setUiHidden(false);
|
||||
m_upperBound.uiCapability()->setUiHidden(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
selectedCategoryValues.uiCapability()->setUiHidden(false);
|
||||
lowerBound.uiCapability()->setUiHidden(true);
|
||||
upperBound.uiCapability()->setUiHidden(true);
|
||||
m_selectedValues.uiCapability()->setUiHidden(false);
|
||||
m_lowerBound.uiCapability()->setUiHidden(true);
|
||||
m_upperBound.uiCapability()->setUiHidden(true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
lowerBound.uiCapability()->setUiHidden(false);
|
||||
upperBound.uiCapability()->setUiHidden(false);
|
||||
m_lowerBound.uiCapability()->setUiHidden(false);
|
||||
m_upperBound.uiCapability()->setUiHidden(false);
|
||||
|
||||
selectedCategoryValues.uiCapability()->setUiHidden(true);
|
||||
useRangeInsteadOfCategories.uiCapability()->setUiHidden(true);
|
||||
m_selectedValues.uiCapability()->setUiHidden(true);
|
||||
m_valueSelection.uiCapability()->setUiHidden(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -295,7 +325,7 @@ void RimEclipsePropertyFilter::defineEditorAttribute(const caf::PdmFieldHandle*
|
||||
return;
|
||||
}
|
||||
|
||||
if (field == &lowerBound || field == &upperBound)
|
||||
if (field == &m_lowerBound || field == &m_upperBound)
|
||||
{
|
||||
caf::PdmUiDoubleSliderEditorAttribute* myAttr = dynamic_cast<caf::PdmUiDoubleSliderEditorAttribute*>(attribute);
|
||||
if (!myAttr)
|
||||
@ -343,8 +373,8 @@ void RimEclipsePropertyFilter::computeResultValueRange()
|
||||
m_maximumResultValue = max;
|
||||
m_minimumResultValue = min;
|
||||
|
||||
lowerBound.uiCapability()->setUiName(QString("Min (%1)").arg(min));
|
||||
upperBound.uiCapability()->setUiName(QString("Max (%1)").arg(max));
|
||||
m_lowerBound.uiCapability()->setUiName(QString("Min (%1)").arg(min));
|
||||
m_upperBound.uiCapability()->setUiName(QString("Max (%1)").arg(max));
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -354,7 +384,7 @@ void RimEclipsePropertyFilter::updateFilterName()
|
||||
{
|
||||
QString newFiltername;
|
||||
newFiltername = resultDefinition->resultVariable() + " ("
|
||||
+ QString::number(lowerBound()) + " .. " + QString::number(upperBound) + ")";
|
||||
+ QString::number(m_lowerBound()) + " .. " + QString::number(m_upperBound) + ")";
|
||||
this->name = newFiltername;
|
||||
|
||||
uiCapability()->updateConnectedEditors();
|
||||
|
@ -44,11 +44,11 @@ public:
|
||||
RimEclipsePropertyFilter();
|
||||
virtual ~RimEclipsePropertyFilter();
|
||||
|
||||
caf::PdmChildField<RimEclipseResultDefinition*> resultDefinition;
|
||||
|
||||
caf::PdmField<double> lowerBound;
|
||||
caf::PdmField<double> upperBound;
|
||||
caf::PdmChildField<RimEclipseResultDefinition*> resultDefinition;
|
||||
|
||||
void rangeValues(double* lower, double* upper) const;
|
||||
bool isValueSelectionActive() const;
|
||||
std::vector<int> selectedValues() const;
|
||||
|
||||
RimEclipsePropertyFilterCollection* parentContainer();
|
||||
void setToDefaultValues();
|
||||
@ -75,8 +75,10 @@ private:
|
||||
bool isPropertyFilterControlled();
|
||||
|
||||
private:
|
||||
caf::PdmField< std::vector<int> > selectedCategoryValues;
|
||||
caf::PdmField<bool> useRangeInsteadOfCategories;
|
||||
caf::PdmField<double> m_lowerBound;
|
||||
caf::PdmField<double> m_upperBound;
|
||||
caf::PdmField< std::vector<int> > m_selectedValues;
|
||||
caf::PdmField<bool> m_valueSelection;
|
||||
|
||||
double m_minimumResultValue;
|
||||
double m_maximumResultValue;
|
||||
|
Loading…
Reference in New Issue
Block a user