View Javadoc

1   /* -------------------------------------------------------------------
2    * Java source file for the class ColorLookupTable
3    * 
4    * Copyright (c), 2003, Masahiro Takatsuka.
5    * All Rights Researved.
6    * 
7    * Original Author: Masahiro Takatsuka (masa@jbeans.net)
8    * $Author: takatsukam $
9    * 
10   * $Date: 2004/03/03 11:53:05 $
11   * 
12   * $Id: ColorLookupTable.java,v 1.3 2004/03/03 11:53:05 takatsukam Exp $
13   * 
14   * Reference:		Document no:
15   * ___				___
16   * 
17   * To Do:
18   * ___
19   * 
20  ------------------------------------------------------------------- */
21  
22  /* --------------------------- Package ---------------------------- */
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                 Implementation of class ColorLookupTable               
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  	/* --------------------------- for bean --------------------------- */
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();				// call DefaultColorLookupTable's 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