2007/02/17.3 http://www.hypermultimedia.com/x3d/Quick/NodesIDL5diag.txt also see: http://www.web3d.org/x3d/specifications/ISO-IEC-19775-X3DAbstractSpecification_Revision1_to_Part1/Part01/concepts.html#f-Objecthierarchy Joe's Web3D X3D Node Descriptions Object hierarchy - HyperMultiMedia 19775Rev1 X3DField -+------------- X3DArrayField -+ +- SFBool +- MFBool +- SFColor +- MFColor +- SFColorRGBA +- MFColorRGBA +- SFDouble +- MFDouble +- SFFloat +- MFFloat +- SFImage +- MFImage +- SFInt32 +- MFInt32 +- SFMatrix3d +- MFMatrix3d +- SFMatrix3f +- MFMatrix3f +- SFMatrix4d +- MFMatrix4d +- SFMatrix4f +- MFMatrix4f +- SFNode +- MFNode +- SFRotation +- MFRotation +- SFString +- MFString +- SFTime +- MFTime +- SFVec2d +- MFVec2d +- SFVec2f +- MFVec2f +- SFVec3d +- MFVec3d +- SFVec3f +- MFVec3f +- SFVec4d +- MFVec4d +- SFVec4f +- MFVec4f X3DBoundedObject X3DFogObject X3DPickableObject X3DProgrammableShaderObject X3DMetadataObject X3DUrlObject X3DNode | +- Contact +- Contour2D +- EaseInEaseOut +- GeoOrigin +- LayerSet +- MetadataDouble (X3DMetadataObject)* +- MetadataFloat (X3DMetadataObject)* +- MetadataInteger (X3DMetadataObject)* +- MetadataSet (X3DMetadataObject)* +- MetadataString (X3DMetadataObject)* +- NurbsTextureCoordinate +- RigidBody +- ShaderPart (X3DUrlObject)* +- ShaderProgram (X3DUrlObject, X3DProgrammableShaderObject)* +- TextureProperties | +- X3DAppearanceNode -+- Appearance | +- X3DAppearanceChildNode -+- FillProperties | +- LineProperties | | | +- X3DMaterialNode -+- Material | | +- TwoSidedMaterial | | | +- X3DShaderNode -+- ComposedShader (X3DProgrammableShaderObject)* | | +- PackagedShader (X3DProgrammableShaderObject, X3DUrlObject)* | | +- ProgramShader | | | +- X3DTextureNode -+- MultiTexture | | | | | +- X3DEnvironmentTextureNode -+- ComposedCubeMapTexture | | | +- GeneratedCubeMapTexture | | | +- ImageCubeMapTexture (X3DUrlObject)* | | | | | +- X3DTexture2DNode -+- ImageTexture (X3DUrlObject)* | | | +- MovieTexture (X3DSoundSourceNode, X3DUrlObject)* | | | +- PixelTexture | | | | | +- X3DTexture3DNode -+- ComposedTexture3D | | +- ImageTexture3D (X3DUrlObject)* | | +- PixelTexture3D | | | +- X3DTextureTransformNode -+- MultiTextureTransform | +- TextureTransformMatrix3D | +- TextureTransform3D | +- TextureTransform | +- X3DFontStyleNode -+- FontStyle | +- ScreenFontStyle | +- X3DGeometryNode -+- Arc2D | +- ArcClose2D | +- Box | +- Circle2D | +- Cone | +- Cylinder | +- Disk2D | +- ElevationGrid | +- Extrusion | +- GeoElevationGrid | +- IndexedLineSet | +- LineSet | +- PointSet | +- Polyline2D | +- Polypoint2D | +- Rectangle2D | +- Sphere | +- Text | +- TriangleSet2D | | | +- X3DComposedGeometryNode -+- IndexedFaceSet | | +- IndexedTriangleFanSet | | +- IndexedTriangleSet | | +- IndexedTriangleStripSet | | +- IndexedQuadSet | | +- TriangleFanSet | | +- TriangleSet | | +- TriangleStripSet | | +- QuadSet | | | +- X3DParametricGeometryNode -+- NurbsCurve | +- NurbsSweptSurface | +- NurbsSwungSurface | | | +- X3DNurbsSurfaceGeometryNode -+- NurbsPatchSurface | +- NurbsTrimmedSurface | +- X3DGeometricPropertyNode -+- FogCoordinate | +- HAnimDisplacer | | | +- X3DColorNode -+- Color | | +- ColorRGBA | | | +- X3DCoordinateNode -+- Coordinate | | +- CoordinateDouble | | +- GeoCoordinate | | | +- X3DNormalNode -+- Normal | | | +- X3DTextureCoordinateNode -+- MultiTextureCoordinate | | +- TextureCoordinate | | +- TextureCoordinate3D | | +- TextureCoordinate4D | | +- TextureCoordinateGenerator | | | +- X3DVertexAttributeNode -+- FloatVertexAttribute | +- Matrix3VertexAttribute | +- Matrix4VertexAttribute | +- X3DLayerNode -+- Layer (X3DGroupingNode)* | +- LayoutLayer | +- X3DNBodyCollisionSpaceNode (X3DBoundedObject)* -+- CollisionSpace | +- X3DNurbsControlCurveNode -+- ContourPolyline2D | +- NurbsCurve2D | +- X3DParticleEmitterNode -+- ConeEmitter | +- ExplosionEmitter | +- PointEmitter | +- PolylineEmitter | +- SurfaceEmitter | +- VolumeEmitter | +- X3DParticlePhysicsModelNode -+- BoundedPhysicsModel | +- GravityPhysicsModel | +- WindPhysicsModel | +- X3DProtoInstance | +- X3DRigidJointNode -+- BallJoint | +- DoubleAxisHingeJoint | +- MotorJoint | +- SingleAxisHingeJoint | +- SliderJoint | +- UniversalJoint | +- X3DChildNode -+- BooleanFilter +- BooleanToggle +- ClipPlane +- CollisionCollection +- DISEntityManager +- GeoLOD (X3DBoundedObject)* +- HAnimHumanoid (X3DBoundedObject)* +- Inline (X3DUrlObject, X3DBoundedObject)* +- LocalFog (X3DFogObject)* +- NurbsOrientationInterpolator +- NurbsPositionInterpolator +- NurbsSet (X3DBoundedObject)* +- NurbsSurfaceInterpolator +- RigidBodyCollection +- StaticGroup (X3DBoundedObject)* | +- X3DBindableNode -+- Fog (X3DFogObject)* | +- GeoViewpoint | +- NavigationInfo | | | +- X3DBackgroundNode -+- Background | | +- TextureBackground | | | +- X3DViewpointNode -+- OrthoViewpoint | +- Viewpoint | +- ViewpointGroup | +- X3DFollowerNode -+- X3DChaserNode -+- OrientationChaser | | +- PositionChaser | | +- PositionChaser2D | | +- ScalerChaser | | | +- X3DDamperNode -+- ColorDamper | +- CoordinateDamper | +- OrientationDamper | +- PositionDamper | +- PositionDamper2D | +- TexCoordDamper | +- X3DGroupingNode (X3DBoundedObject)* -+- Anchor | +- Billboard | +- CADAssembly (X3DProductStructureChildNode)* | +- CADLayer | +- CADPart (X3DProductStructureChildNode)* | +- Collision (X3DSensorNode)* | +- EspduTransform (X3DSensorNode)* | +- GeoLocation | +- Group | +- HAnimJoint | +- HAnimSegment | +- HAnimSite | +- LayoutGroup | +- LOD | +- PickableGroup (X3DPickingNode)* | +- ScreenGroup | +- Switch | +- Transform | | | +- X3DViewportNode -+- Viewport | +- X3DInfoNode -+- DISEntityTypeMapping | +- GeoMetadata | +- WorldInfo | +- X3DInterpolatorNode -+- ColorInterpolator | +- CoordinateInterpolator | +- CoordinateInterpolator2D | +- GeoPositionInterpolator | +- NormalInterpolator | +- OrientationInterpolator | +- PositionInterpolator | +- PositionInterpolator2D | +- ScalarInterpolator | +- SplinePositionInterpolator | +- SplinePositionInterpolator2D | +- SplineScalarInterpolator | +- SquadOrientationInterpolator | +- X3DLayoutNode -+- Layout | +- X3DLightNode -+- DirectionalLight | +- PointLight | +- SpotLight | +- X3DNBodyCollidableNode (X3DBoundedObject)* -+- CollidableOffset | +- CollidableShape | +- X3DProductStructureChildNode -+- CADAssembly (X3DGroupingNode, X3DBoundedObject)* | +- CADFace (X3DBoundedObject)* | +- CADPart (X3DGroupingNode, X3DBoundedObject)* | +- X3DScriptNode (X3DUrlObject)* -+- Script | +- X3DSensorNode -+- Collision (X3DGroupingNode)* | +- CollisionSensor | +- EspduTransform (X3DGroupingNode)* | +- ReceiverPdu (X3DBoundedObject)* | +- SignalPdu (X3DBoundedObject)* | +- TimeSensor (X3DTimeDependentNode)* | +- TransmitterPdu (X3DBoundedObject)* | | | +- X3DEnvironmentalSensorNode -+- GeoProximitySensor | | +- ProximitySensor | | +- TransformSensor | | +- VisibilitySensor | | | +- X3DKeyDeviceSensorNode -+- KeySensor | | +- StringSensor | | | +- X3DNetworkSensorNode -+- LoadSensor | | | +- X3DPickingNode -+- LinePicker | | +- PointPicker | | +- PrimitivePicker | | +- VolumePicker | | | +- X3DPointingDeviceSensorNode -+- X3DDragSensorNode -+- CylinderSensor | | +- PlaneSensor | | +- SphereSensor | | | +- X3DTouchSensorNode -+- GeoTouchSensor | +- TouchSensor +- X3DSequencerNode -+- BooleanSequencer | +- IntegerSequencer | +- X3DShapeNode (X3DBoundedObject)* -+- ParticleSystem | +- Shape | +- X3DSoundNode -+- Sound | +- X3DTimeDependentNode -+- TimeSensor (X3DSensorNode)* | | | +- X3DSoundSourceNode -+- AudioClip (X3DUrlObject) * | +- MovieTexture (X3DTexture2DNode, X3DUrlObject)* | +- X3DTriggerNode -+- BooleanTrigger +- IntegerTrigger +- TimeTrigger * = Derived from multiple interfaces The object hierarchy defines both abstract interfaces and concrete node types. Abstract interfaces define functionality that is inherited by other interfaces and/or nodes, but are never instantiated in the scene graph as objects. Concrete node types derive from one or more abstract interfaces and may be instantiated in the scene graph. Thus, the live scene graph consists only of instances of concrete node types. The objective of 'the diagram' is to produce an agreeable, componentized, extensible model of the ancestry and inheritance for each node/field element/attribute in VRML97 and forward to X3D. This figure, always based more closely on VRML97, emerged to become the standards-track keystrokes after side-by-sides with 'Blendo' and others. Thanks to Chris Marrin and his early work in support of VRML97 for starting this 'graphical' presentation of the object hierarchy, to Dick Puk for comments and review and for incorporating the concept into the initial official VRML200X draft and forward into the current X3D standard, and for development and leadership from Don Brutzman, Rick Goldberg, Nick Polys, Alan Hudson, Justin Couch, Tony Parisi, Holger Grahn, Mufti, and practically everyone who ever read the thing and, of course, me for working through the candidate VRML=>X3D versions. The diagram is a way to show unique attributes and methods of a concrete node as well as how it inherits common attributes and methods from abstract nodes that construct the path from the root to the concrete. 1. abstract nodes are never instantiated. 2. empty abstract nodes may indicate weakness of the hierarchy. 3. no abstract nodes may indicate weakness and lack of intended extensibility in the hierarchy. 4. you wish to identify unique attributes and methods in the concrete node. 5. you wish to identify common and inherited attributes and methods as close to the hierarchy root as practical. 6. abstract nodes can produce concrete or abstract nodes. 7. concrete nodes never derive from concrete nodes. 8. identify opportunities for multiple inheritance as close to the hierarchy root as possible. Thanks to All and Best Regards, Joe