1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package net.jbeans.j3d.data;
24
25 /* ------------------ Import classes (packages) ------------------- *//package-summary/html">class="comment"> ------------------ Import classes (packages) ------------------- *//package-summary.html">class="comment">/* ------------------ Import classes (packages) ------------------- *//package-summary.html">class="comment"> ------------------ Import classes (packages) ------------------- */
26 import java.awt.*;
27 import java.io.*;
28 import javax.swing.event.*;
29
30 import net.jbeans.lang.*;
31
32
33
34
35 /***
36 * generally describe ColorLookupTable in here
37 *
38 * @version $Revision: 1.3 $
39 * @author Masahiro Takatsuka (masa@jbeans.net)
40 * @see DefaultColorLookupTable
41 */
42
43 public class ColorLookupTable extends DefaultColorLookupTable {
44
45 private transient EventListenerList listenerList;
46 private transient ChangeEvent changeEvent;
47
48 /***
49 * Null constructor
50 */
51 public ColorLookupTable() {
52 super();
53 setupListeners();
54 }
55
56 /***
57 * Construct with range=(0,1); and hsv ranges set up for rainbow color
58 * table (from red to blue).
59 */
60 public ColorLookupTable(int dataType, int dim, int size) {
61 super(dataType, dim, size);
62 setupListeners();
63 }
64
65 private void setupListeners() {
66 this.listenerList = new EventListenerList();
67 }
68
69 public AttributeArray makeObject() {
70 return new ColorLookupTable(getDataType(),
71 this.data.getDimension(),
72 getNumberOfLookups());
73 }
74
75 public void setDefaultColorLookupTable() {
76 int dim = 4;
77 int size = 256;
78 this.data.setDimension(dim);
79 setNumberOfLookups(size);
80 build();
81
82 fireStateChanged();
83 }
84
85 public void setColorLookupTable(Color[] colors) {
86 int num = colors.length;
87 float [] rgba = new float[4];
88 int offset = 0;
89 double[] c_rgba = null;
90
91 setNumberOfLookups(num);
92 for (int i = 0; i < num; i++) {
93 colors[i].getComponents(rgba);
94 offset = 4 * i;
95 c_rgba = (double[]) this.data.getData();
96 c_rgba[offset + 0] = rgba[0];
97 c_rgba[offset + 1] = rgba[1];
98 c_rgba[offset + 2] = rgba[2];
99 c_rgba[offset + 3] = rgba[3];
100 }
101 fireStateChanged();
102 }
103
104 public void setColorLookupTable(double[][] colors) {
105 int num = colors.length;
106 int dim = colors[0].length;
107 int offset = 0;
108 double[] c_rgba = null;
109
110 setNumberOfLookups(num);
111 for (int i = 0; i < num; i++) {
112 offset = dim * i;
113 c_rgba = (double[]) this.data.getData();
114 for (int j = 0; j < dim; j++) {
115 c_rgba[offset + j] = colors[i][j];
116 }
117 }
118 fireStateChanged();
119 }
120
121 public void setColorLookupTable(double[] colors) {
122 int dim = 4;
123 int num = colors.length / dim;
124 int offset = 0;
125 double[] c_rgba = null;
126
127 setNumberOfLookups(num);
128 for (int i = 0; i < num; i++) {
129 offset = dim * i;
130 c_rgba = (double[]) this.data.getData();
131 for (int j = 0; j < dim; j++) {
132 c_rgba[offset + j] = colors[offset + j];
133 }
134 }
135 fireStateChanged();
136 }
137
138 public void setColorLookupTable(float[][] colors) {
139 int num = colors.length;
140 int dim = colors[0].length;
141 int offset = 0;
142 double[] c_rgba = null;
143
144 setNumberOfLookups(num);
145 for (int i = 0; i < num; i++) {
146 offset = dim * i;
147 c_rgba = (double[]) this.data.getData();
148 for (int j = 0; j < dim; j++) {
149 c_rgba[offset + j] = (double) colors[i][j];
150 }
151 }
152 fireStateChanged();
153 }
154
155 public void setColorLookupTable(float[] colors) {
156 int dim = 4;
157 int num = colors.length / dim;
158 int offset = 0;
159 double[] c_rgba = null;
160
161 setNumberOfLookups(num);
162 for (int i = 0; i < num; i++) {
163 offset = dim * i;
164 c_rgba = (double[]) this.data.getData();
165 for (int j = 0; j < dim; j++) {
166 c_rgba[offset + j] = (double) colors[offset + j];
167 }
168 }
169 fireStateChanged();
170 }
171
172 public void setColorLookupTable(int[][] colors) {
173 int num = colors.length;
174 int dim = colors[0].length;
175 int offset = 0;
176 double[] c_rgba = null;
177
178 setNumberOfLookups(num);
179 for (int i = 0; i < num; i++) {
180 offset = dim * i;
181 c_rgba = (double[]) this.data.getData();
182 for (int j = 0; j < dim; j++) {
183 c_rgba[offset + j] = (double) (colors[i][j] / 255);
184 }
185 }
186 fireStateChanged();
187 }
188
189 public void setColorLookupTable(int[] colors) {
190 int dim = 4;
191 int num = colors.length / dim;
192 int offset = 0;
193 double[] c_rgba = null;
194
195 setNumberOfLookups(num);
196 for (int i = 0; i < num; i++) {
197 offset = dim * i;
198 c_rgba = (double[]) this.data.getData();
199 for (int j = 0; j < dim; j++) {
200 c_rgba[offset + j] = (double) (colors[offset + j] / 255);
201 }
202 }
203 fireStateChanged();
204 }
205
206 /***
207 * Adds a ChangeListener to the slider.
208 *
209 * @param l the ChangeListener to add
210 * @see #fireStateChanged
211 * @see #removeChangeListener
212 */
213 public void addChangeListener(ChangeListener l) {
214 this.listenerList.add(ChangeListener.class, l);
215 }
216
217 /***
218 * Removes a ChangeListener from the slider.
219 *
220 * @param l the ChangeListener to remove
221 * @see #fireStateChanged
222 * @see #addChangeListener
223
224 */
225 public void removeChangeListener(ChangeListener l) {
226 this.listenerList.remove(ChangeListener.class, l);
227 }
228
229 /***
230 * Send a ChangeEvent, whose source is this Slider, to
231 * each listener. This method method is called each time
232 * a ChangeEvent is received from the model.
233 *
234 * @see #addChangeListener
235 * @see EventListenerList
236 */
237 private void fireStateChanged() {
238 Object[] listeners = this.listenerList.getListenerList();
239 for (int i = listeners.length - 2; i >= 0; i -= 2) {
240 if (listeners[i]==ChangeListener.class) {
241 if (this.changeEvent == null) {
242 this.changeEvent = new ChangeEvent(this);
243 }
244 ((ChangeListener)listeners[i+1]).stateChanged(this.changeEvent);
245 }
246 }
247 }
248
249 /***
250 * Serialization methods
251 */
252 private void readObject(ObjectInputStream s) throws ClassNotFoundException, IOException {
253 s.defaultReadObject();
254 setupListeners();
255 }
256 }
257
258
259