OV.ExportType = { Model : 1, Image : 2 }; OV.ExportDialog = class { constructor (callbacks) { this.callbacks = callbacks; this.model = null; this.exportFormats = [ { name : 'obj', formats : [ { name : 'text', type: OV.ExportType.Model, format : OV.FileFormat.Text, extension : 'obj' } ] }, { name : 'stl', formats : [ { name : 'text', type: OV.ExportType.Model, format : OV.FileFormat.Text, extension : 'stl' }, { name : 'binary', type: OV.ExportType.Model, format : OV.FileFormat.Binary, extension : 'stl' } ] }, { name : 'ply', formats : [ { name : 'text', type: OV.ExportType.Model, format : OV.FileFormat.Text, extension : 'ply' }, { name : 'binary', type: OV.ExportType.Model, format : OV.FileFormat.Binary, extension : 'ply' } ] }, { name : 'gltf', formats : [ { name : 'text', type: OV.ExportType.Model, format : OV.FileFormat.Text, extension : 'gltf' }, { name : 'binary', type: OV.ExportType.Model, format : OV.FileFormat.Binary, extension : 'glb' } ] }, { name : 'off', formats : [ { name : 'text', type: OV.ExportType.Model, format : OV.FileFormat.Text, extension : 'off' } ] }, { name : '3dm', formats : [ { name : 'binary', type: OV.ExportType.Model, format : OV.FileFormat.Binary, extension : '3dm' } ] }, { name : 'png', formats : [ { name : 'current size', type: OV.ExportType.Image, width : null, height : null, extension : 'png' }, { name : 'fixed size (1920x1080)', type: OV.ExportType.Image, width : 1920, height : 1080, extension : 'png' } ] } ]; this.formatParameters = { exportFormatButtonDivs : [], formatSettingsDiv : null, selectedFormat : null }; } Show (model, viewer) { if (model === null) { let messageDialog = OV.ShowMessageDialog ( 'Export Failed', 'Please load a model before exporting.', null ); this.callbacks.onDialog (messageDialog); return; } let mainDialog = new OV.ButtonDialog (); let contentDiv = mainDialog.Init ('Export', [ { name : 'Close', subClass : 'outline', onClick () { mainDialog.Hide (); } }, { name : 'Export', onClick : () => { let selectedFormat = this.formatParameters.selectedFormat; if (selectedFormat === null) { return; } mainDialog.Hide (); this.ExportFormat (model, viewer); } } ]); let text = 'Select a format from the below list to export your model. Please note that the export can take several second.'; $('
').html (text).addClass ('ov_dialog_section').appendTo (contentDiv); let buttonWidth = 40; let optionsHeight = 50; let exportFormatSelect = $('
').addClass ('ov_dialog_select').appendTo (contentDiv); this.formatParameters.formatSettingsDiv = $('
').addClass ('ov_dialog_section').height (optionsHeight).appendTo (contentDiv); for (let i = 0; i < this.exportFormats.length; i++) { let exportFormat = this.exportFormats[i]; let exportFormatButton = $('
').addClass ('ov_button').addClass ('outline').addClass ('ov_dialog_select_option').html (exportFormat.name).width (buttonWidth).appendTo (exportFormatSelect); this.formatParameters.exportFormatButtonDivs.push (exportFormatButton); exportFormatButton.click (() => { this.OnExportFormatSelect (i); }); } this.OnExportFormatSelect (0); mainDialog.Show (); this.callbacks.onDialog (mainDialog); } OnExportFormatSelect (exportFormatIndex) { this.formatParameters.formatSettingsDiv.empty (); for (let i = 0; i < this.formatParameters.exportFormatButtonDivs.length; i++) { let exportFormatButtonDiv = this.formatParameters.exportFormatButtonDivs[i]; if (i === exportFormatIndex) { exportFormatButtonDiv.removeClass ('outline'); } else { exportFormatButtonDiv.addClass ('outline'); } } let exportFormat = this.exportFormats[exportFormatIndex]; for (let i = 0; i < exportFormat.formats.length; i++) { let format = exportFormat.formats[i]; let formatDiv = $('
').addClass ('ov_dialog_row').appendTo (this.formatParameters.formatSettingsDiv); let formatInput = $('').addClass ('ov_dialog_checkradio').attr ('type', 'radio').attr ('id', format.name).attr ('name', 'format').appendTo (formatDiv); $('