diff --git a/sandbox/embed_selfhost_calculate.html b/sandbox/embed_selfhost_calculate.html
index 9c1080c..98d0652 100644
--- a/sandbox/embed_selfhost_calculate.html
+++ b/sandbox/embed_selfhost_calculate.html
@@ -37,8 +37,8 @@
backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1),
- environmentSettings : {
- environmentMap : [
+ environmentSettings : new OV.EnvironmentSettings (
+ [
'../website/assets/envmaps/fishermans_bastion/posx.jpg',
'../website/assets/envmaps/fishermans_bastion/negx.jpg',
'../website/assets/envmaps/fishermans_bastion/posy.jpg',
@@ -46,8 +46,8 @@
'../website/assets/envmaps/fishermans_bastion/posz.jpg',
'../website/assets/envmaps/fishermans_bastion/negz.jpg'
],
- backgroundIsEnvMap : true
- },
+ true
+ ),
onModelLoaded : () => {
OnModelLoaded (viewer.GetModel ());
}
diff --git a/sandbox/embed_selfhost_code_file.html b/sandbox/embed_selfhost_code_file.html
index ad1fcac..2720442 100644
--- a/sandbox/embed_selfhost_code_file.html
+++ b/sandbox/embed_selfhost_code_file.html
@@ -29,8 +29,8 @@
backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1),
- environmentSettings : {
- environmentMap : [
+ environmentSettings : new OV.EnvironmentSettings (
+ [
'../website/assets/envmaps/fishermans_bastion/posx.jpg',
'../website/assets/envmaps/fishermans_bastion/negx.jpg',
'../website/assets/envmaps/fishermans_bastion/posy.jpg',
@@ -38,8 +38,8 @@
'../website/assets/envmaps/fishermans_bastion/posz.jpg',
'../website/assets/envmaps/fishermans_bastion/negz.jpg'
],
- backgroundIsEnvMap : false
- }
+ false
+ )
});
// load a model selected by file input
diff --git a/sandbox/embed_selfhost_code_url.html b/sandbox/embed_selfhost_code_url.html
index 139b7d6..a360553 100644
--- a/sandbox/embed_selfhost_code_url.html
+++ b/sandbox/embed_selfhost_code_url.html
@@ -35,8 +35,8 @@
backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1),
- environmentSettings : {
- environmentMap : [
+ environmentSettings : new OV.EnvironmentSettings (
+ [
'../website/assets/envmaps/fishermans_bastion/posx.jpg',
'../website/assets/envmaps/fishermans_bastion/negx.jpg',
'../website/assets/envmaps/fishermans_bastion/posy.jpg',
@@ -44,8 +44,8 @@
'../website/assets/envmaps/fishermans_bastion/posz.jpg',
'../website/assets/envmaps/fishermans_bastion/negz.jpg'
],
- backgroundIsEnvMap : false
- }
+ false
+ )
});
// load a model providing model urls
diff --git a/sandbox/embed_selfhost_memory_test.html b/sandbox/embed_selfhost_memory_test.html
index bd9ff84..5be4311 100644
--- a/sandbox/embed_selfhost_memory_test.html
+++ b/sandbox/embed_selfhost_memory_test.html
@@ -36,8 +36,8 @@
backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1),
- environmentSettings : {
- environmentMap : [
+ environmentSettings : new OV.EnvironmentSettings (
+ [
'../website/assets/envmaps/fishermans_bastion/posx.jpg',
'../website/assets/envmaps/fishermans_bastion/negx.jpg',
'../website/assets/envmaps/fishermans_bastion/posy.jpg',
@@ -45,8 +45,8 @@
'../website/assets/envmaps/fishermans_bastion/posz.jpg',
'../website/assets/envmaps/fishermans_bastion/negz.jpg'
],
- backgroundIsEnvMap : false
- }
+ false
+ )
});
// load a model providing model urls
diff --git a/source/engine/main.js b/source/engine/main.js
index 818fe90..bd17f45 100644
--- a/source/engine/main.js
+++ b/source/engine/main.js
@@ -68,7 +68,7 @@ import { Camera, CameraIsEqual3D, CameraMode } from './viewer/camera.js';
import { GetIntegerFromStyle, GetDomElementExternalWidth, GetDomElementExternalHeight, GetDomElementInnerDimensions, GetDomElementClientCoordinates, CreateDomElement, AddDomElement, AddDiv, ClearDomElement, InsertDomElementBefore, InsertDomElementAfter, ShowDomElement, IsDomElementVisible, SetDomElementWidth, SetDomElementHeight, GetDomElementOuterWidth, GetDomElementOuterHeight, SetDomElementOuterWidth, SetDomElementOuterHeight, CreateDiv } from './viewer/domutils.js';
import { EmbeddedViewer, Init3DViewerElement, Init3DViewerElements } from './viewer/embeddedviewer.js';
import { MouseInteraction, TouchInteraction, ClickDetector, Navigation, NavigationType } from './viewer/navigation.js';
-import { ShadingModel } from './viewer/shadingmodel.js';
+import { EnvironmentSettings, ShadingModel } from './viewer/shadingmodel.js';
import { CameraValidator, UpVector, Viewer, GetDefaultCamera, TraverseThreeObject, GetShadingTypeOfObject } from './viewer/viewer.js';
import { ViewerModel, EdgeSettings, ViewerMainModel, SetThreeMeshPolygonOffset } from './viewer/viewermodel.js';
@@ -319,6 +319,7 @@ export {
ClickDetector,
Navigation,
NavigationType,
+ EnvironmentSettings,
ShadingModel,
CameraValidator,
UpVector,
diff --git a/source/engine/viewer/embeddedviewer.js b/source/engine/viewer/embeddedviewer.js
index c54b180..7c2f7c7 100644
--- a/source/engine/viewer/embeddedviewer.js
+++ b/source/engine/viewer/embeddedviewer.js
@@ -6,6 +6,7 @@ import { TransformFileHostUrls } from '../io/fileutils.js';
import { ParameterConverter } from '../parameters/parameterlist.js';
import { ThreeModelLoader } from '../threejs/threemodelloader.js';
import { Viewer } from './viewer.js';
+import { EnvironmentSettings } from './shadingmodel.js';
export class EmbeddedViewer
{
@@ -40,9 +41,7 @@ export class EmbeddedViewer
}
if (this.parameters.environmentSettings) {
- let environmentMap = this.parameters.environmentSettings.environmentMap;
- let backgroundIsEnvMap = this.parameters.environmentSettings.backgroundIsEnvMap;
- this.viewer.SetEnvironmentMapSettings (environmentMap, backgroundIsEnvMap);
+ this.viewer.SetEnvironmentMapSettings (this.parameters.environmentSettings);
}
this.model = null;
@@ -213,10 +212,7 @@ export function Init3DViewerElements (onReady)
if (backgroundIsEnvMapParam && backgroundIsEnvMapParam === 'true') {
backgroundIsEnvMap = true;
}
- environmentSettings = {
- environmentMap : environmentMapParts,
- backgroundIsEnvMap : backgroundIsEnvMap
- };
+ environmentSettings = new EnvironmentSettings (environmentMapParts, backgroundIsEnvMap);
}
}
diff --git a/source/engine/viewer/shadingmodel.js b/source/engine/viewer/shadingmodel.js
index 34b4a68..8079a70 100644
--- a/source/engine/viewer/shadingmodel.js
+++ b/source/engine/viewer/shadingmodel.js
@@ -4,6 +4,27 @@ import { ShadingType } from '../threejs/threeutils.js';
import * as THREE from 'three';
+export class EnvironmentSettings
+{
+ constructor (textureNames, backgroundIsEnvMap)
+ {
+ this.textureNames = textureNames;
+ this.backgroundIsEnvMap = backgroundIsEnvMap;
+ }
+
+ Clone ()
+ {
+ let textureNames = null;
+ if (this.textureNames !== null) {
+ textureNames = [];
+ for (let textureName of this.textureNames) {
+ textureNames.push (textureName);
+ }
+ }
+ return new EnvironmentSettings (textureNames, this.backgroundIsEnvMap);
+ }
+}
+
export class ShadingModel
{
constructor (scene)
@@ -14,8 +35,8 @@ export class ShadingModel
this.cameraMode = CameraMode.Perspective;
this.ambientLight = new THREE.AmbientLight (0x888888);
this.directionalLight = new THREE.DirectionalLight (0x888888);
+ this.environmentSettings = new EnvironmentSettings (null, false);
this.environment = null;
- this.backgroundIsEnvMap = false;
this.scene.add (this.ambientLight);
this.scene.add (this.directionalLight);
@@ -44,20 +65,20 @@ export class ShadingModel
this.directionalLight.color.set (0x555555);
this.scene.environment = this.environment;
}
- if (this.backgroundIsEnvMap && this.cameraMode === CameraMode.Perspective) {
+ if (this.environmentSettings.backgroundIsEnvMap && this.cameraMode === CameraMode.Perspective) {
this.scene.background = this.environment;
} else {
this.scene.background = null;
}
}
- SetEnvironment (textures, useAsBackground, onLoaded)
+ SetEnvironmentMapSettings (environmentSettings, onLoaded)
{
let loader = new THREE.CubeTextureLoader ();
- this.environment = loader.load (textures, () => {
+ this.environment = loader.load (environmentSettings.textureNames, () => {
onLoaded ();
});
- this.backgroundIsEnvMap = useAsBackground;
+ this.environmentSettings = environmentSettings;
}
UpdateByCamera (camera)
diff --git a/source/engine/viewer/viewer.js b/source/engine/viewer/viewer.js
index a66eeed..cb127bc 100644
--- a/source/engine/viewer/viewer.js
+++ b/source/engine/viewer/viewer.js
@@ -217,9 +217,17 @@ export class Viewer
this.navigation.SetContextMenuHandler (onContext);
}
- SetEnvironmentMapSettings (textures, useAsBackground)
+ SetEdgeSettings (edgeSettings)
{
- this.shadingModel.SetEnvironment (textures, useAsBackground, () => {
+ let newEdgeSettings = edgeSettings.Clone ();
+ this.mainModel.SetEdgeSettings (newEdgeSettings);
+ this.Render ();
+ }
+
+ SetEnvironmentMapSettings (environmentSettings)
+ {
+ let newEnvironmentSettings = environmentSettings.Clone ();
+ this.shadingModel.SetEnvironmentMapSettings (newEnvironmentSettings, () => {
this.Render ();
});
this.shadingModel.UpdateShading ();
@@ -238,13 +246,6 @@ export class Viewer
this.Render ();
}
- SetEdgeSettings (edgeSettings)
- {
- let newEdgeSettings = edgeSettings.Clone ();
- this.mainModel.SetEdgeSettings (newEdgeSettings);
- this.Render ();
- }
-
GetCanvas ()
{
return this.canvas;
diff --git a/source/website/embed.js b/source/website/embed.js
index b94a645..cfddbb5 100644
--- a/source/website/embed.js
+++ b/source/website/embed.js
@@ -7,6 +7,7 @@ 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
{
@@ -33,10 +34,10 @@ export class Embed
let envMapName = 'fishermans_bastion';
let bgIsEnvMap = false;
- let environmentSettings = this.hashHandler.GetEnvironmentSettingsFromHash ();
- if (environmentSettings !== null) {
- envMapName = environmentSettings.environmentMapName;
- bgIsEnvMap = environmentSettings.backgroundIsEnvMap;
+ let environmentSettingsObj = this.hashHandler.GetEnvironmentSettingsFromHash ();
+ if (environmentSettingsObj !== null) {
+ envMapName = environmentSettingsObj.environmentMapName;
+ bgIsEnvMap = environmentSettingsObj.backgroundIsEnvMap;
}
let envMapPath = 'assets/envmaps/' + envMapName + '/';
let envMapTextures = [
@@ -47,7 +48,8 @@ export class Embed
envMapPath + 'posz.jpg',
envMapPath + 'negz.jpg'
];
- this.viewer.SetEnvironmentMapSettings (envMapTextures, bgIsEnvMap);
+ let environmentSettings = new EnvironmentSettings (envMapTextures, bgIsEnvMap);
+ this.viewer.SetEnvironmentMapSettings (environmentSettings);
let cameraMode = this.hashHandler.GetCameraModeFromHash ();
if (cameraMode !== null) {
diff --git a/source/website/website.js b/source/website/website.js
index 0b83125..9801401 100644
--- a/source/website/website.js
+++ b/source/website/website.js
@@ -27,6 +27,7 @@ import { CreateVerticalSplitter } from './splitter.js';
import { EnumeratePlugins, PluginType } from './pluginregistry.js';
import * as THREE from 'three';
+import { EnvironmentSettings } from '../engine/viewer/shadingmodel.js';
const WebsiteUIState =
{
@@ -551,7 +552,8 @@ export class Website
envMapPath + 'posz.jpg',
envMapPath + 'negz.jpg'
];
- this.viewer.SetEnvironmentMapSettings (envMapTextures, this.settings.backgroundIsEnvMap);
+ let environmentSettings = new EnvironmentSettings (envMapTextures, this.settings.backgroundIsEnvMap);
+ this.viewer.SetEnvironmentMapSettings (environmentSettings);
}
SwitchTheme (newThemeId, resetColors)