From 69b15ff559592459716d4938166a03ef16145864 Mon Sep 17 00:00:00 2001 From: Viktor Kovacs Date: Fri, 2 Apr 2021 11:03:45 +0200 Subject: [PATCH] Add separator parameter for parameter builder and parser. --- source/parameters/parameterlist.js | 46 ++++++++++++++++++++++-------- test/tests/parameterlist_test.js | 16 +++++------ website/o3dv/hashhandler.js | 4 +-- 3 files changed, 44 insertions(+), 22 deletions(-) diff --git a/source/parameters/parameterlist.js b/source/parameters/parameterlist.js index a12bc78..285feaf 100644 --- a/source/parameters/parameterlist.js +++ b/source/parameters/parameterlist.js @@ -1,15 +1,25 @@ OV.ParameterConverter = { + NumberToString (number) + { + let precision = 5; + return number.toPrecision (precision); + }, + + StringToNumber (str) + { + return parseFloat (str); + }, + CameraToString : function (camera) { if (camera === null) { return null; } - let precision = 5; let cameraParameters = [ - camera.eye.x.toPrecision (precision), camera.eye.y.toPrecision (precision), camera.eye.z.toPrecision (precision), - camera.center.x.toPrecision (precision), camera.center.y.toPrecision (precision), camera.center.z.toPrecision (precision), - camera.up.x.toPrecision (precision), camera.up.y.toPrecision (precision), camera.up.z.toPrecision (precision) + this.NumberToString (camera.eye.x), this.NumberToString (camera.eye.y), this.NumberToString (camera.eye.z), + this.NumberToString (camera.center.x), this.NumberToString (camera.center.y), this.NumberToString (camera.center.z), + this.NumberToString (camera.up.x), this.NumberToString (camera.up.y), this.NumberToString (camera.up.z) ].join (','); return cameraParameters; }, @@ -24,9 +34,9 @@ OV.ParameterConverter = return null; } let camera = new OV.Camera ( - new OV.Coord3D (parseFloat (paramParts[0]), parseFloat (paramParts[1]), parseFloat (paramParts[2])), - new OV.Coord3D (parseFloat (paramParts[3]), parseFloat (paramParts[4]), parseFloat (paramParts[5])), - new OV.Coord3D (parseFloat (paramParts[6]), parseFloat (paramParts[7]), parseFloat (paramParts[8])) + new OV.Coord3D (this.StringToNumber (paramParts[0]), this.StringToNumber (paramParts[1]), this.StringToNumber (paramParts[2])), + new OV.Coord3D (this.StringToNumber (paramParts[3]), this.StringToNumber (paramParts[4]), this.StringToNumber (paramParts[5])), + new OV.Coord3D (this.StringToNumber (paramParts[6]), this.StringToNumber (paramParts[7]), this.StringToNumber (paramParts[8])) ); return camera; }, @@ -50,8 +60,9 @@ OV.ParameterConverter = OV.ParameterListBuilder = class { - constructor () + constructor (separator) { + this.separator = separator; this.urlParams = ''; } @@ -73,7 +84,7 @@ OV.ParameterListBuilder = class return; } if (this.urlParams.length > 0) { - this.urlParams += '$'; + this.urlParams += this.separator; } this.urlParams += keyword + '=' + urlPart; } @@ -86,8 +97,9 @@ OV.ParameterListBuilder = class OV.ParameterListParser = class { - constructor (urlParams) + constructor (urlParams, separator) { + this.separator = separator; this.urlParams = urlParams; } @@ -114,7 +126,7 @@ OV.ParameterListParser = class return null; } let keywordToken = keyword + '='; - let urlParts = this.urlParams.split ('$'); + let urlParts = this.urlParams.split (this.separator); for (let i = 0; i < urlParts.length; i++) { let urlPart = urlParts[i]; if (urlPart.startsWith (keywordToken)) { @@ -125,9 +137,19 @@ OV.ParameterListParser = class } }; +OV.CreateUrlBuilder = function () +{ + return new OV.ParameterListBuilder ('$'); +}; + +OV.CreateUrlParser = function (urlParams) +{ + return new OV.ParameterListParser (urlParams, '$'); +}; + OV.CreateUrlParameters = function (urls, camera) { - let builder = new OV.ParameterListBuilder (); + let builder = OV.CreateUrlBuilder (); builder.AddModelUrls (urls); builder.AddCamera (camera); return builder.GetUrlParams (); diff --git a/test/tests/parameterlist_test.js b/test/tests/parameterlist_test.js index 847fdd6..62fa89c 100644 --- a/test/tests/parameterlist_test.js +++ b/test/tests/parameterlist_test.js @@ -1,6 +1,6 @@ var assert = require ('assert'); -describe ('Parameter list', function () { +describe ('Parameter List', function () { it ('Parameter list builder', function () { let modelUrls = ['a.txt', 'b.txt']; let camera = new OV.Camera ( @@ -8,9 +8,9 @@ describe ('Parameter list', function () { new OV.Coord3D (0.0, 0.0, 0.0), new OV.Coord3D (0.0, 0.0, 1.0) ); - let urlParams1 = new OV.ParameterListBuilder ().AddModelUrls (modelUrls).GetUrlParams (); - let urlParams2 = new OV.ParameterListBuilder ().AddCamera (camera).GetUrlParams (); - let urlParams3 = new OV.ParameterListBuilder ().AddModelUrls (modelUrls).AddCamera (camera).GetUrlParams (); + let urlParams1 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).GetUrlParams (); + let urlParams2 = OV.CreateUrlBuilder ().AddCamera (camera).GetUrlParams (); + let urlParams3 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).GetUrlParams (); assert.strictEqual (urlParams1, 'model=a.txt,b.txt'); assert.strictEqual (urlParams2, 'camera=1.0000,1.0000,1.0000,0.0000,0.0000,0.0000,0.0000,0.0000,1.0000'); assert.strictEqual (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'); @@ -27,16 +27,16 @@ describe ('Parameter list', function () { 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 parserLegacy = new OV.ParameterListParser (urlParamsLegacy); + let parserLegacy = OV.CreateUrlParser (urlParamsLegacy); assert.deepStrictEqual (parserLegacy.GetModelUrls (), modelUrls); assert.deepStrictEqual (parserLegacy.GetCamera (), null); - let parser1 = new OV.ParameterListParser (urlParams1); + let parser1 = OV.CreateUrlParser (urlParams1); assert.deepStrictEqual (parser1.GetModelUrls (), modelUrls); assert.deepStrictEqual (parser1.GetCamera (), null); - let parser2 = new OV.ParameterListParser (urlParams2); + let parser2 = OV.CreateUrlParser (urlParams2); assert.deepStrictEqual (parser2.GetModelUrls (), null); assert.deepStrictEqual (parser2.GetCamera (), camera); - let parser3 = new OV.ParameterListParser (urlParams3); + let parser3 = OV.CreateUrlParser (urlParams3); assert.deepStrictEqual (parser3.GetModelUrls (), modelUrls); assert.deepStrictEqual (parser3.GetCamera (), camera); }); diff --git a/website/o3dv/hashhandler.js b/website/o3dv/hashhandler.js index ee7e5d9..3564e33 100644 --- a/website/o3dv/hashhandler.js +++ b/website/o3dv/hashhandler.js @@ -30,13 +30,13 @@ OV.HashHandler = class GetCameraFromHash () { - let parser = new OV.ParameterListParser (this.GetHash ()); + let parser = OV.CreateUrlParser (this.GetHash ()); return parser.GetCamera (); } GetModelFilesFromHash () { - let parser = new OV.ParameterListParser (this.GetHash ()); + let parser = OV.CreateUrlParser (this.GetHash ()); return parser.GetModelUrls (); }