Faults: Show faults when filters are active

This commit is contained in:
Magne Sjaastad 2014-01-06 12:06:36 +01:00
parent d393368df4
commit c569b9fac1
7 changed files with 132 additions and 21 deletions

View File

@ -44,6 +44,8 @@ RivReservoirFaultsPartMgr::RivReservoirFaultsPartMgr(const RigMainGrid* grid, c
m_faultParts.push_back(new RivFaultPartMgr(grid, faultCollection, faultCollection->faults[i]));
}
}
m_isFilterPart = false;
}
//--------------------------------------------------------------------------------------------------
@ -100,19 +102,25 @@ void RivReservoirFaultsPartMgr::appendPartsToModel(cvf::ModelBasicList* model)
// Parts that is overridden by the grid settings
if (rimFault->showFault() || isShowingGrid)
bool forceDisplayOfFault = false;
if (isShowingGrid && m_isFilterPart)
{
if (m_faultCollection->showFaultFaces() || isShowingGrid)
forceDisplayOfFault = true;
}
if (rimFault->showFault() || forceDisplayOfFault)
{
if (m_faultCollection->showFaultFaces() || forceDisplayOfFault)
{
rivFaultPart->appendNativeFaultFacesToModel(&parts);
}
if (m_faultCollection->showOppositeFaultFaces() || isShowingGrid)
if (m_faultCollection->showOppositeFaultFaces() || forceDisplayOfFault)
{
rivFaultPart->appendOppositeFaultFacesToModel(&parts);
}
if (m_faultCollection->showFaultFaces() || m_faultCollection->showOppositeFaultFaces() || m_faultCollection->showNNCs() || isShowingGrid)
if (m_faultCollection->showFaultFaces() || m_faultCollection->showOppositeFaultFaces() || m_faultCollection->showNNCs() || forceDisplayOfFault)
{
rivFaultPart->appendMeshLinePartsToModel(&parts);
}
@ -218,3 +226,11 @@ void RivReservoirFaultsPartMgr::appendLabelPartsToModel(cvf::ModelBasicList* mod
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReservoirFaultsPartMgr::setFilterPart(bool filterPart)
{
m_isFilterPart = filterPart;
}

View File

@ -44,6 +44,7 @@ public:
void setTransform(cvf::Transform* scaleTransform);
void setCellVisibility(cvf::UByteArray* cellVisibilities);
void setFilterPart(bool filterPart);
void applySingleColorEffect();
void updateCellResultColor(size_t timeStepIndex, RimResultSlot* cellResultSlot);
@ -59,4 +60,6 @@ private:
cvf::ref<cvf::Transform> m_scaleTransform;
const RimFaultCollection* m_faultCollection;
cvf::Collection<RivFaultPartMgr> m_faultParts;
bool m_isFilterPart;
};

View File

@ -182,3 +182,14 @@ void RivReservoirPartMgr::appendFaultLabelPartsToModel(cvf::ModelBasicList* mode
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReservoirPartMgr::setFilterPart(bool filterPart)
{
if (m_faultsPartMgr.notNull())
{
m_faultsPartMgr->setFilterPart(filterPart);
}
}

View File

@ -48,6 +48,7 @@ public:
void clearAndSetReservoir(const RigCaseData* eclipseCase, const RimFaultCollection* faultCollection);
void setTransform(cvf::Transform* scaleTransform);
void setCellVisibility(size_t gridIndex, cvf::UByteArray* cellVisibilities );
void setFilterPart(bool filterPart);
//size_t gridCount() { return m_allGrids.size(); }
cvf::ref<cvf::UByteArray>

View File

@ -240,6 +240,8 @@ void RivReservoirViewPartMgr::createGeometry(ReservoirGeometryCacheType geometry
RigCaseData* res = m_reservoirView->eclipseCase()->reservoirData();
m_geometries[geometryType].clearAndSetReservoir(res, m_reservoirView->faultCollection());
m_geometries[geometryType].setTransform(m_scaleTransform.p());
setFilterPartFromGeometryType(&m_geometries[geometryType], geometryType);
std::vector<RigGridBase*> grids;
res->allGrids(&grids);
@ -395,6 +397,7 @@ void RivReservoirViewPartMgr::createPropertyFilteredNoneWellCellGeometry(size_t
m_propFilteredGeometryFrames[frameIndex]->clearAndSetReservoir(res, m_reservoirView->faultCollection());
m_propFilteredGeometryFrames[frameIndex]->setTransform(m_scaleTransform.p());
setFilterPartFromGeometryType(m_propFilteredGeometryFrames[frameIndex].p(), PROPERTY_FILTERED);
std::vector<RigGridBase*> grids;
res->allGrids(&grids);
@ -472,6 +475,7 @@ void RivReservoirViewPartMgr::createPropertyFilteredWellGeometry(size_t frameInd
m_propFilteredWellGeometryFrames[frameIndex]->clearAndSetReservoir(res, m_reservoirView->faultCollection());
m_propFilteredWellGeometryFrames[frameIndex]->setTransform(m_scaleTransform.p());
setFilterPartFromGeometryType(m_propFilteredWellGeometryFrames[frameIndex].p(), PROPERTY_FILTERED_WELL_CELLS);
std::vector<RigGridBase*> grids;
res->allGrids(&grids);
@ -902,3 +906,41 @@ void RivReservoirViewPartMgr::appendFaultLabelsDynamicGeometryPartsToModel(cvf::
{
m_propFilteredGeometryFrames[frameIndex]->appendFaultLabelPartsToModel(model);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReservoirViewPartMgr::setFilterPartFromGeometryType(RivReservoirPartMgr* reservoirPartManager, ReservoirGeometryCacheType cacheType)
{
if (cacheType == RANGE_FILTERED ||
cacheType == RANGE_FILTERED_INACTIVE ||
cacheType == RANGE_FILTERED_WELL_CELLS ||
cacheType == PROPERTY_FILTERED ||
cacheType == PROPERTY_FILTERED_WELL_CELLS)
{
reservoirPartManager->setFilterPart(true);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RivReservoirViewPartMgr::ReservoirGeometryCacheType> RivReservoirViewPartMgr::allDefaultVisibleFaultTypes()
{
std::vector<RivReservoirViewPartMgr::ReservoirGeometryCacheType> types;
types.push_back(ACTIVE);
types.push_back(ALL_WELL_CELLS);
types.push_back(VISIBLE_WELL_CELLS);
types.push_back(VISIBLE_WELL_FENCE_CELLS);
//types.push_back(INACTIVE);
types.push_back(RANGE_FILTERED);
//types.push_back(RANGE_FILTERED_INACTIVE);
types.push_back(RANGE_FILTERED_WELL_CELLS);
types.push_back(VISIBLE_WELL_CELLS_OUTSIDE_RANGE_FILTER);
types.push_back(VISIBLE_WELL_FENCE_CELLS_OUTSIDE_RANGE_FILTER);
// types.push_back(PROPERTY_FILTERED);
// types.push_back(PROPERTY_FILTERED_WELL_CELLS);
return types;
}

View File

@ -78,6 +78,7 @@ public:
void appendFaultLabelsStaticGeometryPartsToModel(cvf::ModelBasicList* model, ReservoirGeometryCacheType geometryType);
void appendFaultLabelsDynamicGeometryPartsToModel(cvf::ModelBasicList* model, ReservoirGeometryCacheType geometryType, size_t frameIndex);
static std::vector<ReservoirGeometryCacheType> allDefaultVisibleFaultTypes();
private:
void createGeometry(ReservoirGeometryCacheType geometryType);
@ -96,6 +97,9 @@ private:
RivReservoirPartMgr * reservoirPartManager(ReservoirGeometryCacheType geometryType, size_t timeStepIndex );
void setFilterPartFromGeometryType(RivReservoirPartMgr* reservoirPartManager, ReservoirGeometryCacheType cacheType);
private:
caf::FixedArray<RivReservoirPartMgr, PROPERTY_FILTERED> m_geometries;
caf::FixedArray<bool, PROPERTY_FILTERED> m_geometriesNeedsRegen;

View File

@ -574,7 +574,7 @@ void RimReservoirView::createDisplayModel()
// For property filtered geometry : just set all the models as empty scenes
// updateCurrentTimeStep requests the actual parts
if (! this->propertyFilterCollection()->hasActiveFilters())
if (!this->propertyFilterCollection()->hasActiveFilters())
{
std::vector<RivReservoirViewPartMgr::ReservoirGeometryCacheType> geometryTypesToAdd;
@ -629,18 +629,36 @@ void RimReservoirView::createDisplayModel()
m_visibleGridParts = geometryTypesToAdd;
}
if (!this->propertyFilterCollection()->hasActiveFilters() ||
faultCollection()->showFaultsOutsideFilters)
if (!this->propertyFilterCollection()->hasActiveFilters() || faultCollection()->showFaultsOutsideFilters)
{
std::vector<RivReservoirViewPartMgr::ReservoirGeometryCacheType> faultGeometryTypesToAdd;
if (!faultCollection()->showFaultsOutsideFilters)
{
faultGeometryTypesToAdd = m_visibleGridParts;
if (this->rangeFilterCollection()->hasActiveFilters())
{
faultGeometryTypesToAdd.push_back(RivReservoirViewPartMgr::RANGE_FILTERED);
faultGeometryTypesToAdd.push_back(RivReservoirViewPartMgr::RANGE_FILTERED_WELL_CELLS);
if (this->showInactiveCells())
{
faultGeometryTypesToAdd.push_back(RivReservoirViewPartMgr::RANGE_FILTERED_INACTIVE);
}
}
else
{
faultGeometryTypesToAdd = RivReservoirViewPartMgr::allDefaultVisibleFaultTypes();
if (this->showInactiveCells())
{
faultGeometryTypesToAdd.push_back(RivReservoirViewPartMgr::INACTIVE);
}
}
}
else
{
faultGeometryTypesToAdd.push_back(RivReservoirViewPartMgr::ALL_WELL_CELLS); // Should be all well cells
faultGeometryTypesToAdd.push_back(RivReservoirViewPartMgr::ACTIVE);
faultGeometryTypesToAdd = RivReservoirViewPartMgr::allDefaultVisibleFaultTypes();
if (this->showInactiveCells())
{
@ -722,7 +740,6 @@ void RimReservoirView::createDisplayModel()
void RimReservoirView::updateCurrentTimeStep()
{
std::vector<RivReservoirViewPartMgr::ReservoirGeometryCacheType> geometriesToRecolor;
std::vector<RivReservoirViewPartMgr::ReservoirGeometryCacheType> faultGeometriesToRecolor;
if (this->propertyFilterCollection()->hasActiveFilters())
{
@ -733,16 +750,30 @@ void RimReservoirView::updateCurrentTimeStep()
geometriesToRecolor.push_back( RivReservoirViewPartMgr::PROPERTY_FILTERED);
m_reservoirGridPartManager->appendDynamicGeometryPartsToModel(frameParts.p(), RivReservoirViewPartMgr::PROPERTY_FILTERED, m_currentTimeStep, gridIndices);
if (!faultCollection()->showFaultsOutsideFilters)
{
m_reservoirGridPartManager->appendFaultsDynamicGeometryPartsToModel(frameParts.p(), RivReservoirViewPartMgr::PROPERTY_FILTERED, m_currentTimeStep);
m_reservoirGridPartManager->appendFaultLabelsDynamicGeometryPartsToModel(frameParts.p(), RivReservoirViewPartMgr::PROPERTY_FILTERED, m_currentTimeStep);
}
geometriesToRecolor.push_back( RivReservoirViewPartMgr::PROPERTY_FILTERED_WELL_CELLS);
m_reservoirGridPartManager->appendDynamicGeometryPartsToModel(frameParts.p(), RivReservoirViewPartMgr::PROPERTY_FILTERED_WELL_CELLS, m_currentTimeStep, gridIndices);
if (!faultCollection()->showFaultsOutsideFilters)
if (faultCollection()->showFaultsOutsideFilters)
{
std::vector<RivReservoirViewPartMgr::ReservoirGeometryCacheType> faultGeometryTypesToAdd = RivReservoirViewPartMgr::allDefaultVisibleFaultTypes();
if (this->showInactiveCells())
{
faultGeometryTypesToAdd.push_back(RivReservoirViewPartMgr::INACTIVE);
}
for (size_t i = 0; i < faultGeometryTypesToAdd.size(); i++)
{
m_reservoirGridPartManager->appendFaultsStaticGeometryPartsToModel(frameParts.p(), faultGeometryTypesToAdd[i]);
m_reservoirGridPartManager->appendFaultLabelsStaticGeometryPartsToModel(frameParts.p(), faultGeometryTypesToAdd[i]);
}
}
else
{
m_reservoirGridPartManager->appendFaultsDynamicGeometryPartsToModel(frameParts.p(), RivReservoirViewPartMgr::PROPERTY_FILTERED, m_currentTimeStep);
m_reservoirGridPartManager->appendFaultLabelsDynamicGeometryPartsToModel(frameParts.p(), RivReservoirViewPartMgr::PROPERTY_FILTERED, m_currentTimeStep);
m_reservoirGridPartManager->appendFaultsDynamicGeometryPartsToModel(frameParts.p(), RivReservoirViewPartMgr::PROPERTY_FILTERED_WELL_CELLS, m_currentTimeStep);
}
@ -828,14 +859,17 @@ void RimReservoirView::updateCurrentTimeStep()
}
}
if (!faultCollection()->showFaultsOutsideFilters)
// Update all fault geometry
std::vector<RivReservoirViewPartMgr::ReservoirGeometryCacheType> faultGeometriesToRecolor;
if (this->propertyFilterCollection()->hasActiveFilters() && !faultCollection()->showFaultsOutsideFilters)
{
faultGeometriesToRecolor = geometriesToRecolor;
faultGeometriesToRecolor.push_back(RivReservoirViewPartMgr::PROPERTY_FILTERED);
faultGeometriesToRecolor.push_back(RivReservoirViewPartMgr::PROPERTY_FILTERED_WELL_CELLS);
}
else
{
faultGeometriesToRecolor.push_back(RivReservoirViewPartMgr::ALL_WELL_CELLS); // Should be all well cells
faultGeometriesToRecolor.push_back(RivReservoirViewPartMgr::ACTIVE);
faultGeometriesToRecolor = RivReservoirViewPartMgr::allDefaultVisibleFaultTypes();
}
for (size_t i = 0; i < faultGeometriesToRecolor.size(); ++i)