1 | package gov.noaa.pmel.util; |
---|
2 | |
---|
3 | import java.util.*; |
---|
4 | import java.awt.*; |
---|
5 | import gov.noaa.pmel.sgt.Transform; |
---|
6 | |
---|
7 | public class ColorMap { |
---|
8 | protected String mParamName; |
---|
9 | Vector mPieceRanges = new Vector(); // stores the physical ranges (Range2D) for each of the pieces of the colormap |
---|
10 | Vector mRedTransforms = new Vector(); // stores the transforms from physical to user coords for the red component |
---|
11 | Vector mGreenTransforms = new Vector(); // stores the transforms from physical to user coords for the green component |
---|
12 | Vector mBlueTransforms = new Vector(); // stores the transforms from physical to user coords for blue component |
---|
13 | |
---|
14 | public ColorMap() { |
---|
15 | // zero argument ctor |
---|
16 | } |
---|
17 | |
---|
18 | public ColorMap(ColorMap inMap) { |
---|
19 | // copy constructor |
---|
20 | |
---|
21 | } |
---|
22 | |
---|
23 | // public methods |
---|
24 | public Color getColor(double inVal) { |
---|
25 | // find the appropriate transform by testing what Range2D it's in |
---|
26 | int foundPiece = -99; |
---|
27 | int numPieces = mPieceRanges.size(); |
---|
28 | |
---|
29 | // first test whether it's out of range |
---|
30 | double sVal =((Range2D)mPieceRanges.elementAt(0)).start; |
---|
31 | double eVal =((Range2D)mPieceRanges.elementAt(numPieces - 1)).end; |
---|
32 | if (inVal <= sVal) { |
---|
33 | float red = (float)(((Transform)mRedTransforms.elementAt(0)).getTransU(sVal)); |
---|
34 | float green = (float)(((Transform)mGreenTransforms.elementAt(0)).getTransU(sVal)); |
---|
35 | float blue = (float)(((Transform)mBlueTransforms.elementAt(0)).getTransU(sVal)); |
---|
36 | return new Color(red, green, blue); |
---|
37 | } |
---|
38 | else if (inVal >= eVal) { |
---|
39 | float red = (float)(((Transform)mRedTransforms.elementAt(numPieces - 1)).getTransU(eVal)); |
---|
40 | float green = (float)(((Transform)mGreenTransforms.elementAt(numPieces - 1)).getTransU(eVal)); |
---|
41 | float blue = (float)(((Transform)mBlueTransforms.elementAt(numPieces - 1)).getTransU(eVal)); |
---|
42 | System.out.println(red + " " + green + " " + blue); |
---|
43 | return new Color(red, green, blue); |
---|
44 | } |
---|
45 | |
---|
46 | // value is in range |
---|
47 | for (int i=0; i<mPieceRanges.size(); i++) { |
---|
48 | Range2D range = (Range2D)mPieceRanges.elementAt(i); |
---|
49 | sVal = range.start; |
---|
50 | eVal = range.end; |
---|
51 | if (inVal >= sVal && inVal <= eVal) { |
---|
52 | foundPiece = i; |
---|
53 | break; |
---|
54 | } |
---|
55 | } |
---|
56 | float red = (float)(((Transform)mRedTransforms.elementAt(foundPiece)).getTransU(eVal)); |
---|
57 | float green = (float)(((Transform)mGreenTransforms.elementAt(foundPiece)).getTransU(eVal)); |
---|
58 | float blue = (float)(((Transform)mBlueTransforms.elementAt(foundPiece)).getTransU(eVal)); |
---|
59 | return new Color(red, green, blue); |
---|
60 | } |
---|
61 | |
---|
62 | public void addTransform(Transform inTransRed, Transform inTransGreen, Transform inTransBlue) { |
---|
63 | mRedTransforms.addElement(inTransRed); |
---|
64 | mGreenTransforms.addElement(inTransGreen); |
---|
65 | mBlueTransforms.addElement(inTransBlue); |
---|
66 | mPieceRanges.addElement(inTransRed.getRangeP()); |
---|
67 | } |
---|
68 | |
---|
69 | public IndexedColorMap getIndexedColorMap(int numColors) { |
---|
70 | return new IndexedColorMap(this, numColors); |
---|
71 | } |
---|
72 | |
---|
73 | public String getParamName() { |
---|
74 | return mParamName; |
---|
75 | } |
---|
76 | |
---|
77 | public double getMaxValue() { |
---|
78 | return ((Range2D)mPieceRanges.elementAt(mPieceRanges.size()-1)).end; |
---|
79 | } |
---|
80 | |
---|
81 | public double getMinValue() { |
---|
82 | return ((Range2D)mPieceRanges.elementAt(0)).start; |
---|
83 | |
---|
84 | } |
---|
85 | } |
---|