Add isolate mesh functionality.

This commit is contained in:
kovacsv 2019-01-13 12:23:01 +01:00
parent cb08f307c5
commit 8e1f24cdc5
3 changed files with 63 additions and 21 deletions

View File

@ -47,7 +47,7 @@ ImporterApp.prototype.Init = function ()
var myThis = this; var myThis = this;
var top = document.getElementById ('top'); var top = document.getElementById ('top');
this.importerButtons = new ImporterButtons (top); this.importerButtons = new ImporterButtons (top);
this.importerButtons.AddLogo ('Online 3D Viewer <span class="version">v 0.6.1</span>', function () { myThis.ShowAboutDialog (); }); this.importerButtons.AddLogo ('Online 3D Viewer <span class="version">v 0.6.2</span>', function () { myThis.ShowAboutDialog (); });
this.importerButtons.AddButton ('images/openfile.png', 'Open File', function () { myThis.OpenFile (); }); this.importerButtons.AddButton ('images/openfile.png', 'Open File', function () { myThis.OpenFile (); });
this.importerButtons.AddButton ('images/fitinwindow.png', 'Fit In Window', function () { myThis.FitInWindow (); }); this.importerButtons.AddButton ('images/fitinwindow.png', 'Fit In Window', function () { myThis.FitInWindow (); });
this.importerButtons.AddToggleButton ('images/fixup.png', 'images/fixupgray.png', 'Enable/Disable Fixed Up Vector', function () { myThis.SetFixUp (); }); this.importerButtons.AddToggleButton ('images/fixup.png', 'images/fixupgray.png', 'Enable/Disable Fixed Up Vector', function () { myThis.SetFixUp (); });
@ -170,13 +170,6 @@ ImporterApp.prototype.Resize = function ()
ImporterApp.prototype.JsonLoaded = function (progressBar) ImporterApp.prototype.JsonLoaded = function (progressBar)
{ {
var jsonData = this.viewer.GetJsonData ();
this.meshVisibility = {};
var i;
for (i = 0; i < jsonData.meshes.length; i++) {
this.meshVisibility[i] = true;
}
this.Generate (progressBar); this.Generate (progressBar);
}; };
@ -266,6 +259,7 @@ ImporterApp.prototype.GenerateMenu = function ()
}); });
} }
var visibleImage = null;
var meshMenuItem = meshesGroup.AddSubItem (mesh.name, { var meshMenuItem = meshesGroup.AddSubItem (mesh.name, {
id : 'meshmenuitem-' + meshIndex.toString (), id : 'meshmenuitem-' + meshIndex.toString (),
openCloseButton : { openCloseButton : {
@ -310,16 +304,21 @@ ImporterApp.prototype.GenerateMenu = function ()
title : 'Show/Hide Mesh', title : 'Show/Hide Mesh',
onCreate : function (image) { onCreate : function (image) {
image.attr ('src', 'images/visible.png'); image.attr ('src', 'images/visible.png');
visibleImage = image;
}, },
onClick : function (image, meshIndex) { onClick : function (image, meshIndex) {
var visible = importerApp.ShowHideMesh (meshIndex); importerApp.ShowHideMesh (meshIndex);
image.attr ('src', visible ? 'images/visible.png' : 'images/hidden.png'); },
onCtrlClick : function (image, meshIndex) {
importerApp.IsolateMesh (meshIndex);
}, },
userData : meshIndex userData : meshIndex
} }
] ]
}); });
meshMenuItem.isVisible = true;
meshMenuItem.visibleImage = visibleImage;
return meshMenuItem; return meshMenuItem;
} }
@ -468,9 +467,50 @@ ImporterApp.prototype.SetView = function (viewType)
ImporterApp.prototype.ShowHideMesh = function (meshIndex) ImporterApp.prototype.ShowHideMesh = function (meshIndex)
{ {
this.meshVisibility[meshIndex] = !this.meshVisibility[meshIndex]; var meshMenuItem = this.meshMenuItems[meshIndex];
this.viewer.ShowMesh (meshIndex, this.meshVisibility[meshIndex]); this.ShowHideMeshInternal (meshIndex, !meshMenuItem.isVisible);
return this.meshVisibility[meshIndex]; this.viewer.Draw ();
};
ImporterApp.prototype.IsolateMesh = function (meshIndex)
{
var i, meshMenuItem;
var onlyThisVisible = true;
if (!this.meshMenuItems[meshIndex].isVisible) {
onlyThisVisible = false;
} else {
for (i = 0; i < this.meshMenuItems.length; i++) {
meshMenuItem = this.meshMenuItems[i];
if (meshMenuItem.isVisible && i !== meshIndex) {
onlyThisVisible = false;
break;
}
}
}
var i;
for (i = 0; i < this.meshMenuItems.length; i++) {
if (onlyThisVisible) {
this.ShowHideMeshInternal (i, true);
} else {
if (i == meshIndex) {
this.ShowHideMeshInternal (i, true);
} else {
this.ShowHideMeshInternal (i, false);
}
}
}
this.viewer.Draw ();
};
ImporterApp.prototype.ShowHideMeshInternal = function (meshIndex, isVisible)
{
var meshMenuItem = this.meshMenuItems[meshIndex];
meshMenuItem.isVisible = isVisible;
meshMenuItem.visibleImage.attr ('src', meshMenuItem.isVisible ? 'images/visible.png' : 'images/hidden.png');
this.viewer.ShowMesh (meshIndex, meshMenuItem.isVisible);
}; };
ImporterApp.prototype.ProcessFiles = function (fileList, isUrl) ImporterApp.prototype.ProcessFiles = function (fileList, isUrl)
@ -571,6 +611,8 @@ ImporterApp.prototype.HighlightMesh = function (meshIndex)
} }
} }
} }
this.viewer.Draw ();
}; };
ImporterApp.prototype.OnCanvasClick = function (x, y) ImporterApp.prototype.OnCanvasClick = function (x, y)

View File

@ -102,10 +102,14 @@ ImporterMenuItem.prototype.AddUserButton = function (userButton)
if (IsSet (userButton.onCreate)) { if (IsSet (userButton.onCreate)) {
userButton.onCreate (userImage, userButton.userData); userButton.onCreate (userImage, userButton.userData);
} }
if (IsSet (userButton.onClick)) { if (IsSet (userButton.onClick) || IsSet (userButton.onCtrlClick)) {
userImage.click (function (event) { userImage.click (function (event) {
event.stopPropagation (); event.stopPropagation ();
userButton.onClick (userImage, userButton.userData); if (event.ctrlKey && IsSet (userButton.onCtrlClick)) {
userButton.onCtrlClick (userImage, userButton.userData);
} else if (IsSet (userButton.onClick)) {
userButton.onClick (userImage, userButton.userData);
}
}); });
} }
}; };

View File

@ -85,24 +85,21 @@ ImporterViewer.prototype.GetMeshesUnderPosition = function (x, y)
ImporterViewer.prototype.ShowMesh = function (index, show) ImporterViewer.prototype.ShowMesh = function (index, show)
{ {
var myThis = this;
this.viewer.scene.traverse (function (current) { this.viewer.scene.traverse (function (current) {
if (current instanceof THREE.Mesh) { if (current instanceof THREE.Mesh) {
if (current.originalJsonIndex == index) { if (current.originalJsonIndex == index) {
if (show) { if (show) {
myThis.viewer.ShowMesh (current); current.visible = true;
} else { } else {
myThis.viewer.HideMesh (current); current.visible = false;
} }
} }
} }
}); });
this.viewer.Draw ();
}; };
ImporterViewer.prototype.HighlightMesh = function (index, highlight) ImporterViewer.prototype.HighlightMesh = function (index, highlight)
{ {
var myThis = this;
this.viewer.scene.traverse (function (current) { this.viewer.scene.traverse (function (current) {
if (current instanceof THREE.Mesh) { if (current instanceof THREE.Mesh) {
if (current.originalJsonIndex == index) { if (current.originalJsonIndex == index) {
@ -114,7 +111,6 @@ ImporterViewer.prototype.HighlightMesh = function (index, highlight)
} }
} }
}); });
this.viewer.Draw ();
}; };
ImporterViewer.prototype.FitInWindow = function () ImporterViewer.prototype.FitInWindow = function ()