Enable camera mode setting during embedding.

This commit is contained in:
kovacsv 2022-09-18 14:35:06 +02:00
parent 14b0863d64
commit 12537cdac8
11 changed files with 229 additions and 85 deletions

View File

@ -25,26 +25,38 @@
<body>
<iframe
width="400" height="300" style="border:1px solid #eeeeee;"
src="../../website/embed.html#model=assets/models/solids.obj,assets/models/solids.mtl$camera=2.18558,4.53834,2.35460,3.62488,2.61927,-0.52401,0.00000,1.00000,0.00000$envsettings=fishermans_bastion,off$backgroundcolor=255,255,255$defaultcolor=200,200,200$edgesettings=off,0,0,0,1">
width="360" height="240" style="border:1px solid #eeeeee;"
src="../../website/embed.html#model=assets/models/solids.obj,assets/models/solids.mtl$camera=2.18558,4.53834,2.35460,3.62488,2.61927,-0.52401,0.00000,1.00000,0.00000">
</iframe>
<iframe
width="400" height="300" style="border:1px solid #eeeeee;"
src="../../website/embed.html#model=assets/models/solids.obj,assets/models/solids.mtl$camera=2.18558,4.53834,2.35460,3.62488,2.61927,-0.52401,0.00000,1.00000,0.00000,100.0$envsettings=fishermans_bastion,off$backgroundcolor=255,255,255$defaultcolor=200,200,200$edgesettings=off,0,0,0,1">
width="360" height="240" style="border:1px solid #eeeeee;"
src="../../website/embed.html#model=assets/models/solids.obj,assets/models/solids.mtl$camera=2.18558,4.53834,2.35460,3.62488,2.61927,-0.52401,0.00000,1.00000,0.00000,100.0">
</iframe>
<iframe
width="360" height="240" style="border:1px solid #eeeeee;"
src="../../website/embed.html#model=assets/models/solids.obj,assets/models/solids.mtl$camera=2.18558,4.53834,2.35460,3.62488,2.61927,-0.52401,0.00000,1.00000,0.00000$cameramode=orthographic">
</iframe>
<div class="online_3d_viewer"
style="width: 400px; height: 300px;"
style="width: 360px; height: 240px;"
model="../website/assets/models/solids.obj,../website/assets/models/solids.mtl"
camera="2.18558,4.53834,2.35460,3.62488,2.61927,-0.52401,0.00000,1.00000,0.00000">
</div>
<div class="online_3d_viewer"
style="width: 400px; height: 300px;"
style="width: 360px; height: 240px;"
model="../website/assets/models/solids.obj,../website/assets/models/solids.mtl"
camera="2.18558,4.53834,2.35460,3.62488,2.61927,-0.52401,0.00000,1.00000,0.00000,100.0">
</div>
<div class="online_3d_viewer"
style="width: 360px; height: 240px;"
model="../website/assets/models/solids.obj,../website/assets/models/solids.mtl"
camera="2.18558,4.53834,2.35460,3.62488,2.61927,-0.52401,0.00000,1.00000,0.00000"
cameramode="orthographic">
</div>
</body>
</html>

View File

@ -90,7 +90,7 @@
orthographicCamera.position.set (eye.x, eye.y, eye.z);
orthographicCamera.up.set (up.x, up.y, up.z);
orthographicCamera.lookAt (center);
InitRenderer ('ortographic_canvas', orthographicCamera, width, height);
InitRenderer ('orthographic_canvas', orthographicCamera, width, height);
}
window.onload = function () {
@ -101,7 +101,7 @@
<body>
<canvas id="perspective_canvas"></canvas>
<canvas id="ortographic_canvas"></canvas>
<canvas id="orthographic_canvas"></canvas>
</body>
</html>

View File

@ -1,6 +1,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';
export let ParameterConverter =
{
@ -55,6 +56,16 @@ export let ParameterConverter =
return cameraParameters;
},
CameraModeToString : function (cameraMode)
{
if (cameraMode === CameraMode.Perspective) {
return 'perspective';
} else if (cameraMode === CameraMode.Orthographic) {
return 'orthographic';
}
return null;
},
StringToCamera : function (str)
{
if (str === null || str.length === 0) {
@ -79,6 +90,16 @@ export let ParameterConverter =
return camera;
},
StringToCameraMode : function (str)
{
if (str === 'perspective') {
return CameraMode.Perspective;
} else if (str === 'orthographic') {
return CameraMode.Orthographic;
}
return null;
},
RGBColorToString : function (color)
{
if (color === null) {
@ -224,6 +245,12 @@ export class ParameterListBuilder
return this;
}
AddCameraMode (cameraMode)
{
this.AddUrlPart ('cameramode', ParameterConverter.CameraModeToString (cameraMode));
return this;
}
AddEnvironmentSettings (envSettings)
{
this.AddUrlPart ('envsettings', ParameterConverter.EnvironmentSettingsToString (envSettings));
@ -290,6 +317,12 @@ export class ParameterListParser
return ParameterConverter.StringToCamera (keywordParams);
}
GetCameraMode ()
{
let keywordParams = this.GetKeywordParams ('cameramode');
return ParameterConverter.StringToCameraMode (keywordParams);
}
GetEnvironmentSettings ()
{
let environmentSettingsParams = this.GetKeywordParams ('envsettings');

View File

@ -27,6 +27,10 @@ export class EmbeddedViewer
let height = this.parentElement.clientHeight;
this.viewer.Resize (width, height);
if (this.parameters.cameraMode) {
this.viewer.SetCameraMode (this.parameters.cameraMode);
}
if (this.parameters.backgroundColor) {
this.viewer.SetBackgroundColor (this.parameters.backgroundColor);
}
@ -172,6 +176,12 @@ export function Init3DViewerElements (onReady)
camera = ParameterConverter.StringToCamera (cameraParams);
}
let cameraMode = null;
let cameraModeParams = element.getAttribute ('cameramode');
if (cameraModeParams) {
cameraMode = ParameterConverter.StringToCameraMode (cameraModeParams);
}
let backgroundColor = null;
let backgroundColorParams = element.getAttribute ('backgroundcolor');
if (backgroundColorParams) {
@ -215,6 +225,7 @@ export function Init3DViewerElements (onReady)
return Init3DViewerElement (element, modelUrls, {
camera : camera,
cameraMode : cameraMode,
backgroundColor : backgroundColor,
defaultColor : defaultColor,
edgeSettings : edgeSettings,

View File

@ -337,6 +337,11 @@ export class Viewer
return this.navigation.GetCamera ();
}
GetCameraMode ()
{
return this.cameraMode;
}
SetCamera (camera)
{
this.navigation.SetCamera (camera);
@ -392,6 +397,14 @@ export class Viewer
this.navigation.MoveCamera (newCamera, animation ? this.settings.animationSteps : 0);
}
AdjustClippingPlanes ()
{
let boundingSphere = this.GetBoundingSphere ((meshUserData) => {
return true;
});
this.AdjustClippingPlanesToSphere (boundingSphere);
}
AdjustClippingPlanesToSphere (boundingSphere)
{
if (boundingSphere === null) {

View File

@ -49,6 +49,10 @@ export class Embed
];
this.viewer.SetEnvironmentMapSettings (envMapTextures, bgIsEnvMap);
let cameraMode = this.hashHandler.GetCameraModeFromHash ();
if (cameraMode !== null) {
this.viewer.SetCameraMode (cameraMode);
}
let background = this.hashHandler.GetBackgroundFromHash ();
if (background !== null) {
this.viewer.SetBackgroundColor (background);

View File

@ -1,4 +1,4 @@
export const FeatureSet =
{
OrthographicView : false
};

View File

@ -48,6 +48,12 @@ export class HashHandler
return parser.GetCamera ();
}
GetCameraModeFromHash ()
{
let parser = CreateUrlParser (this.GetHash ());
return parser.GetCameraMode ();
}
GetBackgroundFromHash ()
{
let parser = CreateUrlParser (this.GetHash ());

View File

@ -7,7 +7,7 @@ import { ButtonDialog } from './dialog.js';
import { CopyToClipboard } from './utils.js';
import { HandleEvent } from './eventhandler.js';
export function ShowSharingDialog (fileList, settings, camera)
export function ShowSharingDialog (fileList, settings, viewer)
{
function AddCheckboxLine (parentDiv, text, id, onChange)
{
@ -55,14 +55,15 @@ export function ShowSharingDialog (fileList, settings, camera)
sharingLinkInput.value = GetSharingLink (modelFiles);
}
function AddEmbeddingCodeTab (parentDiv, modelFiles, settings, camera)
function AddEmbeddingCodeTab (parentDiv, modelFiles, settings, viewer)
{
function GetEmbeddingCode (modelFiles, useCurrentSettings, settings, camera)
function GetEmbeddingCode (modelFiles, useCurrentSettings, settings, viewer)
{
let builder = CreateUrlBuilder ();
builder.AddModelUrls (modelFiles);
if (useCurrentSettings) {
builder.AddCamera (camera);
builder.AddCamera (viewer.GetCamera ());
builder.AddCameraMode (viewer.GetCameraMode ());
let environmentSettings = {
environmentMapName : settings.environmentMapName,
backgroundIsEnvMap : settings.backgroundIsEnvMap
@ -95,14 +96,14 @@ export function ShowSharingDialog (fileList, settings, camera)
let optionsSection = AddDiv (section, 'ov_dialog_section');
let embeddingCodeInput = AddCopyableTextInput (section, () => {
HandleEvent ('model_shared', 'embedding_code');
return GetEmbeddingCode (modelFiles, useCurrentSettings, settings, camera);
return GetEmbeddingCode (modelFiles, useCurrentSettings, settings, viewer);
});
AddCheckboxLine (optionsSection, 'Use customized settings', 'embed_current_settings', (checked) => {
useCurrentSettings = checked;
embeddingCodeInput.value = GetEmbeddingCode (modelFiles, useCurrentSettings, settings, camera);
embeddingCodeInput.value = GetEmbeddingCode (modelFiles, useCurrentSettings, settings, viewer);
});
embeddingCodeInput.value = GetEmbeddingCode (modelFiles, useCurrentSettings, settings, camera);
embeddingCodeInput.value = GetEmbeddingCode (modelFiles, useCurrentSettings, settings, viewer);
}
if (!fileList.IsOnlyUrlSource ()) {
@ -133,7 +134,7 @@ export function ShowSharingDialog (fileList, settings, camera)
]);
AddSharingLinkTab (contentDiv, modelFiles);
AddEmbeddingCodeTab (contentDiv, modelFiles, settings, camera);
AddEmbeddingCodeTab (contentDiv, modelFiles, settings, viewer);
dialog.Open ();
return dialog;

View File

@ -1,7 +1,7 @@
import { GetFileExtension, TransformFileHostUrls } from '../engine/io/fileutils.js';
import { InputFilesFromFileObjects, InputFilesFromUrls } from '../engine/import/importerfiles.js';
import { ImportErrorCode, ImportSettings } from '../engine/import/importer.js';
import { Viewer } from '../engine/viewer/viewer.js';
import { CameraMode, Viewer } from '../engine/viewer/viewer.js';
import { AddDiv, AddDomElement, ShowDomElement, SetDomElementOuterHeight } from '../engine/viewer/domutils.js';
import { CalculatePopupPositionToScreen, ShowListPopup } from './dialogs.js';
import { HandleEvent } from './eventhandler.js';
@ -23,6 +23,7 @@ import { CookieGetBoolVal, CookieSetBoolVal } from './cookiehandler.js';
import { ShadingType } from '../engine/threejs/threeutils.js';
import { MeasureTool } from './measuretool.js';
import { CloseAllDialogs } from './dialog.js';
import { FeatureSet } from './featureset.js';
import * as THREE from 'three';
@ -556,14 +557,33 @@ export class Website
this.viewer.FlipUpVector ();
});
AddSeparator (this.toolbar, ['only_on_model']);
AddRadioButton (this.toolbar, ['fix_up_on', 'fix_up_off'], ['Fixed up vector', 'Free orbit'], 0, ['only_on_model'], (buttonIndex) => {
if (buttonIndex === 0) {
this.viewer.SetFixUpVector (true);
} else if (buttonIndex === 1) {
this.viewer.SetFixUpVector (false);
}
});
AddSeparator (this.toolbar, ['only_full_width', 'only_on_model']);
if (FeatureSet.OrthographicView) {
AddRadioButton (this.toolbar, ['fix_up_on', 'fix_up_off'], ['Perspective camera', 'Orthographic camera'], 0, ['only_on_model'], (buttonIndex) => {
if (buttonIndex === 0) {
this.viewer.SetCameraMode (CameraMode.Perspective);
} else if (buttonIndex === 1) {
this.viewer.SetCameraMode (CameraMode.Orthographic);
}
});
AddSeparator (this.toolbar, ['only_full_width', 'only_on_model']);
AddRadioButton (this.toolbar, ['fix_up_on', 'fix_up_off'], ['Fixed up vector', 'Free orbit'], 0, ['only_full_width', 'only_on_model'], (buttonIndex) => {
if (buttonIndex === 0) {
this.viewer.SetFixUpVector (true);
} else if (buttonIndex === 1) {
this.viewer.SetFixUpVector (false);
}
});
AddSeparator (this.toolbar, ['only_full_width', 'only_on_model']);
} else {
AddRadioButton (this.toolbar, ['fix_up_on', 'fix_up_off'], ['Fixed up vector', 'Free orbit'], 0, ['only_on_model'], (buttonIndex) => {
if (buttonIndex === 0) {
this.viewer.SetFixUpVector (true);
} else if (buttonIndex === 1) {
this.viewer.SetFixUpVector (false);
}
});
AddSeparator (this.toolbar, ['only_full_width', 'only_on_model']);
}
let measureToolButton = AddPushButton (this.toolbar, 'measure', 'Measure', ['only_full_width', 'only_on_model'], (isSelected) => {
HandleEvent ('measure_tool_activated', isSelected ? 'on' : 'off');
this.navigator.SetSelection (null);
@ -582,7 +602,7 @@ export class Website
});
});
AddButton (this.toolbar, 'share', 'Share model', ['only_full_width', 'only_on_model'], () => {
ShowSharingDialog (importer.GetFileList (), this.settings, this.viewer.GetCamera ());
ShowSharingDialog (importer.GetFileList (), this.settings, this.viewer);
});
this.parameters.fileInput.addEventListener ('change', (ev) => {

View File

@ -15,22 +15,42 @@ describe ('Parameter List', function () {
);
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 ();
let urlParams3 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).GetParameterList ();
let urlParams4 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).AddDefaultColor (color).GetParameterList ();
let urlParams5 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).AddBackgroundColor (background).AddDefaultColor (color).GetParameterList ();
let urlParams6 = OV.CreateUrlBuilder ().AddEdgeSettings ({
showEdges : true,
edgeColor : new OV.RGBColor (1, 2, 3),
edgeThreshold : 15
}).GetParameterList ();
assert.strictEqual (urlParams1, 'model=a.txt,b.txt');
assert.strictEqual (urlParams2, 'camera=1.00000,1.00000,1.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000,45.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,45.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,45.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,45.00000$backgroundcolor=4,5,6,7$defaultcolor=1,2,3');
assert.strictEqual (urlParams6, 'edgesettings=on,1,2,3,15');
{
let urlParams = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).GetParameterList ();
assert.strictEqual (urlParams, 'model=a.txt,b.txt');
}
{
let urlParams = OV.CreateUrlBuilder ().AddCamera (camera).GetParameterList ();
assert.strictEqual (urlParams, 'camera=1.00000,1.00000,1.00000,0.00000,0.00000,0.00000,0.00000,0.00000,1.00000,45.00000');
}
{
let urlParams = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).GetParameterList ();
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');
}
{
let urlParams = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).AddDefaultColor (color).GetParameterList ();
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$defaultcolor=1,2,3');
}
{
let urlParams = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).AddBackgroundColor (background).AddDefaultColor (color).GetParameterList ();
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 ();
assert.strictEqual (urlParams, 'edgesettings=on,1,2,3,15');
}
{
let urlParams = OV.CreateUrlBuilder ().AddCameraMode (OV.CameraMode.Perspective).GetParameterList ();
assert.strictEqual (urlParams, 'cameramode=perspective');
}
{
let urlParams = OV.CreateUrlBuilder ().AddCameraMode (OV.CameraMode.Orthographic).GetParameterList ();
assert.strictEqual (urlParams, 'cameramode=orthographic');
}
});
it ('Parameter list parser', function () {
@ -43,48 +63,72 @@ describe ('Parameter List', function () {
);
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 urlParams2b = 'camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000,60.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,7$defaultcolor=1,2,3';
let urlParams6 = 'edgesettings=on,1,2,3,15';
let parserLegacy = OV.CreateUrlParser (urlParamsLegacy);
assert.deepStrictEqual (parserLegacy.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parserLegacy.GetCamera (), null);
let parser1 = OV.CreateUrlParser (urlParams1);
assert.deepStrictEqual (parser1.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser1.GetCamera (), null);
assert.deepStrictEqual (parser1.GetDefaultColor (), null);
let parser2 = OV.CreateUrlParser (urlParams2);
assert.deepStrictEqual (parser2.GetModelUrls (), null);
assert.deepStrictEqual (parser2.GetCamera (), camera);
assert.deepStrictEqual (parser2.GetDefaultColor (), null);
let parser2b = OV.CreateUrlParser (urlParams2b);
assert.deepStrictEqual (parser2b.GetModelUrls (), null);
assert.deepStrictEqual (parser2b.GetCamera (), new OV.Camera (new OV.Coord3D (1.0, 1.0, 1.0), new OV.Coord3D (0.0, 0.0, 0.0), new OV.Coord3D (0.0, 0.0, 1.0), 60.0));
assert.deepStrictEqual (parser2b.GetDefaultColor (), null);
let parser3 = OV.CreateUrlParser (urlParams3);
assert.deepStrictEqual (parser3.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser3.GetCamera (), camera);
assert.deepStrictEqual (parser3.GetDefaultColor (), null);
let parser4 = OV.CreateUrlParser (urlParams4);
assert.deepStrictEqual (parser4.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser4.GetCamera (), camera);
assert.deepStrictEqual (parser4.GetDefaultColor (), color);
let parser5 = OV.CreateUrlParser (urlParams5);
assert.deepStrictEqual (parser5.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser5.GetCamera (), camera);
assert.deepStrictEqual (parser5.GetDefaultColor (), color);
assert.deepStrictEqual (parser5.GetBackgroundColor (), background);
let parser6 = OV.CreateUrlParser (urlParams6);
assert.deepStrictEqual (parser6.GetEdgeSettings (), {
showEdges : true,
edgeColor : new OV.RGBColor (1, 2, 3),
edgeThreshold : 15
});
{
let parser = OV.CreateUrlParser ('a.txt,b.txt');
assert.deepStrictEqual (parser.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser.GetCamera (), null);
}
{
let parser = OV.CreateUrlParser ('model=a.txt,b.txt');
assert.deepStrictEqual (parser.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser.GetCamera (), null);
assert.deepStrictEqual (parser.GetDefaultColor (), null);
}
{
let parser = OV.CreateUrlParser ('camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000');
assert.deepStrictEqual (parser.GetModelUrls (), null);
assert.deepStrictEqual (parser.GetCamera (), camera);
assert.deepStrictEqual (parser.GetDefaultColor (), null);
}
{
let parser = OV.CreateUrlParser ('camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000,60.0000');
assert.deepStrictEqual (parser.GetModelUrls (), null);
assert.deepStrictEqual (parser.GetCamera (), new OV.Camera (new OV.Coord3D (1.0, 1.0, 1.0), new OV.Coord3D (0.0, 0.0, 0.0), new OV.Coord3D (0.0, 0.0, 1.0), 60.0));
assert.deepStrictEqual (parser.GetDefaultColor (), null);
}
{
let parser = OV.CreateUrlParser ('model=a.txt,b.txt$camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000');
assert.deepStrictEqual (parser.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser.GetCamera (), camera);
assert.deepStrictEqual (parser.GetDefaultColor (), null);
}
{
let parser = OV.CreateUrlParser ('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');
assert.deepStrictEqual (parser.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser.GetCamera (), camera);
assert.deepStrictEqual (parser.GetDefaultColor (), color);
}
{
let parser = OV.CreateUrlParser ('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');
assert.deepStrictEqual (parser.GetModelUrls (), modelUrls);
assert.deepStrictEqual (parser.GetCamera (), camera);
assert.deepStrictEqual (parser.GetDefaultColor (), color);
assert.deepStrictEqual (parser.GetBackgroundColor (), background);
}
{
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
});
}
{
let parser = OV.CreateUrlParser ('cameramode=perspective');
assert.deepStrictEqual (parser.GetCameraMode (), OV.CameraMode.Perspective);
}
{
let parser = OV.CreateUrlParser ('cameramode=orthographic');
assert.deepStrictEqual (parser.GetCameraMode (), OV.CameraMode.Orthographic);
}
});
});