ModelHandle/source/viewer/domviewer.js
Viktor Kovacs d43477d726 Self-hosted viewers should detect size automatically based on the size of the container div #43
Now the viewer's size is based on the parent container's size (not the width and height attribute) so it's possible to style the parent container with css and even use it in fullscreen.
2021-04-02 18:52:00 +02:00

100 lines
3.4 KiB
JavaScript

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)
{
let canvas = document.createElement ('canvas');
element.appendChild (canvas);
let viewer = new OV.Viewer ();
viewer.Init (canvas);
let width = element.clientWidth;
let height = element.clientHeight;
console.log (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);
SetCamera (element, viewer, importResult);
viewer.FitToWindow (boundingSphere, false);
},
onTextureLoaded : function () {
viewer.Render ();
},
onLoadError : function (importError) {
progressDiv.innerHTML = 'Unknown error.';
},
});
let modelParams = element.getAttribute ('model');
if (!modelParams) {
return;
}
let modelUrls = OV.ParameterConverter.StringToModelUrls (modelParams);
if (modelUrls === null || modelUrls.length === 0) {
return;
}
loader.LoadFromUrlList (modelUrls);
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);
}
});
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);
}
});
};