001: /*
002: * $RCSfile: BaseNode.java,v $
003: *
004: * @(#)BaseNode.java 1.21 98/11/05 20:34:02
005: *
006: * Copyright (c) 1996-1998 Sun Microsystems, Inc. All Rights Reserved.
007: *
008: * Sun grants you ("Licensee") a non-exclusive, royalty free, license to use,
009: * modify and redistribute this software in source and binary code form,
010: * provided that i) this copyright notice and license appear on all copies of
011: * the software; and ii) Licensee does not utilize the software in a manner
012: * which is disparaging to Sun.
013: *
014: * This software is provided "AS IS," without a warranty of any kind. ALL
015: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
016: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
017: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE
018: * LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
019: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS
020: * LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
021: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
022: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
023: * OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
024: * POSSIBILITY OF SUCH DAMAGES.
025: *
026: * This software is not designed or intended for use in on-line control of
027: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
028: * the design, construction, operation or maintenance of any nuclear
029: * facility. Licensee represents and warrants that it will not use or
030: * redistribute the Software for such purposes.
031: *
032: * $Revision: 1.2 $
033: * $Date: 2005/02/03 23:06:52 $
034: * $State: Exp $
035: */
036: /*
037: * @Author: Rick Goldberg
038: * @Author: Doug Gehringer
039: *
040: */
041: package org.jdesktop.j3d.loaders.vrml97.impl;
042:
043: /** Description of the Class */
044: public abstract class BaseNode {
045: String defName;
046: Browser browser;
047: Loader loader;
048: boolean implReady;
049: javax.media.j3d.Node implNode;
050: BaseNode parent;
051:
052: /**
053: *Constructor for the BaseNode object
054: *
055: *@param browser Description of the Parameter
056: */
057: public BaseNode(Browser browser) {
058: this .browser = browser;
059: }
060:
061: /**
062: *Constructor for the BaseNode object
063: *
064: *@param loader Description of the Parameter
065: */
066: BaseNode(Loader loader) {
067: this .loader = loader;
068: this .browser = loader.browser;
069: //System.out.println("Node " + this + " created");
070: }
071:
072: /**
073: * Gets the type attribute of the BaseNode object
074: *
075: *@return The type value
076: */
077: public abstract String getType();
078:
079: /**
080: * Description of the Method
081: *
082: *@return Description of the Return Value
083: */
084: public abstract Object clone();
085:
086: /**
087: * Description of the Method
088: *
089: *@param s Description of the Parameter
090: *@param time Description of the Parameter
091: */
092: public abstract void notifyMethod(String s, double time);
093:
094: /**
095: * Description of the Method
096: *
097: *@return Description of the Return Value
098: */
099: public abstract vrml.BaseNode wrap();
100:
101: /**
102: * Gets the field attribute of the BaseNode object
103: *
104: *@param fieldName Description of the Parameter
105: *@return The field value
106: */
107: public abstract Field getField(String fieldName);
108:
109: /**
110: * Gets the browser attribute of the BaseNode object
111: *
112: *@return The browser value
113: */
114: public Browser getBrowser() {
115: return browser;
116: }
117:
118: /** Description of the Method */
119: void initImpl() {
120: if (loader.debug) {
121: System.out.println("BaseNode.initImpl() called on node "
122: + toStringId());
123: }
124: implNode = null;
125: implReady = true;
126: }
127:
128: // called by parent after node is added to parent
129: /**
130: * Description of the Method
131: *
132: *@param parentImpl Description of the Parameter
133: */
134: void updateParent(javax.media.j3d.Node parentImpl) {
135: }
136:
137: /**
138: * Gets the implNode attribute of the BaseNode object
139: *
140: *@return The implNode value
141: */
142: public javax.media.j3d.Node getImplNode() {
143: return implNode;
144: }
145:
146: /**
147: * Description of the Method
148: *
149: *@param defName Description of the Parameter
150: */
151: void define(String defName) {
152: this .defName = defName;
153: //System.out.println("Node " + this + " def'd to name " + defName);
154: }
155:
156: /**
157: * Description of the Method
158: *
159: *@param scene Description of the Parameter
160: */
161: void registerUse(Scene scene) {
162: }
163:
164: // subclasses which have triangles should define
165: /**
166: * Gets the numTris attribute of the BaseNode object
167: *
168: *@return The numTris value
169: */
170: public int getNumTris() {
171: return 0;
172: }
173:
174: // subclasses should implement toStringBody() not toString()
175: /**
176: * Description of the Method
177: *
178: *@return Description of the Return Value
179: */
180: public final String toString() {
181: String retval = "";
182: if (defName != null) {
183: retval += "DEF " + defName + " ";
184: }
185: retval += toStringBody();
186: return retval;
187: }
188:
189: // use instead of toString() to get object id instead of VRML source
190: /**
191: * Description of the Method
192: *
193: *@return Description of the Return Value
194: */
195: public String toStringId() {
196: return this .getClass().getName() + "@"
197: + Integer.toHexString(this .hashCode());
198: }
199:
200: // this should be overridden by a method which outputs the VRML for the
201: // node
202: /**
203: * Description of the Method
204: *
205: *@return Description of the Return Value
206: */
207: String toStringBody() {
208: return toStringId();
209: }
210: }
|