Make a parameter from default color instead of the a member in importer.
This commit is contained in:
parent
c958cf549c
commit
6fbbdf4b69
16
source/external/three.model.loader.js
vendored
16
source/external/three.model.loader.js
vendored
@ -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);
|
||||
},
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 ();
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user