/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* Created on 13 November 2002, 13:59
*/
package org.geotools.styling;
import org.geotools.factory.CommonFactoryFinder;
import org.geotools.factory.GeoTools;
import org.geotools.util.Utilities;
import org.opengis.filter.FilterFactory;
import org.opengis.filter.expression.Expression;
import org.opengis.style.StyleVisitor;
/**
* Default implementation of ShadedRelief.
*
* @author iant
* @source $URL$
*/
public class ShadedReliefImpl implements ShadedRelief {
private FilterFactory filterFactory;
private Expression reliefFactor;
private boolean brightness = false;
public ShadedReliefImpl(){
this( CommonFactoryFinder.getFilterFactory(GeoTools.getDefaultHints()));
}
public ShadedReliefImpl(FilterFactory factory) {
filterFactory = factory;
reliefFactor = filterFactory.literal(55);
}
/**
* The ReliefFactor gives the amount of exaggeration to use for the height
* of the ?hills.? A value of around 55 (times) gives reasonable results
* for Earth-based DEMs. The default value is system-dependent.
*
* @return an expression which evaluates to a double.
*/
public Expression getReliefFactor() {
return reliefFactor;
}
/**
* indicates if brightnessOnly is true or false. Default is false.
*
* @return boolean brightnessOn.
*/
public boolean isBrightnessOnly() {
return brightness;
}
/**
* turns brightnessOnly on or off depending on value of flag.
*
* @param flag boolean
*/
public void setBrightnessOnly(boolean flag) {
brightness = flag;
}
/**
* The ReliefFactor gives the amount of exaggeration to use for the height
* of the ?hills.? A value of around 55 (times) gives reasonable results
* for Earth-based DEMs. The default value is system-dependent.
*
* @param reliefFactor an expression which evaluates to a double.
*/
public void setReliefFactor(Expression reliefFactor) {
this.reliefFactor = reliefFactor;
}
public Object accept(StyleVisitor visitor,Object data) {
return visitor.visit(this,data);
}
public void accept(org.geotools.styling.StyleVisitor visitor) {
visitor.visit( this );
}
@Override
public int hashCode() {
final int PRIME = 1000003;
int result = 0;
if (reliefFactor != null){
result = (PRIME * result) + reliefFactor.hashCode();
}
result = (PRIME * result) + (brightness ? 1 : 0);
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof ShadedReliefImpl) {
ShadedReliefImpl other = (ShadedReliefImpl) obj;
return Utilities.equals(reliefFactor, other.reliefFactor)
&& Utilities.equals(brightness, other.brightness);
}
return false;
}
static ShadedReliefImpl cast(org.opengis.style.ShadedRelief shadedRelief) {
if( shadedRelief == null ){
return null;
}
else if ( shadedRelief instanceof ShadedReliefImpl){
return (ShadedReliefImpl) shadedRelief;
}
else {
ShadedReliefImpl copy = new ShadedReliefImpl();
copy.setBrightnessOnly( shadedRelief.isBrightnessOnly() );
copy.setReliefFactor( shadedRelief.getReliefFactor() );
return copy;
}
}
}