Default color handling during embedding and engine usage.
This commit is contained in:
parent
e5e59f3e5d
commit
ca4e0ef1d4
@ -1,5 +1,15 @@
|
|||||||
OV.ParameterConverter =
|
OV.ParameterConverter =
|
||||||
{
|
{
|
||||||
|
IntegerToString (integer)
|
||||||
|
{
|
||||||
|
return integer.toString ();
|
||||||
|
},
|
||||||
|
|
||||||
|
StringToInteger (str)
|
||||||
|
{
|
||||||
|
return parseInt (str, 10);
|
||||||
|
},
|
||||||
|
|
||||||
NumberToString (number)
|
NumberToString (number)
|
||||||
{
|
{
|
||||||
let precision = 5;
|
let precision = 5;
|
||||||
@ -11,6 +21,22 @@ OV.ParameterConverter =
|
|||||||
return parseFloat (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)
|
CameraToString : function (camera)
|
||||||
{
|
{
|
||||||
if (camera === null) {
|
if (camera === null) {
|
||||||
@ -24,12 +50,12 @@ OV.ParameterConverter =
|
|||||||
return cameraParameters;
|
return cameraParameters;
|
||||||
},
|
},
|
||||||
|
|
||||||
StringToCamera : function (urlParam)
|
StringToCamera : function (str)
|
||||||
{
|
{
|
||||||
if (urlParam === null || urlParam.length === 0) {
|
if (str === null || str.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
let paramParts = urlParam.split (',');
|
let paramParts = str.split (',');
|
||||||
if (paramParts.length !== 9) {
|
if (paramParts.length !== 9) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -41,20 +67,34 @@ OV.ParameterConverter =
|
|||||||
return camera;
|
return camera;
|
||||||
},
|
},
|
||||||
|
|
||||||
ModelUrlsToString : function (urls)
|
ColorToString : function (color)
|
||||||
{
|
{
|
||||||
if (urls === null) {
|
if (color === null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return urls.join (',');
|
let colorParameters = [
|
||||||
|
this.IntegerToString (color.r),
|
||||||
|
this.IntegerToString (color.g),
|
||||||
|
this.IntegerToString (color.b)
|
||||||
|
].join (',');
|
||||||
|
return colorParameters;
|
||||||
},
|
},
|
||||||
|
|
||||||
StringToModelUrls : function (urlParam)
|
StringToColor : function (str)
|
||||||
{
|
{
|
||||||
if (urlParam === null || urlParam.length === 0) {
|
if (str === null || str.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return urlParam.split (',');
|
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;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -63,7 +103,7 @@ OV.ParameterListBuilder = class
|
|||||||
constructor (separator)
|
constructor (separator)
|
||||||
{
|
{
|
||||||
this.separator = separator;
|
this.separator = separator;
|
||||||
this.urlParams = '';
|
this.paramList = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
AddModelUrls (urls)
|
AddModelUrls (urls)
|
||||||
@ -78,36 +118,42 @@ OV.ParameterListBuilder = class
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AddColor (color)
|
||||||
|
{
|
||||||
|
this.AddUrlPart ('color', OV.ParameterConverter.ColorToString (color));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
AddUrlPart (keyword, urlPart)
|
AddUrlPart (keyword, urlPart)
|
||||||
{
|
{
|
||||||
if (keyword === null || urlPart === null) {
|
if (keyword === null || urlPart === null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.urlParams.length > 0) {
|
if (this.paramList.length > 0) {
|
||||||
this.urlParams += this.separator;
|
this.paramList += this.separator;
|
||||||
}
|
}
|
||||||
this.urlParams += keyword + '=' + urlPart;
|
this.paramList += keyword + '=' + urlPart;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetUrlParams ()
|
GetParameterList ()
|
||||||
{
|
{
|
||||||
return this.urlParams;
|
return this.paramList;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
OV.ParameterListParser = class
|
OV.ParameterListParser = class
|
||||||
{
|
{
|
||||||
constructor (urlParams, separator)
|
constructor (paramList, separator)
|
||||||
{
|
{
|
||||||
this.separator = separator;
|
this.separator = separator;
|
||||||
this.urlParams = urlParams;
|
this.paramList = paramList;
|
||||||
}
|
}
|
||||||
|
|
||||||
GetModelUrls ()
|
GetModelUrls ()
|
||||||
{
|
{
|
||||||
// detect legacy links
|
// detect legacy links
|
||||||
if (this.urlParams.indexOf ('=') === -1) {
|
if (this.paramList.indexOf ('=') === -1) {
|
||||||
return this.urlParams.split (',');
|
return this.paramList.split (',');
|
||||||
}
|
}
|
||||||
|
|
||||||
let keywordParams = this.GetKeywordParams ('model');
|
let keywordParams = this.GetKeywordParams ('model');
|
||||||
@ -120,13 +166,19 @@ OV.ParameterListParser = class
|
|||||||
return OV.ParameterConverter.StringToCamera (keywordParams);
|
return OV.ParameterConverter.StringToCamera (keywordParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GetColor ()
|
||||||
|
{
|
||||||
|
let colorParams = this.GetKeywordParams ('color');
|
||||||
|
return OV.ParameterConverter.StringToColor (colorParams);
|
||||||
|
}
|
||||||
|
|
||||||
GetKeywordParams (keyword)
|
GetKeywordParams (keyword)
|
||||||
{
|
{
|
||||||
if (this.urlParams === null || this.urlParams.length === 0) {
|
if (this.paramList === null || this.paramList.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
let keywordToken = keyword + '=';
|
let keywordToken = keyword + '=';
|
||||||
let urlParts = this.urlParams.split (this.separator);
|
let urlParts = this.paramList.split (this.separator);
|
||||||
for (let i = 0; i < urlParts.length; i++) {
|
for (let i = 0; i < urlParts.length; i++) {
|
||||||
let urlPart = urlParts[i];
|
let urlPart = urlParts[i];
|
||||||
if (urlPart.startsWith (keywordToken)) {
|
if (urlPart.startsWith (keywordToken)) {
|
||||||
@ -152,5 +204,5 @@ OV.CreateUrlParameters = function (urls, camera)
|
|||||||
let builder = OV.CreateUrlBuilder ();
|
let builder = OV.CreateUrlBuilder ();
|
||||||
builder.AddModelUrls (urls);
|
builder.AddModelUrls (urls);
|
||||||
builder.AddCamera (camera);
|
builder.AddCamera (camera);
|
||||||
return builder.GetUrlParams ();
|
return builder.GetParameterList ();
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,19 +1,5 @@
|
|||||||
OV.Init3DViewerElements = function ()
|
OV.Init3DViewerElements = function ()
|
||||||
{
|
{
|
||||||
function SetCamera (element, viewer, importResult)
|
|
||||||
{
|
|
||||||
let camera = null;
|
|
||||||
let cameraParams = element.getAttribute ('camera');
|
|
||||||
if (cameraParams) {
|
|
||||||
camera = OV.ParameterConverter.StringToCamera (cameraParams);
|
|
||||||
}
|
|
||||||
if (camera !== null) {
|
|
||||||
viewer.SetCamera (camera);
|
|
||||||
} else {
|
|
||||||
viewer.SetUpVector (importResult.upVector, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function LoadElement (element)
|
function LoadElement (element)
|
||||||
{
|
{
|
||||||
let canvas = document.createElement ('canvas');
|
let canvas = document.createElement ('canvas');
|
||||||
@ -50,7 +36,16 @@ OV.Init3DViewerElements = function ()
|
|||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
viewer.AdjustClippingPlanes (boundingSphere);
|
viewer.AdjustClippingPlanes (boundingSphere);
|
||||||
SetCamera (element, viewer, importResult);
|
let camera = null;
|
||||||
|
let cameraParams = element.getAttribute ('camera');
|
||||||
|
if (cameraParams) {
|
||||||
|
camera = OV.ParameterConverter.StringToCamera (cameraParams);
|
||||||
|
}
|
||||||
|
if (camera !== null) {
|
||||||
|
viewer.SetCamera (camera);
|
||||||
|
} else {
|
||||||
|
viewer.SetUpVector (importResult.upVector, false);
|
||||||
|
}
|
||||||
viewer.FitToWindow (boundingSphere, false);
|
viewer.FitToWindow (boundingSphere, false);
|
||||||
},
|
},
|
||||||
onTextureLoaded : function () {
|
onTextureLoaded : function () {
|
||||||
@ -71,6 +66,14 @@ OV.Init3DViewerElements = function ()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let colorParams = element.getAttribute ('color');
|
||||||
|
if (colorParams) {
|
||||||
|
let color = OV.ParameterConverter.StringToColor (colorParams);
|
||||||
|
if (color !== null) {
|
||||||
|
loader.SetDefaultColor (color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
loader.LoadFromUrlList (modelUrls);
|
loader.LoadFromUrlList (modelUrls);
|
||||||
return {
|
return {
|
||||||
element: element,
|
element: element,
|
||||||
|
|||||||
@ -8,12 +8,15 @@ describe ('Parameter List', function () {
|
|||||||
new OV.Coord3D (0.0, 0.0, 0.0),
|
new OV.Coord3D (0.0, 0.0, 0.0),
|
||||||
new OV.Coord3D (0.0, 0.0, 1.0)
|
new OV.Coord3D (0.0, 0.0, 1.0)
|
||||||
);
|
);
|
||||||
let urlParams1 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).GetUrlParams ();
|
let color = new OV.Color (1, 2, 3);
|
||||||
let urlParams2 = OV.CreateUrlBuilder ().AddCamera (camera).GetUrlParams ();
|
let urlParams1 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).GetParameterList ();
|
||||||
let urlParams3 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).GetUrlParams ();
|
let urlParams2 = OV.CreateUrlBuilder ().AddCamera (camera).GetParameterList ();
|
||||||
|
let urlParams3 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).GetParameterList ();
|
||||||
|
let urlParams4 = OV.CreateUrlBuilder ().AddModelUrls (modelUrls).AddCamera (camera).AddColor (color).GetParameterList ();
|
||||||
assert.strictEqual (urlParams1, 'model=a.txt,b.txt');
|
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 (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');
|
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');
|
||||||
|
assert.strictEqual (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$color=1,2,3');
|
||||||
});
|
});
|
||||||
|
|
||||||
it ('Parameter list parser', function () {
|
it ('Parameter list parser', function () {
|
||||||
@ -23,21 +26,30 @@ describe ('Parameter List', function () {
|
|||||||
new OV.Coord3D (0.0, 0.0, 0.0),
|
new OV.Coord3D (0.0, 0.0, 0.0),
|
||||||
new OV.Coord3D (0.0, 0.0, 1.0)
|
new OV.Coord3D (0.0, 0.0, 1.0)
|
||||||
);
|
);
|
||||||
|
let color = new OV.Color (1, 2, 3);
|
||||||
let urlParamsLegacy = 'a.txt,b.txt';
|
let urlParamsLegacy = 'a.txt,b.txt';
|
||||||
let urlParams1 = 'model=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 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 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$color=1,2,3';
|
||||||
let parserLegacy = OV.CreateUrlParser (urlParamsLegacy);
|
let parserLegacy = OV.CreateUrlParser (urlParamsLegacy);
|
||||||
assert.deepStrictEqual (parserLegacy.GetModelUrls (), modelUrls);
|
assert.deepStrictEqual (parserLegacy.GetModelUrls (), modelUrls);
|
||||||
assert.deepStrictEqual (parserLegacy.GetCamera (), null);
|
assert.deepStrictEqual (parserLegacy.GetCamera (), null);
|
||||||
let parser1 = OV.CreateUrlParser (urlParams1);
|
let parser1 = OV.CreateUrlParser (urlParams1);
|
||||||
assert.deepStrictEqual (parser1.GetModelUrls (), modelUrls);
|
assert.deepStrictEqual (parser1.GetModelUrls (), modelUrls);
|
||||||
assert.deepStrictEqual (parser1.GetCamera (), null);
|
assert.deepStrictEqual (parser1.GetCamera (), null);
|
||||||
|
assert.deepStrictEqual (parser1.GetColor (), null);
|
||||||
let parser2 = OV.CreateUrlParser (urlParams2);
|
let parser2 = OV.CreateUrlParser (urlParams2);
|
||||||
assert.deepStrictEqual (parser2.GetModelUrls (), null);
|
assert.deepStrictEqual (parser2.GetModelUrls (), null);
|
||||||
assert.deepStrictEqual (parser2.GetCamera (), camera);
|
assert.deepStrictEqual (parser2.GetCamera (), camera);
|
||||||
|
assert.deepStrictEqual (parser2.GetColor (), null);
|
||||||
let parser3 = OV.CreateUrlParser (urlParams3);
|
let parser3 = OV.CreateUrlParser (urlParams3);
|
||||||
assert.deepStrictEqual (parser3.GetModelUrls (), modelUrls);
|
assert.deepStrictEqual (parser3.GetModelUrls (), modelUrls);
|
||||||
assert.deepStrictEqual (parser3.GetCamera (), camera);
|
assert.deepStrictEqual (parser3.GetCamera (), camera);
|
||||||
|
assert.deepStrictEqual (parser3.GetColor (), null);
|
||||||
|
let parser4 = OV.CreateUrlParser (urlParams4);
|
||||||
|
assert.deepStrictEqual (parser4.GetModelUrls (), modelUrls);
|
||||||
|
assert.deepStrictEqual (parser4.GetCamera (), camera);
|
||||||
|
assert.deepStrictEqual (parser4.GetColor (), color);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -30,6 +30,16 @@
|
|||||||
width=360 height=240
|
width=360 height=240
|
||||||
style="border:1px solid #eeeeee;">
|
style="border:1px solid #eeeeee;">
|
||||||
</iframe>
|
</iframe>
|
||||||
|
<iframe
|
||||||
|
src="../../website/embed.html#model=../test/testfiles/obj/hundred_cubes.obj"
|
||||||
|
width=360 height=240
|
||||||
|
style="border:1px solid #eeeeee;">
|
||||||
|
</iframe>
|
||||||
|
<iframe
|
||||||
|
src="../../website/embed.html#model=../test/testfiles/obj/hundred_cubes.obj$color=200,0,0"
|
||||||
|
width=360 height=240
|
||||||
|
style="border:1px solid #eeeeee;">
|
||||||
|
</iframe>
|
||||||
<iframe
|
<iframe
|
||||||
src="../../website/embed.html#model=wrong.3ds"
|
src="../../website/embed.html#model=wrong.3ds"
|
||||||
width=360 height=240
|
width=360 height=240
|
||||||
|
|||||||
@ -89,6 +89,15 @@
|
|||||||
model="../../test/testfiles/obj/hundred_cubes.obj,../../test/testfiles/obj/hundred_cubes.mtl"
|
model="../../test/testfiles/obj/hundred_cubes.obj,../../test/testfiles/obj/hundred_cubes.mtl"
|
||||||
camera="1,1,1,0,0,0,0,0,1">
|
camera="1,1,1,0,0,0,0,0,1">
|
||||||
</div>
|
</div>
|
||||||
|
<div class="online_3d_viewer"
|
||||||
|
style="width: 360px; height: 240px;"
|
||||||
|
model="../../test/testfiles/obj/hundred_cubes.obj">
|
||||||
|
</div>
|
||||||
|
<div class="online_3d_viewer"
|
||||||
|
style="width: 360px; height: 240px;"
|
||||||
|
model="../../test/testfiles/obj/hundred_cubes.obj"
|
||||||
|
color="200,0,0">
|
||||||
|
</div>
|
||||||
<div class="online_3d_viewer"
|
<div class="online_3d_viewer"
|
||||||
style="width: 360px; height: 240px;"
|
style="width: 360px; height: 240px;"
|
||||||
model="wrong.3ds">
|
model="wrong.3ds">
|
||||||
|
|||||||
@ -72,5 +72,9 @@ OV.Embed = class
|
|||||||
obj.viewer.Render ();
|
obj.viewer.Render ();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
let color = this.hashHandler.GetColorFromHash ();
|
||||||
|
if (color !== null) {
|
||||||
|
this.modelLoader.SetDefaultColor (color);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -28,12 +28,6 @@ OV.HashHandler = class
|
|||||||
this.SetHash ('');
|
this.SetHash ('');
|
||||||
}
|
}
|
||||||
|
|
||||||
GetCameraFromHash ()
|
|
||||||
{
|
|
||||||
let parser = OV.CreateUrlParser (this.GetHash ());
|
|
||||||
return parser.GetCamera ();
|
|
||||||
}
|
|
||||||
|
|
||||||
GetModelFilesFromHash ()
|
GetModelFilesFromHash ()
|
||||||
{
|
{
|
||||||
let parser = OV.CreateUrlParser (this.GetHash ());
|
let parser = OV.CreateUrlParser (this.GetHash ());
|
||||||
@ -46,6 +40,18 @@ OV.HashHandler = class
|
|||||||
this.SetHash (params);
|
this.SetHash (params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GetCameraFromHash ()
|
||||||
|
{
|
||||||
|
let parser = OV.CreateUrlParser (this.GetHash ());
|
||||||
|
return parser.GetCamera ();
|
||||||
|
}
|
||||||
|
|
||||||
|
GetColorFromHash ()
|
||||||
|
{
|
||||||
|
let parser = OV.CreateUrlParser (this.GetHash ());
|
||||||
|
return parser.GetColor ();
|
||||||
|
}
|
||||||
|
|
||||||
GetHash ()
|
GetHash ()
|
||||||
{
|
{
|
||||||
return window.location.hash.substr (1);
|
return window.location.hash.substr (1);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user