Create only one label per fault

Use a separate code path for fault labels to avoid multiple labels on
different sub parts of a fault
This commit is contained in:
Magne Sjaastad 2013-12-18 12:18:15 +01:00
parent ae4175dd15
commit bc4ef17409
7 changed files with 114 additions and 6 deletions

View File

@ -122,12 +122,6 @@ void RivReservoirFaultsPartMgr::appendPartsToModel(cvf::ModelBasicList* model)
if (rimFault->showFault() && m_faultCollection->showFaultCollection())
{
if (m_faultCollection->showFaultLabel() )
{
rivFaultPart->appendLabelPartsToModel(&parts);
}
if (m_faultCollection->showNNCs())
{
rivFaultPart->appendNNCFacesToModel(&parts);
@ -182,3 +176,44 @@ void RivReservoirFaultsPartMgr::updateCellEdgeResultColor(size_t timeStepIndex,
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReservoirFaultsPartMgr::appendLabelPartsToModel(cvf::ModelBasicList* model)
{
CVF_ASSERT(model != NULL);
if (!m_faultCollection) return;
bool isShowingGrid = m_faultCollection->isGridVisualizationMode();
if (!m_faultCollection->showFaultCollection() && !isShowingGrid) return;
if (!m_faultCollection->showFaultLabel() ) return;
// Check match between model fault count and fault parts
CVF_ASSERT(m_faultCollection->faults.size() == m_faultParts.size());
cvf::ModelBasicList parts;
for (size_t i = 0; i < m_faultCollection->faults.size(); i++)
{
const RimFault* rimFault = m_faultCollection->faults[i];
cvf::ref<RivFaultPartMgr> rivFaultPart = m_faultParts[i];
CVF_ASSERT(rivFaultPart.notNull());
if (rimFault->showFault())
{
rivFaultPart->appendLabelPartsToModel(&parts);
}
}
for (size_t i = 0; i < parts.partCount(); i++)
{
cvf::Part* part = parts.part(i);
part->setTransform(m_scaleTransform.p());
model->addPart(part);
}
}

View File

@ -52,6 +52,8 @@ public:
void appendPartsToModel(cvf::ModelBasicList* model);
void appendLabelPartsToModel(cvf::ModelBasicList* model);
private:
cvf::ref<cvf::Transform> m_scaleTransform;

View File

@ -171,3 +171,14 @@ void RivReservoirPartMgr::appendFaultPartsToModel(cvf::ModelBasicList* model)
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReservoirPartMgr::appendFaultLabelPartsToModel(cvf::ModelBasicList* model)
{
if (m_faultsPartMgr.notNull())
{
m_faultsPartMgr->appendLabelPartsToModel(model);
}
}

View File

@ -64,6 +64,7 @@ public:
// Faults
void updateFaultCellResultColor(size_t timeStepIndex, RimResultSlot* cellResultSlot);
void appendFaultPartsToModel(cvf::ModelBasicList* model);
void appendFaultLabelPartsToModel(cvf::ModelBasicList* model);
private:
cvf::Collection<RivGridPartMgr> m_allGrids; // Main grid and all LGR's

View File

@ -854,3 +854,51 @@ void RivReservoirViewPartMgr::appendFaultsDynamicGeometryPartsToModel(cvf::Model
m_propFilteredWellGeometryFrames[frameIndex]->appendFaultPartsToModel(model);
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RivReservoirViewPartMgr::ReservoirGeometryCacheType RivReservoirViewPartMgr::geometryTypeForFaultLabels(const std::vector<ReservoirGeometryCacheType>& geometryTypes) const
{
bool hasInactive = false;
for (size_t i = 0; i < geometryTypes.size(); i++)
{
if (geometryTypes[i] == PROPERTY_FILTERED)
{
return PROPERTY_FILTERED;
}
if (geometryTypes[i] == RANGE_FILTERED)
{
return RANGE_FILTERED;
}
if (geometryTypes[i] == INACTIVE)
{
hasInactive = true;
}
}
if (hasInactive)
{
return INACTIVE;
}
return ACTIVE;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReservoirViewPartMgr::appendFaultLabelsStaticGeometryPartsToModel(cvf::ModelBasicList* model, ReservoirGeometryCacheType geometryType)
{
m_geometries[geometryType].appendFaultLabelPartsToModel(model);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivReservoirViewPartMgr::appendFaultLabelsDynamicGeometryPartsToModel(cvf::ModelBasicList* model, ReservoirGeometryCacheType geometryType, size_t frameIndex)
{
m_propFilteredGeometryFrames[frameIndex]->appendFaultLabelPartsToModel(model);
}

View File

@ -73,6 +73,12 @@ public:
void appendFaultsDynamicGeometryPartsToModel(cvf::ModelBasicList* model, ReservoirGeometryCacheType geometryType, size_t frameIndex);
void updateFaultsCellResultColor(ReservoirGeometryCacheType geometryType, size_t timeStepIndex, RimResultSlot* cellResultSlot);
// Fault labels
ReservoirGeometryCacheType geometryTypeForFaultLabels(const std::vector<ReservoirGeometryCacheType>& geometryTypes) const;
void appendFaultLabelsStaticGeometryPartsToModel(cvf::ModelBasicList* model, ReservoirGeometryCacheType geometryType);
void appendFaultLabelsDynamicGeometryPartsToModel(cvf::ModelBasicList* model, ReservoirGeometryCacheType geometryType, size_t frameIndex);
private:
void createGeometry(ReservoirGeometryCacheType geometryType);
void computeVisibility(cvf::UByteArray* cellVisibility, ReservoirGeometryCacheType geometryType, RigGridBase* grid, size_t gridIdx);

View File

@ -642,6 +642,8 @@ void RimReservoirView::createDisplayModel()
}
}
RivReservoirViewPartMgr::ReservoirGeometryCacheType faultLabelType = m_reservoirGridPartManager->geometryTypeForFaultLabels(faultGeometryTypesToAdd);
size_t frameIdx;
for (frameIdx = 0; frameIdx < frameModels.size(); ++frameIdx)
{
@ -649,6 +651,8 @@ void RimReservoirView::createDisplayModel()
{
m_reservoirGridPartManager->appendFaultsStaticGeometryPartsToModel(frameModels[frameIdx].p(), faultGeometryTypesToAdd[gtIdx]);
}
m_reservoirGridPartManager->appendFaultLabelsStaticGeometryPartsToModel(frameModels[frameIdx].p(), faultLabelType);
}
}
@ -726,6 +730,7 @@ void RimReservoirView::updateCurrentTimeStep()
if (faultCollection()->limitFaultsToFilter)
{
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);