Created setter for opacity

This commit is contained in:
Magne Sjaastad 2014-08-11 07:42:54 +02:00
parent 5c9a57178e
commit 748e056bbc
3 changed files with 35 additions and 22 deletions

View File

@ -30,7 +30,7 @@
//--------------------------------------------------------------------------------------------------
TEST(TernaryScalarMapperTest, BasicFunctions)
{
cvf::ref<RivTernaryScalarMapper> scalarMapper = new RivTernaryScalarMapper(cvf::Color3f::GRAY, 0.8f);
cvf::ref<RivTernaryScalarMapper> scalarMapper = new RivTernaryScalarMapper(cvf::Color3f::GRAY);
cvf::ref<cvf::TextureImage> texImage = new cvf::TextureImage;
scalarMapper->updateTexture(texImage.p());
@ -45,7 +45,7 @@ TEST(TernaryScalarMapperTest, BasicFunctions)
//--------------------------------------------------------------------------------------------------
TEST(TernaryScalarMapperTest, TextureMapping)
{
cvf::ref<RivTernaryScalarMapper> scalarMapper = new RivTernaryScalarMapper(cvf::Color3f::GRAY, 0.8f);
cvf::ref<RivTernaryScalarMapper> scalarMapper = new RivTernaryScalarMapper(cvf::Color3f::GRAY);
// Without opacity
{

View File

@ -24,32 +24,41 @@
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RivTernaryScalarMapper::RivTernaryScalarMapper(const cvf::Color3f& undefScalarColor, float opacityLevel)
RivTernaryScalarMapper::RivTernaryScalarMapper(const cvf::Color3f& undefScalarColor)
: m_undefScalarColor(undefScalarColor),
m_opacityLevel(opacityLevel),
m_textureSize(128, 256)
{
m_opacityLevel = 1.0;
setTernaryRanges(0.0, 1.0, 0.0, 1.0);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf::Vec2f RivTernaryScalarMapper::mapToTextureCoord(double soil, double swat, bool isTransparent)
void RivTernaryScalarMapper::setOpacityLevel(float opacityLevel)
{
m_opacityLevel = opacityLevel;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf::Vec2f RivTernaryScalarMapper::mapToTextureCoord(double soil, double sgas, bool isTransparent) const
{
double soilNormalized = (soil - m_rangeMinSoil) * m_soilFactor;
soilNormalized = cvf::Math::clamp(soilNormalized, 0.0, 1.0);
double swatNormalized = (swat - m_rangeMinSwat) * m_swatFactor;
swatNormalized = cvf::Math::clamp(swatNormalized, 0.0, 1.0 - soilNormalized);
swatNormalized /= 2.0;
double sgasNormalized = (sgas - m_rangeMinSgas) * m_sgasFactor;
sgasNormalized = cvf::Math::clamp(sgasNormalized, 0.0, 1.0 - soilNormalized);
sgasNormalized /= 2.0;
if (isTransparent)
{
swatNormalized += 0.5;
sgasNormalized += 0.5;
}
cvf::Vec2f texCoord(static_cast<float>(soilNormalized), static_cast<float>(swatNormalized));
cvf::Vec2f texCoord(static_cast<float>(soilNormalized), static_cast<float>(sgasNormalized));
return texCoord;
}
@ -60,12 +69,13 @@ cvf::Vec2f RivTernaryScalarMapper::mapToTextureCoord(double soil, double swat, b
/// * * Texture in this region is assigned the given opacity level
/// * *
/// D *********** E
/// C *
/// C * SGAS
/// * *
/// * * Texture in this region is opaque
/// * *
/// * *
/// A *********** B
/// A *********** B
/// SWAT SOIL
//--------------------------------------------------------------------------------------------------
bool RivTernaryScalarMapper::updateTexture(cvf::TextureImage* image)
{
@ -116,13 +126,14 @@ bool RivTernaryScalarMapper::updateTexture(cvf::TextureImage* image)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivTernaryScalarMapper::setTernaryRanges(double soilLower, double soilUpper, double swatLower, double swatUpper)
void RivTernaryScalarMapper::setTernaryRanges(double soilLower, double soilUpper, double sgasLower, double sgasUpper)
{
m_rangeMinSoil = soilLower;
m_rangeMaxSoil = soilUpper;
m_soilFactor = 1.0 / (soilUpper - soilLower);
m_rangeMinSwat = swatLower;
m_rangeMaxSwat = swatUpper;
m_swatFactor = 1.0 / (swatUpper - swatLower);
m_rangeMinSgas = sgasLower;
m_rangeMaxSgas = sgasUpper;
m_sgasFactor = 1.0 / (sgasUpper - sgasLower);
}

View File

@ -34,11 +34,13 @@ namespace cvf
class RivTernaryScalarMapper : public cvf::Object
{
public:
RivTernaryScalarMapper(const cvf::Color3f& undefScalarColor, float opacityLevel);
RivTernaryScalarMapper(const cvf::Color3f& undefScalarColor);
void setTernaryRanges(double soilLower, double soilUpper, double swatLower, double swatUpper);
void setOpacityLevel(float opacityLevel);
cvf::Vec2f mapToTextureCoord(double soil, double swat, bool isTransparent);
void setTernaryRanges(double soilLower, double soilUpper, double sgasLower, double sgasUpper);
cvf::Vec2f mapToTextureCoord(double soil, double sgas, bool isTransparent) const;
bool updateTexture(cvf::TextureImage* image);
private:
@ -50,8 +52,8 @@ private:
double m_rangeMinSoil;
double m_soilFactor;
double m_rangeMaxSwat;
double m_rangeMinSwat;
double m_swatFactor;
double m_rangeMaxSgas;
double m_rangeMinSgas;
double m_sgasFactor;
};