135 lines
3.6 KiB
JavaScript
135 lines
3.6 KiB
JavaScript
OV.UrlParamConverter =
|
|
{
|
|
CameraToUrlParameter : 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)
|
|
].join (',');
|
|
return cameraParameters;
|
|
},
|
|
|
|
UrlParameterToCamera : function (urlParam)
|
|
{
|
|
if (urlParam === null || urlParam.length === 0) {
|
|
return null;
|
|
}
|
|
let paramParts = urlParam.split (',');
|
|
if (paramParts.length !== 9) {
|
|
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]))
|
|
);
|
|
return camera;
|
|
},
|
|
|
|
ModelUrlsToUrlParameter : function (urls)
|
|
{
|
|
if (urls === null) {
|
|
return null;
|
|
}
|
|
return urls.join (',');
|
|
},
|
|
|
|
UrlParameterToModelUrls : function (urlParam)
|
|
{
|
|
if (urlParam === null || urlParam.length === 0) {
|
|
return null;
|
|
}
|
|
return urlParam.split (',');
|
|
}
|
|
};
|
|
|
|
OV.UrlParamBuilder = class
|
|
{
|
|
constructor ()
|
|
{
|
|
this.urlParams = '';
|
|
}
|
|
|
|
AddModelUrls (urls)
|
|
{
|
|
this.AddUrlPart ('model', OV.UrlParamConverter.ModelUrlsToUrlParameter (urls));
|
|
return this;
|
|
}
|
|
|
|
AddCamera (camera)
|
|
{
|
|
this.AddUrlPart ('camera', OV.UrlParamConverter.CameraToUrlParameter (camera));
|
|
return this;
|
|
}
|
|
|
|
AddUrlPart (keyword, urlPart)
|
|
{
|
|
if (keyword === null || urlPart === null) {
|
|
return;
|
|
}
|
|
if (this.urlParams.length > 0) {
|
|
this.urlParams += '$';
|
|
}
|
|
this.urlParams += keyword + '=' + urlPart;
|
|
}
|
|
|
|
GetUrlParams ()
|
|
{
|
|
return this.urlParams;
|
|
}
|
|
};
|
|
|
|
OV.UrlParamParser = class
|
|
{
|
|
constructor (urlParams)
|
|
{
|
|
this.urlParams = urlParams;
|
|
}
|
|
|
|
GetModelUrls ()
|
|
{
|
|
// detect legacy links
|
|
if (this.urlParams.indexOf ('=') === -1) {
|
|
return this.urlParams.split (',');
|
|
}
|
|
|
|
let keywordParams = this.GetKeywordParams ('model');
|
|
return OV.UrlParamConverter.UrlParameterToModelUrls (keywordParams);
|
|
}
|
|
|
|
GetCamera ()
|
|
{
|
|
let keywordParams = this.GetKeywordParams ('camera');
|
|
return OV.UrlParamConverter.UrlParameterToCamera (keywordParams);
|
|
}
|
|
|
|
GetKeywordParams (keyword)
|
|
{
|
|
if (this.urlParams === null || this.urlParams.length === 0) {
|
|
return null;
|
|
}
|
|
let keywordToken = keyword + '=';
|
|
let urlParts = this.urlParams.split ('$');
|
|
for (let i = 0; i < urlParts.length; i++) {
|
|
let urlPart = urlParts[i];
|
|
if (urlPart.startsWith (keywordToken)) {
|
|
return urlPart.substr (keywordToken.length);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
};
|
|
|
|
OV.CreateUrlParameters = function (urls, camera)
|
|
{
|
|
let builder = new OV.UrlParamBuilder ();
|
|
builder.AddModelUrls (urls);
|
|
builder.AddCamera (camera);
|
|
return builder.GetUrlParams ();
|
|
};
|