All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.media.j3d.NodeReferenceTable Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 1997-2008 Sun Microsystems, Inc.  All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.  Sun designates this
 * particular file as subject to the "Classpath" exception as provided
 * by Sun in the LICENSE file that accompanied this code.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
 * CA 95054 USA or visit www.sun.com if you need additional information or
 * have any questions.
 *
 */

package javax.media.j3d;

import java.util.Hashtable;

/**
 * The NodeReferenceTable object is used by a leaf node's
 * updateNodeReferences method called by the
 * cloneTree method.
 * The NodeReferenceTable maps nodes from the original subgraph
 * to the new nodes in the cloned subgraph. This information
 * can then be used to update any cloned leaf node references
 * to reference nodes in the cloned subgraph.
 * 

* During a cloneTree call, after all nodes have been duplicated, * each SceneGraphObject's updateNodeReferences method is called. * This method takes a NodeReferenceTable object as a parameter. The * SceneGraphObject's updateNodeReferences method can then use the * getNewObjectReference method from this object to get updated * references to objects that have been duplicated in the new cloneTree * sub-graph. If a match is found, a * reference to the corresponding SceneGraphObject in the newly cloned sub-graph * is returned. If no corresponding reference is found, either a * DanglingReferenceException is thrown by the cloneTree * method or a reference to the original * SceneGraphObject is returned depending on the value of the * allowDanglingReferences parameter passed in the * cloneTree call. * @see SceneGraphObject#updateNodeReferences * @see Node#cloneTree * @see DanglingReferenceException */ public class NodeReferenceTable extends Object { Hashtable objectHashtable; boolean allowDanglingReferences; /** * Constructs an empty NodeReferenceTable. * @since Java 3D 1.2 */ public NodeReferenceTable() { } // Constructor - this is NOT public! NodeReferenceTable(boolean allowDanglingReferences, Hashtable objectHashtable) { set(allowDanglingReferences, objectHashtable); } void set(boolean allowDanglingReferences, Hashtable objectHashtable) { this.objectHashtable = objectHashtable; this.allowDanglingReferences = allowDanglingReferences; } /** * This method is used in conjunction with the cloneTree * method. It can be used by the updateNodeReferences * method to see if a SceneGraphObject that is being referenced has been duplicated * in the new cloneTree sub-graph. *

* A SceneGraphObject's updateNodeReferences method would use this * method by calling it with the reference to the old (existed before * the cloneTree operation) object. If the object has been duplicated * in the cloneTree sub-graph, the corresponding object in the cloned * sub-graph is returned. If no corresponding reference is found, either * a DanglingReferenceException is thrown or a reference to the original * SceneGraphObject is returned depending on the value of the * allowDanglingReferences parameter passed in the * cloneTree call. * * @param oldReference the reference to the object in * the original sub-graph. * * @return A reference to the corresponding object in the cloned * sub-graph. If no corresponding object exists, either a * DanglingReferenceException will be generated by the * cloneTree method or a reference to the original object * is returned depending on the value of the * allowDanglingReferences parameter passed in the * cloneTree call. * * @see SceneGraphObject#updateNodeReferences * @see Node#cloneTree * @see DanglingReferenceException */ public final SceneGraphObject getNewObjectReference(SceneGraphObject oldReference) { // look up original SceneGraphObject in hash table SceneGraphObject newObject = (SceneGraphObject)objectHashtable.get(oldReference); if (newObject != null) { // found new reference return newObject; } // dangling reference found! if (allowDanglingReferences == true) { return oldReference; } // dangling references not allowed throw new DanglingReferenceException(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy