diff --git a/sandbox/embed_selfhost_manual.html b/sandbox/embed_selfhost_manual.html new file mode 100644 index 0000000..8666315 --- /dev/null +++ b/sandbox/embed_selfhost_manual.html @@ -0,0 +1,120 @@ + + + + + + + + Online 3D Viewer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/viewer/domviewer.js b/source/viewer/domviewer.js index 67a7471..14c97e1 100644 --- a/source/viewer/domviewer.js +++ b/source/viewer/domviewer.js @@ -1,92 +1,102 @@ +OV.Init3DViewerElement = function (parentDiv, modelUrls, camera, backgroundColor, defaultColor) +{ + let canvas = document.createElement ('canvas'); + parentDiv.appendChild (canvas); + + let viewer = new OV.Viewer (); + viewer.Init (canvas); + + let width = parentDiv.clientWidth; + let height = parentDiv.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'); + parentDiv.appendChild (progressDiv); + progressDiv.innerHTML = 'Loading model...'; + }, + onImportStart : function () { + progressDiv.innerHTML = 'Importing model...'; + }, + onVisualizationStart : function () { + progressDiv.innerHTML = 'Visualizing model...'; + }, + onModelFinished : function (importResult, threeMeshes) { + parentDiv.removeChild (progressDiv); + canvas.style.display = 'inherit'; + viewer.AddMeshes (threeMeshes); + let boundingSphere = viewer.GetBoundingSphere ((meshUserData) => { + return true; + }); + viewer.AdjustClippingPlanes (boundingSphere); + 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.'; + }, + }); + + if (modelUrls === null || modelUrls.length === 0) { + return null; + } + + if (backgroundColor !== null) { + viewer.SetBackgroundColor (backgroundColor); + } + + let settings = new OV.ImportSettings (); + if (defaultColor !== null) { + settings.defaultColor = defaultColor; + } + + loader.LoadFromUrlList (modelUrls, settings); + return { + element: parentDiv, + viewer: viewer + }; +}; + 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 ((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 ('backgroundcolor'); - if (backgroundParam) { - let backgroundColor = OV.ParameterConverter.StringToColor (backgroundParam); - if (backgroundColor !== null) { - viewer.SetBackgroundColor (backgroundColor); - } + let camera = null; + let cameraParams = element.getAttribute ('camera'); + if (cameraParams) { + camera = OV.ParameterConverter.StringToCamera (cameraParams); } + let backgroundColor = null; + let backgroundColorParams = element.getAttribute ('backgroundcolor'); + if (backgroundColorParams) { + backgroundColor = OV.ParameterConverter.StringToColor (backgroundColorParams); + } + + let defaultColor = null; + let defaultColorParams = element.getAttribute ('defaultcolor'); + if (defaultColorParams) { + defaultColor = OV.ParameterConverter.StringToColor (defaultColorParams); + } + + let modelUrls = null; let modelParams = element.getAttribute ('model'); - if (!modelParams) { - return; + if (modelParams) { + modelUrls = OV.ParameterConverter.StringToModelUrls (modelParams); } - let modelUrls = OV.ParameterConverter.StringToModelUrls (modelParams); - if (modelUrls === null || modelUrls.length === 0) { - return; - } - - let settings = new OV.ImportSettings (); - let colorParam = element.getAttribute ('defaultcolor'); - if (colorParam) { - let defaultColor = OV.ParameterConverter.StringToColor (colorParam); - if (defaultColor !== null) { - settings.defaultColor = defaultColor; - } - } - - loader.LoadFromUrlList (modelUrls, settings); - return { - element: element, - viewer: viewer - }; + return OV.Init3DViewerElement (element, modelUrls, camera, backgroundColor, defaultColor); } let viewerElements = [];