diff --git a/sandbox/background.png b/sandbox/background.png
new file mode 100644
index 0000000..b2e2982
Binary files /dev/null and b/sandbox/background.png differ
diff --git a/sandbox/embed_background.html b/sandbox/embed_background.html
new file mode 100644
index 0000000..c12460a
--- /dev/null
+++ b/sandbox/embed_background.html
@@ -0,0 +1,76 @@
+
+
+
+
+
+
+
+ Online 3D Viewer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sandbox/embed_iframe_scroll.html b/sandbox/embed_iframe_scroll.html
deleted file mode 100644
index 89ac360..0000000
--- a/sandbox/embed_iframe_scroll.html
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
-
-
-
- Online 3D Viewer
-
-
-
-
-
-
-
-
-
diff --git a/sandbox/embed_selfhost_calculate.html b/sandbox/embed_selfhost_calculate.html
index b302f00..b9b86d2 100644
--- a/sandbox/embed_selfhost_calculate.html
+++ b/sandbox/embed_selfhost_calculate.html
@@ -34,7 +34,7 @@
// initialize the viewer with the parent element and some parameters
let viewer = new OV.EmbeddedViewer (parentDiv, {
- backgroundColor : new OV.RGBColor (255, 255, 255),
+ backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
edgeSettings : {
showEdges : false,
diff --git a/sandbox/embed_selfhost_code_file.html b/sandbox/embed_selfhost_code_file.html
index 3cf31ea..d21fb21 100644
--- a/sandbox/embed_selfhost_code_file.html
+++ b/sandbox/embed_selfhost_code_file.html
@@ -26,7 +26,7 @@
// initialize the viewer with the parent element and some parameters
let viewer = new OV.EmbeddedViewer (parentDiv, {
- backgroundColor : new OV.RGBColor (255, 255, 255),
+ backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
edgeSettings : {
showEdges : false,
diff --git a/sandbox/embed_selfhost_code_url.html b/sandbox/embed_selfhost_code_url.html
index c329fe4..2c98cac 100644
--- a/sandbox/embed_selfhost_code_url.html
+++ b/sandbox/embed_selfhost_code_url.html
@@ -31,7 +31,7 @@
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (0.0, 1.0, 0.0)
),
- backgroundColor : new OV.RGBColor (255, 255, 255),
+ backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
edgeSettings : {
showEdges : false,
diff --git a/sandbox/embed_selfhost_multiple.html b/sandbox/embed_selfhost_multiple.html
index 510a125..a057ee7 100644
--- a/sandbox/embed_selfhost_multiple.html
+++ b/sandbox/embed_selfhost_multiple.html
@@ -12,7 +12,7 @@
diff --git a/source/engine/main.js b/source/engine/main.js
index 56bf70c..a57f37a 100644
--- a/source/engine/main.js
+++ b/source/engine/main.js
@@ -43,7 +43,7 @@ import { ArrayBufferToUtf8String, ArrayBufferToAsciiString, AsciiStringToArrayBu
import { SetExternalLibLocation, GetExternalLibPath, LoadExternalLibrary } from './io/externallibs.js';
import { GetFileName, GetFileExtension, RequestUrl, ReadFile, TransformFileHostUrls, IsUrl, FileSource, FileFormat } from './io/fileutils.js';
import { TextWriter } from './io/textwriter.js';
-import { RGBColor, ColorComponentFromFloat, RGBColorFromFloatComponents, SRGBToLinear, LinearToSRGB, IntegerToHexString, RGBColorToHexString, HexStringToRGBColor, ArrayToRGBColor, RGBColorIsEqual } from './model/color.js';
+import { RGBColor, RGBAColor, ColorComponentFromFloat, ColorComponentToFloat, RGBColorFromFloatComponents, SRGBToLinear, LinearToSRGB, IntegerToHexString, RGBColorToHexString, HexStringToRGBColor, ArrayToRGBColor, RGBColorIsEqual } from './model/color.js';
import { GeneratorParams, Generator, GeneratorHelper, GenerateCuboid, GenerateCone, GenerateCylinder, GenerateSphere, GeneratePlatonicSolid } from './model/generator.js';
import { TextureMap, MaterialBase, FaceMaterial, PhongMaterial, PhysicalMaterial, TextureMapIsEqual, TextureIsEqual, MaterialType } from './model/material.js';
import { Mesh } from './model/mesh.js';
@@ -200,7 +200,9 @@ export {
FileFormat,
TextWriter,
RGBColor,
+ RGBAColor,
ColorComponentFromFloat,
+ ColorComponentToFloat,
RGBColorFromFloatComponents,
SRGBToLinear,
LinearToSRGB,
diff --git a/source/engine/model/color.js b/source/engine/model/color.js
index 7cbbe4b..df12495 100644
--- a/source/engine/model/color.js
+++ b/source/engine/model/color.js
@@ -20,11 +20,40 @@ export class RGBColor
}
}
+export class RGBAColor
+{
+ constructor (r, g, b, a)
+ {
+ this.r = r; // 0 .. 255
+ this.g = g; // 0 .. 255
+ this.b = b; // 0 .. 255
+ this.a = a; // 0 .. 255
+ }
+
+ Set (r, g, b, a)
+ {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ this.a = a;
+ }
+
+ Clone ()
+ {
+ return new RGBAColor (this.r, this.g, this.b, this.a);
+ }
+}
+
export function ColorComponentFromFloat (component)
{
return parseInt (Math.round (component * 255.0), 10);
}
+export function ColorComponentToFloat (component)
+{
+ return component / 255.0;
+}
+
export function RGBColorFromFloatComponents (r, g, b)
{
return new RGBColor (
diff --git a/source/engine/parameters/parameterlist.js b/source/engine/parameters/parameterlist.js
index 39ba3e5..697f107 100644
--- a/source/engine/parameters/parameterlist.js
+++ b/source/engine/parameters/parameterlist.js
@@ -1,5 +1,5 @@
import { Coord3D } from '../geometry/coord3d.js';
-import { RGBColor } from '../model/color.js';
+import { RGBAColor, RGBColor } from '../model/color.js';
import { Camera } from '../viewer/camera.js';
export let ParameterConverter =
@@ -71,20 +71,32 @@ export let ParameterConverter =
return camera;
},
- ColorToString : function (color)
+ RGBColorToString : function (color)
{
if (color === null) {
return null;
}
- let colorParameters = [
+ return [
this.IntegerToString (color.r),
this.IntegerToString (color.g),
this.IntegerToString (color.b)
].join (',');
- return colorParameters;
},
- StringToColor : function (str)
+ RGBAColorToString : function (color)
+ {
+ if (color === null) {
+ return null;
+ }
+ return [
+ this.IntegerToString (color.r),
+ this.IntegerToString (color.g),
+ this.IntegerToString (color.b),
+ this.IntegerToString (color.a)
+ ].join (',');
+ },
+
+ StringToRGBColor : function (str)
{
if (str === null || str.length === 0) {
return null;
@@ -93,11 +105,31 @@ export let ParameterConverter =
if (paramParts.length !== 3) {
return null;
}
- let color = new RGBColor (
+ return new RGBColor (
this.StringToInteger (paramParts[0]),
this.StringToInteger (paramParts[1]),
this.StringToInteger (paramParts[2])
);
+ },
+
+ StringToRGBAColor : function (str)
+ {
+ if (str === null || str.length === 0) {
+ return null;
+ }
+ let paramParts = str.split (',');
+ if (paramParts.length !== 3 && paramParts.length !== 4) {
+ return null;
+ }
+ let color = new RGBAColor (
+ this.StringToInteger (paramParts[0]),
+ this.StringToInteger (paramParts[1]),
+ this.StringToInteger (paramParts[2]),
+ 255
+ );
+ if (paramParts.length === 4) {
+ color.a = this.StringToInteger (paramParts[3]);
+ }
return color;
},
@@ -136,7 +168,7 @@ export let ParameterConverter =
}
let edgeSettingsParameters = [
edgeSettings.showEdges ? 'on' : 'off',
- this.ColorToString (edgeSettings.edgeColor),
+ this.RGBColorToString (edgeSettings.edgeColor),
this.IntegerToString (edgeSettings.edgeThreshold),
].join (',');
return edgeSettingsParameters;
@@ -192,13 +224,13 @@ export class ParameterListBuilder
AddBackgroundColor (background)
{
- this.AddUrlPart ('backgroundcolor', ParameterConverter.ColorToString (background));
+ this.AddUrlPart ('backgroundcolor', ParameterConverter.RGBAColorToString (background));
return this;
}
AddDefaultColor (color)
{
- this.AddUrlPart ('defaultcolor', ParameterConverter.ColorToString (color));
+ this.AddUrlPart ('defaultcolor', ParameterConverter.RGBColorToString (color));
return this;
}
@@ -259,13 +291,13 @@ export class ParameterListParser
GetBackgroundColor ()
{
let backgroundParams = this.GetKeywordParams ('backgroundcolor');
- return ParameterConverter.StringToColor (backgroundParams);
+ return ParameterConverter.StringToRGBAColor (backgroundParams);
}
GetDefaultColor ()
{
let colorParams = this.GetKeywordParams ('defaultcolor');
- return ParameterConverter.StringToColor (colorParams);
+ return ParameterConverter.StringToRGBColor (colorParams);
}
GetEdgeSettings ()
diff --git a/source/engine/viewer/embeddedviewer.js b/source/engine/viewer/embeddedviewer.js
index 1d451ea..f0de5cb 100644
--- a/source/engine/viewer/embeddedviewer.js
+++ b/source/engine/viewer/embeddedviewer.js
@@ -171,13 +171,13 @@ export function Init3DViewerElements (onReady)
let backgroundColor = null;
let backgroundColorParams = element.getAttribute ('backgroundcolor');
if (backgroundColorParams) {
- backgroundColor = ParameterConverter.StringToColor (backgroundColorParams);
+ backgroundColor = ParameterConverter.StringToRGBAColor (backgroundColorParams);
}
let defaultColor = null;
let defaultColorParams = element.getAttribute ('defaultcolor');
if (defaultColorParams) {
- defaultColor = ParameterConverter.StringToColor (defaultColorParams);
+ defaultColor = ParameterConverter.StringToRGBColor (defaultColorParams);
}
let edgeSettings = null;
diff --git a/source/engine/viewer/viewer.js b/source/engine/viewer/viewer.js
index f1bdbb2..b571392 100644
--- a/source/engine/viewer/viewer.js
+++ b/source/engine/viewer/viewer.js
@@ -1,6 +1,6 @@
import { Coord3D, CoordDistance3D, SubCoord3D } from '../geometry/coord3d.js';
import { Direction } from '../geometry/geometry.js';
-import { RGBColorToHexString } from '../model/color.js';
+import { ColorComponentToFloat } from '../model/color.js';
import { ShadingType } from '../threejs/threeutils.js';
import { Camera } from './camera.js';
import { GetDomElementInnerDimensions } from './domutils.js';
@@ -266,8 +266,13 @@ export class Viewer
SetBackgroundColor (color)
{
- let hexColor = '#' + RGBColorToHexString (color);
- this.renderer.setClearColor (hexColor, 1.0);
+ let bgColor = new THREE.Color (
+ ColorComponentToFloat (color.r),
+ ColorComponentToFloat (color.g),
+ ColorComponentToFloat (color.b)
+ );
+ let alpha = ColorComponentToFloat (color.a);
+ this.renderer.setClearColor (bgColor, alpha);
this.Render ();
}
diff --git a/source/website/cookiehandler.js b/source/website/cookiehandler.js
index ef2b01d..c12ca42 100644
--- a/source/website/cookiehandler.js
+++ b/source/website/cookiehandler.js
@@ -49,18 +49,32 @@ export function CookieSetIntVal (key, value)
CookieSetStringVal (key, value.toString ());
}
-export function CookieGetColorVal (key, defVal)
+export function CookieGetRGBColorVal (key, defVal)
{
let stringVal = CookieGetStringVal (key, null);
if (stringVal === null) {
return defVal;
}
- return ParameterConverter.StringToColor (stringVal);
+ return ParameterConverter.StringToRGBColor (stringVal);
}
-export function CookieSetColorVal (key, value)
+export function CookieGetRGBAColorVal (key, defVal)
{
- CookieSetStringVal (key, ParameterConverter.ColorToString (value));
+ let stringVal = CookieGetStringVal (key, null);
+ if (stringVal === null) {
+ return defVal;
+ }
+ return ParameterConverter.StringToRGBAColor (stringVal);
+}
+
+export function CookieSetRGBColorVal (key, value)
+{
+ CookieSetStringVal (key, ParameterConverter.RGBColorToString (value));
+}
+
+export function CookieSetRGBAColorVal (key, value)
+{
+ CookieSetStringVal (key, ParameterConverter.RGBAColorToString (value));
}
export function CookieClearVal (key)
diff --git a/source/website/measuretool.js b/source/website/measuretool.js
index a599b07..36bbc97 100644
--- a/source/website/measuretool.js
+++ b/source/website/measuretool.js
@@ -201,7 +201,7 @@ export class MeasureTool
}
ClearDomElement (this.panel);
- if (IsDarkTextNeededForColor (this.settings.backgroundColor)) {
+ if (IsDarkTextNeededForColor (this.settings.backgroundColor.r, this.settings.backgroundColor.g, this.settings.backgroundColor.b)) {
this.panel.style.color = '#000000';
} else {
this.panel.style.color = '#ffffff';
diff --git a/source/website/settings.js b/source/website/settings.js
index cba85b4..ca6086f 100644
--- a/source/website/settings.js
+++ b/source/website/settings.js
@@ -1,5 +1,5 @@
-import { RGBColor } from '../engine/model/color.js';
-import { CookieGetBoolVal, CookieGetColorVal, CookieGetIntVal, CookieGetStringVal, CookieSetBoolVal, CookieSetColorVal, CookieSetIntVal, CookieSetStringVal } from './cookiehandler.js';
+import { RGBAColor, RGBColor } from '../engine/model/color.js';
+import { CookieGetBoolVal, CookieGetRGBColorVal, CookieGetIntVal, CookieGetStringVal, CookieSetBoolVal, CookieSetRGBColorVal, CookieSetIntVal, CookieSetStringVal, CookieSetRGBAColorVal, CookieGetRGBAColorVal } from './cookiehandler.js';
export const Theme =
{
@@ -13,7 +13,7 @@ export class Settings
{
this.environmentMapName = 'fishermans_bastion';
this.backgroundIsEnvMap = false;
- this.backgroundColor = new RGBColor (255, 255, 255);
+ this.backgroundColor = new RGBAColor (255, 255, 255, 255);
this.defaultColor = new RGBColor (200, 200, 200);
this.showEdges = false;
this.edgeColor = new RGBColor (0, 0, 0);
@@ -25,10 +25,10 @@ export class Settings
{
this.environmentMapName = CookieGetStringVal ('ov_environment_map', 'fishermans_bastion');
this.backgroundIsEnvMap = CookieGetBoolVal ('ov_background_is_envmap', false);
- this.backgroundColor = CookieGetColorVal ('ov_background_color', new RGBColor (255, 255, 255));
- this.defaultColor = CookieGetColorVal ('ov_default_color', new RGBColor (200, 200, 200));
+ this.backgroundColor = CookieGetRGBAColorVal ('ov_background_color', new RGBAColor (255, 255, 255, 255));
+ this.defaultColor = CookieGetRGBColorVal ('ov_default_color', new RGBColor (200, 200, 200));
this.showEdges = CookieGetBoolVal ('ov_show_edges', false);
- this.edgeColor = CookieGetColorVal ('ov_edge_color', new RGBColor (0, 0, 0));
+ this.edgeColor = CookieGetRGBColorVal ('ov_edge_color', new RGBColor (0, 0, 0));
this.edgeThreshold = CookieGetIntVal ('ov_edge_threshold', 1);
this.themeId = CookieGetIntVal ('ov_theme_id', Theme.Light);
}
@@ -37,10 +37,10 @@ export class Settings
{
CookieSetStringVal ('ov_environment_map', this.environmentMapName);
CookieSetBoolVal ('ov_background_is_envmap', this.backgroundIsEnvMap);
- CookieSetColorVal ('ov_background_color', this.backgroundColor);
- CookieSetColorVal ('ov_default_color', this.defaultColor);
+ CookieSetRGBAColorVal ('ov_background_color', this.backgroundColor);
+ CookieSetRGBColorVal ('ov_default_color', this.defaultColor);
CookieSetBoolVal ('ov_show_edges', this.showEdges);
- CookieSetColorVal ('ov_edge_color', this.edgeColor);
+ CookieSetRGBColorVal ('ov_edge_color', this.edgeColor);
CookieSetIntVal ('ov_edge_threshold', this.edgeThreshold);
CookieSetIntVal ('ov_theme_id', this.themeId);
}
diff --git a/source/website/sidebarsettingspanel.js b/source/website/sidebarsettingspanel.js
index 84e1aeb..212ba84 100644
--- a/source/website/sidebarsettingspanel.js
+++ b/source/website/sidebarsettingspanel.js
@@ -1,4 +1,4 @@
-import { RGBColor, RGBColorToHexString } from '../engine/model/color.js';
+import { RGBColor, RGBColorToHexString, RGBAColor } from '../engine/model/color.js';
import { AddDiv, AddDomElement, ShowDomElement, SetDomElementOuterHeight } from '../engine/viewer/domutils.js';
import { AddRangeSlider, AddToggle, AddCheckbox } from '../website/utils.js';
import { CalculatePopupPositionToElementTopLeft } from './dialogs.js';
@@ -34,12 +34,11 @@ function AddColorPicker (parentDiv, defaultColor, predefinedColors, onChange)
});
pickr.on ('change', (color, source, instance) => {
let rgbaColor = color.toRGBA ();
- let ovColor = new RGBColor (
+ onChange (
parseInt (rgbaColor[0], 10),
parseInt (rgbaColor[1], 10),
parseInt (rgbaColor[2], 10)
);
- onChange (ovColor);
});
return pickr;
}
@@ -199,8 +198,8 @@ class SettingsModelDisplaySection extends SettingsSection
let backgroundColorInput = AddDiv (backgroundColorDiv, 'ov_color_picker');
AddDiv (backgroundColorDiv, null, 'Background Color');
let predefinedBackgroundColors = ['#ffffff', '#e3e3e3', '#c9c9c9', '#898989', '#5f5f5f', '#494949', '#383838', '#0f0f0f'];
- this.backgroundColorPicker = AddColorPicker (backgroundColorInput, settings.backgroundColor, predefinedBackgroundColors, (color) => {
- settings.backgroundColor = color;
+ this.backgroundColorPicker = AddColorPicker (backgroundColorInput, settings.backgroundColor, predefinedBackgroundColors, (r, g, b) => {
+ settings.backgroundColor = new RGBAColor (r, g, b, 255);
callbacks.onBackgroundColorChange ();
});
@@ -247,8 +246,8 @@ class SettingsModelDisplaySection extends SettingsSection
let predefinedEdgeColors = ['#ffffff', '#e3e3e3', '#c9c9c9', '#898989', '#5f5f5f', '#494949', '#383838', '#0f0f0f'];
let edgeColorInput = AddDiv (edgeColorRow, 'ov_color_picker');
- this.edgeColorPicker = AddColorPicker (edgeColorInput, settings.edgeColor, predefinedEdgeColors, (color) => {
- settings.edgeColor = color;
+ this.edgeColorPicker = AddColorPicker (edgeColorInput, settings.edgeColor, predefinedEdgeColors, (r, g, b) => {
+ settings.edgeColor = new RGBColor (r, g, b);
callbacks.onEdgeColorChange ();
});
AddDiv (edgeColorRow, null, 'Edge Color');
@@ -353,8 +352,8 @@ class SettingsImportParametersSection extends SettingsSection
let defaultColorInput = AddDiv (defaultColorDiv, 'ov_color_picker');
AddDiv (defaultColorDiv, null, 'Default Color');
let predefinedDefaultColors = ['#ffffff', '#e3e3e3', '#cc3333', '#fac832', '#4caf50', '#3393bd', '#9b27b0', '#fda4b8'];
- this.defaultColorPicker = AddColorPicker (defaultColorInput, settings.defaultColor, predefinedDefaultColors, (color) => {
- settings.defaultColor = color;
+ this.defaultColorPicker = AddColorPicker (defaultColorInput, settings.defaultColor, predefinedDefaultColors, (r, g, b) => {
+ settings.defaultColor = new RGBColor (r, g, b);
callbacks.onDefaultColorChange ();
});
}
@@ -481,10 +480,10 @@ export class SidebarSettingsPanel extends SidebarPanel
this.appearanceSection.Init (this.settings, {
onThemeChange : () => {
if (this.settings.themeId === Theme.Light) {
- this.settings.backgroundColor = new RGBColor (255, 255, 255);
+ this.settings.backgroundColor = new RGBAColor (255, 255, 255, 255);
this.settings.defaultColor = new RGBColor (200, 200, 200);
} else if (this.settings.themeId === Theme.Dark) {
- this.settings.backgroundColor = new RGBColor (42, 43, 46);
+ this.settings.backgroundColor = new RGBAColor (42, 43, 46, 255);
this.settings.defaultColor = new RGBColor (200, 200, 200);
}
this.modelDisplaySection.Update (this.settings);
diff --git a/source/website/utils.js b/source/website/utils.js
index c30675d..da8b1e7 100644
--- a/source/website/utils.js
+++ b/source/website/utils.js
@@ -156,9 +156,9 @@ export function CreateInlineColorCircle (color)
return circleDiv;
}
-export function IsDarkTextNeededForColor (color)
+export function IsDarkTextNeededForColor (r, g, b)
{
- let intensity = color.r * 0.299 + color.g * 0.587 + color.b * 0.114;
+ let intensity = r * 0.299 + g * 0.587 + b * 0.114;
return intensity > 186.0;
}
diff --git a/test/tests/parameterlist_test.js b/test/tests/parameterlist_test.js
index 94ff0d9..2b4a2a8 100644
--- a/test/tests/parameterlist_test.js
+++ b/test/tests/parameterlist_test.js
@@ -12,7 +12,7 @@ describe ('Parameter List', function () {
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (0.0, 0.0, 1.0)
);
- let background = new OV.RGBColor (4, 5, 6);
+ let background = new OV.RGBAColor (4, 5, 6, 7);
let color = new OV.RGBColor (1, 2, 3);
let urlParams1 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).GetParameterList ();
let urlParams2 = OV.CreateUrlBuilder ().AddCamera (camera).GetParameterList ();
@@ -28,7 +28,7 @@ describe ('Parameter List', function () {
assert.strictEqual (urlParams2, 'camera=1.00000,1.00000,1.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000');
assert.strictEqual (urlParams3, 'model=a.txt,b.txt$camera=1.00000,1.00000,1.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000');
assert.strictEqual (urlParams4, 'model=a.txt,b.txt$camera=1.00000,1.00000,1.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000$defaultcolor=1,2,3');
- assert.strictEqual (urlParams5, 'model=a.txt,b.txt$camera=1.00000,1.00000,1.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000$backgroundcolor=4,5,6$defaultcolor=1,2,3');
+ assert.strictEqual (urlParams5, 'model=a.txt,b.txt$camera=1.00000,1.00000,1.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000$backgroundcolor=4,5,6,7$defaultcolor=1,2,3');
assert.strictEqual (urlParams6, 'edgesettings=on,1,2,3,15');
});
@@ -39,14 +39,14 @@ describe ('Parameter List', function () {
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (0.0, 0.0, 1.0)
);
- let background = new OV.RGBColor (4, 5, 6);
+ let background = new OV.RGBAColor (4, 5, 6, 7);
let color = new OV.RGBColor (1, 2, 3);
let urlParamsLegacy = 'a.txt,b.txt';
let urlParams1 = 'model=a.txt,b.txt';
let urlParams2 = 'camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000';
let urlParams3 = 'model=a.txt,b.txt$camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000';
let urlParams4 = 'model=a.txt,b.txt$camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000$defaultcolor=1,2,3';
- let urlParams5 = 'model=a.txt,b.txt$camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000$backgroundcolor=4,5,6$defaultcolor=1,2,3';
+ let urlParams5 = 'model=a.txt,b.txt$camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000$backgroundcolor=4,5,6,7$defaultcolor=1,2,3';
let urlParams6 = 'edgesettings=on,1,2,3,15';
let parserLegacy = OV.CreateUrlParser (urlParamsLegacy);
assert.deepStrictEqual (parserLegacy.GetModelUrls (), modelUrls);
diff --git a/website/embed.html b/website/embed.html
index 3d15391..23eda1a 100644
--- a/website/embed.html
+++ b/website/embed.html
@@ -43,6 +43,13 @@
OV.StartEmbed ('../libs');
+
+