package sgtplot.util;

import java.util.*;
import java.awt.*;

import sgtplot.Transform;

public class ColorMap {
	protected String mParamName;
	Vector mPieceRanges = new Vector();		// stores the physical ranges (Range2D) for each of the pieces of the colormap
	Vector mRedTransforms = new Vector();	// stores the transforms from physical to user coords for the red component
	Vector mGreenTransforms = new Vector();	// stores the transforms from physical to user coords for the green component
	Vector mBlueTransforms = new Vector();	// stores the transforms from physical to user coords for blue component
	
	public ColorMap() {
		// zero argument ctor
	}
	
	public ColorMap(ColorMap inMap) {
		// copy constructor
	
	}
	
	// public methods
	public Color getColor(double inVal) {
		// find the appropriate transform by testing what Range2D it's in
		int foundPiece = -99;
		int numPieces = mPieceRanges.size();
		
		// first test whether it's out of range
		double sVal =((Range2D)mPieceRanges.elementAt(0)).start;
		double eVal =((Range2D)mPieceRanges.elementAt(numPieces - 1)).end;
		if (inVal <= sVal) {
			float red = (float)(((Transform)mRedTransforms.elementAt(0)).getTransU(sVal));
			float green = (float)(((Transform)mGreenTransforms.elementAt(0)).getTransU(sVal));
			float blue = (float)(((Transform)mBlueTransforms.elementAt(0)).getTransU(sVal));
			return new Color(red, green, blue);
		}
		else if (inVal >= eVal) {
			float red = (float)(((Transform)mRedTransforms.elementAt(numPieces - 1)).getTransU(eVal));
			float green = (float)(((Transform)mGreenTransforms.elementAt(numPieces - 1)).getTransU(eVal));
			float blue = (float)(((Transform)mBlueTransforms.elementAt(numPieces - 1)).getTransU(eVal));
			System.out.println(red + " " + green + " " + blue);
			return new Color(red, green, blue);
		}
		
		// value is in range
		for (int i=0; i= sVal && inVal <= eVal) {
				foundPiece = i;
				break;
			}
		}
		float red = (float)(((Transform)mRedTransforms.elementAt(foundPiece)).getTransU(eVal));
		float green = (float)(((Transform)mGreenTransforms.elementAt(foundPiece)).getTransU(eVal));
		float blue = (float)(((Transform)mBlueTransforms.elementAt(foundPiece)).getTransU(eVal));
		return new Color(red, green, blue);
	}
	
	public void addTransform(Transform inTransRed, Transform inTransGreen, Transform inTransBlue) {
		mRedTransforms.addElement(inTransRed);
		mGreenTransforms.addElement(inTransGreen);
		mBlueTransforms.addElement(inTransBlue);
		mPieceRanges.addElement(inTransRed.getRangeP());
	}
	
	public IndexedColorMap getIndexedColorMap(int numColors) {
		return new IndexedColorMap(this, numColors);
	}
	
	public String getParamName() {
		return mParamName;
	}
	
	public double getMaxValue() {
		return ((Range2D)mPieceRanges.elementAt(mPieceRanges.size()-1)).end;
	}
	
	public double getMinValue() {
		return ((Range2D)mPieceRanges.elementAt(0)).start;
	
	}
}
 

Ads help maintain this website.