Fix mesh isolation.
This commit is contained in:
parent
26d9be2a19
commit
d8d4d1fb3e
@ -48,7 +48,7 @@ OV.Navigator = class
|
|||||||
this.panelSet.AddPanel (this.filesPanel);
|
this.panelSet.AddPanel (this.filesPanel);
|
||||||
this.panelSet.AddPanel (this.materialsPanel);
|
this.panelSet.AddPanel (this.materialsPanel);
|
||||||
this.panelSet.AddPanel (this.meshesPanel);
|
this.panelSet.AddPanel (this.meshesPanel);
|
||||||
this.panelSet.ShowPanel (2);
|
this.panelSet.ShowPanel (this.meshesPanel);
|
||||||
}
|
}
|
||||||
|
|
||||||
Init (callbacks)
|
Init (callbacks)
|
||||||
@ -113,24 +113,19 @@ OV.Navigator = class
|
|||||||
|
|
||||||
ShowAllMeshes ()
|
ShowAllMeshes ()
|
||||||
{
|
{
|
||||||
this.meshesPanel.navigatorItems.EnumerateMeshItems ((meshItem) => {
|
this.meshesPanel.ShowAllMeshes ();
|
||||||
meshItem.SetVisible (true);
|
|
||||||
return true;
|
|
||||||
});
|
|
||||||
this.callbacks.updateMeshesVisibility ();
|
this.callbacks.updateMeshesVisibility ();
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleNodeVisibility (nodeId)
|
ToggleNodeVisibility (nodeId)
|
||||||
{
|
{
|
||||||
let nodeItem = this.meshesPanel.navigatorItems.GetNodeItem (nodeId);
|
this.meshesPanel.ToggleNodeVisibility (nodeId);
|
||||||
nodeItem.SetVisible (!nodeItem.IsVisible ());
|
|
||||||
this.callbacks.updateMeshesVisibility ();
|
this.callbacks.updateMeshesVisibility ();
|
||||||
}
|
}
|
||||||
|
|
||||||
ToggleMeshVisibility (meshInstanceId)
|
ToggleMeshVisibility (meshInstanceId)
|
||||||
{
|
{
|
||||||
let meshItem = this.meshesPanel.navigatorItems.GetMeshItem (meshInstanceId);
|
this.meshesPanel.ToggleMeshVisibility (meshInstanceId);
|
||||||
meshItem.SetVisible (!meshItem.IsVisible ());
|
|
||||||
this.callbacks.updateMeshesVisibility ();
|
this.callbacks.updateMeshesVisibility ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,6 +137,7 @@ OV.Navigator = class
|
|||||||
IsolateMesh (meshInstanceId)
|
IsolateMesh (meshInstanceId)
|
||||||
{
|
{
|
||||||
this.meshesPanel.IsolateMesh (meshInstanceId);
|
this.meshesPanel.IsolateMesh (meshInstanceId);
|
||||||
|
this.callbacks.updateMeshesVisibility ();
|
||||||
}
|
}
|
||||||
|
|
||||||
GetSelectedMeshId ()
|
GetSelectedMeshId ()
|
||||||
@ -162,7 +158,7 @@ OV.Navigator = class
|
|||||||
if (selection.type === OV.SelectionType.Material) {
|
if (selection.type === OV.SelectionType.Material) {
|
||||||
navigator.materialsPanel.GetMaterialItem (selection.materialIndex).SetSelected (select);
|
navigator.materialsPanel.GetMaterialItem (selection.materialIndex).SetSelected (select);
|
||||||
} else if (selection.type === OV.SelectionType.Mesh) {
|
} else if (selection.type === OV.SelectionType.Mesh) {
|
||||||
navigator.meshesPanel.navigatorItems.GetMeshItem (selection.meshInstanceId).SetSelected (select);
|
navigator.meshesPanel.GetMeshItem (selection.meshInstanceId).SetSelected (select);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,7 +205,7 @@ OV.Navigator = class
|
|||||||
FitNodeToWindow (nodeId)
|
FitNodeToWindow (nodeId)
|
||||||
{
|
{
|
||||||
let meshInstanceIdSet = new Set ();
|
let meshInstanceIdSet = new Set ();
|
||||||
let nodeItem = this.meshesPanel.navigatorItems.GetNodeItem (nodeId);
|
let nodeItem = this.meshesPanel.GetNodeItem (nodeId);
|
||||||
nodeItem.EnumerateMeshItems ((meshItem) => {
|
nodeItem.EnumerateMeshItems ((meshItem) => {
|
||||||
meshInstanceIdSet.add (meshItem.GetMeshInstanceId ());
|
meshInstanceIdSet.add (meshItem.GetMeshInstanceId ());
|
||||||
});
|
});
|
||||||
|
|||||||
@ -128,64 +128,3 @@ OV.NodeItem = class extends OV.TreeViewGroupButtonItem
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
OV.NavigatorItems = class
|
|
||||||
{
|
|
||||||
constructor ()
|
|
||||||
{
|
|
||||||
this.materialIndexToItem = new Map ();
|
|
||||||
this.nodeIdToItem = new Map ();
|
|
||||||
this.meshInstanceIdToItem = new Map ();
|
|
||||||
}
|
|
||||||
|
|
||||||
GetMaterialItem (materialIndex)
|
|
||||||
{
|
|
||||||
return this.materialIndexToItem.get (materialIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
AddMaterialItem (materialIndex, materialItem)
|
|
||||||
{
|
|
||||||
this.materialIndexToItem.set (materialIndex, materialItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
MeshItemCount ()
|
|
||||||
{
|
|
||||||
return this.meshInstanceIdToItem.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetNodeItem (nodeId)
|
|
||||||
{
|
|
||||||
return this.nodeIdToItem.get (nodeId);
|
|
||||||
}
|
|
||||||
|
|
||||||
AddNodeItem (nodeId, meshItem)
|
|
||||||
{
|
|
||||||
this.nodeIdToItem.set (nodeId, meshItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
GetMeshItem (meshInstanceId)
|
|
||||||
{
|
|
||||||
return this.meshInstanceIdToItem.get (meshInstanceId.GetKey ());
|
|
||||||
}
|
|
||||||
|
|
||||||
AddMeshItem (meshInstanceId, meshItem)
|
|
||||||
{
|
|
||||||
this.meshInstanceIdToItem.set (meshInstanceId.GetKey (), meshItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
EnumerateMeshItems (processor)
|
|
||||||
{
|
|
||||||
for (const meshItem of this.meshInstanceIdToItem.values ()) {
|
|
||||||
if (!processor (meshItem)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Clear ()
|
|
||||||
{
|
|
||||||
this.materialIndexToItem = new Map ();
|
|
||||||
this.nodeIdToItem = new Map ();
|
|
||||||
this.meshInstanceIdToItem = new Map ();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|||||||
@ -262,9 +262,10 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel
|
|||||||
super (parentDiv);
|
super (parentDiv);
|
||||||
|
|
||||||
this.callbacks = null;
|
this.callbacks = null;
|
||||||
|
this.nodeIdToItem = new Map ();
|
||||||
|
this.meshInstanceIdToItem = new Map ();
|
||||||
|
|
||||||
this.treeView = new OV.TreeView (this.treeDiv);
|
this.treeView = new OV.TreeView (this.treeDiv);
|
||||||
// TODO: delete
|
|
||||||
this.navigatorItems = new OV.NavigatorItems ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GetIcon ()
|
GetIcon ()
|
||||||
@ -282,7 +283,8 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel
|
|||||||
Clear ()
|
Clear ()
|
||||||
{
|
{
|
||||||
super.Clear ();
|
super.Clear ();
|
||||||
this.navigatorItems.Clear ();
|
this.nodeIdToItem = new Map ();
|
||||||
|
this.meshInstanceIdToItem = new Map ();
|
||||||
}
|
}
|
||||||
|
|
||||||
Init (callbacks)
|
Init (callbacks)
|
||||||
@ -324,7 +326,7 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel
|
|||||||
navigator.callbacks.onMeshSelected (selectedMeshId);
|
navigator.callbacks.onMeshSelected (selectedMeshId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
navigator.navigatorItems.AddMeshItem (meshInstanceId, meshItem);
|
navigator.meshInstanceIdToItem.set (meshInstanceId.GetKey (), meshItem);
|
||||||
parentItem.AddChild (meshItem);
|
parentItem.AddChild (meshItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +342,7 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel
|
|||||||
navigator.callbacks.onNodeFitToWindow (selectedNodeId);
|
navigator.callbacks.onNodeFitToWindow (selectedNodeId);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
navigator.navigatorItems.AddNodeItem (nodeId, nodeItem);
|
navigator.nodeIdToItem.set (nodeId, nodeItem);
|
||||||
return nodeItem;
|
return nodeItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -369,21 +371,40 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel
|
|||||||
AddModelNodeToTree (this, model, rootNode, meshesItem, isFlat);
|
AddModelNodeToTree (this, model, rootNode, meshesItem, isFlat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GetNodeItem (nodeId)
|
||||||
|
{
|
||||||
|
return this.nodeIdToItem.get (nodeId);
|
||||||
|
}
|
||||||
|
|
||||||
MeshItemCount ()
|
MeshItemCount ()
|
||||||
{
|
{
|
||||||
return this.navigatorItems.MeshItemCount ();
|
return this.meshInstanceIdToItem.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetMeshItem (meshInstanceId)
|
||||||
|
{
|
||||||
|
return this.meshInstanceIdToItem.get (meshInstanceId.GetKey ());
|
||||||
|
}
|
||||||
|
|
||||||
|
EnumerateMeshItems (processor)
|
||||||
|
{
|
||||||
|
for (const meshItem of this.meshInstanceIdToItem.values ()) {
|
||||||
|
if (!processor (meshItem)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
IsMeshVisible (meshInstanceId)
|
IsMeshVisible (meshInstanceId)
|
||||||
{
|
{
|
||||||
let meshItem = this.navigatorItems.GetMeshItem (meshInstanceId);
|
let meshItem = this.GetMeshItem (meshInstanceId);
|
||||||
return meshItem.IsVisible ();
|
return meshItem.IsVisible ();
|
||||||
}
|
}
|
||||||
|
|
||||||
HasHiddenMesh ()
|
HasHiddenMesh ()
|
||||||
{
|
{
|
||||||
let hasHiddenMesh = false;
|
let hasHiddenMesh = false;
|
||||||
this.navigatorItems.EnumerateMeshItems ((meshItem) => {
|
this.EnumerateMeshItems ((meshItem) => {
|
||||||
if (!meshItem.IsVisible ()) {
|
if (!meshItem.IsVisible ()) {
|
||||||
hasHiddenMesh = true;
|
hasHiddenMesh = true;
|
||||||
return false;
|
return false;
|
||||||
@ -393,10 +414,30 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel
|
|||||||
return hasHiddenMesh;
|
return hasHiddenMesh;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ShowAllMeshes ()
|
||||||
|
{
|
||||||
|
this.EnumerateMeshItems ((meshItem) => {
|
||||||
|
meshItem.SetVisible (true);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
ToggleNodeVisibility (nodeId)
|
||||||
|
{
|
||||||
|
let nodeItem = this.GetNodeItem (nodeId);
|
||||||
|
nodeItem.SetVisible (!nodeItem.IsVisible ());
|
||||||
|
}
|
||||||
|
|
||||||
|
ToggleMeshVisibility (meshInstanceId)
|
||||||
|
{
|
||||||
|
let meshItem = this.GetMeshItem (meshInstanceId);
|
||||||
|
meshItem.SetVisible (!meshItem.IsVisible ());
|
||||||
|
}
|
||||||
|
|
||||||
IsMeshIsolated (meshInstanceId)
|
IsMeshIsolated (meshInstanceId)
|
||||||
{
|
{
|
||||||
let isIsolated = true;
|
let isIsolated = true;
|
||||||
this.navigatorItems.EnumerateMeshItems ((meshItem) => {
|
this.EnumerateMeshItems ((meshItem) => {
|
||||||
if (!meshItem.GetMeshInstanceId ().IsEqual (meshInstanceId) && meshItem.IsVisible ()) {
|
if (!meshItem.GetMeshInstanceId ().IsEqual (meshInstanceId) && meshItem.IsVisible ()) {
|
||||||
isIsolated = false;
|
isIsolated = false;
|
||||||
return false;
|
return false;
|
||||||
@ -409,7 +450,7 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel
|
|||||||
IsolateMesh (meshInstanceId)
|
IsolateMesh (meshInstanceId)
|
||||||
{
|
{
|
||||||
let isIsolated = this.IsMeshIsolated (meshInstanceId);
|
let isIsolated = this.IsMeshIsolated (meshInstanceId);
|
||||||
this.navigatorItems.EnumerateMeshItems ((meshItem) => {
|
this.EnumerateMeshItems ((meshItem) => {
|
||||||
if (meshItem.GetMeshInstanceId ().IsEqual (meshInstanceId) || isIsolated) {
|
if (meshItem.GetMeshInstanceId ().IsEqual (meshInstanceId) || isIsolated) {
|
||||||
meshItem.SetVisible (true);
|
meshItem.SetVisible (true);
|
||||||
} else {
|
} else {
|
||||||
@ -417,7 +458,6 @@ OV.NavigatorMeshesPanel = class extends OV.NavigatorPanel
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
this.callbacks.updateMeshesVisibility ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UpdatePopupButton ()
|
UpdatePopupButton ()
|
||||||
|
|||||||
@ -55,20 +55,18 @@ OV.PanelSet = class
|
|||||||
|
|
||||||
AddPanel (panel)
|
AddPanel (panel)
|
||||||
{
|
{
|
||||||
let panelIndex = this.panels.length;
|
|
||||||
this.panels.push (panel);
|
this.panels.push (panel);
|
||||||
let button = OV.AddSvgIcon (this.menuDiv, panel.GetIcon (), 'ov_panel_set_menu_button');
|
let button = OV.AddSvgIcon (this.menuDiv, panel.GetIcon (), 'ov_panel_set_menu_button');
|
||||||
button.click (() => {
|
button.click (() => {
|
||||||
this.ShowPanel (panelIndex);
|
this.ShowPanel (panel);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ShowPanel (panelIndex)
|
ShowPanel (panel)
|
||||||
{
|
{
|
||||||
for (let panel of this.panels) {
|
for (let otherPanel of this.panels) {
|
||||||
panel.Show (false);
|
otherPanel.Show (false);
|
||||||
}
|
}
|
||||||
let panel = this.panels[panelIndex];
|
|
||||||
panel.Show (true);
|
panel.Show (true);
|
||||||
panel.Resize ();
|
panel.Resize ();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user