//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
cvf::ref<cvf::Effect> RivScalarMapperUtils::createTernaryScalarMapperEffect(const RivTernaryScalarMapper* mapper, float opacityLevel, caf::FaceCulling faceCulling, bool disableLighting)
{
    CVF_ASSERT(mapper);

    caf::PolygonOffset polygonOffset = caf::PO_1;
    RivTernaryScalarMapperEffectGenerator scalarEffgen(mapper, polygonOffset);
    scalarEffgen.setOpacityLevel(opacityLevel);
    scalarEffgen.setFaceCulling(faceCulling);
    scalarEffgen.disableLighting(disableLighting);
    cvf::ref<cvf::Effect> scalarEffect = scalarEffgen.generateCachedEffect();

    return scalarEffect;
}
Beispiel #2
0
//--------------------------------------------------------------------------------------------------
/// 
//--------------------------------------------------------------------------------------------------
void RivGridPartMgr::updateCellResultColor(size_t timeStepIndex, RimResultSlot* cellResultSlot)
{
    CVF_ASSERT(cellResultSlot);

    size_t scalarSetIndex = cellResultSlot->gridScalarIndex();
    const cvf::ScalarMapper* mapper = cellResultSlot->legendConfig()->scalarMapper();

    // If the result is static, only read that.
    size_t resTimeStepIdx = timeStepIndex;
    if (cellResultSlot->hasStaticResult()) resTimeStepIdx = 0;

    // Outer surface
    if (m_surfaceFaces.notNull())
    {
        m_surfaceGenerator.textureCoordinates(m_surfaceFacesTextureCoords.p(), resTimeStepIdx, scalarSetIndex, mapper);

        for(size_t i = 0; i < m_surfaceFacesTextureCoords->size(); ++i)
        {
            if ((*m_surfaceFacesTextureCoords)[i].y() != 1.0f)
            {
                if (m_opacityLevel == 1.0f) (*m_surfaceFacesTextureCoords)[i].y() = 0;
            }
        }

        cvf::DrawableGeo* dg = dynamic_cast<cvf::DrawableGeo*>(m_surfaceFaces->drawable());
        if (dg) dg->setTextureCoordArray(m_surfaceFacesTextureCoords.p());

        bool usePolygonOffset = true;
        caf::ScalarMapperEffectGenerator scalarEffgen(mapper, usePolygonOffset);

        scalarEffgen.setOpacityLevel(m_opacityLevel);

        cvf::ref<cvf::Effect> scalarEffect = scalarEffgen.generateEffect();

        m_surfaceFaces->setEffect(scalarEffect.p());
    }

    // Faults
    if (m_faultFaces.notNull())
    {
        m_faultGenerator.textureCoordinates(m_faultFacesTextureCoords.p(), resTimeStepIdx, scalarSetIndex, mapper);

        for(size_t i = 0; i < m_faultFacesTextureCoords->size(); ++i)
        {
            if ((*m_faultFacesTextureCoords)[i].y() != 1.0f)
            {
                if (m_opacityLevel == 1.0f) (*m_faultFacesTextureCoords)[i].y() = 0;
            }
        }

        cvf::DrawableGeo* dg = dynamic_cast<cvf::DrawableGeo*>(m_faultFaces->drawable());
        if (dg) dg->setTextureCoordArray(m_faultFacesTextureCoords.p());

        bool usePolygonOffset = true;
        caf::ScalarMapperEffectGenerator scalarEffgen(mapper, usePolygonOffset);

        scalarEffgen.setOpacityLevel(m_opacityLevel);

        cvf::ref<cvf::Effect> scalarEffect = scalarEffgen.generateEffect();

        m_faultFaces->setEffect(scalarEffect.p());
    }
}