ModelHandle/source/viewer/domviewer.js

114 lines
4.0 KiB
JavaScript

OV.Init3DViewerElements = function (onReady)
{
function LoadElement (element)
{
let canvas = document.createElement ('canvas');
element.appendChild (canvas);
let viewer = new OV.Viewer ();
viewer.Init (canvas);
let width = element.clientWidth;
let height = element.clientHeight;
viewer.Resize (width, height);
let loader = new OV.ThreeModelLoader ();
let progressDiv = null;
loader.Init ({
onLoadStart : function () {
canvas.style.display = 'none';
progressDiv = document.createElement ('div');
element.appendChild (progressDiv);
progressDiv.innerHTML = 'Loading model...';
},
onImportStart : function () {
progressDiv.innerHTML = 'Importing model...';
},
onVisualizationStart : function () {
progressDiv.innerHTML = 'Visualizing model...';
},
onModelFinished : function (importResult, threeMeshes) {
element.removeChild (progressDiv);
canvas.style.display = 'inherit';
viewer.AddMeshes (threeMeshes);
let boundingSphere = viewer.GetBoundingSphere (function (meshUserData) {
return true;
});
viewer.AdjustClippingPlanes (boundingSphere);
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);
},
onTextureLoaded : function () {
viewer.Render ();
},
onLoadError : function (importError) {
progressDiv.innerHTML = 'Unknown error.';
},
});
let backgroundParam = element.getAttribute ('background');
if (backgroundParam) {
let color = OV.ParameterConverter.StringToColor (backgroundParam);
if (color !== null) {
viewer.SetBackgroundColor (color);
}
}
let modelParams = element.getAttribute ('model');
if (!modelParams) {
return;
}
let modelUrls = OV.ParameterConverter.StringToModelUrls (modelParams);
if (modelUrls === null || modelUrls.length === 0) {
return;
}
let settings = new OV.ImportSettings ();
let colorParam = element.getAttribute ('color');
if (colorParam) {
let color = OV.ParameterConverter.StringToColor (colorParam);
if (color !== null) {
settings.defaultColor = color;
}
}
loader.LoadFromUrlList (modelUrls, settings);
return {
element: element,
viewer: viewer
};
}
let viewerElements = [];
window.addEventListener ('load', function () {
let elements = document.getElementsByClassName ('online_3d_viewer');
for (let i = 0; i < elements.length; i++) {
let element = elements[i];
let viewerElement = LoadElement (element);
viewerElements.push (viewerElement);
}
if (onReady !== undefined && onReady !== null) {
onReady (viewerElements);
}
});
window.addEventListener ('resize', function () {
for (let i = 0; i < viewerElements.length; i++) {
let viewerElement = viewerElements[i];
let width = viewerElement.element.clientWidth;
let height = viewerElement.element.clientHeight;
viewerElement.viewer.Resize (width, height);
}
});
};