|
@@ -247,6 +247,34 @@ public class BatchNode extends Node implements Savable {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //in case the detached spatial is a node, we unbatch all geometries in its subegraph
|
|
|
+ @Override
|
|
|
+ public Spatial detachChildAt(int index) {
|
|
|
+ Spatial s = super.detachChildAt(index);
|
|
|
+ if (s instanceof Node) {
|
|
|
+ unbatchSubGraph(s);
|
|
|
+ }
|
|
|
+ return s;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * recursively visit the subgraph and unbatch geometries
|
|
|
+ * @param s
|
|
|
+ */
|
|
|
+ private void unbatchSubGraph(Spatial s) {
|
|
|
+ if (s instanceof Node) {
|
|
|
+ for (Spatial sp : ((Node) s).getChildren()) {
|
|
|
+ unbatchSubGraph(sp);
|
|
|
+ }
|
|
|
+ } else if (s instanceof Geometry) {
|
|
|
+ Geometry g = (Geometry) s;
|
|
|
+ if (g.isBatched()) {
|
|
|
+ g.unBatch();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
private void gatherGeomerties(Map<Material, List<Geometry>> map, Spatial n, boolean rebatch) {
|
|
|
|
|
|
if (n instanceof Geometry) {
|