diff --git a/sandbox/embed_selfhost_errors.html b/sandbox/embed_selfhost_errors.html
index d1614ea..c9ee5b4 100644
--- a/sandbox/embed_selfhost_errors.html
+++ b/sandbox/embed_selfhost_errors.html
@@ -32,6 +32,7 @@
+
diff --git a/sandbox/embed_selfhost_externallibs.html b/sandbox/embed_selfhost_externallibs.html
index e7c3a17..a776e1d 100644
--- a/sandbox/embed_selfhost_externallibs.html
+++ b/sandbox/embed_selfhost_externallibs.html
@@ -32,6 +32,7 @@
+
diff --git a/sandbox/embed_selfhost_fullscreen.html b/sandbox/embed_selfhost_fullscreen.html
index 6683967..e6e14f6 100644
--- a/sandbox/embed_selfhost_fullscreen.html
+++ b/sandbox/embed_selfhost_fullscreen.html
@@ -31,6 +31,7 @@
+
diff --git a/sandbox/embed_selfhost_manual.html b/sandbox/embed_selfhost_manual.html
index 8c0f98e..20fa9e1 100644
--- a/sandbox/embed_selfhost_manual.html
+++ b/sandbox/embed_selfhost_manual.html
@@ -32,6 +32,7 @@
+
diff --git a/sandbox/embed_selfhost_multiple.html b/sandbox/embed_selfhost_multiple.html
index 8f9ca55..f880b86 100644
--- a/sandbox/embed_selfhost_multiple.html
+++ b/sandbox/embed_selfhost_multiple.html
@@ -32,6 +32,7 @@
+
diff --git a/sandbox/embed_selfhost_single.html b/sandbox/embed_selfhost_single.html
index ce60632..9afc8e9 100644
--- a/sandbox/embed_selfhost_single.html
+++ b/sandbox/embed_selfhost_single.html
@@ -31,6 +31,7 @@
+
diff --git a/sandbox/embed_selfhost_single_scroll.html b/sandbox/embed_selfhost_single_scroll.html
index fe5ad7b..41d07f4 100644
--- a/sandbox/embed_selfhost_single_scroll.html
+++ b/sandbox/embed_selfhost_single_scroll.html
@@ -31,6 +31,7 @@
+
diff --git a/tools/config.json b/tools/config.json
index 6c4fcc8..d920150 100644
--- a/tools/config.json
+++ b/tools/config.json
@@ -82,7 +82,7 @@
"website/o3dv/js/exportdialog.js",
"website/o3dv/js/sharingdialog.js",
"website/o3dv/js/cookiedialog.js",
- "website/o3dv/js/modeldata.js",
+ "website/o3dv/js/navigatortree.js",
"website/o3dv/js/navigator.js",
"website/o3dv/js/sidebarpanel.js",
"website/o3dv/js/detailssidebarpanel.js",
diff --git a/website/embed.html b/website/embed.html
index 8607cde..065e109 100644
--- a/website/embed.html
+++ b/website/embed.html
@@ -41,6 +41,7 @@
+
@@ -103,7 +104,7 @@
-
+
diff --git a/website/index.html b/website/index.html
index 361fc80..6053ad4 100644
--- a/website/index.html
+++ b/website/index.html
@@ -41,6 +41,7 @@
+
@@ -103,7 +104,7 @@
-
+
diff --git a/website/o3dv/js/modeldata.js b/website/o3dv/js/modeldata.js
deleted file mode 100644
index 77b0378..0000000
--- a/website/o3dv/js/modeldata.js
+++ /dev/null
@@ -1,121 +0,0 @@
-OV.MaterialData = class
-{
- constructor (originalIndex)
- {
- this.originalIndex = originalIndex;
- this.menuItem = null;
- }
-
- SetSelected (selected)
- {
- this.menuItem.SetSelected (selected);
- }
-
- CreateMenuItem (name, callbacks)
- {
- this.menuItem = new OV.TreeViewButtonItem (name);
- this.menuItem.OnNameClick (() => {
- callbacks.onSelected (this.originalIndex);
- });
- return this.menuItem;
- }
-};
-
-OV.MeshData = class
-{
- constructor (originalIndex)
- {
- this.originalIndex = originalIndex;
- this.visible = true;
- this.menuItem = null;
- this.showHideButton = null;
- }
-
- IsVisible ()
- {
- return this.visible;
- }
-
- SetVisible (visible)
- {
- this.visible = visible;
- if (this.visible) {
- this.showHideButton.SetImage ('visible');
- } else {
- this.showHideButton.SetImage ('hidden');
- }
- }
-
- SetSelected (selected)
- {
- this.menuItem.SetSelected (selected);
- }
-
- CreateMenuItem (name, callbacks)
- {
- this.menuItem = new OV.TreeViewButtonItem (name);
-
- let fitToWindowButton = new OV.TreeViewButton ('fit');
- fitToWindowButton.OnClick (() => {
- callbacks.onFitToWindow (this.originalIndex);
- });
- this.menuItem.AddButton (fitToWindowButton);
-
- this.showHideButton = new OV.TreeViewButton ('visible');
- this.showHideButton.OnClick ((ev) => {
- callbacks.onShowHide (this.originalIndex);
- });
- this.menuItem.AddButton (this.showHideButton);
-
- this.menuItem.OnNameClick (() => {
- callbacks.onSelected (this.originalIndex);
- });
-
- return this.menuItem;
- }
-};
-
-OV.ModelData = class
-{
- constructor ()
- {
- this.meshDataArr = [];
- this.materialDataArr = [];
- }
-
- MaterialCount ()
- {
- return this.materialDataArr.length;
- }
-
- GetMaterialData (index)
- {
- return this.materialDataArr[index];
- }
-
- AddMaterialData (materialData)
- {
- this.materialDataArr.push (materialData);
- }
-
- MeshCount ()
- {
- return this.meshDataArr.length;
- }
-
- GetMeshData (index)
- {
- return this.meshDataArr[index];
- }
-
- AddMeshData (meshData)
- {
- this.meshDataArr.push (meshData);
- }
-
- Clear ()
- {
- this.meshDataArr = [];
- this.materialDataArr = [];
- }
-};
diff --git a/website/o3dv/js/navigator.js b/website/o3dv/js/navigator.js
index db89d54..b0853d4 100644
--- a/website/o3dv/js/navigator.js
+++ b/website/o3dv/js/navigator.js
@@ -121,7 +121,7 @@ OV.Navigator = class
this.infoDiv = $('
').addClass ('ov_navigator_info_panel').addClass ('ov_thin_scrollbar').appendTo (parentDiv);
this.treeView = new OV.TreeView (this.treeDiv);
this.infoPanel = new OV.NavigatorInfoPanel (this.infoDiv);
- this.modelData = new OV.ModelData ();
+ this.navigatorTree = new OV.NavigatorTree ();
this.selection = null;
this.tempSelectedMeshIndex = null;
}
@@ -176,13 +176,12 @@ OV.Navigator = class
for (let i = 0; i < model.MaterialCount (); i++) {
let material = model.GetMaterial (i);
let materialName = OV.GetMaterialName (material.name);
- let materialData = new OV.MaterialData (i);
- let materialItem = materialData.CreateMenuItem (materialName, {
+ let materialItem = new OV.MaterialItem (materialName, i, {
onSelected : (materialIndex) => {
this.SetSelection (new OV.Selection (OV.SelectionType.Material, materialIndex));
}
});
- this.modelData.AddMaterialData (materialData);
+ this.navigatorTree.AddMaterialItem (materialItem);
materialsItem.AddChild (materialItem);
}
@@ -191,9 +190,8 @@ OV.Navigator = class
meshesItem.ShowChildren (true, null);
for (let i = 0; i < model.MeshCount (); i++) {
let mesh = model.GetMesh (i);
- let meshData = new OV.MeshData (i);
let meshName = OV.GetMeshName (mesh.GetName ());
- let meshItem = meshData.CreateMenuItem (meshName, {
+ let meshItem = new OV.MeshItem (meshName, i, {
onShowHide : (meshIndex) => {
this.ToggleMeshVisibility (meshIndex);
},
@@ -207,7 +205,7 @@ OV.Navigator = class
this.SetSelection (new OV.Selection (OV.SelectionType.Mesh, meshIndex));
}
});
- this.modelData.AddMeshData (meshData);
+ this.navigatorTree.AddMeshItem (meshItem);
meshesItem.AddChild (meshItem);
}
@@ -217,20 +215,20 @@ OV.Navigator = class
MeshCount ()
{
- return this.modelData.MeshCount ();
+ return this.navigatorTree.MeshCount ();
}
IsMeshVisible (meshIndex)
{
- let meshData = this.modelData.GetMeshData (meshIndex);
- return meshData.IsVisible ();
+ let meshItem = this.navigatorTree.GetMeshItem (meshIndex);
+ return meshItem.IsVisible ();
}
HasHiddenMesh ()
{
- for (let i = 0; i < this.modelData.MeshCount (); i++) {
- let meshData = this.modelData.GetMeshData (i);
- if (!meshData.IsVisible ()) {
+ for (let i = 0; i < this.navigatorTree.MeshCount (); i++) {
+ let meshItem = this.navigatorTree.GetMeshItem (i);
+ if (!meshItem.IsVisible ()) {
return true;
}
}
@@ -239,25 +237,25 @@ OV.Navigator = class
ShowAllMeshes ()
{
- for (let i = 0; i < this.modelData.MeshCount (); i++) {
- let meshData = this.modelData.GetMeshData (i);
- meshData.SetVisible (true);
+ for (let i = 0; i < this.navigatorTree.MeshCount (); i++) {
+ let meshItem = this.navigatorTree.GetMeshItem (i);
+ meshItem.SetVisible (true);
}
this.callbacks.updateMeshesVisibility ();
}
ToggleMeshVisibility (meshIndex)
{
- let meshData = this.modelData.GetMeshData (meshIndex);
- meshData.SetVisible (!meshData.IsVisible ());
+ let meshItem = this.navigatorTree.GetMeshItem (meshIndex);
+ meshItem.SetVisible (!meshItem.IsVisible ());
this.callbacks.updateMeshesVisibility ();
}
IsMeshIsolated (meshIndex)
{
- for (let i = 0; i < this.modelData.MeshCount (); i++) {
- let meshData = this.modelData.GetMeshData (i);
- if (i !== meshIndex && meshData.IsVisible ()) {
+ for (let i = 0; i < this.navigatorTree.MeshCount (); i++) {
+ let meshItem = this.navigatorTree.GetMeshItem (i);
+ if (i !== meshIndex && meshItem.IsVisible ()) {
return false;
}
}
@@ -267,12 +265,12 @@ OV.Navigator = class
IsolateMesh (meshIndex)
{
let isIsolated = this.IsMeshIsolated (meshIndex);
- for (let i = 0; i < this.modelData.MeshCount (); i++) {
- let meshData = this.modelData.GetMeshData (i);
+ for (let i = 0; i < this.navigatorTree.MeshCount (); i++) {
+ let meshItem = this.navigatorTree.GetMeshItem (i);
if (i === meshIndex || isIsolated) {
- meshData.SetVisible (true);
+ meshItem.SetVisible (true);
} else {
- meshData.SetVisible (false);
+ meshItem.SetVisible (false);
}
}
this.callbacks.updateMeshesVisibility ();
@@ -300,9 +298,9 @@ OV.Navigator = class
function SetEntitySelection (obj, selection, select)
{
if (selection.type === OV.SelectionType.Material) {
- obj.modelData.GetMaterialData (selection.index).SetSelected (select);
+ obj.navigatorTree.GetMaterialItem (selection.index).SetSelected (select);
} else if (selection.type === OV.SelectionType.Mesh) {
- obj.modelData.GetMeshData (selection.index).SetSelected (select);
+ obj.navigatorTree.GetMeshItem (selection.index).SetSelected (select);
}
}
@@ -377,7 +375,7 @@ OV.Navigator = class
this.titleDiv.empty ();
this.treeView.Clear ();
this.infoPanel.Clear ();
- this.modelData.Clear ();
+ this.navigatorTree.Clear ();
this.selection = null;
}
};
diff --git a/website/o3dv/js/navigatortree.js b/website/o3dv/js/navigatortree.js
new file mode 100644
index 0000000..1182e81
--- /dev/null
+++ b/website/o3dv/js/navigatortree.js
@@ -0,0 +1,98 @@
+OV.MaterialItem = class extends OV.TreeViewButtonItem
+{
+ constructor (name, originalIndex, callbacks)
+ {
+ super (name);
+ this.originalIndex = originalIndex;
+ this.OnNameClick (() => {
+ callbacks.onSelected (this.originalIndex);
+ });
+ }
+};
+
+OV.MeshItem = class extends OV.TreeViewButtonItem
+{
+ constructor (name, originalIndex, callbacks)
+ {
+ super (name);
+
+ this.originalIndex = originalIndex;
+ this.visible = true;
+
+ this.fitToWindowButton = new OV.TreeViewButton ('fit');
+ this.fitToWindowButton.OnClick (() => {
+ callbacks.onFitToWindow (this.originalIndex);
+ });
+ this.AddButton (this.fitToWindowButton);
+
+ this.showHideButton = new OV.TreeViewButton ('visible');
+ this.showHideButton.OnClick ((ev) => {
+ callbacks.onShowHide (this.originalIndex);
+ });
+ this.AddButton (this.showHideButton);
+
+ this.OnNameClick (() => {
+ callbacks.onSelected (this.originalIndex);
+ });
+ }
+
+ IsVisible ()
+ {
+ return this.visible;
+ }
+
+ SetVisible (visible)
+ {
+ this.visible = visible;
+ if (this.visible) {
+ this.showHideButton.SetImage ('visible');
+ } else {
+ this.showHideButton.SetImage ('hidden');
+ }
+ }
+};
+
+OV.NavigatorTree = class
+{
+ constructor ()
+ {
+ this.meshItems = [];
+ this.materialItems = [];
+ }
+
+ MaterialCount ()
+ {
+ return this.materialItems.length;
+ }
+
+ GetMaterialItem (index)
+ {
+ return this.materialItems[index];
+ }
+
+ AddMaterialItem (materialItem)
+ {
+ this.materialItems.push (materialItem);
+ }
+
+ MeshCount ()
+ {
+ return this.meshItems.length;
+ }
+
+ GetMeshItem (index)
+ {
+ return this.meshItems[index];
+ }
+
+ AddMeshItem (meshItem)
+ {
+ this.meshItems.push (meshItem);
+ }
+
+ Clear ()
+ {
+ this.meshItems = [];
+ this.materialItems = [];
+ }
+};