mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-25 22:50:25 -05:00
Lets a script attach a cell filter to a RimPerforationInterval as a typed reference so subsequent work can gate completion-export connections by the filter's cell mask. Pure metadata in this commit: no consumer of RimPerforationInterval is modified, the field exists purely as an API surface. Add a non-scriptable caf::PdmPtrField<RimCellFilter*> m_cellFilter to RimPerforationInterval with public cellFilter()/setCellFilter() accessors and a "Cell Filter" group in the property panel between the existing geometry/flow group and the Date Settings group. The field is deliberately non-scriptable: a scriptable PdmPtrField round-trips in Python as an opaque "ClassName:0xADDR" string rather than a resolved object, defeating the point. Two CAF object methods on RimcPerforationInterval expose the relationship: - AddFilter (perf.add_filter(filter)) sets the pointer; replaces any existing filter (single filter per perforation). - cell_filter (perf.cell_filter()) resolves to the referenced RimCellFilter object on read, mirroring the valve.template() pattern. Composition stays in RimCombinedFilter: a script that wants AND/OR across multiple filters attaches a combined filter as the single filter on the perforation. The Python example in PythonExamples builds a case-level AND combined filter (PERMX 100..20000 AND K=5..10), creates a modeled well path with two perforation intervals, and shares the same filter between them. test_perforation_filter.py covers single-set, replace-on-second- add, and shared-pointer round-trips.