⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sequencereader.java

📁 JAVA3D矩陈的相关类
💻 JAVA
字号:
/* * $RCSfile: SequenceReader.java,v $ * * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * - Redistribution of source code must retain the above copyright *   notice, this list of conditions and the following disclaimer. * * - Redistribution in binary form must reproduce the above copyright *   notice, this list of conditions and the following disclaimer in *   the documentation and/or other materials provided with the *   distribution. * * Neither the name of Sun Microsystems, Inc. or the names of * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * This software is provided "AS IS," without a warranty of any * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * * You acknowledge that this software is not designed, licensed or * intended for use in the design, construction, operation or * maintenance of any nuclear facility. * * $Revision: 1.4 $ * $Date: 2007/02/09 17:20:09 $ * $State: Exp $ */package com.sun.j3d.loaders.lw3d;import java.awt.Component;import java.util.Enumeration;import java.util.Hashtable;import java.util.Vector;import java.io.BufferedReader;import java.io.File;import java.io.FileReader; import java.io.StreamTokenizer; import java.io.IOException; import javax.media.j3d.*; import javax.vecmath.Point3d;import com.sun.j3d.loaders.IncorrectFormatException;import com.sun.j3d.loaders.ParsingErrorException;import java.io.FileNotFoundException;/** * This class was created to read a special file format devised for * JavaOne '98 that allowed Tloop functionality inside of Lightwave. It * would be best to find a more standard solution, including using some * plug-in for lw3d that I've heard of that allows artists to automatically * save out the geometry for a file at every frame. */class SequenceReader {    Vector         sequenceLines;    float          totalTime;    int            totalFrames;	    TransformGroup objectTransform;    Vector         behaviorVector;    /**     * Constructor: parses a sequence file and creates a new SequenceLine     * object to read in every line of the file     */    SequenceReader(String filename, float time, int frames)	throws ParsingErrorException {	totalTime = time;	totalFrames = frames;	sequenceLines = new Vector();	try {	    // System.out.println("reading sequence from " + filename);	    StreamTokenizer st = new StreamTokenizer(new BufferedReader(		    new FileReader(filename)));	    st.wordChars('_', '_');	    st.wordChars('/', '/');	    int type = st.nextToken();	    while (st.ttype != StreamTokenizer.TT_EOF) {		sequenceLines.addElement(new SequenceLine(st,							  totalTime,							  totalFrames));		st.nextToken();	    }	}	catch (IOException e) {	    throw new ParsingErrorException(e.getMessage());	}    }	/**	* Creates Java3D objects from the data defined in the sequence	* file.  Calls each sequenceLine object to create its own 	* j3d objects, then puts all of those objects in a single Switch	* node.  Finally, it creates a SwitchPathInterpolator object which	* handles switching between each object/s defined by each line	*/    void createJava3dObjects(int debugVals, int loadBehaviors)	throws FileNotFoundException {	objectTransform = new TransformGroup();        behaviorVector = new Vector();	Enumeration e = sequenceLines.elements();	Switch switchNode = new Switch();	switchNode.setCapability(Switch.ALLOW_SWITCH_READ);	switchNode.setCapability(Switch.ALLOW_SWITCH_WRITE);	objectTransform.addChild(switchNode);	while (e.hasMoreElements()) {	    SequenceLine line = (SequenceLine)e.nextElement();	    line.createJava3dObjects(debugVals, loadBehaviors);	    if (line.getGeometry() != null)	      switchNode.addChild(line.getGeometry());	      //objectTransform.addChild(line.getGeometry());	      if (line.getBehavior() != null) {                behaviorVector.addElement(line.getBehavior());	    }	}	float knots[] = new float[sequenceLines.size() + 1];	for (int i = 0; i < knots.length-1; ++i) {	    SequenceLine sl = (SequenceLine)sequenceLines.elementAt(i);	    knots[i] = (float)sl.startFrame/(float)totalFrames;	}	knots[knots.length-1] = 1.0f;	Alpha theAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE,		                    0, 0, (long)(1000f * totalTime), 0,		                    0, 0, 0, 0);		SwitchPathInterpolator switchPath =	    new SwitchPathInterpolator(theAlpha,				       knots,				       switchNode);	BoundingSphere bounds =	    new BoundingSphere(new Point3d(0.0,0.0,0.0), 1000000.0);	switchPath.setSchedulingBounds(bounds);        switchNode.addChild(switchPath);        behaviorVector.addElement(switchPath);    }    TransformGroup getObjectNode() {	return objectTransform;    }    Vector getObjectBehaviors() {	return behaviorVector;    }        void printLines() {	Enumeration e = sequenceLines.elements();	while (e.hasMoreElements()) {	    SequenceLine line = (SequenceLine)e.nextElement();	}    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -