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.
100 lines
3.4 KiB
JavaScript
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);
|
|
}
|
|
});
|
|
};
|