//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- const cvf::UByteArray* RivReservoirViewPartMgr::cellVisibility(RivCellSetEnum geometryType, size_t gridIndex, size_t timeStepIndex) { ensureDynamicGeometryPartsCreated(geometryType, timeStepIndex); ensureStaticGeometryPartsCreated(geometryType); RivReservoirPartMgr * pmgr = (const_cast<RivReservoirViewPartMgr*>(this))->reservoirPartManager( geometryType, timeStepIndex ); return pmgr->cellVisibility(gridIndex).p(); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivReservoirViewPartMgr::updateFaultColors(RivCellSetEnum geometryType, size_t timeStepIndex, RimEclipseCellColors* cellResultColors) { if (geometryType == PROPERTY_FILTERED && timeStepIndex >= m_propFilteredGeometryFrames.size()) { return; } if (geometryType == PROPERTY_FILTERED_WELL_CELLS && timeStepIndex >= m_propFilteredWellGeometryFrames.size()) { return; } RivReservoirPartMgr* pmgr = reservoirPartManager(geometryType, timeStepIndex); pmgr->updateFaultColors(timeStepIndex, cellResultColors); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivReservoirViewPartMgr::updateFaultCellEdgeResultColor(RivCellSetEnum geometryType, size_t timeStepIndex, RimEclipseCellColors* cellResultColors, RimCellEdgeColors* cellEdgeResultColors) { RivReservoirPartMgr * pmgr = reservoirPartManager(geometryType, timeStepIndex); pmgr->updateFaultCellEdgeResultColor(timeStepIndex, cellResultColors, cellEdgeResultColors); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivReservoirViewPartMgr::updateCellColor(RivCellSetEnum geometryType, size_t timeStepIndex, cvf::Color4f color) { RivReservoirPartMgr * pmgr = reservoirPartManager( geometryType, timeStepIndex ); pmgr->updateCellColor(color); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivReservoirViewPartMgr::computeRangeVisibility(RivCellSetEnum geometryType, cvf::UByteArray* cellVisibility, const RigGridBase* grid, const cvf::UByteArray* nativeVisibility, const RimCellRangeFilterCollection* rangeFilterColl) { CVF_ASSERT(cellVisibility != nullptr); CVF_ASSERT(nativeVisibility != nullptr); CVF_ASSERT(rangeFilterColl != nullptr); CVF_ASSERT(grid != nullptr); CVF_ASSERT(nativeVisibility->size() == grid->cellCount()); // Initialize range filter with native visibility if (cellVisibility != nativeVisibility) (*cellVisibility) = (*nativeVisibility); if (rangeFilterColl->hasActiveFilters() || m_reservoirView->wellCollection()->hasVisibleWellCells()) { // Build range filter for current grid cvf::CellRangeFilter gridCellRangeFilter; rangeFilterColl->compoundCellRangeFilter(&gridCellRangeFilter, grid->gridIndex()); const RigLocalGrid* lgr = nullptr; cvf::ref<cvf::UByteArray> parentGridVisibilities; if (!grid->isMainGrid()) { lgr = static_cast<const RigLocalGrid*>(grid); size_t parentGridIndex = lgr->parentGrid()->gridIndex(); CVF_ASSERT(parentGridIndex < grid->gridIndex()); if (geometryType == RANGE_FILTERED_WELL_CELLS) { geometryType = RANGE_FILTERED; // Use the range filtering in the parent grid, not the well cells in the parent grid } RivReservoirPartMgr* reservoirGridPartMgr = &m_geometries[geometryType]; parentGridVisibilities = reservoirGridPartMgr->cellVisibility(parentGridIndex); } bool hasAdditiveRangeFilters = rangeFilterColl->hasActiveIncludeFilters() || m_reservoirView->wellCollection()->hasVisibleWellCells(); #pragma omp parallel for for (int cellIndex = 0; cellIndex < static_cast<int>(grid->cellCount()); cellIndex++) { if ( (*nativeVisibility)[cellIndex] ) { const RigCell& cell = grid->cell(cellIndex); bool visibleDueToParentGrid = false; if (lgr) { size_t parentGridCellIndex = cell.parentCellIndex(); visibleDueToParentGrid = parentGridVisibilities->get(parentGridCellIndex); } // Normal grid visibility size_t mainGridI; size_t mainGridJ; size_t mainGridK; bool isInSubGridArea = cell.subGrid() != nullptr; grid->ijkFromCellIndex(cellIndex, &mainGridI, &mainGridJ, &mainGridK); bool nativeRangeVisibility = false; if (hasAdditiveRangeFilters) { nativeRangeVisibility = gridCellRangeFilter.isCellVisible(mainGridI, mainGridJ, mainGridK, isInSubGridArea); } else { // Special handling when no include filters are present. Use native visibility nativeRangeVisibility = (*nativeVisibility)[cellIndex]; } (*cellVisibility)[cellIndex] = (visibleDueToParentGrid || nativeRangeVisibility) && !gridCellRangeFilter.isCellExcluded(mainGridI, mainGridJ, mainGridK, isInSubGridArea); } } } }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- cvf::cref<cvf::UByteArray> RivReservoirViewPartMgr::cellVisibility(ReservoirGeometryCacheType geometryType, size_t gridIndex, size_t timeStepIndex) const { RivReservoirPartMgr * pmgr = (const_cast<RivReservoirViewPartMgr*>(this))->reservoirPartManager( geometryType, timeStepIndex ); return pmgr->cellVisibility(gridIndex).p(); }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RivReservoirViewPartMgr::updateFaultCellEdgeResultColor(ReservoirGeometryCacheType geometryType, size_t timeStepIndex, RimResultSlot* cellResultSlot, RimCellEdgeResultSlot* cellEdgeResultSlot) { RivReservoirPartMgr * pmgr = reservoirPartManager(geometryType, timeStepIndex); pmgr->updateFaultCellEdgeResultColor(timeStepIndex, cellResultSlot, cellEdgeResultSlot); }