From 6fbbdf4b6990004a650dfd3216eac24bac657c6b Mon Sep 17 00:00:00 2001 From: Viktor Kovacs Date: Wed, 7 Apr 2021 15:07:12 +0200 Subject: [PATCH] Make a parameter from default color instead of the a member in importer. --- source/external/three.model.loader.js | 16 +++++------ source/import/importer.js | 27 +++++++++---------- source/viewer/domviewer.js | 8 +++--- test/tests/importer_test.js | 32 +++++++++++----------- test/utils/testfiles.js | 2 +- website/o3dv/dialogs.js | 18 ++++++------- website/o3dv/embed.js | 12 ++++----- website/o3dv/website.js | 39 +++++++++++++++++---------- 8 files changed, 82 insertions(+), 72 deletions(-) diff --git a/source/external/three.model.loader.js b/source/external/three.model.loader.js index 181263d..62154d4 100644 --- a/source/external/three.model.loader.js +++ b/source/external/three.model.loader.js @@ -12,7 +12,7 @@ OV.ThreeModelLoader = class this.callbacks = callbacks; } - LoadFromUrlList (urls) + LoadFromUrlList (urls, settings) { if (this.inProgress) { return; @@ -22,11 +22,11 @@ OV.ThreeModelLoader = class this.inProgress = true; this.callbacks.onLoadStart (); this.importer.LoadFilesFromUrls (urls, function () { - obj.OnFilesLoaded (); + obj.OnFilesLoaded (settings); }); } - LoadFromFileList (files) + LoadFromFileList (files, settings) { if (this.inProgress) { return; @@ -36,11 +36,11 @@ OV.ThreeModelLoader = class this.inProgress = true; this.callbacks.onLoadStart (); this.importer.LoadFilesFromFileObjects (files, function () { - obj.OnFilesLoaded (); + obj.OnFilesLoaded (settings); }); } - ReloadFiles () + ReloadFiles (settings) { if (this.inProgress) { return; @@ -48,15 +48,15 @@ OV.ThreeModelLoader = class this.inProgress = true; this.callbacks.onLoadStart (); - this.OnFilesLoaded (); + this.OnFilesLoaded (settings); } - OnFilesLoaded () + OnFilesLoaded (settings) { let obj = this; this.callbacks.onImportStart (); OV.RunTaskAsync (function () { - obj.importer.Import ({ + obj.importer.Import (settings, { success : function (importResult) { obj.OnModelImported (importResult); }, diff --git a/source/import/importer.js b/source/import/importer.js index cc0bbb3..7883d1e 100644 --- a/source/import/importer.js +++ b/source/import/importer.js @@ -179,6 +179,14 @@ OV.FileList = class } }; +OV.ImportSettings = class +{ + constructor () + { + this.defaultColor = new OV.Color (200, 200, 200); + } +}; + OV.ImportErrorCode = { NoImportableFile : 1, @@ -207,7 +215,7 @@ OV.ImportResult = class } }; -OV.ImporterBuffers = class +OV.ImportBuffers = class { constructor (getBufferCallback) { @@ -260,7 +268,6 @@ OV.Importer = class new OV.ImporterGltf () ]; this.fileList = new OV.FileList (this.importers); - this.defaultColor = new OV.Color (200, 200, 200); this.model = null; this.usedFiles = []; this.missingFiles = []; @@ -276,17 +283,7 @@ OV.Importer = class this.LoadFiles (fileList, OV.FileSource.File, onReady); } - GetDefaultColor () - { - return this.defaultColor; - } - - SetDefaultColor (defaultColor) - { - this.defaultColor = defaultColor; - } - - Import (callbacks) + Import (settings, callbacks) { let mainFile = this.fileList.GetMainFile (); if (mainFile === null || mainFile.file === null || mainFile.file.content === null) { @@ -305,7 +302,7 @@ OV.Importer = class let obj = this; let importer = mainFile.importer; - let buffers = new OV.ImporterBuffers (function (fileName) { + let buffers = new OV.ImportBuffers (function (fileName) { let fileBuffer = null; let file = obj.fileList.FindFileByPath (fileName); if (file === null || file.content === null) { @@ -321,7 +318,7 @@ OV.Importer = class importer.Import (mainFile.file.content, mainFile.file.extension, { getDefaultMaterial : function () { let material = new OV.Material (); - material.diffuse = obj.defaultColor; + material.diffuse = settings.defaultColor; return material; }, getFileBuffer : function (filePath) { diff --git a/source/viewer/domviewer.js b/source/viewer/domviewer.js index 3a51b2e..1f3f88d 100644 --- a/source/viewer/domviewer.js +++ b/source/viewer/domviewer.js @@ -66,16 +66,16 @@ OV.Init3DViewerElements = function () return; } + let settings = new OV.ImportSettings (); let colorParams = element.getAttribute ('color'); if (colorParams) { let color = OV.ParameterConverter.StringToColor (colorParams); if (color !== null) { - let importer = loader.GetImporter (); - importer.SetDefaultColor (color); + settings.defaultColor = color; } - } + } - loader.LoadFromUrlList (modelUrls); + loader.LoadFromUrlList (modelUrls, settings); return { element: element, viewer: viewer diff --git a/test/tests/importer_test.js b/test/tests/importer_test.js index 16cfa26..b7b9cf5 100644 --- a/test/tests/importer_test.js +++ b/test/tests/importer_test.js @@ -4,7 +4,8 @@ var path = require ('path'); function ImportFilesWithImporter (importer, files, callbacks) { importer.LoadFilesFromFileObjects (files, function () { - importer.Import ({ + let settings = new OV.ImportSettings (); + importer.Import (settings, { success : function (importResult) { callbacks.success (importer, importResult); }, @@ -239,20 +240,21 @@ describe ('Importer Test', function () { new FileObject ('stl', 'single_triangle.stl') ]; let theImporter = new OV.Importer (); - assert.deepStrictEqual (theImporter.GetDefaultColor (), new OV.Color (200, 200, 200)); - theImporter.SetDefaultColor (new OV.Color (200, 0, 0)); - assert.deepStrictEqual (theImporter.GetDefaultColor (), new OV.Color (200, 0, 0)); - ImportFilesWithImporter (theImporter, files, { - success : function (importer, importResult) { - assert (!OV.IsModelEmpty (importResult.model)); - assert.deepStrictEqual (importResult.usedFiles, ['single_triangle.stl']); - assert.deepStrictEqual (importResult.missingFiles, []); - let material = importResult.model.GetMaterial (0); - assert.deepStrictEqual (material.diffuse, new OV.Color (200, 0, 0)); - }, - error : function (importer, importError) { - assert.fail (); - } + theImporter.LoadFilesFromFileObjects (files, function () { + let settings = new OV.ImportSettings (); + settings.defaultColor = new OV.Color (200, 0, 0); + theImporter.Import (settings, { + success : function (importResult) { + assert (!OV.IsModelEmpty (importResult.model)); + assert.deepStrictEqual (importResult.usedFiles, ['single_triangle.stl']); + assert.deepStrictEqual (importResult.missingFiles, []); + let material = importResult.model.GetMaterial (0); + assert.deepStrictEqual (material.diffuse, new OV.Color (200, 0, 0)); + }, + error : function (importError) { + assert.fail (); + } + }); }); }); }); diff --git a/test/utils/testfiles.js b/test/utils/testfiles.js index 7c9b6c0..4b87c90 100644 --- a/test/utils/testfiles.js +++ b/test/utils/testfiles.js @@ -52,7 +52,7 @@ module.exports = content = testUtils.GetArrayBufferFileContent (folder, fileName); } var extension = OV.GetFileExtension (fileName); - let buffers = new OV.ImporterBuffers (function (filePath) { + let buffers = new OV.ImportBuffers (function (filePath) { let extension = OV.GetFileExtension (filePath); let knownFormats = importer.GetKnownFileFormats (); let format = OV.FileFormat.Binary; diff --git a/website/o3dv/dialogs.js b/website/o3dv/dialogs.js index 3ac9292..10950b4 100644 --- a/website/o3dv/dialogs.js +++ b/website/o3dv/dialogs.js @@ -156,7 +156,7 @@ OV.ShowExportDialog = function (model) return dialog; }; -OV.ShowEmbeddingDialog = function (importer, camera) +OV.ShowEmbeddingDialog = function (importer, importSettings, camera) { function AddCheckboxLine (parentDiv, text, onChange) { @@ -228,10 +228,10 @@ OV.ShowEmbeddingDialog = function (importer, camera) if (OV.FeatureSet.SetDefaultColor) { AddCheckboxLine (optionsSection, 'Use overridden default color', function (checked) { - embeddingParams.color = checked ? importer.GetDefaultColor () : null; + embeddingParams.color = checked ? importSettings.defaultColor : null; urlsTextArea.val (GetEmbeddingCode (embeddingParams)); }); - embeddingParams.color = importer.GetDefaultColor (); + embeddingParams.color = importSettings.defaultColor; } urlsTextArea.val (GetEmbeddingCode (embeddingParams)); @@ -257,10 +257,10 @@ OV.ShowEmbeddingDialog = function (importer, camera) return dialog; }; -OV.ShowSettingsDialog = function (importer, onOk) +OV.ShowSettingsDialog = function (importSettings, onOk) { - let settings = { - defaultColor : importer.GetDefaultColor () + let dialogSettings = { + defaultColor : importSettings.defaultColor }; let dialog = new OV.ButtonDialog (); let contentDiv = dialog.Init ('Settings', [ @@ -275,7 +275,7 @@ OV.ShowSettingsDialog = function (importer, onOk) name : 'OK', onClick () { dialog.Hide (); - onOk (settings); + onOk (dialogSettings); } } ]); @@ -284,10 +284,10 @@ OV.ShowSettingsDialog = function (importer, onOk) $('
').html ('Default Color').addClass ('ov_dialog_table_row_name').appendTo (colorRow); let valueColumn = $('
').addClass ('ov_dialog_table_row_value').appendTo (colorRow); let colorInput = $('').attr ('type', 'color').addClass ('ov_dialog_color').appendTo (valueColumn); - colorInput.val ('#' + OV.ColorToHexString (settings.defaultColor)); + colorInput.val ('#' + OV.ColorToHexString (dialogSettings.defaultColor)); colorInput.change (function () { let colorStr = colorInput.val ().substr (1); - settings.defaultColor = OV.HexStringToColor (colorStr); + dialogSettings.defaultColor = OV.HexStringToColor (colorStr); }); dialog.Show (); return dialog; diff --git a/website/o3dv/embed.js b/website/o3dv/embed.js index d2c7021..474a7bc 100644 --- a/website/o3dv/embed.js +++ b/website/o3dv/embed.js @@ -20,7 +20,12 @@ OV.Embed = class if (urls === null) { return; } - this.modelLoader.LoadFromUrlList (urls); + let settings = new OV.ImportSettings (); + let color = this.hashHandler.GetColorFromHash (); + if (color !== null) { + settings.defaultColor = color; + } + this.modelLoader.LoadFromUrlList (urls, settings); let hashParameters = OV.CreateModelUrlParameters (urls); let websiteUrl = this.parameters.websiteLinkDiv.attr ('href') + '#' + hashParameters; this.parameters.websiteLinkDiv.attr ('href', websiteUrl); @@ -72,10 +77,5 @@ OV.Embed = class obj.viewer.Render (); } }); - let color = this.hashHandler.GetColorFromHash (); - if (color !== null) { - let importer = this.modelLoader.GetImporter (); - importer.SetDefaultColor (color); - } } }; diff --git a/website/o3dv/website.js b/website/o3dv/website.js index 261f0d9..48280e8 100644 --- a/website/o3dv/website.js +++ b/website/o3dv/website.js @@ -7,6 +7,7 @@ OV.Website = class this.hashHandler = new OV.HashHandler (); this.toolbar = new OV.Toolbar (this.parameters.toolbarDiv); this.menu = new OV.Menu (this.parameters.menuDiv); + this.importSettings = new OV.ImportSettings (); this.modelLoader = new OV.ThreeModelLoader (); this.highlightMaterial = new THREE.MeshPhongMaterial ({ color : 0x8ec9f0, @@ -154,24 +155,24 @@ OV.Website = class }); } - LoadModelFromUrlList (urls) + LoadModelFromUrlList (urls, settings) { - this.modelLoader.LoadFromUrlList (urls); + this.modelLoader.LoadFromUrlList (urls, settings); this.ClearHashIfNotOnlyUrlList (); } LoadModelFromFileList (files) { - if (files.length === 0) { - return; - } - this.modelLoader.LoadFromFileList (files); + this.modelLoader.LoadFromFileList (files, this.importSettings); this.ClearHashIfNotOnlyUrlList (); } ReloadFiles () { - this.modelLoader.ReloadFiles (); + if (this.model === null) { + return; + } + this.modelLoader.ReloadFiles (this.importSettings); } ClearHashIfNotOnlyUrlList () @@ -191,7 +192,13 @@ OV.Website = class if (urls === null) { return; } - this.LoadModelFromUrlList (urls); + let settings = new OV.ImportSettings (); + settings.defaultColor = this.importSettings.defaultColor; + let color = this.hashHandler.GetColorFromHash (); + if (color !== null) { + settings.defaultColor = color; + } + this.LoadModelFromUrlList (urls, settings); } else { this.ClearModel (); this.parameters.introDiv.show (); @@ -276,15 +283,15 @@ OV.Website = class obj.dialog = OV.ShowExportDialog (obj.model); }); AddButton (this.toolbar, 'embed', 'Get embedding code', true, function () { - obj.dialog = OV.ShowEmbeddingDialog (importer, obj.viewer.GetCamera ()); + obj.dialog = OV.ShowEmbeddingDialog (importer, obj.importSettings, obj.viewer.GetCamera ()); }); if (OV.FeatureSet.SetDefaultColor) { AddSeparator (this.toolbar, true); AddButton (this.toolbar, 'export', 'Settings', true, function () { - obj.dialog = OV.ShowSettingsDialog (importer, function (settings) { + obj.dialog = OV.ShowSettingsDialog (obj.importSettings, function (dialogSettings) { let reload = false; - if (!OV.ColorIsEqual (importer.GetDefaultColor (), settings.defaultColor)) { - importer.SetDefaultColor (settings.defaultColor); + if (!OV.ColorIsEqual (obj.importSettings.defaultColor, dialogSettings.defaultColor)) { + obj.importSettings.defaultColor = dialogSettings.defaultColor; reload = true; } if (reload) { @@ -295,7 +302,9 @@ OV.Website = class } this.parameters.fileInput.on ('change', function (ev) { - obj.LoadModelFromFileList (ev.target.files); + if (ev.target.files.length > 0) { + obj.LoadModelFromFileList (ev.target.files); + } }); } @@ -315,7 +324,9 @@ OV.Website = class window.addEventListener ('drop', function (ev) { ev.stopPropagation (); ev.preventDefault (); - obj.LoadModelFromFileList (ev.dataTransfer.files); + if (ev.dataTransfer.files.length > 0) { + obj.LoadModelFromFileList (ev.dataTransfer.files); + } }, false); }