ModelHandle/source/external/threemodelloader.js
2021-07-13 07:30:22 +02:00

91 lines
2.5 KiB
JavaScript

OV.ThreeModelLoader = class
{
constructor ()
{
this.importer = new OV.Importer ();
this.importer.AddImporter (new OV.Importer3dm ());
this.importer.AddImporter (new OV.ImporterIfc ());
this.callbacks = null;
this.inProgress = false;
this.defaultMaterial = null;
this.hasHighpDriverIssue = OV.HasHighpDriverIssue ();
}
Init (callbacks)
{
this.callbacks = callbacks;
}
LoadFromUrlList (urls, settings)
{
if (this.inProgress) {
return;
}
this.inProgress = true;
this.callbacks.onLoadStart ();
this.importer.LoadFilesFromUrls (urls, () => {
this.OnFilesLoaded (settings);
});
}
LoadFromFileList (files, settings)
{
if (this.inProgress) {
return;
}
this.inProgress = true;
this.callbacks.onLoadStart ();
this.importer.LoadFilesFromFileObjects (files, () => {
this.OnFilesLoaded (settings);
});
}
OnFilesLoaded (settings)
{
this.callbacks.onImportStart ();
OV.RunTaskAsync (() => {
this.importer.Import (settings, {
onSuccess : (importResult) => {
this.OnModelImported (importResult);
},
onError : (importError) => {
this.callbacks.onLoadError (importError);
this.inProgress = false;
}
});
});
}
OnModelImported (importResult)
{
this.callbacks.onVisualizationStart ();
let params = new OV.ModelToThreeConversionParams ();
params.forceMediumpForMaterials = this.hasHighpDriverIssue;
let output = new OV.ModelToThreeConversionOutput ();
OV.ConvertModelToThreeMeshes (importResult.model, params, output, {
onTextureLoaded : () => {
this.callbacks.onTextureLoaded ();
},
onModelLoaded : (meshes) => {
this.defaultMaterial = output.defaultMaterial;
this.callbacks.onModelFinished (importResult, meshes);
this.inProgress = false;
}
});
}
GetImporter ()
{
return this.importer;
}
ReplaceDefaultMaterialColor (defaultColor)
{
if (this.defaultMaterial !== null) {
this.defaultMaterial.color = new THREE.Color (defaultColor.r / 255.0, defaultColor.g / 255.0, defaultColor.b / 255.0);
}
}
};