mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2999 Add support for specifying a list of single cells as range filter
This commit is contained in:
parent
d8cc40b8bc
commit
8afc036ea3
@ -63,7 +63,10 @@ RimCellRangeFilter::RimCellRangeFilter()
|
||||
|
||||
CAF_PDM_InitField(&cellCountK, "CellCountK", 1, "Cell Count K", "", "","");
|
||||
cellCountK.uiCapability()->setUiEditorTypeName(caf::PdmUiSliderEditor::uiEditorTypeName());
|
||||
|
||||
|
||||
CAF_PDM_InitField(&m_useIndividualCellIndices, "UseIndividualCellIndices", false, "Use Individual Cell Indices", "", "", "");
|
||||
CAF_PDM_InitFieldNoDefault(&m_individualCellIndices, "IndividualCellIndices", "Cell Indices", "", "Use Ctrl-C for copy and Ctrl-V for paste", "");
|
||||
|
||||
updateIconState();
|
||||
}
|
||||
|
||||
@ -138,6 +141,22 @@ void RimCellRangeFilter::updateActiveState()
|
||||
isActive.uiCapability()->setUiReadOnly(isRangeFilterControlled());
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
bool RimCellRangeFilter::useIndividualCellIndices() const
|
||||
{
|
||||
return m_useIndividualCellIndices();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const std::vector<cvf::Vec3d>& RimCellRangeFilter::individualCellIndices() const
|
||||
{
|
||||
return m_individualCellIndices.v();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@ -239,9 +258,9 @@ void RimCellRangeFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderi
|
||||
|
||||
std::vector<caf::PdmFieldHandle*> objFields;
|
||||
this->fields(objFields);
|
||||
for (size_t i = 0; i < objFields.size(); i ++)
|
||||
for (auto& objField : objFields)
|
||||
{
|
||||
objFields[i]->uiCapability()->setUiReadOnly(readOnlyState);
|
||||
objField->uiCapability()->setUiReadOnly(readOnlyState);
|
||||
}
|
||||
|
||||
const cvf::StructGridInterface* grid = selectedGrid();
|
||||
@ -284,6 +303,27 @@ void RimCellRangeFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrderi
|
||||
cellCountJ.uiCapability()->setUiName(QString(" Width"));
|
||||
cellCountK.uiCapability()->setUiName(QString(" Width"));
|
||||
}
|
||||
|
||||
uiOrdering.add(&name);
|
||||
uiOrdering.add(&filterMode);
|
||||
uiOrdering.add(&gridIndex);
|
||||
uiOrdering.add(&propagateToSubGrids);
|
||||
uiOrdering.add(&startIndexI);
|
||||
uiOrdering.add(&cellCountI);
|
||||
uiOrdering.add(&startIndexJ);
|
||||
uiOrdering.add(&cellCountJ);
|
||||
uiOrdering.add(&startIndexK);
|
||||
uiOrdering.add(&cellCountK);
|
||||
|
||||
{
|
||||
auto group = uiOrdering.addNewGroup("Single Cell Filtering (TEST)");
|
||||
group->setCollapsedByDefault(true);
|
||||
|
||||
group->add(&m_useIndividualCellIndices);
|
||||
group->add(&m_individualCellIndices);
|
||||
|
||||
m_individualCellIndices.uiCapability()->setUiReadOnly(!m_useIndividualCellIndices);
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
@ -22,6 +22,8 @@
|
||||
|
||||
#include "RimCellFilter.h"
|
||||
|
||||
#include "cafPdmFieldCvfVec3d.h"
|
||||
|
||||
class RigGridBase;
|
||||
class RigMainGrid;
|
||||
class RimCellRangeFilterCollection;
|
||||
@ -57,6 +59,9 @@ public:
|
||||
void setDefaultValues();
|
||||
void updateActiveState();
|
||||
|
||||
bool useIndividualCellIndices() const;
|
||||
const std::vector<cvf::Vec3d>& individualCellIndices() const;
|
||||
|
||||
protected:
|
||||
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
|
||||
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
|
||||
@ -70,6 +75,8 @@ private:
|
||||
bool isRangeFilterControlled() const;
|
||||
void computeAndSetValidValues();
|
||||
const cvf::StructGridInterface* selectedGrid();
|
||||
|
||||
caf::PdmField<bool> m_useIndividualCellIndices;
|
||||
caf::PdmField<std::vector<cvf::Vec3d>> m_individualCellIndices;
|
||||
};
|
||||
|
||||
|
||||
|
@ -70,25 +70,47 @@ void RimCellRangeFilterCollection::compoundCellRangeFilter(cvf::CellRangeFilter*
|
||||
{
|
||||
if (rangeFilter->filterMode == RimCellFilter::INCLUDE)
|
||||
{
|
||||
cellRangeFilter->addCellIncludeRange(
|
||||
rangeFilter->startIndexI - 1,
|
||||
rangeFilter->startIndexJ - 1,
|
||||
rangeFilter->startIndexK - 1,
|
||||
rangeFilter->startIndexI - 1 + rangeFilter->cellCountI,
|
||||
rangeFilter->startIndexJ - 1 + rangeFilter->cellCountJ,
|
||||
rangeFilter->startIndexK - 1 + rangeFilter->cellCountK,
|
||||
rangeFilter->propagateToSubGrids());
|
||||
if (rangeFilter->useIndividualCellIndices())
|
||||
{
|
||||
for (const auto& cellIndex : rangeFilter->individualCellIndices())
|
||||
{
|
||||
cellRangeFilter->addCellInclude(
|
||||
cellIndex.x() - 1 , cellIndex.y() - 1, cellIndex.z() - 1, rangeFilter->propagateToSubGrids());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cellRangeFilter->addCellIncludeRange(
|
||||
rangeFilter->startIndexI - 1,
|
||||
rangeFilter->startIndexJ - 1,
|
||||
rangeFilter->startIndexK - 1,
|
||||
rangeFilter->startIndexI - 1 + rangeFilter->cellCountI,
|
||||
rangeFilter->startIndexJ - 1 + rangeFilter->cellCountJ,
|
||||
rangeFilter->startIndexK - 1 + rangeFilter->cellCountK,
|
||||
rangeFilter->propagateToSubGrids());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cellRangeFilter->addCellExcludeRange(
|
||||
rangeFilter->startIndexI - 1,
|
||||
rangeFilter->startIndexJ - 1,
|
||||
rangeFilter->startIndexK - 1,
|
||||
rangeFilter->startIndexI - 1 + rangeFilter->cellCountI,
|
||||
rangeFilter->startIndexJ - 1 + rangeFilter->cellCountJ,
|
||||
rangeFilter->startIndexK - 1 + rangeFilter->cellCountK,
|
||||
rangeFilter->propagateToSubGrids());
|
||||
if (rangeFilter->useIndividualCellIndices())
|
||||
{
|
||||
for (const auto& cellIndex : rangeFilter->individualCellIndices())
|
||||
{
|
||||
cellRangeFilter->addCellExclude(
|
||||
cellIndex.x() - 1, cellIndex.y() - 1, cellIndex.z() - 1, rangeFilter->propagateToSubGrids());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cellRangeFilter->addCellExcludeRange(
|
||||
rangeFilter->startIndexI - 1,
|
||||
rangeFilter->startIndexJ - 1,
|
||||
rangeFilter->startIndexK - 1,
|
||||
rangeFilter->startIndexI - 1 + rangeFilter->cellCountI,
|
||||
rangeFilter->startIndexJ - 1 + rangeFilter->cellCountJ,
|
||||
rangeFilter->startIndexK - 1 + rangeFilter->cellCountK,
|
||||
rangeFilter->propagateToSubGrids());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user