/**
* @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;
}