209 lines
5.3 KiB
JavaScript
209 lines
5.3 KiB
JavaScript
OV.ParameterConverter =
|
|
{
|
|
IntegerToString (integer)
|
|
{
|
|
return integer.toString ();
|
|
},
|
|
|
|
StringToInteger (str)
|
|
{
|
|
return parseInt (str, 10);
|
|
},
|
|
|
|
NumberToString (number)
|
|
{
|
|
let precision = 5;
|
|
return number.toPrecision (precision);
|
|
},
|
|
|
|
StringToNumber (str)
|
|
{
|
|
return parseFloat (str);
|
|
},
|
|
|
|
ModelUrlsToString : function (urls)
|
|
{
|
|
if (urls === null) {
|
|
return null;
|
|
}
|
|
return urls.join (',');
|
|
},
|
|
|
|
StringToModelUrls : function (str)
|
|
{
|
|
if (str === null || str.length === 0) {
|
|
return null;
|
|
}
|
|
return str.split (',');
|
|
},
|
|
|
|
CameraToString : function (camera)
|
|
{
|
|
if (camera === null) {
|
|
return null;
|
|
}
|
|
let cameraParameters = [
|
|
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;
|
|
},
|
|
|
|
StringToCamera : function (str)
|
|
{
|
|
if (str === null || str.length === 0) {
|
|
return null;
|
|
}
|
|
let paramParts = str.split (',');
|
|
if (paramParts.length !== 9) {
|
|
return null;
|
|
}
|
|
let camera = new OV.Camera (
|
|
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;
|
|
},
|
|
|
|
ColorToString : function (color)
|
|
{
|
|
if (color === null) {
|
|
return null;
|
|
}
|
|
let colorParameters = [
|
|
this.IntegerToString (color.r),
|
|
this.IntegerToString (color.g),
|
|
this.IntegerToString (color.b)
|
|
].join (',');
|
|
return colorParameters;
|
|
},
|
|
|
|
StringToColor : function (str)
|
|
{
|
|
if (str === null || str.length === 0) {
|
|
return null;
|
|
}
|
|
let paramParts = str.split (',');
|
|
if (paramParts.length !== 3) {
|
|
return null;
|
|
}
|
|
let color = new OV.Color (
|
|
this.StringToInteger (paramParts[0]),
|
|
this.StringToInteger (paramParts[1]),
|
|
this.StringToInteger (paramParts[2])
|
|
);
|
|
return color;
|
|
}
|
|
};
|
|
|
|
OV.ParameterListBuilder = class
|
|
{
|
|
constructor (separator)
|
|
{
|
|
this.separator = separator;
|
|
this.paramList = '';
|
|
}
|
|
|
|
AddModelUrls (urls)
|
|
{
|
|
this.AddUrlPart ('model', OV.ParameterConverter.ModelUrlsToString (urls));
|
|
return this;
|
|
}
|
|
|
|
AddCamera (camera)
|
|
{
|
|
this.AddUrlPart ('camera', OV.ParameterConverter.CameraToString (camera));
|
|
return this;
|
|
}
|
|
|
|
AddColor (color)
|
|
{
|
|
this.AddUrlPart ('color', OV.ParameterConverter.ColorToString (color));
|
|
return this;
|
|
}
|
|
|
|
AddUrlPart (keyword, urlPart)
|
|
{
|
|
if (keyword === null || urlPart === null) {
|
|
return;
|
|
}
|
|
if (this.paramList.length > 0) {
|
|
this.paramList += this.separator;
|
|
}
|
|
this.paramList += keyword + '=' + urlPart;
|
|
}
|
|
|
|
GetParameterList ()
|
|
{
|
|
return this.paramList;
|
|
}
|
|
};
|
|
|
|
OV.ParameterListParser = class
|
|
{
|
|
constructor (paramList, separator)
|
|
{
|
|
this.separator = separator;
|
|
this.paramList = paramList;
|
|
}
|
|
|
|
GetModelUrls ()
|
|
{
|
|
// detect legacy links
|
|
if (this.paramList.indexOf ('=') === -1) {
|
|
return this.paramList.split (',');
|
|
}
|
|
|
|
let keywordParams = this.GetKeywordParams ('model');
|
|
return OV.ParameterConverter.StringToModelUrls (keywordParams);
|
|
}
|
|
|
|
GetCamera ()
|
|
{
|
|
let keywordParams = this.GetKeywordParams ('camera');
|
|
return OV.ParameterConverter.StringToCamera (keywordParams);
|
|
}
|
|
|
|
GetColor ()
|
|
{
|
|
let colorParams = this.GetKeywordParams ('color');
|
|
return OV.ParameterConverter.StringToColor (colorParams);
|
|
}
|
|
|
|
GetKeywordParams (keyword)
|
|
{
|
|
if (this.paramList === null || this.paramList.length === 0) {
|
|
return null;
|
|
}
|
|
let keywordToken = keyword + '=';
|
|
let urlParts = this.paramList.split (this.separator);
|
|
for (let i = 0; i < urlParts.length; i++) {
|
|
let urlPart = urlParts[i];
|
|
if (urlPart.startsWith (keywordToken)) {
|
|
return urlPart.substr (keywordToken.length);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
};
|
|
|
|
OV.CreateUrlBuilder = function ()
|
|
{
|
|
return new OV.ParameterListBuilder ('$');
|
|
};
|
|
|
|
OV.CreateUrlParser = function (urlParams)
|
|
{
|
|
return new OV.ParameterListParser (urlParams, '$');
|
|
};
|
|
|
|
OV.CreateUrlParameters = function (urls, camera)
|
|
{
|
|
let builder = OV.CreateUrlBuilder ();
|
|
builder.AddModelUrls (urls);
|
|
builder.AddCamera (camera);
|
|
return builder.GetParameterList ();
|
|
};
|