Exemple #1
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void RivGridPartMgr::updateCellEdgeResultColor(size_t timeStepIndex, RimResultSlot* cellResultSlot, RimCellEdgeResultSlot* cellEdgeResultSlot)
{
    if (m_surfaceFaces.notNull())
    {
        cvf::DrawableGeo* dg = dynamic_cast<cvf::DrawableGeo*>(m_surfaceFaces->drawable());
        if (dg) 
        {
            RivCellEdgeGeometryGenerator::addCellEdgeResultsToDrawableGeo(timeStepIndex, cellResultSlot, cellEdgeResultSlot, &m_surfaceGenerator, dg);

            cvf::ScalarMapper* cellScalarMapper = NULL;
            if (cellResultSlot->hasResult()) cellScalarMapper = cellResultSlot->legendConfig()->scalarMapper();

            CellEdgeEffectGenerator cellFaceEffectGen(cellEdgeResultSlot->legendConfig()->scalarMapper(), cellScalarMapper);
            cellFaceEffectGen.setOpacityLevel(m_opacityLevel);
            cellFaceEffectGen.setDefaultCellColor(m_defaultColor);

            cvf::ref<cvf::Effect> eff = cellFaceEffectGen.generateEffect();

            m_surfaceFaces->setEffect(eff.p());
        }
    }
    if (m_faultFaces.notNull())
    {
        cvf::DrawableGeo* dg = dynamic_cast<cvf::DrawableGeo*>(m_faultFaces->drawable());
        if (dg) 
        {
            RivCellEdgeGeometryGenerator::addCellEdgeResultsToDrawableGeo(timeStepIndex, cellResultSlot, cellEdgeResultSlot, &m_faultGenerator, dg);

            cvf::ScalarMapper* cellScalarMapper = NULL;
            if (cellResultSlot->hasResult()) cellScalarMapper = cellResultSlot->legendConfig()->scalarMapper();

            CellEdgeEffectGenerator cellFaceEffectGen(cellEdgeResultSlot->legendConfig()->scalarMapper(), cellScalarMapper);
            cellFaceEffectGen.setOpacityLevel(m_opacityLevel);
            cellFaceEffectGen.setDefaultCellColor(m_defaultColor);

            cvf::ref<cvf::Effect> eff = cellFaceEffectGen.generateEffect();

            m_faultFaces->setEffect(eff.p());
        }
    }
}
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
cvf::ref<cvf::Effect> RivScalarMapperUtils::createCellEdgeEffect(cvf::DrawableGeo* dg,
    const cvf::StructGridQuadToCellFaceMapper* quadToCellFaceMapper,
    size_t gridIndex,
    size_t timeStepIndex,
    RimEclipseCellColors* cellResultColors,
    RimCellEdgeColors* cellEdgeResultColors,
    float opacityLevel,
    cvf::Color3f defaultColor,
    caf::FaceCulling faceCulling,
    bool disableLighting)
{
    CellEdgeEffectGenerator cellFaceEffectGen(cellEdgeResultColors->legendConfig()->scalarMapper());

    if (cellResultColors->isTernarySaturationSelected())
    {
        RivCellEdgeGeometryUtils::addTernaryCellEdgeResultsToDrawableGeo(timeStepIndex, cellResultColors, cellEdgeResultColors,
            quadToCellFaceMapper, dg, gridIndex, opacityLevel);

        RivTernaryScalarMapper* ternaryCellScalarMapper = cellResultColors->ternaryLegendConfig()->scalarMapper();
        cellFaceEffectGen.setTernaryScalarMapper(ternaryCellScalarMapper);
    }
    else
    {
        bool useDefaultValueForHugeVals = false;
        if (!cellResultColors->hasResult())
        {
            useDefaultValueForHugeVals = true;
        }

        RivCellEdgeGeometryUtils::addCellEdgeResultsToDrawableGeo(timeStepIndex, cellResultColors, cellEdgeResultColors,
            quadToCellFaceMapper, dg, gridIndex, useDefaultValueForHugeVals, opacityLevel);

        if (cellResultColors->hasResult())
        {
            // If no scalar mapper is set for the effect, a default color is used to fill the texture
            // This is what we want when the fault colors should be visible in combination with cell edge
            cvf::ScalarMapper* cellScalarMapper = cellResultColors->legendConfig()->scalarMapper();
            cellFaceEffectGen.setScalarMapper(cellScalarMapper);
        }
    }

    cellFaceEffectGen.setOpacityLevel(opacityLevel);
    cellFaceEffectGen.setDefaultCellColor(defaultColor);
    cellFaceEffectGen.setFaceCulling(faceCulling);
    cellFaceEffectGen.disableLighting(disableLighting);

    cvf::ref<cvf::Effect> eff = cellFaceEffectGen.generateCachedEffect();
    return eff;
}