ModelHandle/embeddable/include/online3dembedder.js
2016-04-12 19:54:08 +02:00

78 lines
2.0 KiB
JavaScript

LoadOnline3DModels = function ()
{
function Error (viewerElement, message)
{
var context = viewerElement.getContext ('2d');
context.font = '12px Arial';
context.fillText (message, 0, 12);
}
function LoadViewer (viewerElement)
{
var urls = viewerElement.getAttribute ('sourcefiles');
if (urls === undefined || urls === null) {
Error (viewerElement, 'Invalid source files.');
return;
}
var urlList = urls.split ('|');
JSM.ConvertURLListToJsonData (urlList, {
onError : function () {
Error (viewerElement, 'Conversion failed.');
return;
},
onReady : function (fileNames, jsonData) {
var viewerSettings = {
cameraEyePosition : [6.0, -5.5, 4.0],
cameraCenterPosition : [0.0, 0.0, 0.0],
cameraUpVector : [0.0, 0.0, 1.0]
};
var viewer = new JSM.ThreeViewer ();
if (!viewer.Start (viewerElement, viewerSettings)) {
Error (viewerElement, 'Internal error.');
return;
}
var currentMeshIndex = 0;
var environment = {
onStart : function (/*taskCount, meshes*/) {
viewer.EnableDraw (false);
},
onProgress : function (currentTask, meshes) {
while (currentMeshIndex < meshes.length) {
viewer.AddMesh (meshes[currentMeshIndex]);
currentMeshIndex = currentMeshIndex + 1;
}
},
onFinish : function (meshes) {
if (meshes.length > 0) {
viewer.AdjustClippingPlanes (50.0);
viewer.FitInWindow ();
}
viewer.EnableDraw (true);
viewer.Draw ();
}
};
var textureLoaded = function () {
viewer.Draw ();
};
JSM.ConvertJSONDataToThreeMeshes (jsonData, textureLoaded, environment);
}
});
}
var supported = JSM.IsWebGLEnabled () && JSM.IsFileApiEnabled ();
var viewers = document.getElementsByClassName ('3dviewer');
var i, viewer;
for (i = 0; i < viewers.length; i++) {
viewer = viewers[i];
if (supported) {
LoadViewer (viewer);
} else {
Error (viewer, 'No browser support.');
}
}
};