1 package prefuse.action.animate; 2 3 import java.util.logging.Logger ; 4 5 import prefuse.action.ItemAction; 6 import prefuse.util.PrefuseLib; 7 import prefuse.visual.VisualItem; 8 9 10 15 public class ArrayAnimator extends ItemAction { 16 17 private static final Logger s_logger 18 = Logger.getLogger(ArrayAnimator.class.getName()); 19 20 private String m_field; private String m_start; private String m_end; 24 32 public ArrayAnimator(String group, String field) { 33 super(group); 34 m_field = field; 35 m_start = PrefuseLib.getStartField(field); 36 m_end = PrefuseLib.getEndField(field); 37 } 38 39 42 public void process(VisualItem item, double frac) { 43 Object o = item.get(m_field); 44 if ( o instanceof float[] ) { 45 float[] a = (float[])o; 46 float[] s = (float[])item.get(m_start); 47 float[] e = (float[])item.get(m_end); 48 49 float f = (float)frac; 50 for ( int i=0; i<a.length; ++i ) { 51 if ( Float.isNaN(a[i]) ) break; 52 a[i] = s[i] + f*(e[i]-s[i]); 53 } 54 item.setValidated(false); 55 } else if ( o instanceof double[] ) { 56 double[] a = (double[])o; 57 double[] s = (double[])item.get(m_start); 58 double[] e = (double[])item.get(m_end); 59 60 for ( int i=0; i<a.length; ++i ) { 61 if ( Double.isNaN(a[i]) ) break; 62 a[i] = s[i] + frac*(e[i]-s[i]); 63 } 64 item.setValidated(false); 65 } else { 66 s_logger.warning("Encountered non-double/non-float array type: " 67 + (o==null ? "null" : o.getClass().getName())); 68 } 69 } 70 71 } | Popular Tags |