From 9218dc4d82ff26c5e985e6f3d568bd078d6c09f9 Mon Sep 17 00:00:00 2001 From: shamanDevel Date: Thu, 21 Aug 2014 11:14:04 +0200 Subject: [PATCH 1/3] added a pre-order traversal of the scene graph. Called depthLastTraversal to keep name coherent with depthFirstTraversal --- jme3-core/src/main/java/com/jme3/scene/Geometry.java | 4 ++++ jme3-core/src/main/java/com/jme3/scene/Node.java | 9 +++++++++ jme3-core/src/main/java/com/jme3/scene/Spatial.java | 8 +++++++- 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java index 50ca01912f..456e680dca 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java @@ -450,6 +450,10 @@ public int collideWith(Collidable other, CollisionResults results) { public void depthFirstTraversal(SceneGraphVisitor visitor) { visitor.visit(this); } + @Override + public void depthLastTraversal(SceneGraphVisitor visitor) { + visitor.visit(this); + } @Override protected void breadthFirstTraversal(SceneGraphVisitor visitor, Queue queue) { diff --git a/jme3-core/src/main/java/com/jme3/scene/Node.java b/jme3-core/src/main/java/com/jme3/scene/Node.java index f22c5b4b0f..483e40ae65 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Node.java +++ b/jme3-core/src/main/java/com/jme3/scene/Node.java @@ -633,6 +633,15 @@ public void depthFirstTraversal(SceneGraphVisitor visitor) { } visitor.visit(this); } + + @Override + public void depthLastTraversal(SceneGraphVisitor visitor) { + visitor.visit(this); + for (Spatial child : children.getArray()) { + child.depthFirstTraversal(visitor); + } + } + @Override protected void breadthFirstTraversal(SceneGraphVisitor visitor, Queue queue) { diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index b6c61f81e5..0b433a3e75 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -1492,10 +1492,16 @@ public Matrix4f getLocalToWorldMatrix(Matrix4f store) { } /** - * Visit each scene graph element ordered by DFS + * Visit each scene graph element ordered by DFS, also called post order traversal. * @param visitor */ public abstract void depthFirstTraversal(SceneGraphVisitor visitor); + + /** + * Visit each scene graph element in pre order traversal. + * @param visitor + */ + public abstract void depthLastTraversal(SceneGraphVisitor visitor); /** * Visit each scene graph element ordered by BFS From 4d6ed6cc3502df3e0629600e59ba728f009ffa2c Mon Sep 17 00:00:00 2001 From: shamanDevel Date: Thu, 21 Aug 2014 11:22:29 +0200 Subject: [PATCH 2/3] fixed some missing change --- jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java b/jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java index 555150ea23..6db88761ee 100644 --- a/jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java +++ b/jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java @@ -973,5 +973,9 @@ public void depthFirstTraversal(SceneGraphVisitor visitor) { @Override protected void breadthFirstTraversal(SceneGraphVisitor visitor, Queue queue) { } + + @Override + public void depthLastTraversal(SceneGraphVisitor visitor) { + } } } From 216eb3000dbb69709b8a3247102a3359e5fb2a0b Mon Sep 17 00:00:00 2001 From: shamanDevel Date: Thu, 21 Aug 2014 11:46:00 +0200 Subject: [PATCH 3/3] changed depthLastTraversal to depthFirstTraversal with an extra flag --- .../main/java/com/jme3/asset/BlenderKey.java | 5 +--- .../main/java/com/jme3/scene/Geometry.java | 6 +---- .../src/main/java/com/jme3/scene/Node.java | 23 +++++++++---------- .../src/main/java/com/jme3/scene/Spatial.java | 15 ++++++++---- 4 files changed, 24 insertions(+), 25 deletions(-) diff --git a/jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java b/jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java index 6db88761ee..ce133300af 100644 --- a/jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java +++ b/jme3-blender/src/main/java/com/jme3/asset/BlenderKey.java @@ -967,15 +967,12 @@ public Spatial deepClone() { } @Override - public void depthFirstTraversal(SceneGraphVisitor visitor) { + public void depthFirstTraversal(SceneGraphVisitor visitor, boolean preOrder) { } @Override protected void breadthFirstTraversal(SceneGraphVisitor visitor, Queue queue) { } - @Override - public void depthLastTraversal(SceneGraphVisitor visitor) { - } } } diff --git a/jme3-core/src/main/java/com/jme3/scene/Geometry.java b/jme3-core/src/main/java/com/jme3/scene/Geometry.java index 456e680dca..773671adb2 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Geometry.java +++ b/jme3-core/src/main/java/com/jme3/scene/Geometry.java @@ -447,11 +447,7 @@ public int collideWith(Collidable other, CollisionResults results) { } @Override - public void depthFirstTraversal(SceneGraphVisitor visitor) { - visitor.visit(this); - } - @Override - public void depthLastTraversal(SceneGraphVisitor visitor) { + public void depthFirstTraversal(SceneGraphVisitor visitor, boolean preOrder) { visitor.visit(this); } diff --git a/jme3-core/src/main/java/com/jme3/scene/Node.java b/jme3-core/src/main/java/com/jme3/scene/Node.java index 483e40ae65..0c4340a4f3 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Node.java +++ b/jme3-core/src/main/java/com/jme3/scene/Node.java @@ -625,20 +625,19 @@ public void updateModelBound() { } } } - - @Override - public void depthFirstTraversal(SceneGraphVisitor visitor) { - for (Spatial child : children.getArray()) { - child.depthFirstTraversal(visitor); - } - visitor.visit(this); - } @Override - public void depthLastTraversal(SceneGraphVisitor visitor) { - visitor.visit(this); - for (Spatial child : children.getArray()) { - child.depthFirstTraversal(visitor); + public void depthFirstTraversal(SceneGraphVisitor visitor, boolean preOrder) { + if (preOrder) { + visitor.visit(this); + for (Spatial child : children.getArray()) { + child.depthFirstTraversal(visitor); + } + } else { + for (Spatial child : children.getArray()) { + child.depthFirstTraversal(visitor); + } + visitor.visit(this); } } diff --git a/jme3-core/src/main/java/com/jme3/scene/Spatial.java b/jme3-core/src/main/java/com/jme3/scene/Spatial.java index 0b433a3e75..aac4ddf24e 100644 --- a/jme3-core/src/main/java/com/jme3/scene/Spatial.java +++ b/jme3-core/src/main/java/com/jme3/scene/Spatial.java @@ -1493,15 +1493,22 @@ public Matrix4f getLocalToWorldMatrix(Matrix4f store) { /** * Visit each scene graph element ordered by DFS, also called post order traversal. + * Delegates to {@link #depthFirstTraversal(com.jme3.scene.SceneGraphVisitor, boolean) } + * with {@code preOrder} set to {@code false}. * @param visitor */ - public abstract void depthFirstTraversal(SceneGraphVisitor visitor); + public void depthFirstTraversal(SceneGraphVisitor visitor) { + depthFirstTraversal(visitor, false); + } /** - * Visit each scene graph element in pre order traversal. - * @param visitor + * Visit each scene graph element using post order traversal if {@code preOrder} + * is {@code false} or using pre order traversal if {@code preOrder} is + * {@code true}. + * @param visitor the visitor to use + * @param preOrder {@code false} for post order, {@code true} for pre order */ - public abstract void depthLastTraversal(SceneGraphVisitor visitor); + public abstract void depthFirstTraversal(SceneGraphVisitor visitor, boolean preOrder); /** * Visit each scene graph element ordered by BFS