127 lines
4.7 KiB
JavaScript
127 lines
4.7 KiB
JavaScript
import { CreateModelUrlParameters } from '../engine/parameters/parameterlist.js';
|
|
import { TransformFileHostUrls } from '../engine/io/fileutils.js';
|
|
import { ImportSettings } from '../engine/import/importer.js';
|
|
import { AddDomElement } from '../engine/viewer/domutils.js';
|
|
import { Viewer } from '../engine/viewer/viewer.js';
|
|
import { HashHandler } from './hashhandler.js';
|
|
import { ThreeModelLoaderUI } from './threemodelloaderui.js';
|
|
import { Direction } from '../engine/geometry/geometry.js';
|
|
import { InputFilesFromUrls } from '../engine/import/importerfiles.js';
|
|
import { EnvironmentSettings } from '../engine/viewer/shadingmodel.js';
|
|
|
|
export class Embed
|
|
{
|
|
constructor (parameters)
|
|
{
|
|
this.parameters = parameters;
|
|
this.viewer = new Viewer ();
|
|
this.hashHandler = new HashHandler ();
|
|
this.modelLoaderUI = new ThreeModelLoaderUI ();
|
|
}
|
|
|
|
Load ()
|
|
{
|
|
let canvas = AddDomElement (this.parameters.viewerDiv, 'canvas');
|
|
this.viewer.Init (canvas);
|
|
this.Resize ();
|
|
|
|
if (this.hashHandler.HasHash ()) {
|
|
let urls = this.hashHandler.GetModelFilesFromHash ();
|
|
if (urls === null) {
|
|
return;
|
|
}
|
|
TransformFileHostUrls (urls);
|
|
|
|
let envMapName = 'fishermans_bastion';
|
|
let bgIsEnvMap = false;
|
|
let environmentSettingsObj = this.hashHandler.GetEnvironmentSettingsFromHash ();
|
|
if (environmentSettingsObj !== null) {
|
|
envMapName = environmentSettingsObj.environmentMapName;
|
|
bgIsEnvMap = environmentSettingsObj.backgroundIsEnvMap;
|
|
}
|
|
let envMapPath = 'assets/envmaps/' + envMapName + '/';
|
|
let envMapTextures = [
|
|
envMapPath + 'posx.jpg',
|
|
envMapPath + 'negx.jpg',
|
|
envMapPath + 'posy.jpg',
|
|
envMapPath + 'negy.jpg',
|
|
envMapPath + 'posz.jpg',
|
|
envMapPath + 'negz.jpg'
|
|
];
|
|
let environmentSettings = new EnvironmentSettings (envMapTextures, bgIsEnvMap);
|
|
this.viewer.SetEnvironmentMapSettings (environmentSettings);
|
|
|
|
let projectionMode = this.hashHandler.GetProjectionModeFromHash ();
|
|
if (projectionMode !== null) {
|
|
this.viewer.SetProjectionMode (projectionMode);
|
|
}
|
|
let background = this.hashHandler.GetBackgroundFromHash ();
|
|
if (background !== null) {
|
|
this.viewer.SetBackgroundColor (background);
|
|
}
|
|
let edgeSettings = this.hashHandler.GetEdgeSettingsFromHash ();
|
|
if (edgeSettings !== null) {
|
|
this.viewer.SetEdgeSettings (edgeSettings);
|
|
}
|
|
let settings = new ImportSettings ();
|
|
let defaultColor = this.hashHandler.GetDefaultColorFromHash ();
|
|
if (defaultColor !== null) {
|
|
settings.defaultColor = defaultColor;
|
|
}
|
|
let defaultLineColor = this.hashHandler.GetDefaultLineColorFromHash ();
|
|
if (defaultLineColor !== null) {
|
|
settings.defaultLineColor = defaultLineColor;
|
|
}
|
|
let inputFiles = InputFilesFromUrls (urls);
|
|
this.modelLoaderUI.LoadModel (inputFiles, settings, {
|
|
onStart : () =>
|
|
{
|
|
|
|
},
|
|
onFinish : (importResult, threeObject) =>
|
|
{
|
|
this.OnModelFinished (threeObject);
|
|
},
|
|
onRender : () =>
|
|
{
|
|
this.viewer.Render ();
|
|
},
|
|
onError : (importError) =>
|
|
{
|
|
|
|
}
|
|
});
|
|
let hashParameters = CreateModelUrlParameters (urls);
|
|
let websiteUrl = this.parameters.websiteLinkDiv.getAttribute ('href') + '#' + hashParameters;
|
|
this.parameters.websiteLinkDiv.setAttribute ('href', websiteUrl);
|
|
}
|
|
|
|
window.addEventListener ('resize', () => {
|
|
this.Resize ();
|
|
});
|
|
}
|
|
|
|
Resize ()
|
|
{
|
|
let windowWidth = window.innerWidth;
|
|
let windowHeight = window.innerHeight;
|
|
this.viewer.Resize (windowWidth, windowHeight);
|
|
}
|
|
|
|
OnModelFinished (threeObject)
|
|
{
|
|
this.viewer.SetMainObject (threeObject);
|
|
let boundingSphere = this.viewer.GetBoundingSphere ((meshUserData) => {
|
|
return true;
|
|
});
|
|
this.viewer.AdjustClippingPlanesToSphere (boundingSphere);
|
|
let camera = this.hashHandler.GetCameraFromHash ();
|
|
if (camera !== null) {
|
|
this.viewer.SetCamera (camera);
|
|
} else {
|
|
this.viewer.SetUpVector (Direction.Y, false);
|
|
this.viewer.FitSphereToWindow (boundingSphere, false);
|
|
}
|
|
}
|
|
}
|