diff --git a/sandbox/embed_selfhost_calculate.html b/sandbox/embed_selfhost_calculate.html
index b9b86d2..9c1080c 100644
--- a/sandbox/embed_selfhost_calculate.html
+++ b/sandbox/embed_selfhost_calculate.html
@@ -36,11 +36,7 @@
let viewer = new OV.EmbeddedViewer (parentDiv, {
backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
- edgeSettings : {
- showEdges : false,
- edgeColor : new OV.RGBColor (0, 0, 0),
- edgeThreshold : 1
- },
+ edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1),
environmentSettings : {
environmentMap : [
'../website/assets/envmaps/fishermans_bastion/posx.jpg',
diff --git a/sandbox/embed_selfhost_code_file.html b/sandbox/embed_selfhost_code_file.html
index d21fb21..ad1fcac 100644
--- a/sandbox/embed_selfhost_code_file.html
+++ b/sandbox/embed_selfhost_code_file.html
@@ -28,11 +28,7 @@
let viewer = new OV.EmbeddedViewer (parentDiv, {
backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
- edgeSettings : {
- showEdges : false,
- edgeColor : new OV.RGBColor (0, 0, 0),
- edgeThreshold : 1
- },
+ edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1),
environmentSettings : {
environmentMap : [
'../website/assets/envmaps/fishermans_bastion/posx.jpg',
diff --git a/sandbox/embed_selfhost_code_url.html b/sandbox/embed_selfhost_code_url.html
index 073706c..139b7d6 100644
--- a/sandbox/embed_selfhost_code_url.html
+++ b/sandbox/embed_selfhost_code_url.html
@@ -34,11 +34,7 @@
),
backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
- edgeSettings : {
- showEdges : false,
- edgeColor : new OV.RGBColor (0, 0, 0),
- edgeThreshold : 1
- },
+ edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1),
environmentSettings : {
environmentMap : [
'../website/assets/envmaps/fishermans_bastion/posx.jpg',
diff --git a/sandbox/embed_selfhost_memory_test.html b/sandbox/embed_selfhost_memory_test.html
index 7a986bf..bd9ff84 100644
--- a/sandbox/embed_selfhost_memory_test.html
+++ b/sandbox/embed_selfhost_memory_test.html
@@ -35,11 +35,7 @@
),
backgroundColor : new OV.RGBAColor (255, 255, 255, 255),
defaultColor : new OV.RGBColor (200, 200, 200),
- edgeSettings : {
- showEdges : false,
- edgeColor : new OV.RGBColor (0, 0, 0),
- edgeThreshold : 1
- },
+ edgeSettings : new OV.EdgeSettings (false, new OV.RGBColor (0, 0, 0), 1),
environmentSettings : {
environmentMap : [
'../website/assets/envmaps/fishermans_bastion/posx.jpg',
diff --git a/source/engine/main.js b/source/engine/main.js
index f2365d9..6d552d4 100644
--- a/source/engine/main.js
+++ b/source/engine/main.js
@@ -69,7 +69,7 @@ import { GetIntegerFromStyle, GetDomElementExternalWidth, GetDomElementExternalH
import { EmbeddedViewer, Init3DViewerElement, Init3DViewerElements } from './viewer/embeddedviewer.js';
import { MouseInteraction, TouchInteraction, ClickDetector, Navigation, NavigationType } from './viewer/navigation.js';
import { CameraValidator, UpVector, ShadingModel, Viewer, GetDefaultCamera, TraverseThreeObject, GetShadingTypeOfObject, CameraMode } from './viewer/viewer.js';
-import { ViewerModel, ViewerMainModel, SetThreeMeshPolygonOffset } from './viewer/viewermodel.js';
+import { ViewerModel, EdgeSettings, ViewerMainModel, SetThreeMeshPolygonOffset } from './viewer/viewermodel.js';
export {
IsDefined,
@@ -326,6 +326,7 @@ export {
GetShadingTypeOfObject,
CameraMode,
ViewerModel,
+ EdgeSettings,
ViewerMainModel,
SetThreeMeshPolygonOffset
};
diff --git a/source/engine/parameters/parameterlist.js b/source/engine/parameters/parameterlist.js
index 89e2274..2f6cfe6 100644
--- a/source/engine/parameters/parameterlist.js
+++ b/source/engine/parameters/parameterlist.js
@@ -2,6 +2,7 @@ import { Coord3D } from '../geometry/coord3d.js';
import { RGBAColor, RGBColor } from '../model/color.js';
import { Camera } from '../viewer/camera.js';
import { CameraMode } from '../viewer/viewer.js';
+import { EdgeSettings } from '../viewer/viewermodel.js';
export let ParameterConverter =
{
@@ -212,15 +213,15 @@ export let ParameterConverter =
if (paramParts.length !== 5) {
return null;
}
- let edgeSettings = {
- showEdges : paramParts[0] === 'on' ? true : false,
- edgeColor : new RGBColor (
+ let edgeSettings = new EdgeSettings (
+ paramParts[0] === 'on' ? true : false,
+ new RGBColor (
this.StringToInteger (paramParts[1]),
this.StringToInteger (paramParts[2]),
this.StringToInteger (paramParts[3])
),
- edgeThreshold : this.StringToInteger (paramParts[4])
- };
+ this.StringToInteger (paramParts[4])
+ );
return edgeSettings;
}
};
diff --git a/source/engine/viewer/embeddedviewer.js b/source/engine/viewer/embeddedviewer.js
index 59b74ec..c54b180 100644
--- a/source/engine/viewer/embeddedviewer.js
+++ b/source/engine/viewer/embeddedviewer.js
@@ -36,11 +36,7 @@ export class EmbeddedViewer
}
if (this.parameters.edgeSettings) {
- this.viewer.SetEdgeSettings (
- this.parameters.edgeSettings.showEdges,
- this.parameters.edgeSettings.edgeColor,
- this.parameters.edgeSettings.edgeThreshold
- );
+ this.viewer.SetEdgeSettings (this.parameters.edgeSettings);
}
if (this.parameters.environmentSettings) {
diff --git a/source/engine/viewer/viewer.js b/source/engine/viewer/viewer.js
index 3191169..564500e 100644
--- a/source/engine/viewer/viewer.js
+++ b/source/engine/viewer/viewer.js
@@ -328,9 +328,10 @@ export class Viewer
this.Render ();
}
- SetEdgeSettings (show, color, threshold)
+ SetEdgeSettings (edgeSettings)
{
- this.mainModel.SetEdgeSettings (show, color, threshold);
+ let newEdgeSettings = edgeSettings.Clone ();
+ this.mainModel.SetEdgeSettings (newEdgeSettings);
this.Render ();
}
diff --git a/source/engine/viewer/viewermodel.js b/source/engine/viewer/viewermodel.js
index f771cd3..bce4425 100644
--- a/source/engine/viewer/viewermodel.js
+++ b/source/engine/viewer/viewermodel.js
@@ -81,6 +81,21 @@ export class ViewerModel
}
}
+export class EdgeSettings
+{
+ constructor (showEdges, edgeColor, edgeThreshold)
+ {
+ this.showEdges = showEdges;
+ this.edgeColor = edgeColor;
+ this.edgeThreshold = edgeThreshold;
+ }
+
+ Clone ()
+ {
+ return new EdgeSettings (this.showEdges, this.edgeColor.Clone (), this.edgeThreshold);
+ }
+}
+
export class ViewerMainModel
{
constructor (scene)
@@ -90,11 +105,7 @@ export class ViewerMainModel
this.mainModel = new ViewerModel (this.scene);
this.edgeModel = new ViewerModel (this.scene);
- this.edgeSettings = {
- showEdges : false,
- edgeColor : new RGBColor (0, 0, 0),
- edgeThreshold : 1
- };
+ this.edgeSettings = new EdgeSettings (false, new RGBColor (0, 0, 0), 1);
}
SetMainObject (mainObject)
@@ -111,16 +122,14 @@ export class ViewerMainModel
this.edgeModel.UpdateWorldMatrix ();
}
- SetEdgeSettings (show, color, threshold)
+ SetEdgeSettings (edgeSettings)
{
let needToGenerate = false;
- if (show && (!this.edgeSettings.showEdges || this.edgeSettings.edgeThreshold !== threshold)) {
+ if (edgeSettings.showEdges && (!this.edgeSettings.showEdges || this.edgeSettings.edgeThreshold !== edgeSettings.edgeThreshold)) {
needToGenerate = true;
}
- this.edgeSettings.showEdges = show;
- this.edgeSettings.edgeThreshold = threshold;
- this.edgeSettings.edgeColor = color;
+ this.edgeSettings = edgeSettings;
if (this.mainModel.IsEmpty ()) {
return;
@@ -131,7 +140,6 @@ export class ViewerMainModel
this.ClearEdgeModel ();
this.GenerateEdgeModel ();
} else {
-
let edgeColor = ConvertColorToThreeColor (this.edgeSettings.edgeColor);
this.EnumerateEdges ((edge) => {
edge.material.color = edgeColor;
diff --git a/source/website/embed.js b/source/website/embed.js
index 1a623a7..b94a645 100644
--- a/source/website/embed.js
+++ b/source/website/embed.js
@@ -59,11 +59,7 @@ export class Embed
}
let edgeSettings = this.hashHandler.GetEdgeSettingsFromHash ();
if (edgeSettings !== null) {
- this.viewer.SetEdgeSettings (
- edgeSettings.showEdges,
- edgeSettings.edgeColor,
- edgeSettings.edgeThreshold
- );
+ this.viewer.SetEdgeSettings (edgeSettings);
}
let settings = new ImportSettings ();
let defaultColor = this.hashHandler.GetDefaultColorFromHash ();
diff --git a/source/website/index.js b/source/website/index.js
index 3c36ced..9a40736 100644
--- a/source/website/index.js
+++ b/source/website/index.js
@@ -35,7 +35,7 @@ export function StartWebsite (externalLibLocation)
{
SetExternalLibLocation (externalLibLocation);
window.addEventListener ('load', () => {
- let website = new Website ({
+ let website = new Website ({
headerDiv : document.getElementById ('header'),
headerButtonsDiv : document.getElementById ('header_buttons'),
toolbarDiv : document.getElementById ('toolbar'),
diff --git a/source/website/settings.js b/source/website/settings.js
index ca6086f..1c59a4a 100644
--- a/source/website/settings.js
+++ b/source/website/settings.js
@@ -1,4 +1,5 @@
import { RGBAColor, RGBColor } from '../engine/model/color.js';
+import { EdgeSettings } from '../engine/viewer/viewermodel.js';
import { CookieGetBoolVal, CookieGetRGBColorVal, CookieGetIntVal, CookieGetStringVal, CookieSetBoolVal, CookieSetRGBColorVal, CookieSetIntVal, CookieSetStringVal, CookieSetRGBAColorVal, CookieGetRGBAColorVal } from './cookiehandler.js';
export const Theme =
@@ -15,9 +16,7 @@ export class Settings
this.backgroundIsEnvMap = false;
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);
- this.edgeThreshold = 1;
+ this.edgeSettings = new EdgeSettings (false, new RGBColor (0, 0, 0), 1);
this.themeId = Theme.Light;
}
@@ -27,9 +26,9 @@ export class Settings
this.backgroundIsEnvMap = CookieGetBoolVal ('ov_background_is_envmap', false);
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 = CookieGetRGBColorVal ('ov_edge_color', new RGBColor (0, 0, 0));
- this.edgeThreshold = CookieGetIntVal ('ov_edge_threshold', 1);
+ this.edgeSettings.showEdges = CookieGetBoolVal ('ov_show_edges', false);
+ this.edgeSettings.edgeColor = CookieGetRGBColorVal ('ov_edge_color', new RGBColor (0, 0, 0));
+ this.edgeSettings.edgeThreshold = CookieGetIntVal ('ov_edge_threshold', 1);
this.themeId = CookieGetIntVal ('ov_theme_id', Theme.Light);
}
@@ -39,9 +38,9 @@ export class Settings
CookieSetBoolVal ('ov_background_is_envmap', this.backgroundIsEnvMap);
CookieSetRGBAColorVal ('ov_background_color', this.backgroundColor);
CookieSetRGBColorVal ('ov_default_color', this.defaultColor);
- CookieSetBoolVal ('ov_show_edges', this.showEdges);
- CookieSetRGBColorVal ('ov_edge_color', this.edgeColor);
- CookieSetIntVal ('ov_edge_threshold', this.edgeThreshold);
+ CookieSetBoolVal ('ov_show_edges', this.edgeSettings.showEdges);
+ CookieSetRGBColorVal ('ov_edge_color', this.edgeSettings.edgeColor);
+ CookieSetIntVal ('ov_edge_threshold', this.edgeSettings.edgeThreshold);
CookieSetIntVal ('ov_theme_id', this.themeId);
}
}
diff --git a/source/website/sharingdialog.js b/source/website/sharingdialog.js
index 59d8bc2..b20bc6f 100644
--- a/source/website/sharingdialog.js
+++ b/source/website/sharingdialog.js
@@ -71,12 +71,7 @@ export function ShowSharingDialog (fileList, settings, viewer)
builder.AddEnvironmentSettings (environmentSettings);
builder.AddBackgroundColor (settings.backgroundColor);
builder.AddDefaultColor (settings.defaultColor);
- let edgeSettings = {
- showEdges : settings.showEdges,
- edgeColor : settings.edgeColor,
- edgeThreshold : settings.edgeThreshold
- };
- builder.AddEdgeSettings (edgeSettings);
+ builder.AddEdgeSettings (settings.edgeSettings);
}
let hashParameters = builder.GetParameterList ();
diff --git a/source/website/sidebarsettingspanel.js b/source/website/sidebarsettingspanel.js
index 42e5604..b55543c 100644
--- a/source/website/sidebarsettingspanel.js
+++ b/source/website/sidebarsettingspanel.js
@@ -264,7 +264,7 @@ class SettingsModelDisplaySection extends SettingsSection
this.edgeSettingsDiv = AddDiv (this.contentDiv, 'ov_sidebar_settings_padded');
this.edgeDisplayToggle.OnChange (() => {
ShowDomElement (this.edgeSettingsDiv, this.edgeDisplayToggle.GetStatus ());
- this.settings.showEdges = this.edgeDisplayToggle.GetStatus ();
+ this.settings.edgeSettings.showEdges = this.edgeDisplayToggle.GetStatus ();
this.callbacks.onShowEdgesChange ();
});
@@ -272,9 +272,9 @@ class SettingsModelDisplaySection extends SettingsSection
let predefinedEdgeColors = ['#ffffff', '#e3e3e3', '#c9c9c9', '#898989', '#5f5f5f', '#494949', '#383838', '#0f0f0f'];
let edgeColorInput = AddDiv (edgeColorRow, 'ov_color_picker');
- let defaultEdgeColor = '#' + RGBColorToHexString (this.settings.edgeColor);
+ let defaultEdgeColor = '#' + RGBColorToHexString (this.settings.edgeSettings.edgeColor);
this.edgeColorPicker = AddColorPicker (edgeColorInput, false, defaultEdgeColor, predefinedEdgeColors, (r, g, b, a) => {
- this.settings.edgeColor = new RGBColor (r, g, b);
+ this.settings.edgeSettings.edgeColor = new RGBColor (r, g, b);
this.callbacks.onEdgeColorChange ();
});
AddDiv (edgeColorRow, null, 'Edge Color');
@@ -287,14 +287,14 @@ class SettingsModelDisplaySection extends SettingsSection
this.thresholdSliderValue.innerHTML = this.thresholdSlider.value;
});
this. thresholdSlider.addEventListener ('change', () => {
- this.settings.edgeThreshold = this.thresholdSlider.value;
+ this.settings.edgeSettings.edgeThreshold = this.thresholdSlider.value;
this.callbacks.onEdgeThresholdChange ();
});
- this.thresholdSlider.value = this.settings.edgeThreshold;
- this.thresholdSliderValue.innerHTML = this.settings.edgeThreshold;
+ this.thresholdSlider.value = this.settings.edgeSettings.edgeThreshold;
+ this.thresholdSliderValue.innerHTML = this.settings.edgeSettings.edgeThreshold;
- this.edgeDisplayToggle.SetStatus (this.settings.showEdges);
- ShowDomElement (this.edgeSettingsDiv, this.settings.showEdges);
+ this.edgeDisplayToggle.SetStatus (this.settings.edgeSettings.showEdges);
+ ShowDomElement (this.edgeSettingsDiv, this.settings.edgeSettings.showEdges);
}
UpdateEnvironmentMap ()
@@ -329,12 +329,12 @@ class SettingsModelDisplaySection extends SettingsSection
}
if (this.edgeDisplayToggle !== null) {
- this.edgeDisplayToggle.SetStatus (this.settings.showEdges);
- ShowDomElement (this.edgeSettingsDiv, this.settings.showEdges);
+ this.edgeDisplayToggle.SetStatus (this.settings.edgeSettings.showEdges);
+ ShowDomElement (this.edgeSettingsDiv, this.settings.edgeSettings.showEdges);
- this.edgeColorPicker.setColor ('#' + RGBColorToHexString (this.settings.edgeColor));
- this.thresholdSlider.value = this.settings.edgeThreshold;
- this.thresholdSliderValue.innerHTML = this.settings.edgeThreshold;
+ this.edgeColorPicker.setColor ('#' + RGBColorToHexString (this.settings.edgeSettings.edgeColor));
+ this.thresholdSlider.value = this.settings.edgeSettings.edgeThreshold;
+ this.thresholdSliderValue.innerHTML = this.settings.edgeSettings.edgeThreshold;
}
}
@@ -558,9 +558,7 @@ export class SidebarSettingsPanel extends SidebarPanel
this.settings.backgroundIsEnvMap = defaultSettings.backgroundIsEnvMap;
this.settings.backgroundColor = defaultSettings.backgroundColor;
this.settings.defaultColor = defaultSettings.defaultColor;
- this.settings.showEdges = defaultSettings.showEdges;
- this.settings.edgeColor = defaultSettings.edgeColor;
- this.settings.edgeThreshold = defaultSettings.edgeThreshold;
+ this.settings.edgeSettings = defaultSettings.edgeSettings;
this.settings.themeId = defaultSettings.themeId;
this.modelDisplaySection.Update ();
diff --git a/source/website/website.js b/source/website/website.js
index 96308dd..a171275 100644
--- a/source/website/website.js
+++ b/source/website/website.js
@@ -536,7 +536,7 @@ export class Website
UpdateEdgeDisplay ()
{
this.settings.SaveToCookies ();
- this.viewer.SetEdgeSettings (this.settings.showEdges, this.settings.edgeColor, this.settings.edgeThreshold);
+ this.viewer.SetEdgeSettings (this.settings.edgeSettings);
}
UpdateEnvironmentMap ()
@@ -572,7 +572,7 @@ export class Website
{
let canvas = AddDomElement (this.parameters.viewerDiv, 'canvas');
this.viewer.Init (canvas);
- this.viewer.SetEdgeSettings (this.settings.showEdges, this.settings.edgeColor, this.settings.edgeThreshold);
+ this.viewer.SetEdgeSettings (this.settings.edgeSettings);
this.viewer.SetBackgroundColor (this.settings.backgroundColor);
this.UpdateEnvironmentMap ();
}
diff --git a/test/tests/parameterlist_test.js b/test/tests/parameterlist_test.js
index eb67dc9..d9a03cf 100644
--- a/test/tests/parameterlist_test.js
+++ b/test/tests/parameterlist_test.js
@@ -1,5 +1,6 @@
import * as assert from 'assert';
import * as OV from '../../source/engine/main.js';
+import { EdgeSettings } from '../../source/engine/viewer/viewermodel.js';
export default function suite ()
{
@@ -36,11 +37,11 @@ describe ('Parameter List', function () {
assert.strictEqual (urlParams, 'model=a.txt,b.txt$camera=1.00000,1.00000,1.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000,45.00000$backgroundcolor=4,5,6,7$defaultcolor=1,2,3');
}
{
- let urlParams = OV.CreateUrlBuilder ().AddEdgeSettings ({
- showEdges : true,
- edgeColor : new OV.RGBColor (1, 2, 3),
- edgeThreshold : 15
- }).GetParameterList ();
+ let urlParams = OV.CreateUrlBuilder ().AddEdgeSettings (new EdgeSettings (
+ true,
+ new OV.RGBColor (1, 2, 3),
+ 15
+ )).GetParameterList ();
assert.strictEqual (urlParams, 'edgesettings=on,1,2,3,15');
}
{
@@ -115,11 +116,11 @@ describe ('Parameter List', function () {
{
let parser = OV.CreateUrlParser ('edgesettings=on,1,2,3,15');
- assert.deepStrictEqual (parser.GetEdgeSettings (), {
- showEdges : true,
- edgeColor : new OV.RGBColor (1, 2, 3),
- edgeThreshold : 15
- });
+ assert.deepStrictEqual (parser.GetEdgeSettings (), new EdgeSettings (
+ true,
+ new OV.RGBColor (1, 2, 3),
+ 15
+ ));
}
{
let parser = OV.CreateUrlParser ('cameramode=perspective');