//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- 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; }
//-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- 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()); } }