Make a parameter from default color instead of the a member in importer.

This commit is contained in:
Viktor Kovacs 2021-04-07 15:07:12 +02:00
parent c958cf549c
commit 6fbbdf4b69
8 changed files with 82 additions and 72 deletions

View File

@ -12,7 +12,7 @@ OV.ThreeModelLoader = class
this.callbacks = callbacks; this.callbacks = callbacks;
} }
LoadFromUrlList (urls) LoadFromUrlList (urls, settings)
{ {
if (this.inProgress) { if (this.inProgress) {
return; return;
@ -22,11 +22,11 @@ OV.ThreeModelLoader = class
this.inProgress = true; this.inProgress = true;
this.callbacks.onLoadStart (); this.callbacks.onLoadStart ();
this.importer.LoadFilesFromUrls (urls, function () { this.importer.LoadFilesFromUrls (urls, function () {
obj.OnFilesLoaded (); obj.OnFilesLoaded (settings);
}); });
} }
LoadFromFileList (files) LoadFromFileList (files, settings)
{ {
if (this.inProgress) { if (this.inProgress) {
return; return;
@ -36,11 +36,11 @@ OV.ThreeModelLoader = class
this.inProgress = true; this.inProgress = true;
this.callbacks.onLoadStart (); this.callbacks.onLoadStart ();
this.importer.LoadFilesFromFileObjects (files, function () { this.importer.LoadFilesFromFileObjects (files, function () {
obj.OnFilesLoaded (); obj.OnFilesLoaded (settings);
}); });
} }
ReloadFiles () ReloadFiles (settings)
{ {
if (this.inProgress) { if (this.inProgress) {
return; return;
@ -48,15 +48,15 @@ OV.ThreeModelLoader = class
this.inProgress = true; this.inProgress = true;
this.callbacks.onLoadStart (); this.callbacks.onLoadStart ();
this.OnFilesLoaded (); this.OnFilesLoaded (settings);
} }
OnFilesLoaded () OnFilesLoaded (settings)
{ {
let obj = this; let obj = this;
this.callbacks.onImportStart (); this.callbacks.onImportStart ();
OV.RunTaskAsync (function () { OV.RunTaskAsync (function () {
obj.importer.Import ({ obj.importer.Import (settings, {
success : function (importResult) { success : function (importResult) {
obj.OnModelImported (importResult); obj.OnModelImported (importResult);
}, },

View File

@ -179,6 +179,14 @@ OV.FileList = class
} }
}; };
OV.ImportSettings = class
{
constructor ()
{
this.defaultColor = new OV.Color (200, 200, 200);
}
};
OV.ImportErrorCode = OV.ImportErrorCode =
{ {
NoImportableFile : 1, NoImportableFile : 1,
@ -207,7 +215,7 @@ OV.ImportResult = class
} }
}; };
OV.ImporterBuffers = class OV.ImportBuffers = class
{ {
constructor (getBufferCallback) constructor (getBufferCallback)
{ {
@ -260,7 +268,6 @@ OV.Importer = class
new OV.ImporterGltf () new OV.ImporterGltf ()
]; ];
this.fileList = new OV.FileList (this.importers); this.fileList = new OV.FileList (this.importers);
this.defaultColor = new OV.Color (200, 200, 200);
this.model = null; this.model = null;
this.usedFiles = []; this.usedFiles = [];
this.missingFiles = []; this.missingFiles = [];
@ -276,17 +283,7 @@ OV.Importer = class
this.LoadFiles (fileList, OV.FileSource.File, onReady); this.LoadFiles (fileList, OV.FileSource.File, onReady);
} }
GetDefaultColor () Import (settings, callbacks)
{
return this.defaultColor;
}
SetDefaultColor (defaultColor)
{
this.defaultColor = defaultColor;
}
Import (callbacks)
{ {
let mainFile = this.fileList.GetMainFile (); let mainFile = this.fileList.GetMainFile ();
if (mainFile === null || mainFile.file === null || mainFile.file.content === null) { if (mainFile === null || mainFile.file === null || mainFile.file.content === null) {
@ -305,7 +302,7 @@ OV.Importer = class
let obj = this; let obj = this;
let importer = mainFile.importer; let importer = mainFile.importer;
let buffers = new OV.ImporterBuffers (function (fileName) { let buffers = new OV.ImportBuffers (function (fileName) {
let fileBuffer = null; let fileBuffer = null;
let file = obj.fileList.FindFileByPath (fileName); let file = obj.fileList.FindFileByPath (fileName);
if (file === null || file.content === null) { if (file === null || file.content === null) {
@ -321,7 +318,7 @@ OV.Importer = class
importer.Import (mainFile.file.content, mainFile.file.extension, { importer.Import (mainFile.file.content, mainFile.file.extension, {
getDefaultMaterial : function () { getDefaultMaterial : function () {
let material = new OV.Material (); let material = new OV.Material ();
material.diffuse = obj.defaultColor; material.diffuse = settings.defaultColor;
return material; return material;
}, },
getFileBuffer : function (filePath) { getFileBuffer : function (filePath) {

View File

@ -66,16 +66,16 @@ OV.Init3DViewerElements = function ()
return; return;
} }
let settings = new OV.ImportSettings ();
let colorParams = element.getAttribute ('color'); let colorParams = element.getAttribute ('color');
if (colorParams) { if (colorParams) {
let color = OV.ParameterConverter.StringToColor (colorParams); let color = OV.ParameterConverter.StringToColor (colorParams);
if (color !== null) { if (color !== null) {
let importer = loader.GetImporter (); settings.defaultColor = color;
importer.SetDefaultColor (color);
} }
} }
loader.LoadFromUrlList (modelUrls); loader.LoadFromUrlList (modelUrls, settings);
return { return {
element: element, element: element,
viewer: viewer viewer: viewer

View File

@ -4,7 +4,8 @@ var path = require ('path');
function ImportFilesWithImporter (importer, files, callbacks) function ImportFilesWithImporter (importer, files, callbacks)
{ {
importer.LoadFilesFromFileObjects (files, function () { importer.LoadFilesFromFileObjects (files, function () {
importer.Import ({ let settings = new OV.ImportSettings ();
importer.Import (settings, {
success : function (importResult) { success : function (importResult) {
callbacks.success (importer, importResult); callbacks.success (importer, importResult);
}, },
@ -239,20 +240,21 @@ describe ('Importer Test', function () {
new FileObject ('stl', 'single_triangle.stl') new FileObject ('stl', 'single_triangle.stl')
]; ];
let theImporter = new OV.Importer (); let theImporter = new OV.Importer ();
assert.deepStrictEqual (theImporter.GetDefaultColor (), new OV.Color (200, 200, 200)); theImporter.LoadFilesFromFileObjects (files, function () {
theImporter.SetDefaultColor (new OV.Color (200, 0, 0)); let settings = new OV.ImportSettings ();
assert.deepStrictEqual (theImporter.GetDefaultColor (), new OV.Color (200, 0, 0)); settings.defaultColor = new OV.Color (200, 0, 0);
ImportFilesWithImporter (theImporter, files, { theImporter.Import (settings, {
success : function (importer, importResult) { success : function (importResult) {
assert (!OV.IsModelEmpty (importResult.model)); assert (!OV.IsModelEmpty (importResult.model));
assert.deepStrictEqual (importResult.usedFiles, ['single_triangle.stl']); assert.deepStrictEqual (importResult.usedFiles, ['single_triangle.stl']);
assert.deepStrictEqual (importResult.missingFiles, []); assert.deepStrictEqual (importResult.missingFiles, []);
let material = importResult.model.GetMaterial (0); let material = importResult.model.GetMaterial (0);
assert.deepStrictEqual (material.diffuse, new OV.Color (200, 0, 0)); assert.deepStrictEqual (material.diffuse, new OV.Color (200, 0, 0));
}, },
error : function (importer, importError) { error : function (importError) {
assert.fail (); assert.fail ();
} }
});
}); });
}); });
}); });

View File

@ -52,7 +52,7 @@ module.exports =
content = testUtils.GetArrayBufferFileContent (folder, fileName); content = testUtils.GetArrayBufferFileContent (folder, fileName);
} }
var extension = OV.GetFileExtension (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 extension = OV.GetFileExtension (filePath);
let knownFormats = importer.GetKnownFileFormats (); let knownFormats = importer.GetKnownFileFormats ();
let format = OV.FileFormat.Binary; let format = OV.FileFormat.Binary;

View File

@ -156,7 +156,7 @@ OV.ShowExportDialog = function (model)
return dialog; return dialog;
}; };
OV.ShowEmbeddingDialog = function (importer, camera) OV.ShowEmbeddingDialog = function (importer, importSettings, camera)
{ {
function AddCheckboxLine (parentDiv, text, onChange) function AddCheckboxLine (parentDiv, text, onChange)
{ {
@ -228,10 +228,10 @@ OV.ShowEmbeddingDialog = function (importer, camera)
if (OV.FeatureSet.SetDefaultColor) { if (OV.FeatureSet.SetDefaultColor) {
AddCheckboxLine (optionsSection, 'Use overridden default color', function (checked) { AddCheckboxLine (optionsSection, 'Use overridden default color', function (checked) {
embeddingParams.color = checked ? importer.GetDefaultColor () : null; embeddingParams.color = checked ? importSettings.defaultColor : null;
urlsTextArea.val (GetEmbeddingCode (embeddingParams)); urlsTextArea.val (GetEmbeddingCode (embeddingParams));
}); });
embeddingParams.color = importer.GetDefaultColor (); embeddingParams.color = importSettings.defaultColor;
} }
urlsTextArea.val (GetEmbeddingCode (embeddingParams)); urlsTextArea.val (GetEmbeddingCode (embeddingParams));
@ -257,10 +257,10 @@ OV.ShowEmbeddingDialog = function (importer, camera)
return dialog; return dialog;
}; };
OV.ShowSettingsDialog = function (importer, onOk) OV.ShowSettingsDialog = function (importSettings, onOk)
{ {
let settings = { let dialogSettings = {
defaultColor : importer.GetDefaultColor () defaultColor : importSettings.defaultColor
}; };
let dialog = new OV.ButtonDialog (); let dialog = new OV.ButtonDialog ();
let contentDiv = dialog.Init ('Settings', [ let contentDiv = dialog.Init ('Settings', [
@ -275,7 +275,7 @@ OV.ShowSettingsDialog = function (importer, onOk)
name : 'OK', name : 'OK',
onClick () { onClick () {
dialog.Hide (); dialog.Hide ();
onOk (settings); onOk (dialogSettings);
} }
} }
]); ]);
@ -284,10 +284,10 @@ OV.ShowSettingsDialog = function (importer, onOk)
$('<div>').html ('Default Color').addClass ('ov_dialog_table_row_name').appendTo (colorRow); $('<div>').html ('Default Color').addClass ('ov_dialog_table_row_name').appendTo (colorRow);
let valueColumn = $('<div>').addClass ('ov_dialog_table_row_value').appendTo (colorRow); let valueColumn = $('<div>').addClass ('ov_dialog_table_row_value').appendTo (colorRow);
let colorInput = $('<input>').attr ('type', 'color').addClass ('ov_dialog_color').appendTo (valueColumn); let colorInput = $('<input>').attr ('type', 'color').addClass ('ov_dialog_color').appendTo (valueColumn);
colorInput.val ('#' + OV.ColorToHexString (settings.defaultColor)); colorInput.val ('#' + OV.ColorToHexString (dialogSettings.defaultColor));
colorInput.change (function () { colorInput.change (function () {
let colorStr = colorInput.val ().substr (1); let colorStr = colorInput.val ().substr (1);
settings.defaultColor = OV.HexStringToColor (colorStr); dialogSettings.defaultColor = OV.HexStringToColor (colorStr);
}); });
dialog.Show (); dialog.Show ();
return dialog; return dialog;

View File

@ -20,7 +20,12 @@ OV.Embed = class
if (urls === null) { if (urls === null) {
return; 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 hashParameters = OV.CreateModelUrlParameters (urls);
let websiteUrl = this.parameters.websiteLinkDiv.attr ('href') + '#' + hashParameters; let websiteUrl = this.parameters.websiteLinkDiv.attr ('href') + '#' + hashParameters;
this.parameters.websiteLinkDiv.attr ('href', websiteUrl); this.parameters.websiteLinkDiv.attr ('href', websiteUrl);
@ -72,10 +77,5 @@ OV.Embed = class
obj.viewer.Render (); obj.viewer.Render ();
} }
}); });
let color = this.hashHandler.GetColorFromHash ();
if (color !== null) {
let importer = this.modelLoader.GetImporter ();
importer.SetDefaultColor (color);
}
} }
}; };

View File

@ -7,6 +7,7 @@ OV.Website = class
this.hashHandler = new OV.HashHandler (); this.hashHandler = new OV.HashHandler ();
this.toolbar = new OV.Toolbar (this.parameters.toolbarDiv); this.toolbar = new OV.Toolbar (this.parameters.toolbarDiv);
this.menu = new OV.Menu (this.parameters.menuDiv); this.menu = new OV.Menu (this.parameters.menuDiv);
this.importSettings = new OV.ImportSettings ();
this.modelLoader = new OV.ThreeModelLoader (); this.modelLoader = new OV.ThreeModelLoader ();
this.highlightMaterial = new THREE.MeshPhongMaterial ({ this.highlightMaterial = new THREE.MeshPhongMaterial ({
color : 0x8ec9f0, 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 (); this.ClearHashIfNotOnlyUrlList ();
} }
LoadModelFromFileList (files) LoadModelFromFileList (files)
{ {
if (files.length === 0) { this.modelLoader.LoadFromFileList (files, this.importSettings);
return;
}
this.modelLoader.LoadFromFileList (files);
this.ClearHashIfNotOnlyUrlList (); this.ClearHashIfNotOnlyUrlList ();
} }
ReloadFiles () ReloadFiles ()
{ {
this.modelLoader.ReloadFiles (); if (this.model === null) {
return;
}
this.modelLoader.ReloadFiles (this.importSettings);
} }
ClearHashIfNotOnlyUrlList () ClearHashIfNotOnlyUrlList ()
@ -191,7 +192,13 @@ OV.Website = class
if (urls === null) { if (urls === null) {
return; 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 { } else {
this.ClearModel (); this.ClearModel ();
this.parameters.introDiv.show (); this.parameters.introDiv.show ();
@ -276,15 +283,15 @@ OV.Website = class
obj.dialog = OV.ShowExportDialog (obj.model); obj.dialog = OV.ShowExportDialog (obj.model);
}); });
AddButton (this.toolbar, 'embed', 'Get embedding code', true, function () { 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) { if (OV.FeatureSet.SetDefaultColor) {
AddSeparator (this.toolbar, true); AddSeparator (this.toolbar, true);
AddButton (this.toolbar, 'export', 'Settings', true, function () { 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; let reload = false;
if (!OV.ColorIsEqual (importer.GetDefaultColor (), settings.defaultColor)) { if (!OV.ColorIsEqual (obj.importSettings.defaultColor, dialogSettings.defaultColor)) {
importer.SetDefaultColor (settings.defaultColor); obj.importSettings.defaultColor = dialogSettings.defaultColor;
reload = true; reload = true;
} }
if (reload) { if (reload) {
@ -295,7 +302,9 @@ OV.Website = class
} }
this.parameters.fileInput.on ('change', function (ev) { 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) { window.addEventListener ('drop', function (ev) {
ev.stopPropagation (); ev.stopPropagation ();
ev.preventDefault (); ev.preventDefault ();
obj.LoadModelFromFileList (ev.dataTransfer.files); if (ev.dataTransfer.files.length > 0) {
obj.LoadModelFromFileList (ev.dataTransfer.files);
}
}, false); }, false);
} }