Add separator parameter for parameter builder and parser.

This commit is contained in:
Viktor Kovacs 2021-04-02 11:03:45 +02:00
parent 8853c00e14
commit 69b15ff559
3 changed files with 44 additions and 22 deletions

View File

@ -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 ();

View File

@ -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);
});

View File

@ -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 ();
}