Преглед на файлове

Fix hierarchy issue for mesh inspector

ameuleman преди 8 години
родител
ревизия
e00a68fa5d
променени са 2 файла, в които са добавени 32 реда и са изтрити 6 реда
  1. 20 6
      inspector/src/tabs/MeshTab.ts
  2. 12 0
      inspector/test/index.js

+ 20 - 6
inspector/src/tabs/MeshTab.ts

@@ -16,9 +16,9 @@ module INSPECTOR{
             let createNode = (obj : BABYLON.AbstractMesh) => {
                 let descendants = obj.getDescendants(true);
 
+                let node = new TreeItem(this, new MeshAdapter(obj));
+
                 if (descendants.length > 0) {
-                    let node = new TreeItem(this, new MeshAdapter(obj));
-                    alreadyIn.push(obj);
                     for (let child of descendants) {     
                         if (child instanceof BABYLON.AbstractMesh) {
                             if (!Helpers.IsSystemName(child.name)) {  
@@ -28,11 +28,25 @@ module INSPECTOR{
                         }
                     }
                     node.update();
-                    return node;
-                } else {
-                    alreadyIn.push(obj);
-                    return new TreeItem(this, new MeshAdapter(obj));
+                } 
+
+                // Retrieve the root node if the mesh is actually child of another mesh
+                // This can hapen if the child mesh has been created before the parent mesh
+                if(obj.parent != null && alreadyIn.indexOf(obj) != -1){
+                    let i: number = 0;
+                    let notFound: boolean = true;
+                    // Find and delete the root node standing for this mesh
+                    while(i < arr.length && notFound){
+                        if(obj.name === arr[i].id){
+                             arr.splice(i, 1);
+                             notFound = false;
+                        }
+                        i++;
+                    }
                 }
+
+                alreadyIn.push(obj);                
+                return node;
             };
             
             // get all meshes from the first scene

+ 12 - 0
inspector/test/index.js

@@ -236,6 +236,18 @@ var Test = (function () {
             sphere7.position.x = 40;
         });
 
+        var sphere_1 = BABYLON.Mesh.CreateSphere("_sphere_1", 16, 2, scene);
+
+        var assets_mesh = new BABYLON.AbstractMesh("assets_mesh", scene);
+        var sphere_2 = BABYLON.Mesh.CreateSphere("sphere_2", 3, 2, scene);
+        var sphere_3 = BABYLON.Mesh.CreateSphere("sphere_3", 2, 2, scene);
+        var scene_mesh = new BABYLON.AbstractMesh;
+        scene_mesh.name="scene_mesh";
+    
+        sphere_1.parent = assets_mesh;
+        sphere_2.parent = assets_mesh;
+        sphere_3.parent = assets_mesh;
+
 
         // gui
         var advancedTexture = BABYLON.GUI.AdvancedDynamicTexture.CreateFullscreenUI("UI");