Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: com/arranger/jarl/filter/paint/Plasma.java


1   package com.arranger.jarl.filter.paint;
2   
3   import com.arranger.jarl.base.IContext;
4   import com.arranger.jarl.base.IGradientManager;
5   import com.arranger.jarl.base.IJarlObjectInfo;
6   import com.arranger.jarl.util.InterpolateUtil;
7   import com.arranger.jarl.util.ObjectUtil;
8   import com.arranger.jarl.util.WidgetConfigSegment;
9   import com.arranger.jarl.util.JarlInfoUtil;
10  import com.jhlabs.image.Gradient;
11  import com.jhlabs.image.PlasmaFilter;
12  import org.w3c.dom.Element;
13  
14  /**
15   * Plasma created on Apr 3, 2003
16   *
17   * @filterAttribute turbulence ## xs:float ## amount of turbulence (between 1 & ??)
18   * @filterAttribute gradientIndex ## xs:integer ## the gradientIndex
19   * @filterAttribute seed ## xs:integer ## the seed (between 1 & Integer.MaxInteger)
20   *
21   * @filterAttribute startTurbulence ## xs:float ## starting amount of turbulence (between 1 & ??)
22   * @filterAttribute startGradientIndex ## xs:integer ## the starting gradientIndex
23   * @filterAttribute startSeed ## xs:integer ## the starting seed (between 1 & Integer.MaxInteger)
24   * @filterAttribute endTurbulence ## xs:float ## ending amount of turbulence (between 1 & ??)
25   * @filterAttribute endGradientIndex ## xs:integer ## the ending gradientIndex
26   * @filterAttribute endSeed ## xs:integer ## the ending seed (between 1 & Integer.MaxInteger)
27   */
28  public class Plasma extends BasePaintFilter {
29  
30      protected float m_turbulence = Float.NEGATIVE_INFINITY;
31      protected int m_gradientIndex = Integer.MAX_VALUE;
32      protected int m_seed = Integer.MAX_VALUE;
33  
34      protected float m_startTurbulence = Float.NEGATIVE_INFINITY;
35      protected int m_startGradientIndex = Integer.MAX_VALUE;
36      protected int m_startSeed = Integer.MAX_VALUE;
37      protected float m_endTurbulence = Float.NEGATIVE_INFINITY;
38      protected int m_endGradientIndex = Integer.MAX_VALUE;
39      protected int m_endSeed = Integer.MAX_VALUE;
40  
41      /**
42       * @return the name of the underlying filter class
43       */
44      protected String getImageFilterClassName() {
45          return PlasmaFilter.class.getName();
46      }
47  
48      /**
49       * Prepare the filter with any changes as necessary
50       * @param context the current context
51       */
52      protected void prepareFilter(IContext context) {
53          PlasmaFilter plasmaFilter = (PlasmaFilter) getImageFilter();
54          IGradientManager gradientManager = context.getGradientManager();
55  
56          float turbulence;
57          Gradient gradient;
58          long seed;
59  
60          if (m_turbulence != Float.NEGATIVE_INFINITY) {
61              turbulence = m_turbulence;
62          } else if (m_startTurbulence != Float.NEGATIVE_INFINITY &&
63                  m_endTurbulence != Float.NEGATIVE_INFINITY) {
64              turbulence = (float) InterpolateUtil.interpolate(m_startTime,
65                      m_endTime,
66                      m_startTurbulence,
67                      m_endTurbulence,
68                      context.getTime());
69          } else {
70              PlasmaConfigSegment plasmaConfigSegment = (PlasmaConfigSegment) getCurrentSegment(context);
71              double currentTimePct = getCurrentSegmentTimePct(context, plasmaConfigSegment);
72  
73              turbulence = (float) InterpolateUtil.interpolate(0,
74                      1,
75                      plasmaConfigSegment.getStartTurbulence(),
76                      plasmaConfigSegment.getEndTurbulence(),
77                      currentTimePct);
78          }
79  
80          if (m_gradientIndex != Integer.MAX_VALUE) {
81              gradient = gradientManager.getGradient(m_gradientIndex);
82          } else if (m_startGradientIndex != Integer.MAX_VALUE &&
83                  m_endGradientIndex != Integer.MAX_VALUE) {
84              Gradient gradient1 = gradientManager.getGradient(m_startGradientIndex);
85              Gradient gradient2 = gradientManager.getGradient(m_endGradientIndex);
86              double currentTimePct = InterpolateUtil.interpolate(this, context.getTime());
87              gradient = gradientManager.interpolate(gradient1, gradient2, currentTimePct);
88          } else {
89              PlasmaConfigSegment plasmaConfigSegment = (PlasmaConfigSegment) getCurrentSegment(context);
90              double currentTimePct = getCurrentSegmentTimePct(context, plasmaConfigSegment);
91              Gradient gradient1 = gradientManager.getGradient(plasmaConfigSegment.getStartGradientIndex());
92              Gradient gradient2 = gradientManager.getGradient(plasmaConfigSegment.getEndGradientIndex());
93              gradient = gradientManager.interpolate(gradient1, gradient2, currentTimePct);
94          }
95  
96          if (m_seed != Integer.MAX_VALUE) {
97              seed = m_seed;
98          } else if (m_startSeed != Integer.MAX_VALUE && m_endSeed != Integer.MAX_VALUE) {
99              seed = (long) InterpolateUtil.interpolate(getStartTime(), getEndTime(),
100                     m_startSeed, m_endSeed, context.getTime());
101         } else {
102             PlasmaConfigSegment plasmaConfigSegment = (PlasmaConfigSegment) getCurrentSegment(context);
103             double currentTimePct = getCurrentSegmentTimePct(context, plasmaConfigSegment);
104 
105             seed = (long) InterpolateUtil.interpolate(0, 1,
106                     plasmaConfigSegment.getStartSeed(),
107                     plasmaConfigSegment.getEndSeed(),
108                     currentTimePct);
109         }
110 
111         plasmaFilter.setTurbulence(turbulence);
112         plasmaFilter.setColormap(gradient);
113         try {
114             ObjectUtil.setPrivilegedProperty(plasmaFilter, PlasmaFilter.class, "seed", new Long(seed));
115         } catch (IllegalAccessException e) {
116             throw new IllegalStateException(e.getMessage());
117         }
118     }
119 
120 
121     /**
122      * Always remember some attrs might not be there
123      * @param context
124      */
125     protected void initAttributes(IContext context) {
126         super.initAttributes(context);
127 
128         ObjectUtil.initializeField("gradientIndex", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
129         ObjectUtil.initializeField("turbulence", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
130         ObjectUtil.initializeField("seed", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
131 
132         ObjectUtil.initializeField("startGradientIndex", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
133         ObjectUtil.initializeField("startTurbulence", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
134         ObjectUtil.initializeField("startSeed", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
135         ObjectUtil.initializeField("endGradientIndex", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
136         ObjectUtil.initializeField("endTurbulence", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
137         ObjectUtil.initializeField("endSeed", m_configElement, this, ObjectUtil.PRIMITIVE_CONVERSION);
138     }
139 
140     protected void addJarlObjectInfo(IJarlObjectInfo jarlObjectInfo) {
141         super.addJarlObjectInfo(jarlObjectInfo);
142         populateInfo(jarlObjectInfo, "gradientIndex", "Gradient Index", JarlInfoUtil.PRIMITIVE_DISPLAY);
143         populateInfo(jarlObjectInfo, "turbulence", "Turbulence", JarlInfoUtil.PRIMITIVE_DISPLAY);
144         populateInfo(jarlObjectInfo, "seed", "Random Seed", JarlInfoUtil.PRIMITIVE_DISPLAY);
145 
146         populateInfo(jarlObjectInfo, "startGradientIndex", "Start Gradient Index", JarlInfoUtil.PRIMITIVE_DISPLAY);
147         populateInfo(jarlObjectInfo, "endGradientIndex", "End Gradient Index", JarlInfoUtil.PRIMITIVE_DISPLAY);
148         populateInfo(jarlObjectInfo, "startTurbulence", "Start Turbulence", JarlInfoUtil.PRIMITIVE_DISPLAY);
149         populateInfo(jarlObjectInfo, "endTurbulence", "End Turbulence", JarlInfoUtil.PRIMITIVE_DISPLAY);
150         populateInfo(jarlObjectInfo, "startSeed", "Start Random Seed", JarlInfoUtil.PRIMITIVE_DISPLAY);
151         populateInfo(jarlObjectInfo, "endSeed", "End Random Seed", JarlInfoUtil.PRIMITIVE_DISPLAY);
152     }
153 
154     /**
155      * Create a concrete {@link com.arranger.jarl.util.WidgetConfigSegment} based on this element
156      * @param element
157      * @return a specific {@link com.arranger.jarl.util.WidgetConfigSegment}
158      */
159     public WidgetConfigSegment createSegment(Element element) {
160         return new PlasmaConfigSegment(element);
161     }
162 
163     public static class PlasmaConfigSegment extends WidgetConfigSegment {
164 
165         protected float m_startTurbulence = Float.NEGATIVE_INFINITY;
166         protected int m_startGradientIndex = Integer.MAX_VALUE;
167         protected int m_startSeed = Integer.MAX_VALUE;
168         protected float m_endTurbulence = Float.NEGATIVE_INFINITY;
169         protected int m_endGradientIndex = Integer.MAX_VALUE;
170         protected int m_endSeed = Integer.MAX_VALUE;
171 
172         public PlasmaConfigSegment(Element element) {
173             super(element);
174 
175             ObjectUtil.initializeFieldStrict("startGradientIndex", element, this, ObjectUtil.PRIMITIVE_CONVERSION);
176             ObjectUtil.initializeFieldStrict("startTurbulence", element, this, ObjectUtil.PRIMITIVE_CONVERSION);
177             ObjectUtil.initializeFieldStrict("startSeed", element, this, ObjectUtil.PRIMITIVE_CONVERSION);
178             ObjectUtil.initializeFieldStrict("endGradientIndex", element, this, ObjectUtil.PRIMITIVE_CONVERSION);
179             ObjectUtil.initializeFieldStrict("endTurbulence", element, this, ObjectUtil.PRIMITIVE_CONVERSION);
180             ObjectUtil.initializeFieldStrict("endSeed", element, this, ObjectUtil.PRIMITIVE_CONVERSION);
181         }
182 
183         protected void addJarlObjectInfo(IJarlObjectInfo jarlObjectInfo) {
184             super.addJarlObjectInfo(jarlObjectInfo);
185             populateInfo(jarlObjectInfo, "startGradientIndex", "Start Gradient Index", JarlInfoUtil.PRIMITIVE_DISPLAY);
186             populateInfo(jarlObjectInfo, "endGradientIndex", "End Gradient Index", JarlInfoUtil.PRIMITIVE_DISPLAY);
187             populateInfo(jarlObjectInfo, "startTurbulence", "Start Turbulence", JarlInfoUtil.PRIMITIVE_DISPLAY);
188             populateInfo(jarlObjectInfo, "endTurbulence", "End Turbulence", JarlInfoUtil.PRIMITIVE_DISPLAY);
189             populateInfo(jarlObjectInfo, "startSeed", "Start Random Seed", JarlInfoUtil.PRIMITIVE_DISPLAY);
190             populateInfo(jarlObjectInfo, "endSeed", "End Random Seed", JarlInfoUtil.PRIMITIVE_DISPLAY);
191         }
192 
193         public float getStartTurbulence() {
194             return m_startTurbulence;
195         }
196 
197         public int getStartGradientIndex() {
198             return m_startGradientIndex;
199         }
200 
201         public int getStartSeed() {
202             return m_startSeed;
203         }
204 
205         public float getEndTurbulence() {
206             return m_endTurbulence;
207         }
208 
209         public int getEndGradientIndex() {
210             return m_endGradientIndex;
211         }
212 
213         public int getEndSeed() {
214             return m_endSeed;
215         }
216     }
217 }