1 /* 2 * $RCSfile: RotPosScalePathInterpolatorState.java,v $ 3 * 4 * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * - Redistribution of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * - Redistribution in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * 18 * Neither the name of Sun Microsystems, Inc. or the names of 19 * contributors may be used to endorse or promote products derived 20 * from this software without specific prior written permission. 21 * 22 * This software is provided "AS IS," without a warranty of any 23 * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND 24 * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, 25 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY 26 * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL 27 * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF 28 * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS 29 * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR 30 * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, 31 * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND 32 * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR 33 * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE 34 * POSSIBILITY OF SUCH DAMAGES. 35 * 36 * You acknowledge that this software is not designed, licensed or 37 * intended for use in the design, construction, operation or 38 * maintenance of any nuclear facility. 39 * 40 * $Revision: 1.5 $ 41 * $Date: 2007/02/09 17:20:38 $ 42 * $State: Exp $ 43 */ 44 45 package com.sun.j3d.utils.scenegraph.io.state.javax.media.j3d; 46 47 import java.io.IOException; 48 import java.io.DataInput; 49 import java.io.DataOutput; 50 import javax.media.j3d.RotPosScalePathInterpolator; 51 import javax.media.j3d.SceneGraphObject; 52 import javax.media.j3d.Transform3D; 53 import javax.media.j3d.TransformGroup; 54 import javax.vecmath.Point3f; 55 import javax.vecmath.Quat4f; 56 import com.sun.j3d.utils.scenegraph.io.retained.Controller; 57 import com.sun.j3d.utils.scenegraph.io.retained.SymbolTableData; 58 59 public class RotPosScalePathInterpolatorState extends PathInterpolatorState { 60 61 private Point3f[] positions; 62 private Quat4f[] quats; 63 private float[] scales; 64 RotPosScalePathInterpolatorState(SymbolTableData symbol,Controller control)65 public RotPosScalePathInterpolatorState(SymbolTableData symbol,Controller control) { 66 super( symbol, control ); 67 } 68 writeConstructorParams( DataOutput out )69 public void writeConstructorParams( DataOutput out ) throws IOException { 70 super.writeConstructorParams( out ); 71 72 positions = new Point3f[ knots.length ]; 73 quats = new Quat4f[ knots.length ]; 74 scales = new float[ knots.length ]; 75 for(int i=0; i<positions.length; i++) { 76 positions[i] = new Point3f(); 77 quats[i] = new Quat4f(); 78 } 79 80 ((RotPosScalePathInterpolator)node).getPositions( positions ); 81 ((RotPosScalePathInterpolator)node).getQuats( quats ); 82 ((RotPosScalePathInterpolator)node).getScales( scales ); 83 for(int i=0; i<positions.length; i++) { 84 control.writePoint3f( out, positions[i] ); 85 control.writeQuat4f( out, quats[i] ); 86 out.writeFloat( scales[i] ); 87 } 88 } 89 readConstructorParams( DataInput in )90 public void readConstructorParams( DataInput in ) throws IOException { 91 super.readConstructorParams( in ); 92 93 positions = new Point3f[ knots.length ]; 94 quats = new Quat4f[ knots.length ]; 95 scales = new float[ knots.length ]; 96 for(int i=0; i<positions.length; i++) { 97 positions[i] = control.readPoint3f( in ); 98 quats[i] = control.readQuat4f( in ); 99 scales[i] = in.readFloat(); 100 } 101 } 102 createNode( Class j3dClass )103 public SceneGraphObject createNode( Class j3dClass ) { 104 return createNode( j3dClass, new Class[] { javax.media.j3d.Alpha.class, 105 TransformGroup.class, 106 Transform3D.class, 107 knots.getClass(), 108 quats.getClass(), 109 positions.getClass(), 110 scales.getClass() }, 111 new Object[] { null, 112 null, 113 new Transform3D(), 114 knots, 115 quats, 116 positions, 117 scales } ); 118 119 } 120 createNode()121 protected javax.media.j3d.SceneGraphObject createNode() { 122 return new RotPosScalePathInterpolator( null, null, new Transform3D(), knots, quats, positions, scales ); 123 } 124 } 125