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;
}
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);
},

View File

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

View File

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

View File

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

View File

@ -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;

View File

@ -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)
$('<div>').html ('Default Color').addClass ('ov_dialog_table_row_name').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);
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;

View File

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

View File

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