/** * @author Sergey Burkov, http://www.wp3dprinting.com * @copyright 2015 */ p3dlite.bar_progress=0; p3dlite.xhr=''; p3dlite.schedule_quote=0; p3dlite.filereader_supported=true; p3dlite.file_selected=0; window.onload = function() { window.p3dlite_canvas = document.getElementById('p3dlite-cv'); jQuery("#p3dlite-file-loading").css({ top: jQuery("#p3dlite-cv").position().top+jQuery("#p3dlite-cv").height()/2-jQuery("#p3dlite-file-loading").height()/2, left: jQuery("#p3dlite-cv").position().left + jQuery("#p3dlite-cv").width()/2-jQuery("#p3dlite-file-loading").width()/2 }) ; jQuery("#canvas-stats").css({ top: jQuery("#p3dlite-cv").position().top , left: jQuery("#p3dlite-cv").position().left }) ; var logoTimerID = 0; window.p3dlite_viewer = new JSC3D.Viewer(window.p3dlite_canvas); p3dlite_viewer.setParameter('InitRotationX', p3dlite.angle_x); p3dlite_viewer.setParameter('InitRotationY', p3dlite.angle_y); p3dlite_viewer.setParameter('InitRotationZ', p3dlite.angle_z); p3dlite_viewer.setParameter('BackgroundColor1', p3dlite.background1); p3dlite_viewer.setParameter('BackgroundColor2', p3dlite.background2); p3dlite_viewer.setParameter('RenderMode', 'flat'); p3dlite_viewer.setParameter('ProgressBar', 'off'); p3dlite_viewer.setParameter('Renderer', 'webgl'); //webgl is faster but does not support wireframe yet window.wp.hooks.doAction( '3dprint-lite.p3dlite_viewerConfig'); p3dlite_viewer.onloadingstarted = function() { p3dliteDisplayUserDefinedProgressBar(true); }; p3dlite_viewer.onloadingcomplete = p3dlite_viewer.onloadingaborted = p3dlite_viewer.onloadingerror = function() { p3dliteDisplayUserDefinedProgressBar(false); if(logoTimerID > 0) return; // show statistics of current model when loading is completed var scene = p3dlite_viewer.getScene(); if(scene && scene.getChildren().length > 0) { var objects = scene.getChildren(); var totalFaceCount = 0; var totalVertexCount = 0 for(var i=0; i' + totalFaceCount.toString() + ' faces'; document.getElementById('p3dlite-statistics').innerHTML = stats; p3dliteChangeModelColor(jQuery('input[name=product_filament]:checked').closest('li').data('color')); printer_id=jQuery('input[name=product_printer]:checked').data('id') p3dliteMakeGroundPlane(); p3dliteDrawPrinterBox(scene, printer_id, jQuery('input[name=p3dlite_unit]:checked').val()); // ask the p3dlite_viewer to apply this change immediately p3dlite_viewer.resetScene(); p3dlite_viewer.zoomFactor=parseInt(p3dlite.zoom); p3dlite_viewer.update(); p3dliteGetStats(); } else { document.getElementById('p3dlite-statistics').innerHTML = ''; } window.wp.hooks.doAction( '3dprint-lite.modelLoaded'); }; if (jQuery('input[name=get_printer_id]').val()) { printer=jQuery('input[name=get_printer_id]').val() jQuery.cookie('p3dlite_printer', printer); } else if (jQuery.cookie('p3dlite_printer')!=='undefined' && jQuery('#p3dlite_printer_'+jQuery.cookie('p3dlite_printer')).length>0) { printer=jQuery.cookie('p3dlite_printer'); } else { printer=jQuery('input[name=product_printer]').data('id'); } if (jQuery('input[name=get_material_id]').val()) { material=jQuery('input[name=get_material_id]').val() jQuery.cookie('p3dlite_material', material); } else if (jQuery.cookie('p3dlite_material')!=='undefined' && jQuery('#p3dlite_material_'+jQuery.cookie('p3dlite_material')).length>0) { material=jQuery.cookie('p3dlite_material'); } else { material=jQuery('input[name=product_filament]').data('id'); } if (jQuery('input[name=get_product_model]').val()) { product_file=jQuery('input[name=get_product_model]').val(); jQuery.cookie('p3dlite_file', product_file); } else { product_file=jQuery.cookie('p3dlite_file'); } if (jQuery('input[name=get_product_unit]').val()) { product_unit=jQuery('input[name=get_product_unit]').val(); jQuery.cookie('p3dlite_unit', product_unit); } else if (jQuery.cookie('p3dlite_unit')!=='undefined') { product_unit=jQuery.cookie('p3dlite_unit'); } else { product_unit='mm'; } material_volume=jQuery.cookie('p3dlite-stats-material-volume'); jQuery('#stats-material-volume').html(jQuery.cookie('p3dlite-stats-material-volume')); jQuery('#stats-box-volume').html(jQuery.cookie('p3dlite-stats-box-volume')); jQuery('#stats-width').html(jQuery.cookie('p3dlite-stats-width')); jQuery('#stats-length').html(jQuery.cookie('p3dlite-stats-length')); jQuery('#stats-height').html(jQuery.cookie('p3dlite-stats-height')); jQuery('#stats-weight').html(jQuery.cookie('p3dlite-stats-weight')); if (jQuery.cookie('p3dlite-stats-material-volume')) jQuery('.p3dlite-stats').show(); if (typeof(printer)!=='undefined') { jQuery('#p3dlite_printer_'+printer).attr('checked', 'checked'); p3dliteSelectPrinter(jQuery('#p3dlite_printer_'+printer).closest('li')); } else { jQuery('#p3dlite_printer_0').attr('checked', 'checked'); p3dliteSelectPrinter(jQuery('#p3dlite_printer_0').closest('li')); } if (typeof(material)!=='undefined') { jQuery('#p3dlite_material_'+material).attr('checked', 'checked'); p3dliteSelectFilament(jQuery('#p3dlite_material_'+material).closest('li')); } else { jQuery('#p3dlite_material_0').attr('checked', 'checked'); p3dliteSelectFilament(jQuery('#p3dlite_material_0').closest('li')); } if (typeof(product_file)!=='undefined') { jQuery('#pa_p3dlite_model').val(product_file); p3dlite_viewer.setParameter('SceneUrl', p3dlite.upload_url+product_file); } if (typeof(product_unit)!=='undefined') { jQuery("input[name=p3dlite_unit][value=" + product_unit + "]").attr('checked', 'checked'); p3dliteSelectUnit(jQuery("input[name=p3dlite_unit][value=" + product_unit + "]")); } else { p3dliteSelectUnit(jQuery("input[name=p3dlite_unit][value=mm]")); } if (typeof(printer)!=='undefined' && typeof(material)!=='undefined' && typeof(product_file)!=='undefined') { p3dliteGetStats(); } else { jQuery('#p3dlite-file-loading').hide(); jQuery('#p3dlite-quote-loading').css('visibility', 'hidden'); } p3dlite_viewer.init(); p3dlite_viewer.update(); } jQuery(document).ready(function(){ window.p3dlite_uploader = new plupload.Uploader({ runtimes : 'html5,flash,silverlight,browserplus,gears,html4', browse_button : 'p3dlite-pickfiles', // you can pass an id... multi_selection : false, multiple_queues : false, max_file_count : 1, max_file_size: p3dlite.file_max_size+"mb", container: document.getElementById('p3dlite-container'), url : p3dlite.url, chunk_size : '2mb', flash_swf_url : p3dlite.plugin_url+'includes/ext/plupload/Moxie.swf', silverlight_xap_url : p3dlite.plugin_url+'includes/ext/plupload/Moxie.xap', filters : { mime_types: [ { title : p3dlite.file_extensions+" files", extensions : p3dlite.file_extensions } ] }, init: { QueueChanged: function(p3dlite_uploader) { if(p3dlite_uploader.files.length > 1) { jQuery('#p3dlite-filelist').html(''); p3dlite_uploader.files.splice(0, 1); } }, PostInit: function() { document.getElementById('p3dlite-filelist').innerHTML = ''; document.getElementById('p3dlite-console').innerHTML = ''; }, Browse: function() { }, FilesAdded: function(up, files) { p3dlite.bar_progress=0; jQuery('.p3dlite-mail-success').hide(); jQuery('.p3dlite-mail-error').hide(); window.wp.hooks.doAction( '3dprint-lite.filesAdded'); if (p3dlite.filereader_supported) { var file = files[0].getNative(); var file_ext = file.name.split('.').pop().toLowerCase(); var reader = new FileReader(); reader.onload = function(event) { var chars = new Uint8Array(event.target.result); var CHUNK_SIZE = 0x8000; var index = 0; var length = chars.length; var result = ''; var slice; while (index < length) { slice = chars.subarray(index, Math.min(index + CHUNK_SIZE, length)); result += String.fromCharCode.apply(null, slice); index += CHUNK_SIZE; } theScene = new JSC3D.Scene if (file_ext=='stl') { stl_loader = new JSC3D.StlLoader() stl_loader.parseStl(theScene, result) } else if (file_ext=='obj') { obj_loader = new JSC3D.ObjLoader() obj_loader.parseObj(theScene, result) } else alert('Unsupported format'); jQuery('#p3dlite-file-loading').hide(); p3dlite_viewer.replaceSceneFromUrl("");//hack to empty the sceneUrl p3dlite_viewer.init() p3dlite_viewer.replaceScene(theScene) p3dliteChangeModelColor(jQuery('input[name=product_filament]:checked').closest('li').data('color')); p3dliteMakeGroundPlane(); p3dliteDrawPrinterBox(p3dlite_viewer.getScene(), jQuery('input[name=product_printer]:checked').data('id'), jQuery('input[name=p3dlite_unit]:checked').val()); p3dlite_viewer.resetScene(); p3dlite_viewer.zoomFactor=parseInt(p3dlite.zoom); p3dlite_viewer.update() p3dliteGetStats(); var scene = p3dlite_viewer.getScene(); var objects = scene.getChildren(); var totalFaceCount = 0; var totalVertexCount = 0 for(var i=0; i' + totalFaceCount.toString() + ' faces'; document.getElementById('p3dlite-statistics').innerHTML = stats; } reader.readAsArrayBuffer(file); } plupload.each(files, function(file) { document.getElementById('p3dlite-filelist').innerHTML += '
' + file.name + ' (' + plupload.formatSize(file.size) + ')
'; }); p3dlite_uploader.disableBrowse(true); // jQuery('.p3dlite-stats').hide(); jQuery('#price-container').css('visibility','hidden'); jQuery('#add-cart-container').css('visibility','hidden'); jQuery('#p3dlite-console').hide(); jQuery('#p3dlite-file-loading').show(); jQuery('#p3dlite-quote-loading').css('visibility', 'visible'); up.start(); jQuery('#p3dlite-pickfiles').click(); }, UploadProgress: function(up, file) { p3dlite.bar_progress=parseFloat(file.percent/100); document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '' + file.percent + "%"; }, UploadComplete: function(up, file, response) { p3dlite_uploader.disableBrowse(false); }, Error: function(up, err) { p3dlite_uploader.disableBrowse(false); document.getElementById('p3dlite-console').appendChild(document.createTextNode("\nError #" + err.code + ": " + err.message)); window.p3dliteProgressButton._stop(); jQuery('#p3dlite-console').show(); } } }); p3dlite_uploader.bind('BeforeUpload', function (up, file) { up.settings.multipart_params = { "action" : 'p3dlite_handle_upload', "product_id" : jQuery('#p3dlite_product_id').val(), "printer_id" : jQuery('input[name=product_printer]:checked').data('id'), "material_id" : jQuery('input[name=product_filament]:checked').data('id'), "unit" : jQuery('input[name=p3dlite_unit]:checked').val() } window.wp.hooks.doAction( '3dprint-lite.beforeUpload'); }); p3dlite_uploader.init(); p3dlite_uploader.bind('FileUploaded', function(p3dlite_uploader,file,response) { var data = jQuery.parseJSON( response.response ); if (data.error) { //fatal error jQuery('#p3dlite-console').html(data.error.message).show(); jQuery('#p3dlite-file-loading').hide() jQuery('#p3dlite-quote-loading').css('visibility', 'hidden'); return false; } jQuery('#p3dlite-quote-loading').css('visibility', 'hidden'); jQuery('.p3dlite-mail-success').remove(); jQuery('.p3dlite-mail-error').remove(); jQuery('#add-cart-container').css('visibility','visible'); jQuery.cookie('p3dlite_file',data.filename, { expires: 2 }); if (!p3dlite.filereader_supported) p3dlite_viewer.replaceSceneFromUrl(p3dlite.upload_url+data.filename); jQuery.cookie('p3dlite_file',data.filename, { expires: 2 }); product_file=data.filename; jQuery('#pa_p3dlite_model').val(product_file); jQuery('.p3dlite-stats').show(); p3dlite_viewer.update(); p3dliteCheckPrintability(); p3dliteGetStats(); window.wp.hooks.doAction( '3dprint-lite.fileUploaded'); }); }); function p3dliteBoxFitsBox (dim_x1, dim_y1, dim_z1, dim_x2, dim_y2, dim_z2) { var fits=true; var min_dim1=Math.min(dim_x1, dim_y1, dim_z1); var min_dim2=Math.min(dim_x2, dim_y2, dim_z2); var max_dim1=Math.max(dim_x1, dim_y1, dim_z1); var max_dim2=Math.max(dim_x2, dim_y2, dim_z2); var diag1=Math.sqrt(dim_x1 + dim_y1 + dim_z1); var diag2=Math.sqrt(dim_x2 + dim_y2 + dim_z2); if (min_dim1 0) { // IE 10 or older => return version number return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); } var trident = ua.indexOf('Trident/'); if (trident > 0) { // IE 11 => return version number var rv = ua.indexOf('rv:'); return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); } var edge = ua.indexOf('Edge/'); if (edge > 0) { // IE 12 => return version number return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); } // other browser return false; } function p3dliteDrawPrinterBox(scene, printer_id, product_unit) { var printer_dim=new Array(); printer_dim.x=jQuery('#p3dlite_printer_'+printer_id).data('length') printer_dim.y=jQuery('#p3dlite_printer_'+printer_id).data('width') printer_dim.z=jQuery('#p3dlite_printer_'+printer_id).data('height') var scene=window.p3dlite_viewer.getScene(); var sceneBox=scene.getChildren()[0].aabb; var planeCenter = sceneBox.center(); var model_xdim=sceneBox.maxX - sceneBox.minX; var model_ydim=sceneBox.maxY - sceneBox.minY; var model_zdim=sceneBox.maxZ - sceneBox.minZ; //xy rotation if (model_xdim>printer_dim.x && model_ydimprinter_dim.x && model_zdimprinter_dim.y && model_xdimprinter_dim.y && model_zdim0) jQuery('#p3dlite-container input[type=file]').parent().css('z-index', '999') p3dlite.file_selected++; } if (window.FileReader && window.FileReader.prototype.readAsArrayBuffer) { p3dlite.filereader_supported=true; } else { p3dlite.filereader_supported=false; }