Package com.jme3.scene
Class Node
java.lang.Object
com.jme3.scene.Spatial
com.jme3.scene.Node
- All Implemented Interfaces:
HasLocalTransform
,CloneableSmartAsset
,Collidable
,Savable
,JmeCloneable
,Cloneable
- Direct Known Subclasses:
ArmatureDebugger
,ArmatureNode
,AssetLinkNode
,AudioNode
,BitmapText
,CameraNode
,GeometryGroupNode
,LightNode
,SkeletonDebugger
,StatsView
,TerrainQuad
Node
defines an internal node of a scene graph. The internal
node maintains a collection of children and handles merging said children
into a single bound to allow for very fast culling of multiple nodes. Node
allows for any number of children to be attached.-
Nested Class Summary
Nested classes/interfaces inherited from class com.jme3.scene.Spatial
Spatial.BatchHint, Spatial.CullHint, Spatial.DFSMode
-
Field Summary
Fields inherited from class com.jme3.scene.Spatial
batchHint, controls, cullHint, frustrumIntersects, key, localLights, localOverrides, localTransform, name, parent, queueBucket, queueDistance, refreshFlags, RF_BOUND, RF_CHILD_LIGHTLIST, RF_LIGHTLIST, RF_MATPARAM_OVERRIDE, RF_TRANSFORM, shadowMode, userData, worldBound, worldLights, worldOverrides, worldTransform
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionint
attachChild
(Spatial child) attachChild
attaches a child to this node.int
attachChildAt
(Spatial child, int index) attachChildAt
attaches a child to this node at an index.protected void
breadthFirstTraversal
(SceneGraphVisitor visitor, Queue<Spatial> queue) clone
(boolean cloneMaterials) void
cloneFields
(Cloner cloner, Object original) Called internally by com.jme3.util.clone.Cloner.int
collideWith
(Collidable other, CollisionResults results) Check collision with another Collidable.void
depthFirstTraversal
(SceneGraphVisitor visitor, Spatial.DFSMode mode) Visit each scene graph element ordered by DFS.descendantMatches
(Class<T> spatialSubclass) Convenience wrapper.descendantMatches
(Class<T> spatialSubclass, String nameRegex) Returns flat list of Spatials implementing the specified class AND with name matching the specified pattern.descendantMatches
(String nameRegex) Convenience wrapper.void
detachAllChildren
removes all children attached to this node.int
detachChild
(Spatial child) detachChild
removes a given child from the node's list.detachChildAt
(int index) detachChildAt
removes a child at a given index.int
detachChildNamed
(String childName) detachChild
removes a given child from the node's list.getChild
(int i) getChild
returns a child at a given index.getChild
returns the first child found with exactly the given name (case-sensitive).int
getChildIndex
(Spatial sp) getChildIndex
returns the index of the given spatial in this node's list of children.Returns all children to this node.int
getQuantity
returns the number of children this node maintains.int
getTriangleCount
returns the number of triangles contained in all sub-branches of this node that contain geometry.int
getVertexCount
returns the number of vertices contained in all sub-branches of this node that contain geometry.boolean
determines if the provided Spatial is contained in the children list of this node.void
read
(JmeImporter importer) protected void
void
setLodLevel
(int lod) Sets the level of detail to use when rendering this Spatial, this call propagates to all geometries under this Spatial.void
setMaterial
(Material mat) Applies the given material to the Spatial, this will propagate the material down to the geometries in the scene graph.protected void
void
setModelBound
(BoundingVolume modelBound) setModelBound
sets the bounding object for this Spatial.protected void
Called byattachChild(Spatial)
anddetachChild(Spatial)
- don't call directly.protected void
Indicate that the transform of this spatial has changed and that a refresh is required.void
swapChildren
(int index1, int index2) More efficient than e.g.void
updateGeometricState
updates the light list, computes the world transforms, and computes the world bounds for this Spatial.void
updateLogicalState
(float tpf) updateLogicalState
calls theupdate()
method for all controls attached to this Spatial.void
updateModelBound
recalculates the bounding object for this Spatial.protected void
Should be overridden by Node and Geometry.void
write
(JmeExporter e) Methods inherited from class com.jme3.scene.Spatial
addControl, addControlAt, addLight, addMatParamOverride, breadthFirstTraversal, center, checkCulling, clearMatParamOverrides, clone, depthFirstTraversal, forceRefresh, getBatchHint, getControl, getControl, getCullHint, getKey, getLastFrustumIntersection, getLocalBatchHint, getLocalCullHint, getLocalLightList, getLocalMatParamOverrides, getLocalQueueBucket, getLocalRotation, getLocalScale, getLocalShadowMode, getLocalToWorldMatrix, getLocalTransform, getLocalTranslation, getName, getNumControls, getParent, getQueueBucket, getShadowMode, getUserData, getUserDataKeys, getWorldBound, getWorldLightList, getWorldMatParamOverrides, getWorldRotation, getWorldScale, getWorldTransform, getWorldTranslation, hasAncestor, jmeClone, localToWorld, lookAt, matches, move, move, oldClone, removeControl, removeControl, removeFromParent, removeLight, removeMatParamOverride, rotate, rotate, rotateUpTo, runControlRender, scale, scale, setBatchHint, setBoundRefresh, setCullHint, setKey, setLastFrustumIntersection, setLocalRotation, setLocalRotation, setLocalScale, setLocalScale, setLocalScale, setLocalTransform, setLocalTranslation, setLocalTranslation, setName, setQueueBucket, setRequiresUpdates, setShadowMode, setUserData, toString, updateMatParamOverrides, updateWorldLightList, updateWorldTransforms, worldToLocal
-
Field Details
-
children
This node's children.
-
-
Constructor Details
-
Node
public Node()Instantiate aNode
with no name, no parent, and no children. -
Node
Constructor instantiates a newNode
with a default empty list for containing children.- Parameters:
name
- the name of the scene element
-
-
Method Details
-
getQuantity
public int getQuantity()getQuantity
returns the number of children this node maintains.- Returns:
- the number of children this node maintains.
-
setTransformRefresh
protected void setTransformRefresh()Description copied from class:Spatial
Indicate that the transform of this spatial has changed and that a refresh is required.- Overrides:
setTransformRefresh
in classSpatial
-
setLightListRefresh
protected void setLightListRefresh()- Overrides:
setLightListRefresh
in classSpatial
-
setMatParamOverrideRefresh
protected void setMatParamOverrideRefresh()- Overrides:
setMatParamOverrideRefresh
in classSpatial
-
updateWorldBound
protected void updateWorldBound()Description copied from class:Spatial
Should be overridden by Node and Geometry.- Overrides:
updateWorldBound
in classSpatial
-
setParent
Description copied from class:Spatial
Called byattachChild(Spatial)
anddetachChild(Spatial)
- don't call directly.setParent
sets the parent of this node. -
updateLogicalState
public void updateLogicalState(float tpf) Description copied from class:Spatial
updateLogicalState
calls theupdate()
method for all controls attached to this Spatial.- Overrides:
updateLogicalState
in classSpatial
- Parameters:
tpf
- Time per frame.- See Also:
-
updateGeometricState
public void updateGeometricState()Description copied from class:Spatial
updateGeometricState
updates the light list, computes the world transforms, and computes the world bounds for this Spatial. Calling this when the Spatial is attached to a node will cause undefined results. User code should only call this method on Spatials having no parent.- Overrides:
updateGeometricState
in classSpatial
- See Also:
-
getTriangleCount
public int getTriangleCount()getTriangleCount
returns the number of triangles contained in all sub-branches of this node that contain geometry.- Specified by:
getTriangleCount
in classSpatial
- Returns:
- the triangle count of this branch.
-
getVertexCount
public int getVertexCount()getVertexCount
returns the number of vertices contained in all sub-branches of this node that contain geometry.- Specified by:
getVertexCount
in classSpatial
- Returns:
- the vertex count of this branch.
-
attachChild
attachChild
attaches a child to this node. This node becomes the child's parent. The current number of children maintained is returned.
If the child already had a parent it is detached from that former parent.- Parameters:
child
- the child to attach to this node.- Returns:
- the number of children maintained by this node.
- Throws:
IllegalArgumentException
- if child is null.
-
attachChildAt
attachChildAt
attaches a child to this node at an index. This node becomes the child's parent. The current number of children maintained is returned.
If the child already had a parent it is detached from that former parent.- Parameters:
child
- the child to attach to this node.index
- the position where the child should be attached- Returns:
- the number of children maintained by this node.
- Throws:
IllegalArgumentException
- if child is null or this
-
detachChild
detachChild
removes a given child from the node's list. This child will no longer be maintained.- Parameters:
child
- the child to remove (not null)- Returns:
- the index the child was at. -1 if the child was not in the list.
-
detachChildNamed
detachChild
removes a given child from the node's list. This child will no longer be maintained. Only the first child with a matching name is removed.- Parameters:
childName
- the child to remove (not null)- Returns:
- the index the child was at. -1 if the child was not in the list.
-
detachChildAt
detachChildAt
removes a child at a given index. That child is returned for saving purposes.- Parameters:
index
- the index of the child to be removed.- Returns:
- the child at the supplied index.
-
detachAllChildren
public void detachAllChildren()detachAllChildren
removes all children attached to this node. -
getChildIndex
getChildIndex
returns the index of the given spatial in this node's list of children.- Parameters:
sp
- The spatial to look up- Returns:
- The index of the spatial in the node's children, or -1 if the spatial is not attached to this node
-
swapChildren
public void swapChildren(int index1, int index2) More efficient than e.g. detaching and attaching, as no updates are needed.- Parameters:
index1
- The index of the first child to swapindex2
- The index of the second child to swap
-
getChild
getChild
returns a child at a given index.- Parameters:
i
- the index to retrieve the child from.- Returns:
- the child at a specified index.
-
getChild
getChild
returns the first child found with exactly the given name (case-sensitive). This method does a depth-first recursive search of all descendants of this node, it will return the first spatial found with a matching name.- Parameters:
name
- the name of the child to retrieve. If null, we'll return null.- Returns:
- the child if found, or null.
-
hasChild
determines if the provided Spatial is contained in the children list of this node.- Parameters:
spat
- the child object to look for.- Returns:
- true if the object is contained, false otherwise.
-
getChildren
Returns all children to this node. Note that modifying that given list is not allowed.- Returns:
- a list containing all children to this node
-
setMaterial
Description copied from class:Spatial
Applies the given material to the Spatial, this will propagate the material down to the geometries in the scene graph.- Overrides:
setMaterial
in classSpatial
- Parameters:
mat
- The material to set.
-
setLodLevel
public void setLodLevel(int lod) Description copied from class:Spatial
Sets the level of detail to use when rendering this Spatial, this call propagates to all geometries under this Spatial.- Overrides:
setLodLevel
in classSpatial
- Parameters:
lod
- The lod level to set.
-
collideWith
Description copied from interface:Collidable
Check collision with another Collidable.- Parameters:
other
- The object to check collision againstresults
- Will contain the list ofCollisionResult
s.- Returns:
- how many collisions were found between this and other
-
descendantMatches
Returns flat list of Spatials implementing the specified class AND with name matching the specified pattern.Note that we are matching the pattern, therefore the pattern must match the entire pattern (i.e. it behaves as if it is sandwiched between "^" and "$"). You can set regex modes, like case insensitivity, by using the (?X) or (?X:Y) constructs.
By design, it is always safe to code loops like:
for (Spatial spatial : node.descendantMatches(AClass.class, "regex"))
"Descendants" does not include self, per the definition of the word. To test for descendants AND self, you must do a
node.matches(aClass, aRegex)
+node.descendantMatches(aClass, aRegex)
.- Type Parameters:
T
- the type of Spatial returned- Parameters:
spatialSubclass
- Subclass which matching Spatials must implement. Null causes all Spatials to qualify.nameRegex
- Regular expression to match Spatial name against. Null causes all Names to qualify.- Returns:
- Non-null, but possibly 0-element, list of matching Spatials (also Instances extending Spatials).
- See Also:
-
descendantMatches
Convenience wrapper.- Type Parameters:
T
- the type of Spatial returned- Parameters:
spatialSubclass
- the type of Spatial returned, or null for all spatials- Returns:
- a new list of pre-existing spatials (may be empty)
- See Also:
-
descendantMatches
Convenience wrapper.- Type Parameters:
T
- the type of Spatial returned- Parameters:
nameRegex
- regular expression to match Spatial names against, or null for all spatials- Returns:
- a new list of pre-existing spatials (may be empty)
- See Also:
-
clone
- Overrides:
clone
in classSpatial
- Parameters:
cloneMaterials
- true to clone materials, false to share them- Returns:
- A clone of this Spatial, the scene graph in its entirety is cloned and can be altered independently of the original scene graph. Note that meshes of geometries are not cloned explicitly, they are shared if static, or specially cloned if animated.
- See Also:
-
deepClone
-
oldDeepClone
-
cloneFields
Called internally by com.jme3.util.clone.Cloner. Do not call directly.- Specified by:
cloneFields
in interfaceJmeCloneable
- Overrides:
cloneFields
in classSpatial
- Parameters:
cloner
- The cloner that is performing the cloning operation. The cloneFields method can call back into the cloner to make clones of its subordinate fields.original
- The original object from which this object was cloned. This is provided for the very rare case that this object needs to refer to its original for some reason. In general, all of the relevant values should have been transferred during the shallow clone, and this object need only clone what it wants.
-
write
- Specified by:
write
in interfaceSavable
- Overrides:
write
in classSpatial
- Throws:
IOException
-
read
- Specified by:
read
in interfaceSavable
- Overrides:
read
in classSpatial
- Throws:
IOException
-
setModelBound
Description copied from class:Spatial
setModelBound
sets the bounding object for this Spatial.- Specified by:
setModelBound
in classSpatial
- Parameters:
modelBound
- the bounding object for this spatial.
-
updateModelBound
public void updateModelBound()Description copied from class:Spatial
updateModelBound
recalculates the bounding object for this Spatial.- Specified by:
updateModelBound
in classSpatial
-
depthFirstTraversal
Description copied from class:Spatial
Visit each scene graph element ordered by DFS. There are two modes: pre order and post order.- Specified by:
depthFirstTraversal
in classSpatial
- Parameters:
visitor
- the action to take for each visited Spatialmode
- the traversal mode: pre order or post order
-
breadthFirstTraversal
- Specified by:
breadthFirstTraversal
in classSpatial
-