Fix mesh isolation.

This commit is contained in:
kovacsv 2021-11-05 17:57:20 +01:00
parent 26d9be2a19
commit d8d4d1fb3e
4 changed files with 62 additions and 89 deletions

View File

@ -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 ());
}); });

View File

@ -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 ();
}
};

View File

@ -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 ()

View File

@ -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 ();
} }