summaryrefslogtreecommitdiffstats
path: root/src/classes/share/com/sun/j3d/loaders/SceneBase.java
diff options
context:
space:
mode:
authorKevin Rushforth <[email protected]>2004-06-09 04:13:21 +0000
committerKevin Rushforth <[email protected]>2004-06-09 04:13:21 +0000
commit7fad83338964ecd32303d6e2737b19963492ecfe (patch)
tree886fd0b010966b11d6f25865715de4d5aa75cbb6 /src/classes/share/com/sun/j3d/loaders/SceneBase.java
parent4fc115fa7dfc9fe2d614a5e7d3a0db49431930cf (diff)
Initial creation of j3d-core-utils sources in CVS repository
git-svn-id: https://svn.java.net/svn/j3d-core-utils~svn/trunk@5 9497e636-51bd-65ba-982d-a4982e1767a5
Diffstat (limited to 'src/classes/share/com/sun/j3d/loaders/SceneBase.java')
-rw-r--r--src/classes/share/com/sun/j3d/loaders/SceneBase.java311
1 files changed, 311 insertions, 0 deletions
diff --git a/src/classes/share/com/sun/j3d/loaders/SceneBase.java b/src/classes/share/com/sun/j3d/loaders/SceneBase.java
new file mode 100644
index 0000000..05f6413
--- /dev/null
+++ b/src/classes/share/com/sun/j3d/loaders/SceneBase.java
@@ -0,0 +1,311 @@
+/*
+ * $RCSfile$
+ *
+ * Copyright (c) 2004 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$
+ * $Date$
+ * $State$
+ */
+
+package com.sun.j3d.loaders;
+
+import java.lang.Float;
+
+import java.util.Hashtable;
+import java.util.Vector;
+import java.util.Enumeration;
+
+import javax.media.j3d.Behavior;
+import javax.media.j3d.BranchGroup;
+import javax.media.j3d.TransformGroup;
+import javax.media.j3d.Light;
+import javax.media.j3d.Background;
+import javax.media.j3d.Fog;
+import javax.media.j3d.Sound;
+
+
+/**
+ * This class implements the Scene interface and extends it to incorporate
+ * utilities that could be used by loaders. There should be little need
+ * for future loaders to subclass this, or to implement Scene directly,
+ * as the functionality of a SceneBase is fairly straightforward. This
+ * class is responsible for both the storage and retrieval of data from
+ * the Scene. The storage methods (used only by Loader writers) are all
+ * of the add* routines. The retrieval methods (used primarily by Loader
+ * users) are all of the get* routines.
+ */
+public class SceneBase implements Scene {
+
+ BranchGroup sceneGroup = null;
+ BranchGroup behaviorGroup = null;
+ Hashtable namedObjects = new Hashtable();
+ String description = null;
+
+ Vector viewVector = new Vector();
+ Vector hfovVector = new Vector();
+ Vector behaviorVector = new Vector();
+ Vector lightVector = new Vector();
+ Vector fogVector = new Vector();
+ Vector backgroundVector = new Vector();
+ Vector soundVector = new Vector();
+
+ // Add methods
+
+ /**
+ * Sets the sceneGroup to be the group that is passed in.
+ */
+ public void setSceneGroup(BranchGroup scene) {
+ sceneGroup = scene;
+ }
+
+ /**
+ * Adds the given group to the list of view groups.
+ */
+ public void addViewGroup(TransformGroup tg) {
+ viewVector.addElement(tg);
+ }
+
+ /**
+ * Adds the given field of view value to the list of field of view values.
+ */
+ public void addHorizontalFOV(float hfov) {
+ hfovVector.addElement(new Float(hfov));
+ }
+
+ /**
+ * Adds the given behavior to a list of behaviors
+ */
+ public void addBehaviorNode(Behavior b) {
+ behaviorVector.addElement(b);
+ }
+
+ /**
+ * Adds the given Light node to the list of lights.
+ */
+ public void addLightNode(Light light) {
+ lightVector.addElement(light);
+ }
+
+ /**
+ * Adds the given Background node to the list of backgrounds.
+ */
+ public void addBackgroundNode(Background background) {
+ backgroundVector.addElement(background);
+ }
+
+ /**
+ * Adds the given Sound node to the list of sounds.
+ */
+ public void addSoundNode(Sound sound) {
+ soundVector.addElement(sound);
+ }
+
+ /**
+ * Adds the given Fog node to the list of fog nodes.
+ */
+ public void addFogNode(Fog fog) {
+ fogVector.addElement(fog);
+ }
+
+ /**
+ * Sets the text description of the scene to the passed in String.
+ */
+ public void addDescription(String descriptionString) {
+ description = descriptionString;
+ }
+
+ /**
+ * Adds the given String/Object pair to the table of named objects.
+ */
+ public void addNamedObject(String name, Object object) {
+ if (namedObjects.get(name) == null)
+ namedObjects.put(name, object);
+ else {
+ // key already exists - append a unique integer to end of name
+ int nameIndex = 1;
+ boolean done = false;
+ while (!done) {
+ // Iterate starting from "[1]" until we find a unique key
+ String tempName = name + "[" + nameIndex + "]";
+ if (namedObjects.get(tempName) == null) {
+ namedObjects.put(tempName, object);
+ done = true;
+ }
+ nameIndex++;
+ }
+ }
+ }
+
+ /**
+ * This method returns the BranchGroup containing the overall
+ * scene loaded by the loader.
+ */
+ public BranchGroup getSceneGroup() {
+ return sceneGroup;
+ }
+
+
+ /**
+ * This method returns an array of all View Groups defined in the file.
+ * A View Group is defined as a TransformGroup which contains a
+ * ViewPlatform. The TransformGroup holds the position/orientation
+ * information for the given ViewPlatform and the ViewPlatform
+ * holds an view-specific information, such as Field of View.
+ */
+ public TransformGroup[] getViewGroups() {
+ if (viewVector.isEmpty())
+ return null;
+ TransformGroup[] viewGroups = new TransformGroup[viewVector.size()];
+ viewVector.copyInto(viewGroups);
+ return viewGroups;
+ }
+
+ /**
+ * This method returns an array of floats that contains the horizontal
+ * field of view values for each corresponding entry in the array of
+ * view groups returned by the method getViewGroups.
+ */
+ public float[] getHorizontalFOVs() {
+ if (hfovVector.isEmpty())
+ return null;
+
+ int arraySize = hfovVector.size();
+ float[] hfovs = new float[arraySize];
+ Float[] tmpFovs = new Float[hfovVector.size()];
+ hfovVector.copyInto(tmpFovs);
+
+ // copy to array of floats and delete Floats
+ for (int i=0; i<arraySize; i++) {
+ hfovs[i] = tmpFovs[i].floatValue();
+ tmpFovs[i] = null;
+ }
+ return hfovs;
+ }
+
+
+ /**
+ * This method returns an array of all Lights defined in the file.
+ */
+ public Light[] getLightNodes() {
+ if (lightVector.isEmpty())
+ return null;
+ Light[] lightNodes = new Light[lightVector.size()];
+ lightVector.copyInto(lightNodes);
+ return lightNodes;
+ }
+
+
+ /**
+ * This method returns a Hashtable which contains a list of all named
+ * objects in the file and their associated scene graph objects. The
+ * naming scheme for file objects is file-type dependent, but may include
+ * such names as the DEF names of Vrml or filenames of subjects (as
+ * in Lightwave 3D).
+ */
+ public Hashtable getNamedObjects() {
+ return namedObjects;
+ }
+
+
+ /**
+ * This method returns an array of all Background nodes defined in the
+ * file.
+ */
+ public Background[] getBackgroundNodes() {
+ if (backgroundVector.isEmpty())
+ return null;
+ Background[] backgroundNodes = new Background[backgroundVector.size()];
+ backgroundVector.copyInto(backgroundNodes);
+ return backgroundNodes;
+ }
+
+
+ /**
+ * This method returns an array of all Fog nodes defined in the
+ * file.
+ */
+ public Fog[] getFogNodes() {
+ if (fogVector.isEmpty())
+ return null;
+ Fog[] fogNodes = new Fog[fogVector.size()];
+ fogVector.copyInto(fogNodes);
+ return fogNodes;
+ }
+
+
+ /**
+ * This method returns a group containing all of the Behavior nodes
+ * in the scene.
+ */
+ public Behavior[] getBehaviorNodes() {
+ if (behaviorVector.isEmpty())
+ return null;
+ Behavior[] behaviorNodes = new Behavior[behaviorVector.size()];
+ behaviorVector.copyInto(behaviorNodes);
+
+ return behaviorNodes;
+ }
+
+
+ /**
+ * This method returns an array of all of the Sound nodes defined
+ * in the file.
+ */
+ public Sound[] getSoundNodes() {
+ if (soundVector.isEmpty())
+ return null;
+ Sound[] soundNodes = new Sound[soundVector.size()];
+ soundVector.copyInto(soundNodes);
+ return soundNodes;
+ }
+
+
+ /**
+ * This method returns the text description of the file. If no
+ * such description exists, this method should return null.
+ */
+ public String getDescription() {
+ return description;
+ }
+
+}
+
+
+
+
+