diff --git a/source/import/importer3ds.js b/source/import/importer3ds.js index 6cea6a2..5c2e173 100644 --- a/source/import/importer3ds.js +++ b/source/import/importer3ds.js @@ -541,6 +541,7 @@ OV.Importer3ds = class extends OV.ImporterBase let isMeshNode = this.meshNameToIndex.has (node3ds.name); node.SetTransformation (GetNodeTransformation (node3ds, isMeshNode)); if (isMeshNode) { + node.SetType (OV.NodeType.MeshNode); node.AddMeshIndex (this.meshNameToIndex.get (node3ds.name)); } } diff --git a/source/import/importergltf.js b/source/import/importergltf.js index 7bda2a6..e20307e 100644 --- a/source/import/importergltf.js +++ b/source/import/importergltf.js @@ -943,16 +943,15 @@ OV.ImporterGltf = class extends OV.ImporterBase node.SetTransformation (GetNodeTransformation (gltfNode)); parentNode.AddChildNode (node); - if (gltfNode.children !== undefined) { + if (gltfNode.mesh !== undefined) { + node.SetType (OV.NodeType.MeshNode); + node.AddMeshIndex (gltfNode.mesh); + } else if (gltfNode.children !== undefined) { for (let childIndex of gltfNode.children) { let childGltfNode = gltf.nodes[childIndex]; this.ImportNode (gltf, childGltfNode, node); } } - - if (gltfNode.mesh !== undefined) { - node.AddMeshIndex (gltfNode.mesh); - } } GetReaderFromBufferView (bufferView) diff --git a/source/import/importerthree.js b/source/import/importerthree.js index da9731f..75dbcfc 100644 --- a/source/import/importerthree.js +++ b/source/import/importerthree.js @@ -139,6 +139,7 @@ OV.ImporterThreeBase = class extends OV.ImporterBase AddObject (importer, model, childObject, node); } if (threeObject.isMesh && importer.IsMeshVisible (threeObject)) { + node.SetType (OV.NodeType.MeshNode); let mesh = importer.ConvertThreeMesh (threeObject); let meshIndex = model.AddMesh (mesh); node.AddMeshIndex (meshIndex); diff --git a/source/model/node.js b/source/model/node.js index 1be88a4..e07c440 100644 --- a/source/model/node.js +++ b/source/model/node.js @@ -1,4 +1,8 @@ -OV.InvalidNodeId = -1; +OV.NodeType = +{ + GroupNode : 0, + MeshNode : 1 +}; OV.NodeIdGenerator = class { @@ -19,6 +23,7 @@ OV.Node = class { constructor () { + this.type = OV.NodeType.GroupNode; this.name = ''; this.parent = null; this.transformation = new OV.Transformation (); @@ -35,6 +40,16 @@ OV.Node = class return this.childNodes.length === 0 && this.meshIndices.length === 0; } + GetType () + { + return this.type; + } + + SetType (type) + { + this.type = type; + } + GetId () { return this.id; diff --git a/website/o3dv/js/navigatorpanels.js b/website/o3dv/js/navigatorpanels.js index e11ea02..cf24f89 100644 --- a/website/o3dv/js/navigatorpanels.js +++ b/website/o3dv/js/navigatorpanels.js @@ -591,16 +591,23 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel function AddModelNodeToTree (panel, model, node, parentItem, showTree) { + let meshNodes = []; for (let childNode of node.GetChildNodes ()) { if (showTree) { - let nodeItem = CreateNodeItem (panel, childNode); - parentItem.AddChild (nodeItem); - AddModelNodeToTree (panel, model, childNode, nodeItem, showTree); + if (childNode.GetType () === OV.NodeType.GroupNode) { + let nodeItem = CreateNodeItem (panel, childNode); + parentItem.AddChild (nodeItem); + AddModelNodeToTree (panel, model, childNode, nodeItem, showTree); + } else if (childNode.GetType () === OV.NodeType.MeshNode) { + meshNodes.push (childNode); + } } else { AddModelNodeToTree (panel, model, childNode, parentItem, showTree); } } - + for (let meshNode of meshNodes) { + AddModelNodeToTree (panel, model, meshNode, parentItem, showTree); + } for (let meshIndex of node.GetMeshIndices ()) { AddMeshToNodeTree (panel, model, node, meshIndex, parentItem, showTree); }