Simplify event handler interface.

This commit is contained in:
kovacsv 2022-01-06 18:16:22 +01:00
parent dbf1865c46
commit 74134c94a4
5 changed files with 244 additions and 235 deletions

View File

@ -2,213 +2,221 @@
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no">
<link rel="icon" type="image/png" href="assets/images/3dviewer_net_favicon.ico">
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no">
<link rel="icon" type="image/png" href="assets/images/3dviewer_net_favicon.ico">
<title>Online 3D Viewer</title>
<title>Online 3D Viewer</title>
<!-- website libs start -->
<link rel="stylesheet" type="text/css" href="../libs/pickr.monolith.min.css">
<script type="text/javascript" src="../libs/pickr.es5.min.js"></script>
<script type="text/javascript" src="../libs/three.min.js"></script>
<!-- website libs end -->
<!-- website libs start -->
<link rel="stylesheet" type="text/css" href="../libs/pickr.monolith.min.css">
<script type="text/javascript" src="../libs/pickr.es5.min.js"></script>
<script type="text/javascript" src="../libs/three.min.js"></script>
<!-- website libs end -->
<!-- meta start -->
<!-- meta end -->
<!-- meta start -->
<!-- meta end -->
<!-- engine start -->
<script type="text/javascript" src="../source/core/core.js"></script>
<script type="text/javascript" src="../source/core/taskrunner.js"></script>
<script type="text/javascript" src="../source/geometry/geometry.js"></script>
<script type="text/javascript" src="../source/geometry/coord2d.js"></script>
<script type="text/javascript" src="../source/geometry/coord3d.js"></script>
<script type="text/javascript" src="../source/geometry/coord4d.js"></script>
<script type="text/javascript" src="../source/geometry/quaternion.js"></script>
<script type="text/javascript" src="../source/geometry/box3d.js"></script>
<script type="text/javascript" src="../source/geometry/octree.js"></script>
<script type="text/javascript" src="../source/geometry/matrix.js"></script>
<script type="text/javascript" src="../source/geometry/transformation.js"></script>
<script type="text/javascript" src="../source/geometry/tween.js"></script>
<script type="text/javascript" src="../source/io/binaryreader.js"></script>
<script type="text/javascript" src="../source/io/binarywriter.js"></script>
<script type="text/javascript" src="../source/io/textwriter.js"></script>
<script type="text/javascript" src="../source/io/bufferutils.js"></script>
<script type="text/javascript" src="../source/io/fileutils.js"></script>
<script type="text/javascript" src="../source/io/externallibs.js"></script>
<script type="text/javascript" src="../source/model/color.js"></script>
<script type="text/javascript" src="../source/model/material.js"></script>
<script type="text/javascript" src="../source/model/triangle.js"></script>
<script type="text/javascript" src="../source/model/property.js"></script>
<script type="text/javascript" src="../source/model/object.js"></script>
<script type="text/javascript" src="../source/model/mesh.js"></script>
<script type="text/javascript" src="../source/model/meshbuffer.js"></script>
<script type="text/javascript" src="../source/model/node.js"></script>
<script type="text/javascript" src="../source/model/meshinstance.js"></script>
<script type="text/javascript" src="../source/model/model.js"></script>
<script type="text/javascript" src="../source/model/topology.js"></script>
<script type="text/javascript" src="../source/model/meshutils.js"></script>
<script type="text/javascript" src="../source/model/modelutils.js"></script>
<script type="text/javascript" src="../source/model/modelfinalization.js"></script>
<script type="text/javascript" src="../source/model/quantities.js"></script>
<script type="text/javascript" src="../source/model/generator.js"></script>
<script type="text/javascript" src="../source/import/importerutils.js"></script>
<script type="text/javascript" src="../source/import/importerbase.js"></script>
<script type="text/javascript" src="../source/import/importerobj.js"></script>
<script type="text/javascript" src="../source/import/importerstl.js"></script>
<script type="text/javascript" src="../source/import/importeroff.js"></script>
<script type="text/javascript" src="../source/import/importerply.js"></script>
<script type="text/javascript" src="../source/import/importer3ds.js"></script>
<script type="text/javascript" src="../source/import/importergltf.js"></script>
<script type="text/javascript" src="../source/import/importero3dv.js"></script>
<script type="text/javascript" src="../source/import/importerthree.js"></script>
<script type="text/javascript" src="../source/import/importersvg.js"></script>
<script type="text/javascript" src="../source/import/importer3dm.js"></script>
<script type="text/javascript" src="../source/import/importerifc.js"></script>
<script type="text/javascript" src="../source/import/filelist.js"></script>
<script type="text/javascript" src="../source/import/importer.js"></script>
<script type="text/javascript" src="../source/export/exportermodel.js"></script>
<script type="text/javascript" src="../source/export/exporterbase.js"></script>
<script type="text/javascript" src="../source/export/exporterobj.js"></script>
<script type="text/javascript" src="../source/export/exporterstl.js"></script>
<script type="text/javascript" src="../source/export/exporterply.js"></script>
<script type="text/javascript" src="../source/export/exporteroff.js"></script>
<script type="text/javascript" src="../source/export/exportergltf.js"></script>
<script type="text/javascript" src="../source/export/exporter3dm.js"></script>
<script type="text/javascript" src="../source/export/exporter.js"></script>
<script type="text/javascript" src="../source/threejs/threeutils.js"></script>
<script type="text/javascript" src="../source/threejs/threeconverter.js"></script>
<script type="text/javascript" src="../source/threejs/threemodelloader.js"></script>
<script type="text/javascript" src="../source/parameters/parameterlist.js"></script>
<script type="text/javascript" src="../source/viewer/domutils.js"></script>
<script type="text/javascript" src="../source/viewer/navigation.js"></script>
<script type="text/javascript" src="../source/viewer/viewergeometry.js"></script>
<script type="text/javascript" src="../source/viewer/viewer.js"></script>
<script type="text/javascript" src="../source/viewer/measuretool.js"></script>
<script type="text/javascript" src="../source/viewer/embeddedviewer.js"></script>
<!-- engine end -->
<!-- engine start -->
<script type="text/javascript" src="../source/core/core.js"></script>
<script type="text/javascript" src="../source/core/taskrunner.js"></script>
<script type="text/javascript" src="../source/geometry/geometry.js"></script>
<script type="text/javascript" src="../source/geometry/coord2d.js"></script>
<script type="text/javascript" src="../source/geometry/coord3d.js"></script>
<script type="text/javascript" src="../source/geometry/coord4d.js"></script>
<script type="text/javascript" src="../source/geometry/quaternion.js"></script>
<script type="text/javascript" src="../source/geometry/box3d.js"></script>
<script type="text/javascript" src="../source/geometry/octree.js"></script>
<script type="text/javascript" src="../source/geometry/matrix.js"></script>
<script type="text/javascript" src="../source/geometry/transformation.js"></script>
<script type="text/javascript" src="../source/geometry/tween.js"></script>
<script type="text/javascript" src="../source/io/binaryreader.js"></script>
<script type="text/javascript" src="../source/io/binarywriter.js"></script>
<script type="text/javascript" src="../source/io/textwriter.js"></script>
<script type="text/javascript" src="../source/io/bufferutils.js"></script>
<script type="text/javascript" src="../source/io/fileutils.js"></script>
<script type="text/javascript" src="../source/io/externallibs.js"></script>
<script type="text/javascript" src="../source/model/color.js"></script>
<script type="text/javascript" src="../source/model/material.js"></script>
<script type="text/javascript" src="../source/model/triangle.js"></script>
<script type="text/javascript" src="../source/model/property.js"></script>
<script type="text/javascript" src="../source/model/object.js"></script>
<script type="text/javascript" src="../source/model/mesh.js"></script>
<script type="text/javascript" src="../source/model/meshbuffer.js"></script>
<script type="text/javascript" src="../source/model/node.js"></script>
<script type="text/javascript" src="../source/model/meshinstance.js"></script>
<script type="text/javascript" src="../source/model/model.js"></script>
<script type="text/javascript" src="../source/model/topology.js"></script>
<script type="text/javascript" src="../source/model/meshutils.js"></script>
<script type="text/javascript" src="../source/model/modelutils.js"></script>
<script type="text/javascript" src="../source/model/modelfinalization.js"></script>
<script type="text/javascript" src="../source/model/quantities.js"></script>
<script type="text/javascript" src="../source/model/generator.js"></script>
<script type="text/javascript" src="../source/import/importerutils.js"></script>
<script type="text/javascript" src="../source/import/importerbase.js"></script>
<script type="text/javascript" src="../source/import/importerobj.js"></script>
<script type="text/javascript" src="../source/import/importerstl.js"></script>
<script type="text/javascript" src="../source/import/importeroff.js"></script>
<script type="text/javascript" src="../source/import/importerply.js"></script>
<script type="text/javascript" src="../source/import/importer3ds.js"></script>
<script type="text/javascript" src="../source/import/importergltf.js"></script>
<script type="text/javascript" src="../source/import/importero3dv.js"></script>
<script type="text/javascript" src="../source/import/importerthree.js"></script>
<script type="text/javascript" src="../source/import/importersvg.js"></script>
<script type="text/javascript" src="../source/import/importer3dm.js"></script>
<script type="text/javascript" src="../source/import/importerifc.js"></script>
<script type="text/javascript" src="../source/import/filelist.js"></script>
<script type="text/javascript" src="../source/import/importer.js"></script>
<script type="text/javascript" src="../source/export/exportermodel.js"></script>
<script type="text/javascript" src="../source/export/exporterbase.js"></script>
<script type="text/javascript" src="../source/export/exporterobj.js"></script>
<script type="text/javascript" src="../source/export/exporterstl.js"></script>
<script type="text/javascript" src="../source/export/exporterply.js"></script>
<script type="text/javascript" src="../source/export/exporteroff.js"></script>
<script type="text/javascript" src="../source/export/exportergltf.js"></script>
<script type="text/javascript" src="../source/export/exporter3dm.js"></script>
<script type="text/javascript" src="../source/export/exporter.js"></script>
<script type="text/javascript" src="../source/threejs/threeutils.js"></script>
<script type="text/javascript" src="../source/threejs/threeconverter.js"></script>
<script type="text/javascript" src="../source/threejs/threemodelloader.js"></script>
<script type="text/javascript" src="../source/parameters/parameterlist.js"></script>
<script type="text/javascript" src="../source/viewer/domutils.js"></script>
<script type="text/javascript" src="../source/viewer/navigation.js"></script>
<script type="text/javascript" src="../source/viewer/viewergeometry.js"></script>
<script type="text/javascript" src="../source/viewer/viewer.js"></script>
<script type="text/javascript" src="../source/viewer/measuretool.js"></script>
<script type="text/javascript" src="../source/viewer/embeddedviewer.js"></script>
<!-- engine end -->
<!-- website start -->
<link rel="stylesheet" type="text/css" href="o3dv/css/icons.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/themes.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/core.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/controls.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/dialogs.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/treeview.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/panelset.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/navigator.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/sidebar.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/website.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/embed.css">
<script type="text/javascript" src="o3dv/js/featureset.js"></script>
<script type="text/javascript" src="o3dv/js/eventhandler.js"></script>
<script type="text/javascript" src="o3dv/js/utils.js"></script>
<script type="text/javascript" src="o3dv/js/cookies.js"></script>
<script type="text/javascript" src="o3dv/js/settings.js"></script>
<script type="text/javascript" src="o3dv/js/toolbar.js"></script>
<script type="text/javascript" src="o3dv/js/treeview.js"></script>
<script type="text/javascript" src="o3dv/js/splitter.js"></script>
<script type="text/javascript" src="o3dv/js/modal.js"></script>
<script type="text/javascript" src="o3dv/js/dialogs.js"></script>
<script type="text/javascript" src="o3dv/js/openurldialog.js"></script>
<script type="text/javascript" src="o3dv/js/exportdialog.js"></script>
<script type="text/javascript" src="o3dv/js/sharingdialog.js"></script>
<script type="text/javascript" src="o3dv/js/panelset.js"></script>
<script type="text/javascript" src="o3dv/js/navigatoritems.js"></script>
<script type="text/javascript" src="o3dv/js/navigatorpanel.js"></script>
<script type="text/javascript" src="o3dv/js/navigatorfilespanel.js"></script>
<script type="text/javascript" src="o3dv/js/navigatormaterialspanel.js"></script>
<script type="text/javascript" src="o3dv/js/navigatormeshespanel.js"></script>
<script type="text/javascript" src="o3dv/js/navigator.js"></script>
<script type="text/javascript" src="o3dv/js/sidebarpanel.js"></script>
<script type="text/javascript" src="o3dv/js/sidebardetailspanel.js"></script>
<script type="text/javascript" src="o3dv/js/sidebarsettingspanel.js"></script>
<script type="text/javascript" src="o3dv/js/sidebarmeasurepanel.js"></script>
<script type="text/javascript" src="o3dv/js/sidebar.js"></script>
<script type="text/javascript" src="o3dv/js/hashhandler.js"></script>
<script type="text/javascript" src="o3dv/js/threemodelloaderui.js"></script>
<script type="text/javascript" src="o3dv/js/themehandler.js"></script>
<script type="text/javascript" src="o3dv/js/website.js"></script>
<script type="text/javascript" src="o3dv/js/embed.js"></script>
<!-- website end -->
<!-- website start -->
<link rel="stylesheet" type="text/css" href="o3dv/css/icons.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/themes.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/core.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/controls.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/dialogs.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/treeview.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/panelset.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/navigator.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/sidebar.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/website.css">
<link rel="stylesheet" type="text/css" href="o3dv/css/embed.css">
<script type="text/javascript" src="o3dv/js/featureset.js"></script>
<script type="text/javascript" src="o3dv/js/eventhandler.js"></script>
<script type="text/javascript" src="o3dv/js/utils.js"></script>
<script type="text/javascript" src="o3dv/js/cookies.js"></script>
<script type="text/javascript" src="o3dv/js/settings.js"></script>
<script type="text/javascript" src="o3dv/js/toolbar.js"></script>
<script type="text/javascript" src="o3dv/js/treeview.js"></script>
<script type="text/javascript" src="o3dv/js/splitter.js"></script>
<script type="text/javascript" src="o3dv/js/modal.js"></script>
<script type="text/javascript" src="o3dv/js/dialogs.js"></script>
<script type="text/javascript" src="o3dv/js/openurldialog.js"></script>
<script type="text/javascript" src="o3dv/js/exportdialog.js"></script>
<script type="text/javascript" src="o3dv/js/sharingdialog.js"></script>
<script type="text/javascript" src="o3dv/js/panelset.js"></script>
<script type="text/javascript" src="o3dv/js/navigatoritems.js"></script>
<script type="text/javascript" src="o3dv/js/navigatorpanel.js"></script>
<script type="text/javascript" src="o3dv/js/navigatorfilespanel.js"></script>
<script type="text/javascript" src="o3dv/js/navigatormaterialspanel.js"></script>
<script type="text/javascript" src="o3dv/js/navigatormeshespanel.js"></script>
<script type="text/javascript" src="o3dv/js/navigator.js"></script>
<script type="text/javascript" src="o3dv/js/sidebarpanel.js"></script>
<script type="text/javascript" src="o3dv/js/sidebardetailspanel.js"></script>
<script type="text/javascript" src="o3dv/js/sidebarsettingspanel.js"></script>
<script type="text/javascript" src="o3dv/js/sidebarmeasurepanel.js"></script>
<script type="text/javascript" src="o3dv/js/sidebar.js"></script>
<script type="text/javascript" src="o3dv/js/hashhandler.js"></script>
<script type="text/javascript" src="o3dv/js/threemodelloaderui.js"></script>
<script type="text/javascript" src="o3dv/js/themehandler.js"></script>
<script type="text/javascript" src="o3dv/js/website.js"></script>
<script type="text/javascript" src="o3dv/js/embed.js"></script>
<!-- website end -->
<!-- externals start -->
<script type="text/javascript">
OV.ExternalLibLocation = '../libs';
</script>
<!-- externals end -->
<!-- externals start -->
<script type="text/javascript">
OV.ExternalLibLocation = '../libs';
</script>
<!-- externals end -->
<!-- analytics start -->
<!-- analytics end -->
<!-- analytics start -->
<script type="text/javascript">
window.viewerEventHandler = (eventName, eventData) => {
console.log ({
eventName : eventName,
eventData : eventData
});
};
</script>
<!-- analytics end -->
<script type="text/javascript">
window.addEventListener ('load', function () {
let website = new OV.Website ({
headerDiv : document.getElementById ('header'),
toolbarDiv : document.getElementById ('toolbar'),
mainDiv : document.getElementById ('main'),
introDiv : document.getElementById ('intro'),
fileNameDiv : document.getElementById ('main_file_name'),
navigatorDiv : document.getElementById ('main_navigator'),
navigatorSplitterDiv : document.getElementById ('main_navigator_splitter'),
sidebarDiv : document.getElementById ('main_sidebar'),
sidebarSplitterDiv : document.getElementById ('main_sidebar_splitter'),
viewerDiv : document.getElementById ('main_viewer'),
fileInput : document.getElementById ('open_file'),
eventHandler : window.gtagEventHandler
});
website.Load ();
});
</script>
<script type="text/javascript">
window.addEventListener ('load', function () {
let website = new OV.Website ({
headerDiv : document.getElementById ('header'),
toolbarDiv : document.getElementById ('toolbar'),
mainDiv : document.getElementById ('main'),
introDiv : document.getElementById ('intro'),
fileNameDiv : document.getElementById ('main_file_name'),
navigatorDiv : document.getElementById ('main_navigator'),
navigatorSplitterDiv : document.getElementById ('main_navigator_splitter'),
sidebarDiv : document.getElementById ('main_sidebar'),
sidebarSplitterDiv : document.getElementById ('main_sidebar_splitter'),
viewerDiv : document.getElementById ('main_viewer'),
fileInput : document.getElementById ('open_file'),
eventHandler : window.viewerEventHandler
});
website.Load ();
});
</script>
<!-- script start -->
<!-- script end -->
<!-- script start -->
<!-- script end -->
</head>
<body>
<input type="file" id="open_file" style="display:none;" multiple></input>
<div class="header" id="header">
<div class="title">
<div class="title_left">
<a href="index.html">
<svg class="logo_image"><use href="assets/images/3dviewer_net_logo_text.svg#logo"></use></svg>
</a>
</div>
<div class="title_right" id="header_buttons"></div>
<div class="main_file_name only_full_width" id="main_file_name"></div>
</div>
<div class="toolbar" id="toolbar"></div>
</div>
<div class="main" id="main">
<div class="main_navigator ov_panel_set_container only_full_width" id="main_navigator"></div>
<div class="main_splitter only_full_width" id="main_navigator_splitter"></div>
<div class="main_viewer" id="main_viewer"></div>
<div class="main_splitter only_full_width" id="main_sidebar_splitter"></div>
<div class="main_sidebar ov_panel_set_right_container only_full_width" id="main_sidebar"></div>
</div>
<div class="intro ov_thin_scrollbar" id="intro">
<div class="intro_section only_full_width only_full_height">
<svg class="intro_logo"><use href="assets/images/3dviewer_net_logo.svg#logo"></use></svg>
</div>
<div class="intro_section intro_big_text">
Drag and drop your 3D models here.<br>
<b>obj, 3ds, stl, ply, gltf, glb, off, 3dm, fbx, <a target="_blank" href="info/index.html#supported_file_formats">and more</a></b>
</div>
<div class="intro_section">
Or you can use the browse button above.
</div>
<div class="intro_section">
<div>Example models:</div>
<div class="example_models">
<a href="index.html#model=assets/models/logo.obj,assets/models/logo.mtl">logo</a>
<span style="color:#aaaaaa;"> | </span>
<a href="index.html#model=assets/models/solids.obj,assets/models/solids.mtl">solids</a>
<span style="color:#aaaaaa;"> | </span>
<a href="index.html#model=assets/models/DamagedHelmet.glb">helmet</a>
</div>
</div>
</div>
<input type="file" id="open_file" style="display:none;" multiple></input>
<div class="header" id="header">
<div class="title">
<div class="title_left">
<a href="index.html">
<svg class="logo_image"><use href="assets/images/3dviewer_net_logo_text.svg#logo"></use></svg>
</a>
</div>
<div class="title_right" id="header_buttons"></div>
<div class="main_file_name only_full_width" id="main_file_name"></div>
</div>
<div class="toolbar" id="toolbar"></div>
</div>
<div class="main" id="main">
<div class="main_navigator ov_panel_set_container only_full_width" id="main_navigator"></div>
<div class="main_splitter only_full_width" id="main_navigator_splitter"></div>
<div class="main_viewer" id="main_viewer"></div>
<div class="main_splitter only_full_width" id="main_sidebar_splitter"></div>
<div class="main_sidebar ov_panel_set_right_container only_full_width" id="main_sidebar"></div>
</div>
<div class="intro ov_thin_scrollbar" id="intro">
<div class="intro_section only_full_width only_full_height">
<svg class="intro_logo"><use href="assets/images/3dviewer_net_logo.svg#logo"></use></svg>
</div>
<div class="intro_section intro_big_text">
Drag and drop your 3D models here.<br>
<b>obj, 3ds, stl, ply, gltf, glb, off, 3dm, fbx, <a target="_blank" href="info/index.html#supported_file_formats">and more</a></b>
</div>
<div class="intro_section">
Or you can use the browse button above.
</div>
<div class="intro_section">
<div>Example models:</div>
<div class="example_models">
<a href="index.html#model=assets/models/logo.obj,assets/models/logo.mtl">logo</a>
<span style="color:#aaaaaa;"> | </span>
<a href="index.html#model=assets/models/solids.obj,assets/models/solids.mtl">solids</a>
<span style="color:#aaaaaa;"> | </span>
<a href="index.html#model=assets/models/DamagedHelmet.glb">helmet</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -5,11 +5,11 @@ OV.EventHandler = class
this.eventHandler = eventHandler;
}
HandleEvent (name, parameters)
HandleEvent (eventName, eventData)
{
if (this.eventHandler === undefined || this.eventHandler === null) {
return;
}
this.eventHandler (name, parameters);
this.eventHandler (eventName, eventData);
}
};

View File

@ -169,9 +169,10 @@ OV.ImageExporterUI = class extends OV.ExporterUI
OV.ExportDialog = class
{
constructor (callbacks)
constructor (callbacks, eventHandler)
{
this.callbacks = callbacks;
this.eventHandler = eventHandler;
this.selectedExporter = null;
this.parametersDiv = null;
@ -243,6 +244,7 @@ OV.ExportDialog = class
this.callbacks.onDialog (filesDialog);
}
});
this.eventHandler.HandleEvent ('model_exported', this.selectedExporter.GetName ());
} else if (this.selectedExporter.GetType () === OV.ExportType.Image) {
this.selectedExporter.ExportImage (viewer);
}

View File

@ -1,4 +1,4 @@
OV.ShowSharingDialog = function (importer, settings, camera)
OV.ShowSharingDialog = function (fileList, settings, camera, eventHandler)
{
function AddCheckboxLine (parentDiv, text, id, onChange)
{
@ -53,23 +53,25 @@ OV.ShowSharingDialog = function (importer, settings, camera)
return input;
}
function AddSharingLinkTab (parentDiv, sharingLinkParams)
function AddSharingLinkTab (parentDiv, sharingLinkParams, eventHandler)
{
let section = OV.AddDiv (parentDiv, 'ov_dialog_section');
OV.AddDiv (section, 'ov_dialog_inner_title', 'Sharing Link');
let sharingLinkInput = AddCopyableTextInput (section, () => {
eventHandler.HandleEvent ('model_shared', 'sharing_link');
return GetSharingLink (sharingLinkParams);
});
sharingLinkInput.value = GetSharingLink (sharingLinkParams);
}
function AddEmbeddingCodeTab (parentDiv, settings, embeddingCodeParams)
function AddEmbeddingCodeTab (parentDiv, settings, embeddingCodeParams, eventHandler)
{
let section = OV.AddDiv (parentDiv, 'ov_dialog_section');
section.style.marginTop = '20px';
OV.AddDiv (section, 'ov_dialog_inner_title', 'Embedding Code');
let optionsSection = OV.AddDiv (section, 'ov_dialog_section');
let embeddingCodeInput = AddCopyableTextInput (section, () => {
eventHandler.HandleEvent ('model_shared', 'embedding_code');
return GetEmbeddingCode (embeddingCodeParams);
});
AddCheckboxLine (optionsSection, 'Use current camera position', 'embed_camera', (checked) => {
@ -96,7 +98,7 @@ OV.ShowSharingDialog = function (importer, settings, camera)
embeddingCodeInput.value = GetEmbeddingCode (embeddingCodeParams);
}
if (!importer.GetFileList ().IsOnlyUrlSource ()) {
if (!fileList.IsOnlyUrlSource ()) {
return OV.ShowMessageDialog (
'Sharing Failed',
'Sharing works only if you load files by url. Please upload your model files to a web server, open them by url, and try embedding again.',
@ -104,7 +106,7 @@ OV.ShowSharingDialog = function (importer, settings, camera)
);
}
let files = importer.GetFileList ().GetFiles ();
let files = fileList.GetFiles ();
let modelFiles = [];
for (let fileIndex = 0; fileIndex < files.length; fileIndex++) {
let file = files[fileIndex];
@ -139,8 +141,8 @@ OV.ShowSharingDialog = function (importer, settings, camera)
}
]);
AddSharingLinkTab (contentDiv, sharingLinkParams);
AddEmbeddingCodeTab (contentDiv, settings, embeddingCodeParams);
AddSharingLinkTab (contentDiv, sharingLinkParams, eventHandler);
AddEmbeddingCodeTab (contentDiv, settings, embeddingCodeParams, eventHandler);
dialog.Show ();
return dialog;

View File

@ -32,6 +32,7 @@ OV.Website = class
{
this.settings.LoadFromCookies (this.cookieHandler);
this.SwitchTheme (this.settings.themeId, false);
this.eventHandler.HandleEvent ('theme_on_load', this.settings.themeId === OV.Theme.Light ? 'light' : 'dark');
this.InitViewer ();
this.InitMeasureTool ();
@ -260,7 +261,7 @@ OV.Website = class
if (defaultColor !== null) {
importSettings.defaultColor = defaultColor;
}
this.eventHandler.HandleEvent ('model_load_started', { source : 'hash' });
this.eventHandler.HandleEvent ('model_load_started', 'hash');
this.LoadModelFromUrlList (urls, importSettings);
} else {
this.ClearModel ();
@ -364,7 +365,7 @@ OV.Website = class
this.SetUIState (OV.WebsiteUIState.Model);
this.OnModelLoaded (importResult, threeObject);
let importedExtension = OV.GetFileExtension (importResult.mainFile);
this.eventHandler.HandleEvent ('model_loaded', { extension : importedExtension });
this.eventHandler.HandleEvent ('model_loaded', importedExtension);
},
onRender : () =>
{
@ -373,24 +374,20 @@ OV.Website = class
onError : (importError) =>
{
this.SetUIState (OV.WebsiteUIState.Intro);
let reason = 'unknown';
if (importError.code === OV.ImportErrorCode.NoImportableFile) {
reason = 'no_importable_file';
} else if (importError.code === OV.ImportErrorCode.FailedToLoadFile) {
reason = 'failed_to_load_file';
} else if (importError.code === OV.ImportErrorCode.ImportFailed) {
reason = 'import_failed';
}
let extensions = [];
let importer = this.modelLoaderUI.GetImporter ();
let fileList = importer.GetFileList ().GetFiles ();
for (let i = 0; i < fileList.length; i++) {
extensions.push (fileList[i].extension);
}
this.eventHandler.HandleEvent ('model_load_failed', {
reason : reason,
extensions : extensions
});
let extensionsStr = extensions.join (',');
if (importError.code === OV.ImportErrorCode.NoImportableFile) {
this.eventHandler.HandleEvent ('no_importable_file', extensionsStr);
} else if (importError.code === OV.ImportErrorCode.FailedToLoadFile) {
this.eventHandler.HandleEvent ('failed_to_load_file', extensionsStr);
} else if (importError.code === OV.ImportErrorCode.ImportFailed) {
this.eventHandler.HandleEvent ('import_failed', extensionsStr);
}
}
});
}
@ -457,10 +454,9 @@ OV.Website = class
InitToolbar ()
{
function AddButton (toolbar, eventHandler, imageName, imageTitle, classNames, onClick)
function AddButton (toolbar, imageName, imageTitle, classNames, onClick)
{
let button = toolbar.AddImageButton (imageName, imageTitle, () => {
eventHandler.HandleEvent ('toolbar_clicked', { item : imageName });
onClick ();
});
for (let className of classNames) {
@ -469,7 +465,7 @@ OV.Website = class
return button;
}
function AddRadioButton (toolbar, eventHandler, imageNames, imageTitles, selectedIndex, classNames, onClick)
function AddRadioButton (toolbar, imageNames, imageTitles, selectedIndex, classNames, onClick)
{
let imageData = [];
for (let i = 0; i < imageNames.length; i++) {
@ -481,7 +477,6 @@ OV.Website = class
});
}
let buttons = toolbar.AddImageRadioButton (imageData, selectedIndex, (buttonIndex) => {
eventHandler.HandleEvent ('toolbar_clicked', { item : imageNames[buttonIndex] });
onClick (buttonIndex);
});
for (let className of classNames) {
@ -503,10 +498,10 @@ OV.Website = class
let importer = this.modelLoaderUI.GetImporter ();
AddButton (this.toolbar, this.eventHandler, 'open', 'Open model from your device', [], () => {
AddButton (this.toolbar, 'open', 'Open model from your device', [], () => {
this.OpenFileBrowserDialog ();
});
AddButton (this.toolbar, this.eventHandler, 'open_url', 'Open model from a url', [], () => {
AddButton (this.toolbar, 'open_url', 'Open model from a url', [], () => {
this.dialog = OV.ShowOpenUrlDialog ((urls) => {
if (urls.length > 0) {
this.hashHandler.SetModelFilesToHash (urls);
@ -514,20 +509,20 @@ OV.Website = class
});
});
AddSeparator (this.toolbar, ['only_on_model']);
AddButton (this.toolbar, this.eventHandler, 'fit', 'Fit model to window', ['only_on_model'], () => {
AddButton (this.toolbar, 'fit', 'Fit model to window', ['only_on_model'], () => {
this.FitModelToWindow (false);
});
AddButton (this.toolbar, this.eventHandler, 'up_y', 'Set Y axis as up vector', ['only_on_model'], () => {
AddButton (this.toolbar, 'up_y', 'Set Y axis as up vector', ['only_on_model'], () => {
this.viewer.SetUpVector (OV.Direction.Y, true);
});
AddButton (this.toolbar, this.eventHandler, 'up_z', 'Set Z axis as up vector', ['only_on_model'], () => {
AddButton (this.toolbar, 'up_z', 'Set Z axis as up vector', ['only_on_model'], () => {
this.viewer.SetUpVector (OV.Direction.Z, true);
});
AddButton (this.toolbar, this.eventHandler, 'flip', 'Flip up vector', ['only_on_model'], () => {
AddButton (this.toolbar, 'flip', 'Flip up vector', ['only_on_model'], () => {
this.viewer.FlipUpVector ();
});
AddSeparator (this.toolbar, ['only_on_model']);
AddRadioButton (this.toolbar, this.eventHandler, ['fix_up_on', 'fix_up_off'], ['Fixed up vector', 'Free orbit'], 0, ['only_on_model'], (buttonIndex) => {
AddRadioButton (this.toolbar, ['fix_up_on', 'fix_up_off'], ['Fixed up vector', 'Free orbit'], 0, ['only_on_model'], (buttonIndex) => {
if (buttonIndex === 0) {
this.viewer.SetFixUpVector (true);
} else if (buttonIndex === 1) {
@ -535,7 +530,7 @@ OV.Website = class
}
});
AddSeparator (this.toolbar, ['only_full_width', 'only_on_model']);
AddButton (this.toolbar, this.eventHandler, 'export', 'Export model', ['only_full_width', 'only_on_model'], () => {
AddButton (this.toolbar, 'export', 'Export model', ['only_full_width', 'only_on_model'], () => {
let exportDialog = new OV.ExportDialog ({
isMeshVisible : (meshInstanceId) => {
return this.navigator.IsMeshVisible (meshInstanceId);
@ -543,16 +538,16 @@ OV.Website = class
onDialog : (dialog) => {
this.dialog = dialog;
}
});
}, this.eventHandler);
exportDialog.Show (this.model, this.viewer);
});
AddButton (this.toolbar, this.eventHandler, 'share', 'Share model', ['only_full_width', 'only_on_model'], () => {
this.dialog = OV.ShowSharingDialog (importer, this.settings, this.viewer.GetCamera ());
AddButton (this.toolbar, 'share', 'Share model', ['only_full_width', 'only_on_model'], () => {
this.dialog = OV.ShowSharingDialog (importer.GetFileList (), this.settings, this.viewer.GetCamera (), this.eventHandler);
});
this.parameters.fileInput.addEventListener ('change', (ev) => {
if (ev.target.files.length > 0) {
this.eventHandler.HandleEvent ('model_load_started', { source : 'open_file' });
this.eventHandler.HandleEvent ('model_load_started', 'open_file');
this.LoadModelFromFileList (ev.target.files);
}
});
@ -575,7 +570,7 @@ OV.Website = class
ev.preventDefault ();
OV.GetFilesFromDataTransfer (ev.dataTransfer, (files) => {
if (files.length > 0) {
this.eventHandler.HandleEvent ('model_load_started', { source : 'drop' });
this.eventHandler.HandleEvent ('model_load_started', 'drop');
this.LoadModelFromFileList (files);
}
});
@ -602,9 +597,11 @@ OV.Website = class
this.UpdateGridDisplay ();
},
onEdgeDisplayChange : () => {
this.eventHandler.HandleEvent ('edge_display_changed', this.settings.showEdges ? 'on' : 'off');
this.UpdateEdgeDisplay ();
},
onThemeChange : () => {
this.eventHandler.HandleEvent ('theme_changed', this.settings.themeId === OV.Theme.Light ? 'light' : 'dark');
this.SwitchTheme (this.settings.themeId, true);
},
onMeasureToolActivedChange : (isActivated) => {