CellFilters: Add case-level Data Filters with per-view wrappers

Introduce RimDataFilterCollection on RimEclipseCase to hold filter
configuration that is shared across all views of the case. Each
RimEclipseView gets a RimDataFilterInViewCollection of
RimDataFilterInView wrappers that auto-sync with the case-level list
and expose an independent on/off toggle per view. The wrapper's
applyToCellVisibility delegates to the wrapped RimCellFilter via the
existing unified virtual, so property, range, and combined filters all
work uniformly.

RimDataFilterCollection is built on caf::PdmObjectCollection<RimCellFilter>
and emits a filtersChanged signal on add/remove/reorder/child changes.
The wrapper collection mirrors RimSurfaceInViewCollection's sync pattern:
new wrappers default to checked, removed sources drop their wrappers,
and the wrapper list follows the case order. Per-view wrappers feed into
RivReservoirViewPartMgr::computePropertyVisibility after the existing
view-level property-filter loop.

The RicNew*Feature commands now route into a selected RimDataFilterCollection,
and the existing combined-filter path is generalized to allow combined
filters living under either a per-view RimEclipsePropertyFilterCollection
or the new case-level collection. Several Asserted ancestor lookups in
RimEclipsePropertyFilter, RimCellFilter and RimEclipseResultDefinition
that assumed a Rim3dView ancestor were relaxed to the non-asserting
variant with graceful fallbacks, so case-level filters can be created
and edited without a host view.

Backwards compatible: empty Data Filter collection is a no-op,
existing per-view RimEclipsePropertyFilterCollection and
RimCellFilterCollection paths are unchanged. GeoMech parity deferred.
This commit is contained in:
Kristian Bendiksen
2026-05-15 08:37:46 +02:00
parent 3375e37ffc
commit 4ed6d70b73
28 changed files with 1333 additions and 105 deletions
@@ -48,6 +48,7 @@ class RigGridBase;
class RigMainGrid;
class RigVirtualPerforationTransmissibilities;
class RimCaseCollection;
class RimDataFilterCollection;
class RimEclipseContourMapView;
class RimEclipseContourMapViewCollection;
class RimEclipseInputPropertyCollection;
@@ -109,6 +110,7 @@ public:
RimCaseCollection* parentCaseCollection();
RimEclipseContourMapViewCollection* contourMapCollection() const;
RimEclipseInputPropertyCollection* inputPropertyCollection() const;
RimDataFilterCollection* dataFilterCollection() const;
QStringList timeStepStrings() const override;
QString timeStepName( int frameIdx ) const override;
@@ -191,6 +193,7 @@ private:
caf::PdmChildField<RimReservoirCellResultsStorage*> m_matrixModelResults;
caf::PdmChildField<RimReservoirCellResultsStorage*> m_fractureModelResults;
caf::PdmChildField<RimEclipseViewCollection*> m_viewCollection;
caf::PdmChildField<RimDataFilterCollection*> m_dataFilterCollection;
caf::PdmChildArrayField<RimWellTargetMapping*> m_wellTargetMappings;