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

📄 extensibility.html

📁 这是一个JAVA的代码
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><HTML><HEAD>	<META HTTP-EQUIV="CONTENT-TYPE" CONTENT="text/html; charset=iso-8859-1">	<TITLE>Java 3D scenegraph.io Extensibility</TITLE></HEAD><BODY BGCOLOR="#ffffff"><h1>Using your own Classes with scenegraph.io</h1><P>The scenegraph.io APIs will handle the IO for all the core Java3DSceneGraphObjects. However, if you create a subclass of one of theseobjects and add it to your Scene Graph, the IO system, by default,will not store any state information specific to your class.</P><P>The default behavior when an unrecognized SceneGraphObject classis encountered is to traverse up the superclasses of the object untila recognized Java3D class is located. The data structures for thisclass are then used for IO. The system does store the class name ofthe original object.<P>For example:<pre><font size=-1>public class MyBranchGroup extends javax.media.j3d.BranchGroup {    private int myData;    ....}</font></pre><P>When the Scene Graph is written to a file and this node isencountered, the superclass javax.media.j3d.BranchGroup will be usedto store all the state for the object so any children ofMyBranchGroup, the capabilities, etc. will be stored, but myData willbe lost. When the scene graph is loaded, MyBranchGroup will beinstantiated and will be populated with all the state fromBranchGroup but myData will have been lost.</P><P>To overcome this, the scenegraph.io API provides an interface foryou to implement in your own classes that provides the opportunityfor you to save the state of your classes during the IO processes.This is the SceneGraphIO interface.</P><P>When the scenegraph is saved, the methods of SceneGraphIO arecalled in this order </P><OL>	<LI><P>createSceneGraphObjectReferences</P>	<LI><P>saveChildren</P>	<LI><P>writeSceneGraphObject</P></OL><P>During the load cycle the method call order is</P><OL>	<LI><P>Instantiate Object using default constructor</P>	<LI><P>Populate object with state from superclasses</P>	<LI><P>readSceneGraphObject</P>	<LI><P>restoreSceneGraphObjectReferences</P></OL><P>Within each method you need to perform the following actions:<UL>	<LI><P><b>createSceneGraphObjectReferences</b> If your object has	references to other SceneGraphObjects then you need to obtain an	object reference (int) for each reference using the	SceneGraphReferenceControl object passed as a parameter to this	method. If you don't have references to other SceneGraphObjects then	no action is required.</P>	<LI><P><b>saveChildren</b> If your object is a subclass of Group and you	want the scenegraph.io package to save the children then this must	return true. If it returns false, the object will be saved but not	its children.</P>	<LI><P><b>writeSceneGraphObject</b> In this method you must write all the	state information for your class, including the object references	obtained in createSceneGraphObjectReferences, to the DataOutput	stream passed into this method.</P>	<LI><P><b>readSceneGraphObject</b> By the time this method is called your	class has been instantiated and the state information in the Java3D	superclass will have been loaded. You should load all the state	information you saved for your class.</P>	<LI><P><b>restoreSceneGraphObjectReferences</b> is called once all the	SceneGraph objects have been loaded and allows you to restore the	references to the other SceneGraph objects.</P></UL><P>Here are some examples.  Only the parts of the source pertaining toIO are show....</P><h2>Behavior Example</h2><pre><blockquote><font size=-1>public class BehaviorIO extends javax.media.j3d.Behavior implements SceneGraphIO    private TransformGroup target;   // The TG on which this behavior acts    private int targetRef;  // Object Reference for target    public void createSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) {        targetRef = ref.addReference( target );    }    public void restoreSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) {        target = (TransformGroup)ref.resolveReference( targetRef );    }    public void writeSceneGraphObject( java.io.DataOutput out ) throws IOException {        out.writeInt( targetRef );    }    public void readSceneGraphObject( java.io.DataInput in ) throws IOException {	targetRef = in.readInt();    }    // This has no effect as this is not a subclass of Group    public boolean saveChildren() {        return true;    }</font></blockquote></pre><h2>`BlackBox' Group Example</h2>This example is a Group node that creates its subgraph duringits instantiation.  An example where you might use this is torepresent some geometry that is loaded from an external file formatsuch a OpenFLT.<blockquote><pre><font size=-1>public class House extends Group implements SceneGraphIO {    public House() {        super();        this.addChild( OpenFlightLoader.load( &quot;/dir/house.flt&quot; );    }    public void createSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) {        // No references    }    public void restoreSceneGraphObjectReferences( SceneGraphObjectReferenceControl ref ) {        // No references    }    public void writeSceneGraphObject( java.io.DataOutput out ) throws IOException {        // No local state    }    public void readSceneGraphObject( java.io.DataInput in ) throws IOException {        // No local state    }    public boolean saveChildren() {        // Don't save the children as they will be restored by the openflightloader        return false;    }</font></blockquote></pre></BODY></HTML>

⌨️ 快捷键说明

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