001: /*
002: * $RCSfile: BehaviorState.java,v $
003: *
004: * Copyright (c) 2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * - Redistribution of source code must retain the above copyright
011: * notice, this list of conditions and the following disclaimer.
012: *
013: * - Redistribution in binary form must reproduce the above copyright
014: * notice, this list of conditions and the following disclaimer in
015: * the documentation and/or other materials provided with the
016: * distribution.
017: *
018: * Neither the name of Sun Microsystems, Inc. or the names of
019: * contributors may be used to endorse or promote products derived
020: * from this software without specific prior written permission.
021: *
022: * This software is provided "AS IS," without a warranty of any
023: * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
024: * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
025: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
026: * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
027: * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
028: * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
029: * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
030: * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
031: * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
032: * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
033: * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
034: * POSSIBILITY OF SUCH DAMAGES.
035: *
036: * You acknowledge that this software is not designed, licensed or
037: * intended for use in the design, construction, operation or
038: * maintenance of any nuclear facility.
039: *
040: * $Revision: 1.4 $
041: * $Date: 2007/02/09 17:20:32 $
042: * $State: Exp $
043: */
044:
045: package com.sun.j3d.utils.scenegraph.io.state.javax.media.j3d;
046:
047: import java.io.IOException;
048: import java.io.DataInput;
049: import java.io.DataOutput;
050: import javax.media.j3d.Behavior;
051: import javax.media.j3d.SceneGraphObject;
052: import javax.media.j3d.BoundingLeaf;
053: import com.sun.j3d.utils.scenegraph.io.retained.Controller;
054: import com.sun.j3d.utils.scenegraph.io.retained.SymbolTableData;
055:
056: public class BehaviorState extends LeafState {
057:
058: private int boundingLeaf;
059:
060: public BehaviorState(SymbolTableData symbol, Controller control) {
061: super (symbol, control);
062:
063: }
064:
065: protected SceneGraphObject createNode(String className) {
066: SceneGraphObject ret;
067: try {
068: ret = super .createNode(className);
069: } catch (com.sun.j3d.utils.scenegraph.io.retained.SGIORuntimeException e) {
070: ret = new com.sun.j3d.utils.scenegraph.io.UnresolvedBehavior();
071: }
072:
073: return ret;
074: }
075:
076: public void writeObject(DataOutput out) throws IOException {
077: super .writeObject(out);
078: Behavior beh = (Behavior) node;
079:
080: out.writeBoolean(beh.getEnable());
081: out.writeInt(control.getSymbolTable().addReference(
082: beh.getSchedulingBoundingLeaf()));
083:
084: control.writeBounds(out, beh.getSchedulingBounds());
085:
086: // We had a lot of dicussion about this - may want to expand support
087: // in future versions, but for now just save and restore scheduling
088: // interval
089: out.writeInt(beh.getSchedulingInterval());
090: }
091:
092: public void readObject(DataInput in) throws IOException {
093: super .readObject(in);
094: Behavior beh = (Behavior) node;
095:
096: beh.setEnable(in.readBoolean());
097: boundingLeaf = in.readInt();
098: beh.setSchedulingBounds(control.readBounds(in));
099: beh.setSchedulingInterval(in.readInt());
100: }
101:
102: public void buildGraph() {
103: ((Behavior) node)
104: .setSchedulingBoundingLeaf((BoundingLeaf) control
105: .getSymbolTable().getJ3dNode(boundingLeaf));
106: super .buildGraph(); // Must be last call in method
107: }
108:
109: }
|