/* Were tälking UTF8 */ // GLOBALS var LOG = false; //false; // ENABLE LOGGING var PRLOG = false; //false; /** PRICE LOG - REMOVE COMMENTS **/ var INPUTDELAY = 650; // MilliseconCs var FLOATDELAY = 1300 // Milliseconds for Float Inputs var SCONFIG = ''; var PHPCALC = false; /** ENABLES PHP + JS CALC COMPARE MODE - HAS TO BE FALSE IN LIVE MODE **/ var xhr = ''; var canvas = new Object(); var bgLayer = new Object(); var miniView = new Object(); var SIGN = { width: 550, maxWidth: 728, height: 300, maxHeight: 470, color:'#000000', bgcolor:'#ffffff', border: 0, borderDistance: 10, fonts: {}, fontVectorizeOpacity: 0, //0.1 for test selectorPadding: 0, selectorCornerSize: 10, selectorBorderColor: '#0093db', selectorCornerColor: '#0093db', selectorCornerStyle: 'circle', selectorCornerTransparent: false, selectorSerienText : '#673086', scale:'1:1', scaleFac:1, dimMax:600, dimMin:300, cutFormColor: 'rgba(220,220,220,1)', //'rgba(241,241,241,1)' cornerRadius: 3, // in mm calculateOnUnload: 0, cutFormStrokeWidth: 1.5, cutFormStrokeColor:'rgba(200,0,0,1)', cutFormStrokeDashWidth: 5, fixationDefaultID: 0, fixationDefaultDistance: 6.25, fixationDefaultDiameter: 4.5, fixationDefaultRadius: 2.25, fixationDefaultDistanceEdge: 4, lockRotate: 1, clipping: 0, miniViewWidth: 200, miniViewHeight: 110, miniViewRefreshDelay: 125, // ms fillColors: {'rgba(255,0,0,0.95)':'Rot','rgba(0,0,255,0.95)':'Blau','rgba(0,0,0,0.95)':'Schwarz', 'rgba(0,255,0,0.95)':'Grün','rgba(255,255,255,0.95)':'Weiss','rgba(255,255,0,0.95)':'Gelb' }, oldTemplate: false, errorDelay: 5000, //ms error: {}, warn : {}, closeMenuAfterAdd: false, blockClickEvents: false, }; /* Click listener to slow down click events */ document.addEventListener("click", e => { if (SIGN.blockClickEvents) { e.stopPropagation(); e.preventDefault(); }}, true); var FIXDATA= new Array(); var delay = (function(){ var timer = 0; return function(callback, ms){ clearTimeout (timer); timer = setTimeout(callback, ms); }; })(); $.ajaxSetup({ cache: false }); /** ---------------------------------------------------------------------------*/ /** INIT EVENTS */ /** ---------------------------------------------------------------------------*/ $(document).ready(function() { SCONFIG = $('#JSCONFIG').val(); fabric.Object.NUM_FRACTION_DIGITS = 17; fabric.textureSize = 4096; if (fabric.isWebglSupported()) { fabric.textureSize = 65536; } //fabric.filterBackend = fabric.initFilterBackend(); //this will init WebGL //fabric.textureSize = fabric.maxTextureSize; //allows larger images fabric.initFilterBackend = function() { if (fabric.enableGLFiltering && fabric.isWebglSupported && fabric.isWebglSupported(fabric.textureSize)) { console.log('max texture size: ' + fabric.maxTextureSize); return (new fabric.WebglFilterBackend({ tileSize: fabric.textureSize })); } else if (fabric.Canvas2dFilterBackend) { return (new fabric.Canvas2dFilterBackend()); } }; /** MINI VIEW **/ miniView = this.__canvas = new fabric.StaticCanvas('miniView'); //miniView = this.__canvas = new fabric.Canvas('miniView'); miniView.stateful = false; // Increases speed (if undone function not needed) miniView.selection = false; miniView.preserveObjectStacking = true; miniView.setWidth(SIGN.miniViewWidth); miniView.setHeight(SIGN.miniViewHeight); if(document.getElementById('schild')===null) { } else { canvas = this.__canvas = new fabric.Canvas('schild'); //canvas = this.__canvas = new fabric.Canvas('schild', { imageSmoothingEnabled: false, enableRetinaScaling: false,}); // CANVAS EVENTS canvas.on({'object:moving': function () { updateObjControls('obj_moving')}, 'object:scaling': function () { updateObjControls('obj_scaling')}, 'object:resizing': function () { updateObjControls('obj_resizing')}, 'object:rotating': function () { updateObjControls('obj_rotating')}, 'object:selected': function () { updateObjControls('obj_selected')}, 'object:modified': function () { updateObjControls('obj_modified')}, 'selection:created': function () { updateObjControls('selection:created')}, 'selection:updated': function () { updateObjControls('selection:updated')}, 'selection:cleared': function () { $('#objectEdit').hide(); hideBlackWhiteControl(); updateObjControls('selection:cleared')}, 'before:selection:cleared': hideObjControls, 'text:editing:entered': function () { LOG && console.log('Event: text_editing_entered'); }, 'text:editing:exited': function () { LOG && console.log('Event: text:editing:exited'); }, 'text:selection:changed': function () { LOG && console.log('Event: text_editing_changed'); }, 'text:changed': function () { var obj = canvas.getActiveObject(); if(obj) { var parsedText = filterUCChars(obj.get('text'),$('#textBox').val()); obj.set({'text': parsedText}); //$(this).val() $('#textBox').val(parsedText); canvas.renderAll(); } LOG && console.log('Event: text_changed'); }, 'mouse:dblclick': async function() { var obj = canvas.getActiveObject(); if(obj && obj.mmkLayerType=='layerVectorResult') { await editVectorizedFont(obj); } }, 'mouse:up': function() { var obj = canvas.getActiveObject(); if(obj) { calculateSign('Event: mouse up',0); } //refreshMiniView(); }, 'after:render': function() { this.calcOffset(); } }); } canvas.stateful = false; // Increases speed (if undone function not needed) canvas.selection = false; canvas.controlsAboveOverlay = true; //canvas.renderOnAddRemove = false; // better? canvas.preserveObjectStacking = true; // ensure objects are not at front on selection canvas.setWidth($('#canvasBox').width()); canvas.setHeight($('#canvasBox').height()); initCenteringGuidelines(canvas); initAligningGuidelines(canvas); showZoomDim('canvasInitialize'); /** SPECIAL ICON DELETE */ var deleteIcon = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OEM5NEY2NUQ1MDQ3MTFFQzk2REVEMzYzRUFBREE5MTciIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6OEM5NEY2NUU1MDQ3MTFFQzk2REVEMzYzRUFBREE5MTciPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo4Qzk0RjY1QjUwNDcxMUVDOTZERUQzNjNFQUFEQTkxNyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo4Qzk0RjY1QzUwNDcxMUVDOTZERUQzNjNFQUFEQTkxNyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PumvwpAAAAE7SURBVHjaYvz//z/DQAIWEME45Q6M7wvEhUBsCsQ8VLbrCxCfBuI+IN4CEvifo8LAhKSgBYg3AbEjDSxngJoJMnsz1C4wgDnAB4ir6Rjy1dDQhjugaACivxDZASYD4AATZAfwDoADeJEdMLDZkFQQqMTNMMNRjEGMkxnMf/39L0PqvlcMG+9/JdksskIA2XIQEAWyZzmJ0S4E0H2MDYDkQAULqSHCRI6PCQFSQoSoEBCfe59miXDAcwFJDgDFMQizMDGC+X+y8fOHXwiMOmDUAYOmMjIXZ2f49fc/AzMjdj7NHXAkWAYvn2ZR8PPvf6LU/COhqU9SCHBMvzt8c8HnAbD7C7IDzgyAA04jO6B/ABzQj+wAUHeplY6Wt0LtREmENUAcAMT7gfgrDSz9CjXbH2oXGDAOdPccIMAAFF1VpkN2b0AAAAAASUVORK5CYII="; var deleteImg = document.createElement('img'); deleteImg.src = deleteIcon; function renderIcon(icon) { return function renderIcon(ctx, left, top, styleOverride, fabricObject) { var size = this.cornerSize; ctx.save(); ctx.translate(left, top); ctx.rotate(fabric.util.degreesToRadians(fabricObject.angle)); ctx.drawImage(icon, -size/2, -size/2, size, size); ctx.restore(); } } fabric.Object.prototype.controls.deleteControl = new fabric.Control({ x: 0.5, y: -0.5, offsetY: -20, offsetX: 20, sizeX: 32, sizeY: 32, cursorStyle: 'pointer', mouseUpHandler: deleteObject, //mouseUpHandler: removeObj(), render: renderIcon(deleteImg), cornerSize: 32 }); function deleteObject(eventData, transform) { var target = transform.target; var canvas = target.canvas; /** canvas.remove(target); **/ removeObj(); canvas.requestRenderAll(); } // TO 1.2 on init ( 1/3 ) // canvas.zoomToPoint(new fabric.Point(canvas.width / 2, canvas.height / 2), 1.2); // console.log('CANVAS SIZE ON INIT:' + $('#canvasBox').width() + ', ' + $('#canvasBox').height()); // DIM //$('#DIMMODE0').on('click', function() { var dim = $('#DIMSTD').val().split('x'); resizeBack(dim[0],dim[1]); $('#WIDTH').val(dim[0]); $('#HEIGHT').val(dim[1]); }); $('#DIMMODE0').on('click', function() { var dim = $('#DIMSTD').val().split('x'); $('#WIDTH').val(dim[0]); $('#HEIGHT').val(dim[1]); resizeBack(dim[0],dim[1]); }); $('#DIMMODE1').on('click', function() { resizeBack($('#WIDTH').val(),$('#HEIGHT').val())}); $('#DIMSTD').change(function() { $("#DIMMODE0").prop("checked", true); var dim = $(this).val().split('x'); $('#WIDTH').val(dim[0]); $('#HEIGHT').val(dim[1]); resizeBack(dim[0],dim[1]); }); $('#WIDTH, #HEIGHT').bind({ blur: function(ev) { if(checkSignWidthHeight($('#WIDTH').val(),$('#HEIGHT').val())==true) { $("#DIMMODE1").prop("checked", true); resizeBack($('#WIDTH').val(),$('#HEIGHT').val()); } else { var dim = $('#DIMSTD').val().split('x'); $('#WIDTH').val(dim[0]); $('#HEIGHT').val(dim[1]); resizeBack(dim[0],dim[1]); } }, keydown: function(ev) { if(ev.which==13 || ev.which==9) { if(ev.which==13) { ev.preventDefault(); } if(checkSignWidthHeight($('#WIDTH').val(),$('#HEIGHT').val())==true) { $("#DIMMODE1").prop("checked", true); resizeBack($('#WIDTH').val(),$('#HEIGHT').val()); } else { var dim = $('#DIMSTD').val().split('x'); $('#WIDTH').val(dim[0]); $('#HEIGHT').val(dim[1]); resizeBack(dim[0],dim[1]); } } else { delay(function() { if(checkSignWidthHeight($('#WIDTH').val(),$('#HEIGHT').val())==true) { $("#DIMMODE1").prop("checked", true); resizeBack($('#WIDTH').val(),$('#HEIGHT').val()); } else { var dim = $('#DIMSTD').val().split('x'); $('#WIDTH').val(dim[0]); $('#HEIGHT').val(dim[1]); resizeBack(dim[0],dim[1]); } }, FLOATDELAY ); } } }); // COLORS $('#SLIDERCOLORS').on('click','.matColor', function() { $('#ENGRAVEMETHOD').val($(this).data('emid')); changeBackColor('schild',$(this).data('color'),$(this).data('colorbg'),$(this).data('colorname'),$(this).data('colorid'),$(this).data('colorbgimage'),$(this).data('colorgroupid'),1); }); // TEXT $('#textFontSelector').on('mousedown', function (e) { e.preventDefault(); this.blur(); window.focus(); $('#textFontList').is(':hidden') ? $('#textFontList').show() : $('#textFontList').hide(); //$('#textFontListClose').show(); }); $('.textFontSelector').on('mousedown', function (e) { e.preventDefault(); this.blur(); window.focus(); $('.textFontList').is(':hidden') ? $('.textFontList').show() : $('.textFontList').hide(); //$('.textFontListClose').show(); }); $('#textFontListClose').on('click', function() { $('#textFontList').hide(); $('#textFontListClose').hide(); }); $('#textSize').keyup(function() { delay(function() { var obj = canvas.getActiveObject(); if(checkTextHeight($('#textSize').val())==true) { updateObjFromControls('scaleText'); } else { $('#textSize').val($('#objHeight').val()); } }, FLOATDELAY ); }); $("#textBox").on('input', function() { var obj = canvas.getActiveObject(); var parsedText = filterUCChars($(this).val(),obj.get('text')); obj.set({'text': parsedText}); //$(this).val() $(this).val(parsedText); canvas.renderAll(); updateObjControls('input_textBox'); }); // SERIENTEXT $('#applySerienText').on('click', function() { // SEARCH FOR ACTIVE SERIENTEXT OBJECT var actObj= new Object; var serienTextObject=0; for(x=0; x < canvas.getObjects().length; x++) { obj=canvas.item(x); if(obj.mmkLayerType=='layerSerienText') { canvas.setActiveObject(obj); serienTextObject=1; actObj=obj; break; } } // AJAX UPDATE REQUEST var zeilen = $('input[name="stFields[]"]').map(function(){ return this.value; }).get(); var zcheck = ''; for (var i=0; i= 1 && $('#MENGE').val() <=99999) {} else { $('#MENGE').val(1); } calculateSign('Event: Enter #Menge',0); }, INPUTDELAY ); }); var oldStaerke, cEngrave; $('#STAERKE').on('click', function() { oldStaerke = $('#STAERKE option:selected').val(); }); $('#STAERKE').on('change', function() { changeStaerke($('#MATERIALID').val(),$('#STAERKE').val(), oldStaerke); }); $('#ENGRAVEMETHOD').on('change', function() { changeMaterialJS($('#MATERIALID').val(),$('#PRODUCTID').val(),''); }); $('#objXPos, #objYPos').bind({ blur: function(ev) { var dim = $(this).attr('id'); var obj = canvas.getActiveObject(); if(checkObjectXY($('#objXPos').val(),$('#objYPos').val())==true) { dim == 'objXPos' ? updateObjFromControls('posX'):updateObjFromControls('posY'); } else { setCalculateObjXY(obj); } }, keydown: function(ev) { var dim = $(this).attr('id'); if(ev.which==13 || ev.which==9) { if(ev.which==13) { ev.preventDefault(); } var obj = canvas.getActiveObject(); if(checkObjectXY($('#objXPos').val(),$('#objYPos').val())==true) { dim == 'objXPos' ? updateObjFromControls('posX'):updateObjFromControls('posY'); } else { setCalculateObjXY(obj); } } else { delay(function() { var obj = canvas.getActiveObject(); if(checkObjectXY($('#objXPos').val(),$('#objYPos').val())==true) { dim == 'objXPos' ? updateObjFromControls('posX'): updateObjFromControls('posY'); } else { setCalculateObjXY(obj);} }, FLOATDELAY ); } } }); $('#objWidth, #objHeight').bind({ blur: function(ev) { var dim = $(this).attr('id'); if(checkObjectWidthHeight($('#objWidth').val(),$('#objHeight').val())==true) { dim == 'objWidth' ? updateObjFromControls('scaleX') : updateObjFromControls('scaleY'); } else { restoreObjWidthHeight(obj); } }, keydown: function(ev) { var dim = $(this).attr('id'); if(ev.which==13 || ev.which==9) { if(ev.which==13) { ev.preventDefault(); } var obj = canvas.getActiveObject(); if(checkObjectWidthHeight($('#objWidth').val(),$('#objHeight').val())==true) { dim == 'objWidth' ? updateObjFromControls('scaleX') : updateObjFromControls('scaleY'); } else { restoreObjWidthHeight(obj); } } else { delay(function() { var obj = canvas.getActiveObject(); if(checkObjectWidthHeight($('#objWidth').val(),$('#objHeight').val())==true) { dim == 'objWidth' ? updateObjFromControls('scaleX') : updateObjFromControls('scaleY'); } else { restoreObjWidthHeight(obj); } }, FLOATDELAY ); } } }); $('#objAngle').bind({ blur: function(ev) { updateObjFromControls('angle'); }, keydown: function(ev) { if(ev.which==13 || ev.which==9) { if(ev.which==13) { ev.preventDefault(); } updateObjFromControls('angle'); } else { delay(function() { updateObjFromControls('angle'); }, INPUTDELAY ); } } }); $('#objLockRotate').on('click', function() { SIGN.lockRotate = SIGN.lockRotate == 1 ? 0: 1; var lockImg = SIGN.lockRotate == 1 ? '../../../konfigurator/icons/create_lock_rotate.svg' : '../../../konfigurator/icons/create_unlock_rotate.svg'; var lockRotateInput = SIGN.lockRotate == 1 ? true:false; var lockTitle = SIGN.lockRotate == 1 ? 'Drehung entsperren':'Drehung sperren'; $('#objLockRotateImg').attr('src',lockImg) $('#objLockRotateImg').attr('title',lockTitle) $('#objLockRotateImg').attr('alt',lockTitle) $('#objAngle').prop('disabled',lockRotateInput); for(x=2; x").attr("value", value['PID']).text(STAERKE_DIS+' mm')); }); //if(STAERKE_EXIST==0) { $('#STAERKE option[value="'+STAERKE_DEF+'"]').attr('selected', true); } //else { $('#STAERKE option[value="'+STAERKE_CUR+'"]').attr('selected', true); } if(STAERKE_EXIST==0) { $('#STAERKE option[value="'+STAERKE_DEF+'"]').prop('selected', true); } else { $('#STAERKE option[value="'+STAERKE_CUR+'"]').prop('selected', true); } // RESTORE STAERKE $('#wkStaerke').html($('#STAERKE option:selected').text()); // RESTORE ENGRAVEMETHOD var CURRENTEMID = $('#ENGRAVEMETHOD option:selected').val(); var CURRENTENGRAVEMINFONTSIZE= $('#ENGRAVEMINFONTSIZE').val(); var CURRENTENGRAVEFILLABLE= $('#ENGRAVEFILLABLE').val(); var EMDEFAULT=''; var ENGRAVEMINFONTSIZEDEFAULT=''; var ENGRAVEFILLABLEDEFAULT= ''; var EMIDEXISTS=0; $('#ENGRAVEMETHOD').empty(); $.each(PROD['ENGRAVE_METHODS'],function(index, value) { if(value['EMID']==CURRENTEMID) { EMIDEXISTS=1; $('#ENGRAVEMINFONTSIZE').val(value['EMMINFONTSIZE']); $('#ENGRAVEFILLABLE').val(value['AUSLEGBAR_MF']); } if(value['PEMDEFAULT']==1) { EMDEFAULT = value['EMID']; ENGRAVEMINFONTSIZEDEFAULT= value['EMMINFONTSIZE']; ENGRAVEFILLABLEDEFAULT=value['AUSLEGBAR_MF']; } $('#ENGRAVEMETHOD').append($("").attr("value", value['EMID']).text(value['EMNAME'])); }); if(EMIDEXISTS==0) { $('#ENGRAVEMETHOD option[value="'+EMDEFAULT+'"]').prop('selected', true); $('#ENGRAVEMINFONTSIZE').val(ENGRAVEMINFONTSIZEDEFAULT); $('#ENGRAVEFILLABLE').val(ENGRAVEFILLABLEDEFAULT); } else { $('#ENGRAVEMETHOD option[value="'+CURRENTEMID+'"]').prop('selected', true); } // RESTORE FRAESGRAVUREN SETTINGS + COLOR PANEL if($('#ENGRAVEMETHOD option:selected').val()==999) // NEEDED 3 TO DEAVTICA FRAES { $('#TOBASKETAREA').hide(); $('#ORAREA').hide(); $('#ANFRAGEAREA').show(); $('#ANFRAGEAREANETTO').show(); $('#ANFRAGEAREAJS').show(); $('#wkPrice').hide(); $('#wkPriceNetto').hide(); $('#wkPriceJS').hide(); //$('#JSPRICEAREANETTO').hide(); //$('#JSPRICEAREA').hide(); $('#anfrageWindow').text('Anfrage stellen'); } else { $('#TOBASKETAREA').show(); $('#ORAREA').show(); $('#ANFRAGEAREA').hide(); $('#ANFRAGEAREANETTO').hide(); $('#ANFRAGEAREAJS').hide(); $('#wkPrice').show(); $('#wkPriceNetto').show(); $('#wkPriceJS').show(); //$('#JSPRICEAREANETTO').show(); //$('#JSPRICEAREA').show(); $('#anfrageWindow').text('A'); } $('#ENGRAVEFILLABLE').val()==1 ? $('#objFillColorPanel').show() : $('#objFillColorPanel').hide(); // RESTORE SIGN SIZE // SIGN STD / DIMS var CURRENTDIMMODE = $("input[name=DIMMODE]:checked").val(); //$('#DIMMODE').val(); var CURRENTDIMSTD = $('#DIMSTD').val(); //$('#DIMSTD option:selected').val(); var CURRENTDIMFREE = $('#DIMFREE').val(); var CURRENTWIDTH = $('#WIDTH').val(); var CURRENTHEIGHT = $('#HEIGHT').val(); LOG && console.log('CURRENTDIMSTD: '+ CURRENTDIMSTD +', CURRENTDIMMODE: '+ CURRENTDIMMODE+', CURRENTDIMFREE: '+ CURRENTDIMFREE +', CURRENTWIDTH: '+ CURRENTWIDTH +', CURRENTHEIGHT: '+ CURRENTHEIGHT); // RESTORE DIM DEFAULTS IF DOESN'T EXISTS var SIGNDIMEXISTS=0; var SIGNDIMDEFAULT=''; $('#DIMSTD').empty(); $.each(MAT['SIGN_DIM'],function(index, value){ if(CURRENTDIMSTD==value['DIMX']+'x'+value['DIMY']) { SIGNDIMEXISTS=1; } if(value['DIMDEFAULT']==1) { SIGNDIMDEFAULT= value['DIMX']+'x'+value['DIMY']; } $('#DIMSTD').append($("").attr("value", value['DIMX']+'x'+value['DIMY']).text(value['DIMX']+' x '+value['DIMY']+' mm')); }); if(PROD['PDIMFREE']==1) { if(SIGNDIMEXISTS==0) // && CURRENTDIMMODE==1) { switch(CURRENTDIMMODE) { case '1': $("#DIMMODE1").prop("checked", true); break; default: $("#DIMMODE1").prop("checked", true); var dim =CURRENTDIMSTD.split('x'); $('#WIDTH').val(dim[0]); $('#HEIGHT').val(dim[1]); } } else { switch(CURRENTDIMMODE) { case '1': $("#DIMMODE1").prop("checked", true); $('#WIDTH').val(CURRENTWIDTH); $('#HEIGHT').val(CURRENTHEIGHT); break; default: $("#DIMMODE1").prop("checked", true); $('#WIDTH').val(CURRENTWIDTH); $('#HEIGHT').val(CURRENTHEIGHT); } } } else { $("#DIMMODE0").prop("checked", true); $('#DIMSTD option[value="'+SIGNDIMDEFAULT+'"]').prop('selected', true) var dim =SIGNDIMDEFAULT.split('x'); $('#WIDTH').val(dim[0]); $('#HEIGHT').val(dim[1]) } // SET DIMFREE SELECTOR switch(PROD['PDIMFREE']) { case '1': $('#DIMFREEDISPLAY').show(); break; default: $('#DIMFREEDISPLAY').hide(); } $('#DIMFREE').val(PROD['PDIMFREE']); // DISPLAY MESSAGE FOR RONDEN / OVALE switch(PROD['PID']) { case '15': case '16': $('#OVALEDISPLAY').show(); $('#RONDENDISPLAY').hide(); break; case '17': case '18': $('#RONDENDISPLAY').show(); $('#OVALEDISPLAY').hide(); break; default: $('#OVALEDISPLAY').hide(); $('#RONDENDISPLAY').hide(); } // RESTORE SIGN FORMS + BORDER var CUR_FORMID = $('#FORMID').val(); var CUR_FORM = $('#FORM').val(); var CUR_FORMDATA = $('#FORMDATA').val(); var CUR_BORDERID = $('#BORDERID').val(); var CUR_BORDERDATA = ''; //$('#BORDERID').val(); var FORMIDEXISTS=0; var FORMID_DEF=''; var FORM_DEF=''; var FORMDATA_DEF=''; var BORDERIDEXISTS=0; var BORDERID_DEF=''; var BORDERDATA_DEF=''; LOG && console.log('CUR_FORMID: '+ CUR_FORMID +', CUR_FORM: '+ CUR_FORM+', CUR_FORMDATA: '+ CUR_FORMDATA +', CUR_BORDERID: '+ CUR_BORDERID); // FORMS $('#SLIDERFORMS').empty(); $.each(PROD['SIGN_FORMS'],function(index, value) { if(value['SFDEFAULT']==1) { FORMID_DEF = value['SFID']; FORM_DEF = value['SFNAME']; FORMDATA_DEF = value['SFDATA']; } var currentPanel= xs==2 ? 'panelThirdClose':'panelThird'; if(value['SFID']==CUR_FORMID) { FORMIDEXISTS=1; } $('#SLIDERFORMS').append("\n"); xs++; if(xs==3) { $('#SLIDERFORMS').append('\n'); xs=0; } }); if(xs!=3 && xs!=0) { $('#SLIDERFORMS').append('
\n'); } if(FORMIDEXISTS==0) { $('#FORMID').val(FORMID_DEF); $('#FORM').val(FORM_DEF); $('#FORMDATA').val(FORMDATA_DEF); } else { $('#FORMID').val(CUR_FORMID); $('#FORM').val(CUR_FORM); $('#FORMDATA').val(CUR_FORMDATA); } // BORDERS $('#SLIDERBORDERS').empty(); $.each(PROD['SIGN_BORDERS'],function(index, value) { if(value['SBDEFAULT']==1) { BORDERID_DEF=value['SBID']; BORDERDATA_DEF=value['SBDATA']; } var currentPanel= xs==2 ? 'panelThirdClose':'panelThird'; if(value['SBID']==CUR_BORDERID) { BORDERIDEXISTS=1; } $('#SLIDERBORDERS').append("
\n"); xs++; if(xs==3) { $('#SLIDERBORDERS').append('\n'); xs=0; } }); if(xs!=3 && xs!=0) { $('#SLIDERBORDERS').append('
\n'); } if(BORDERIDEXISTS==0) { $('#BORDERID').val(BORDERID_DEF); $('#BORDERDATA').val(BORDERDATA_DEF); } else { $('#BORDERID').val(CUR_BORDERID); $('#BORDERDATA').val(CUR_BORDERDATA); } // RESTORE COLORS /** NEW RESTORE **/ var CUR_COLORID = $('#COLORID').val(); var CUR_COLORNAME = $('#COLORNAME').val(); var CUR_COLORGROUPID = $('#COLORGROUPID').val(); var CUR_COLOR = $('#COLOR').val(); var CUR_COLORBG = $('#COLORBG').val(); var CUR_COLORBGIMAGE = $('#COLORBGIMAGE').val(); var CUR_COLORPRICE = $('#COLORPRICE').val(); var x=0; var xs=0; var xrow=0; var colorName=''; var colorDisplay=''; var VERWENDUNG=''; var LIEFERZEIT=''; var bgdisplay=''; var COLAPPEND=''; var padding=0; var OLDSTAERKE=''; var COLORGROUPIDEXISTS=0; var COLORID_DEF=''; var COLORNAME_DEF=''; var COLORGROUPID_DEF=''; var COLOR_DEF=''; var COLORBG_DEF=''; var COLORBGIMAGE_DEF=''; $('#SLIDERCOLORS').empty(); $.each(MAT['PRODUCTS'],function(pindex, pvalue) { var PIDCOLORS = pvalue['COLORS']; var EMETHODS = pvalue['ENGRAVE_METHODS']; x=0; $.each(PIDCOLORS,function(index, value) { // if(value['CGID']==CUR_COLORGROUPID) { COLORGROUPIDEXISTS=1; CUR_COLORID=value['CID'] } if(CUR_COLORID==value['CID'] && pvalue['PID']==prodid) { COLORGROUPIDEXISTS=1; CUR_COLORID=value['CID'] } //console.log('STAERKE/PID :' + pvalue['PID'] + ', '+prodid+ '|' + CUR_COLORID + ', ' + value['CID'] + '| COLORGROUPEXISTS?: ' + COLORGROUPIDEXISTS); if(value['CGBGIMAGE'].length==0) { value['CGBGIMAGE']=''; } else { value['CGBGIMAGE']='../' + value['CGBGIMAGE']; } if(x==0 && pvalue['PID']==prodid) { COLORID_DEF=value['CID']; COLORNAME_DEF=value['CGNAME']; COLORGROUPID_DEF=value['CGID']; COLOR_DEF=value['CGCOLOR']; COLORBG_DEF= value['CGBGCOLOR']; COLORBGIMAGE_DEF = value['CGBGIMAGE']; COLORPRICE_DEF=value['CPA']; } colorName = value['CGNAME']; colorDisplay = value['CGNAME'].replace('/','
'); if(value['CLIEFERZEIT']!=0) { LIEFERZEIT=value['CLIEFERZEIT']+' Werktage'; } else { LIEFERZEIT='sofort lieferbar'; } switch(value['CVERWENDUNG']) { case '1': VERWENDUNG='nur Aussen verwendbar'; break; case '2': VERWENDUNG='Innen und Aussen verwendbar'; break; default: VERWENDUNG='nur Innen verwendbar'; } if(value['CUVRESISTENT']==1) { VERWENDUNG = VERWENDUNG + ", UV-Resistent"; } /** SPLIT COLORS **/ // if(OLDSTAERKE!=pvalue['PSTAERKE'] && xrow>0) { padding='25px'; OLDSTAERKE=pvalue['PSTAERKE']; $('#SLIDERCOLORS').append(COLAPPEND + '
'); xs=0; } // var currentPanel= xs==2 ? 'colorThirdClose':'colorThird'; var currentPanel= 'colorThird'; if(xs==0) { COLAPPEND=''; } bgdisplay = value['CGBGIMAGE'].length > 0 ? "background: url("+value['CGBGIMAGE']+")" : "background: "+value['CGBGCOLOR']+""; bgimage = value['CGBGIMAGE'].length > 0 ? value['CGBGIMAGE'] : ''; pdisplay=pvalue['PSTAERKE'].replace('.',','); if(pvalue['PID']==$('#PRODUCTID').val()) { $.each(EMETHODS,function(emindex, emvalue) { COLAPPEND = COLAPPEND + "\n"; }); } else { $.each(EMETHODS,function(emindex, emvalue) { COLAPPEND = COLAPPEND + "\n"; }); } xs++; if(xs==3) { COLAPPEND=COLAPPEND + ' \n'; xs=0; $('#SLIDERCOLORS').append(COLAPPEND); COLAPPEND=''; } x++; }); xrow++; }); if(xs!=3 && xs!=0) { COLAPPEND= COLAPPEND + '
\n'; $('#SLIDERCOLORS').append(COLAPPEND); } if(COLORGROUPIDEXISTS==0) { $('#COLORID').val(COLORID_DEF); $('#COLORNAME').val(COLORNAME_DEF); $('#COLORGROUPID').val(COLORGROUPID_DEF); $('#COLOR').val(COLOR_DEF); $('#COLORBG').val(COLORBG_DEF); $('#COLORBGIMAGE').val(COLORBGIMAGE_DEF); $('#COLORPRICE').val(COLORPRICE_DEF); } else { $('#COLORID').val(CUR_COLORID); $('#COLORNAME').val(CUR_COLORNAME); $('#COLORGROUPID').val(CUR_COLORGROUPID); $('#COLOR').val(CUR_COLOR); $('#COLORBG').val(CUR_COLORBG); $('#COLORBGIMAGE').val(CUR_COLORBGIMAGE); $('#COLORPRICE').val(CUR_COLORPRICE); } // RESTORE DIMMAX, DIMMIN var PDIMMAX = PROD['PMAXX']+'x'+PROD['PMAXY']; var PDIMMIN = PROD['PMINX']+'x'+PROD['PMINY']; $('#DIMMAX').val(PDIMMAX); $('#DIMMIN').val(PDIMMIN); // RESTORE FIXATIONDATA var CUR_FIXATIONID = $('#FIXATIONID').val(); var CUR_FIXATIONNAME = $('#FIXATIONNAME').val(); var x=0; var xs=0; var dpimage = ''; var FIXAPPEND=''; var settableFixations = ['2','3','4','8','10','11']; var FIXATIONIDEXISTS=0; var FIXATIONID_DEF=''; var FIXATIONNAME_DEF=''; var FIXATIONDATA=''; var FIXATIONID_DEF=1; var FIXATIONNAME_DEF='Keine'; $('#SLIDERFIXATIONS').empty(); // GET CURRENT FIXATIONS var SIGN_FORMS = new Object(); var TMP_SIGN_FORMS = new Object(); $.each(PROD['SIGN_FORMS'],function(index, value) { if(value['SFID']==$('#FORMID').val()) { SIGN_FORMS = PROD['SIGN_FORMS'][index]; } TMP_SIGN_FORMS = PROD['SIGN_FORMS'][index]; /* INVALID JQUERY 2.4 */ //console.log(TMP_SIGN_FORMS) //if(TMP_SIGN_FORMS['SFFIXATIONS']!==null) if(TMP_SIGN_FORMS['SFFIXATIONS'].length > 0) { //console.log('bigger than none'); $.each(TMP_SIGN_FORMS['SFFIXATIONS'],function(index, value) { // ALL FIXATIONDATA NEEDED //if(value['DISTANCE']===null) { value['DISTANCE']=''; } FIXATIONDATA = FIXATIONDATA + value['SFID'] +','+value['FXID']+','+ value['MINWIDTH']+','+value['MINHEIGHT']+','+value['DISTANCE']+'###'; }); } }); FIXAPPEND = "
Keine
"; if(SIGN_FORMS['SFFIXATIONS'].length > 0) { $.each(SIGN_FORMS['SFFIXATIONS'],function(index, value) { if(value['FXID']==CUR_FIXATIONID) { FIXATIONIDEXISTS=1; CUR_FIXATIONID=value['FXID'] } switch(value['FXID']) { case '7' : dpimage='ws'; break; case '23': dpimage='wsgold'; break; case '26': dpimage='wsgold'; break; case '9' : dpimage='screw'; break; default : dpimage=''; break; } var FXDETAILS =''; var DATASETFX =0; //console.log(value['FXFILEDESC'] +', '+value['FXDESC']); if(value['FXFILEDESC'].length > 0 || value['FXDESC'].length > 0) { value['FXFILEDESC'] = value['FXFILEDESC'].length > 0 ? '../../xkonf/fixations/' + value['FXFILEDESC'] : ''; //FXDETAILS = ""; FXDETAILS='Details'; } if(settableFixations.includes(value['FXID'])) { FXDETAILS = FXDETAILS.length > 0 ? FXDETAILS + ' / Abstand einstellen' : 'Abstand einstellen'; DATASETFX=1; } FIXAPPEND = FIXAPPEND + "
"+ value['FXNAME'] +"
" + FXDETAILS + "
"; }); } $('#SLIDERFIXATIONS').append(FIXAPPEND); // + '\n'); if(FIXATIONIDEXISTS==0) { $('#FIXATIONID').val(FIXATIONID_DEF); $('#FIXATIONNAME').val(FIXATIONNAME_DEF); } else { $('#FIXATIONID').val(CUR_FIXATIONID); $('#FIXATIONNAME').val(CUR_FIXATIONNAME); } // RESTORE COMPONENTS var COMPONENTSAPPEND = ''; $('#SLIDERCOMPONENTS').empty(); $.each(PROD['COMPONENTS'],function(index, value) { //console.log($('#componentsDesc'+value['CPID']).html()); var COMPONENTDATA = $('#componentsDesc'+value['CPID']).html().length > 0 ? "
Details
":""; COMPONENTSAPPEND = COMPONENTSAPPEND + "
"+value['CPNAME']+"
" + COMPONENTDATA + "
"; }); $('#SLIDERCOMPONENTS').append(COMPONENTSAPPEND); // + '\n'); // INITIZALIE NEW CONFIGURATOR LOG && console.log('%cinitConfSign(\''+$("input[name=DIMMODE]:checked").val()+'\',\''+$('#DIMFREE').val()+'\',\''+$('#DIMSTD').val()+'\',\''+$('#WIDTH').val()+'\',\''+$('#HEIGHT').val()+'\',\''+$('#COLOR').val()+'\',\''+$('#COLORBG').val()+'\',\''+$('#COLORBGIMAGE').val()+'\',\''+$('#COLORNAME').val()+'\',\''+$('#COLORID').val()+'\',\''+$('#COLORGROUPID').val()+'\',\''+$('#FORM').val()+'\',\''+$('#FORMDATA').val()+'\',\''+$('#FORMID').val()+'\',\'border\',\''+$('#BORDERID').val()+'\',\''+PDIMMAX+'\',\''+PDIMMIN+'\',\''+$('#TXTMODE').val()+'\',\''+FIXATIONDATA+'\',\''+MAT['MCUTFORM']+'\',\''+jsondata+'\',\'1\')',"color: white; background-color: black; padding: 4px"); initConfSign($("input[name=DIMMODE]:checked").val(),$('#DIMFREE').val(),$('#DIMSTD').val(),$('#WIDTH').val(),$('#HEIGHT').val(),$('#COLOR').val(),$('#COLORBG').val(),$('#COLORBGIMAGE').val(),$('#COLORNAME').val(),$('#COLORID').val(),$('#COLORGROUPID').val(),$('#FORM').val(),$('#FORMDATA').val(),$('#FORMID').val(),'border',$('#BORDERID').val(),PDIMMAX,PDIMMIN,$('#TXTMODE').val(),FIXATIONDATA,MAT['MCUTFORM'],jsondata,'1'); //initConfSign($('#DIMMODE').val(),$("#DIMFREE").val(),'{$_SESSION['SIGN']['DIMSTD']}','{$_SESSION['SIGN']['WIDTH']}','{$_SESSION['SIGN']['HEIGHT']}','{$_SESSION['SIGN']['COLOR']}','{$_SESSION['SIGN']['COLORBG']}','{$_SESSION['SIGN']['COLORBGIMAGE']}','{$_SESSION['SIGN']['COLORNAME']}','{$_SESSION['SIGN']['COLORID']}','{$_SESSION['SIGN']['COLORGROUPID']}','{$_SESSION['SIGN']['FORM']}','{$_SESSION['SIGN']['FORMDATA']}','{$_SESSION['SIGN']['FORMID']}','{$_SESSION['SIGN']['BORDER']}','{$_SESSION['SIGN']['BORDERID']}','{$_SESSION['SIGN']['DIMMAX']}','{$_SESSION['SIGN']['DIMMIN']}','{$_SESSION['SIGN']['TXTMODE']}','{$_SESSION['SIGN']['FIXATIONDATA']}','{$_SESSION['SIGN']['CUTFORMSENABLED']}','$JSONFILE'); $('#CONTAINERCURRENTJSVAL').html( ''+ '' + '' + '' + '' + '
MATERIALID:'+ $('#MATERIALID').val() + '
PRODUCTID:'+ $('#PRODUCTID').val() + '
STAERKE:'+ $('#STAERKE').val() + '
ENGRAVEMETHOD:'+ $('#ENGRAVEMETHOD').val() + '
' ); if(SIGN.closeMenuAfterAdd===true) { closeMenues(); } handleInputs('enable'); return false; } /** ---------------------------------------------------------------------------*/ /** INIT SIGN (JS + PHP) */ /** ---------------------------------------------------------------------------*/ function initConfSign(dimmode,dimfree,dimstd,x,y,col,bgcol,bgimage,colname,colid,colgroupid,sform,sformdata,sformid,border,borderid,dimmax,dimmin,textmode,fixationdata,cutformsenabled,json,reloadFromJS) { if(reloadFromJS!=1) { canvas.clear(); } LOG && console.log('ReloadFromJS: ' +reloadFromJS) //--> handleInputs('disable'); $('#schild').hide(); SIGN.width=x; SIGN.height=y; SIGN.color = col; SIGN.bgcolor = bgcol; SIGN.dimMax=dimmax; SIGN.dimMin=dimmin; FIXDATA = new Array(); // RESET GLOBAL FIXDATA ROWS = fixationdata.split('###'); ROWS.forEach(function(entry) { dataentry=entry.split(','); if(entry.length > 0) { FIXDATA.push(dataentry); } }); //alert(FIXDATA.length); var max = SIGN.dimMax.split('x'); var min = SIGN.dimMin.split('x'); if(textmode==1) // SERIENTEXT { $('#serientext').show(); $('#TXTMODE').val(1); $('#MENGE').val()==1 ? $('#stSignDisplay').text($('#MENGE').val()+ ' Entwurf') : $('#stSignDisplay').text($('#MENGE').val()+ ' Entw\u00fcrfe'); $('#MENGE').prop('readonly', true); } $('#WIDTH').val(SIGN.width) $('#HEIGHT').val(SIGN.height) if(json.length > 0) { //console.log(json) json = json.replace(/'/g,"\'"); //json = json.replace(/\"/g,'\\"'); json = json.replace(/\n/g, "\\n"); json = json.replace(/\r/g, "\\r"); json = json.replace(/\t/g, "\\t"); json = json.replace(/\f/g, "\\f"); //json = filterUCChars($(this).val(),obj.get('text')); LOG && console.log('initSign from JSON (PHP)'); //console.log(json); //var start = timer(0); // canvas.loadFromJSON(json, canvas.renderAll.bind(canvas), function(o, object) { // var start = timer(0); // var tdiff = timer(start); // LOG && console.log(o,object); // 'Object loaded in: ' +tdiff + ', Object:' + fabric.log(o, object)); // }); /* GET SCALE DIM */ var xRatio = parseFloat(SIGN.maxWidth/x); var yRatio = parseFloat(SIGN.maxHeight/y); //.toPrecision(5); SIGN.scaleFac = x > y && (xRatio*y) < SIGN.maxHeight ? xRatio : yRatio; var leftPos = ($('#canvasBox').width() - SIGN.width * SIGN.scaleFac)/2; var topPos = ($('#canvasBox').height() - SIGN.height * SIGN.scaleFac)/2; LOG && console.log('SignLeftTop X,Y: ' + leftPos + ',' + topPos + ', SC :' +SIGN.scaleFac); /* CHECK FOR OLD TEMPLATES */ if($('#OLDTEMPLATE').val()==1) { SIGN.oldTemplate=true; } var objCount=0; canvas.loadFromJSON(json, function () { if(SIGN.oldTemplate) { console.log('trying to correct old sign template'); canvas.forEachObject(function(o) { if(objCount>1) { console.log(o); //console.log('LEFT/RIGHT: ' + leftPos + ',' +topPos + ', OBJECT: ' + o.left +','+o.top+',' +o.scaleX); if(o.mmkLayerType=='layerFixation') { } else { //$('#objXPos').val(parseFloat((obj.get('left') / SIGN.scaleFac) - (canvas.item(0).get('left') / SIGN.scaleFac)).toFixed(1)); //$('#objYPos').val(parseFloat((obj.get('top') / SIGN.scaleFac) - (canvas.item(0).get('top') / SIGN.scaleFac)).toFixed(1)); objX = o.left * o.scaleX; ///o.scaleX; objY = o.top * o.ScaleY; ///o.scaleY; //console.log('OBJ X/Y: ' +o.type + ': ' + objX +','+objY); newLeft = leftPos + o.left /o.scaleX; newTop = topPos + o.top/o.scaleY; //formatObjControls(canvas.item(x),1); //console.log('OLDPOS_LEFT: ' + o.left + ' OLD_SCALEX: '+ o.scaleX + ', SIGNPOS_LEFT: ' +leftPos + ', ENDPOS_LEFT: ' +newLeft ); //console.log('OLDPOS_TOP: ' + o.top + ' OLD_SCALEY: '+ o.scaleY + ', SIGNPOS_TOP: ' +topPos + ', ENDPOS_TOP: ' +newTop); o.set('left',newLeft); o.set('top',newTop); o.setCoords(); } } objCount++; }); canvas.renderAll(); SIGN.oldTemplate=false; // RESET $('#OLDTEMPLATE').val(''); } //var tdiff = timer(start); //LOG && console.log('JSON loads in: ' +tdiff); //canvas.loadFromDatalessJSON(json, canvas.renderAll.bind(canvas), function(o, object) { // fabric.log(o, object); //}); }); canvas.calcOffset(); canvas.renderAll(); } else { LOG && console.log('init from JS'); //LOG && fabric.log(o, object); } var removeCFID=new Array(); var oldbgObj = new Array(); delay(function() { // CAUSE IMAGES IN JSON ARE NOT LOADED PROPERLY var startdelay = timer(0); //console.log('INITIALIZE OBJECTS FROM LOADER'); //console.log('Background: ' +bgimage+ ', ReloadFromJS: ' + reloadFromJS) if(bgimage.match(/^\.\.\/xkonf\/.*/)) { bgimage = '../'+bgimage; $('#COLORBGIMAGE').val(bgimage); } //console.log('BackgroundAfter: ' +bgimage+ ', ReloadFromJS: ' + reloadFromJS) for(x=2; x 0) { restoreFixationByJSON(oldbgObj); } setCanvasZoomInit('initConfSign'); canvas.renderAll(); $('#schild').show(); var tdiffdelay = timer(startdelay); LOG && console.log('Delayed Object Loader in initConfSign() (150 ms) loads in: ' +tdiffdelay); }, 225); // 150 handleInputs('enable'); } /** ---------------------------------------------------------------------------*/ /** CALCULATE SIGN (PHP MODE + JS ONLY MODE) */ /** ---------------------------------------------------------------------------*/ async function calculateSign(source,type) { handleInputs('disable'); var typeval=new Array('JS ONLY','PHP + JS'); var autoSet=0; if(type==null) { type=0; autoSet=1; } // TYPE NOT SET IN FUNCTIONS if(PHPCALC==true) { type=1; autoSet=1; } // ENABLES PHP MODE ALWAYS (GLOBAL) LOG && console.log('%cCalculatingSign: Source: '+source+', Mode: '+typeval[type]+', Autoset: ' + autoSet + ', PHPCALCMODE: ' + PHPCALC,"color:white; background: #cc0000; padding:4px;"); // TIME var start = timer(0); // GRAVURFLAECHE ERMITTELN var gFull = 0; var sFull = 0; var gColorArea = new Object(); var gColorList = []; var gColorRoam = ''; var gAll = 0; var sAll = 0; var bildmontage= 0; var staerke = $('#STAERKE option:selected').text() staerke = staerke.replace("mm",''); staerke = parseFloat(staerke.replace(",",'.')).toFixed(2); var fixHoleData= {'fixMode':$('#fixEditMode').val(), 'fixDiameter':$('#fixDiameter').val(), 'fixVertikal1': $('#fixVertikal1').val(), 'fixHorizontal2': $('#fixHorizontal2').val(), 'fixHorizontal4': $('#fixHorizontal4').val(), 'fixVertikal4': $('#fixVertikal4').val()}; // BORDER? var xs=2; if($('#BORDERID').val()==2) { xs=1; } // Thin if($('#BORDERID').val()==3) { xs=1; } // Thick for(x=xs; x < canvas.getObjects().length; x++) { if(canvas.item(x).type=='image' || canvas.item(x).type=='path' || canvas.item(x).type=='group' || canvas.item(x).type=='path-group' || canvas.item(x).type=='i-text' || canvas.item(x).type=='circle' || canvas.item(x).type=='rect' || canvas.item(x).type=='triangle' || canvas.item(x).type=='polygon') { gwidth = ((canvas.item(x).get('width')*canvas.item(x).scaleX)/10) / SIGN.scaleFac; gheight = ((canvas.item(x).get('height')*canvas.item(x).scaleY)/10) / SIGN.scaleFac; } else { gwidth = (canvas.item(x).get('width')/10) /SIGN.scaleFac; gheight = (canvas.item(x).get('height')/10)/SIGN.scaleFac; } //LOG && console.log('Type:' + canvas.item(x).type + ',' +gwidth + ' x ' +gheight+ ',Scale: ' + canvas.item(x).scaleX + ',' +canvas.item(x).scaleY); gAll = gwidth * gheight; sAll = gwidth * 2 + gheight * 2; /** Gravurflaeche oder Ausschnittflache */ //console.log('nicht synchron'); //console.log(canvas.item(x)); if(canvas.item(x).mmkLayerType=='layerCutForm') { sFull+= sAll; /* BERECHNE PFADLAENGE - NICHT KOMPLETT, FORMEN FEHLEN (DISABLED) //let type = canvas.item(x).get('type'); //console.log('Cutform (Classic) -> ' + type +' : ' + sAll + ' cm'); //console.log(canvas.item(x).get('type')); let realLength = 0; switch(canvas.item(x).type) { case 'rect': realLength = sAll; break; case 'ellipse': case 'circle': var rx = gwidth/2; var ry = gheight/2; realLength = Math.PI * Math.sqrt(2 * (Math.pow(rx,2) + Math.pow(ry,2))); break; case 'triangle': console.log(canvas.item(x)); break; case 'path': console.log(canvas.item(x)); //realLength = canvas.item(x).get('path').getTotalLength(); var pathInfo = fabric.util.getPathSegmentsInfo(canvas.item(x).path); console.log(pathInfo[pathInfo.length - 1].length); realLength = (pathInfo[pathInfo.length - 1].length / 10 / SIGN.scaleFac) * canvas.item(x).scaleX; console.log('ScaleFac:' + SIGN.scaleFac); break; } console.log('Cutform (Classic vs RealLength) -> ' + canvas.item(x).type +' : ' + sAll + ' vs ' + realLength + ' cm'); */ } else { gFull+= gAll; } if(canvas.item(x).mmkLayerFill == 1) //Type=='layerFillColor') { fill = canvas.item(x).get('fill'); if(!(fill in gColorArea)) { gColorArea[fill]=0; } gColorArea[fill]+=gAll; canvas.item(x).type=='i-text' ? gColorList.push(SIGN.fillColors[fill]+'|'+ canvas.item(x).get('text').replace('|','')) : gColorList.push(SIGN.fillColors[fill]+'|'+'Image'); //console.log(fill); } if(canvas.item(x).get('type')=='image') { bildmontage=1; } } LOG && console.log('Gravur:' + gFull +' / Ausschnitte:' + sFull); // GROUP FILL COLORS for (var key in gColorArea) { gColorRoam= gColorRoam + key +'|'+ gColorArea[key] +'###'; } // INIT LOADER // $('#wkPrice').html('
Lade...
'); // AJAX UPDATE var dataURL=''; var formData = $('#imUploader').serializeArray(); //$('input[name^="wdata\\["]').serializeArray(); // GET REFPNG // CAUSES SOME REALLY ANNOYING ERRORS + SLOW EITHER var obj = canvas.getActiveObject(); // if(obj) { //canvas.deactivateAll().renderAll(); // NOT WORKING in 2.x //hideObjControls(); // NOT WORKING IN 2.x //canvas.discardActiveObject(); //canvas.requestRenderAll(); // console.log('SOMETHING IS WRONG IN LINE 1309......'); //hideObjControls(); //} // CALUCLATE PRICE (PHP) if(type==1 || type==2) { // CREATE SCREENSHOT - HIDE SHADOW //canvas.item(0).setShadow({ color: 'rgba(0,0,0,0.5) 0 0 0'}); canvas.item(0).set('shadow', new fabric.Shadow('rgba(0,0,0,0.5) 0 0 0')); var dataRef=''; var objtyp = canvas.item(0).get('type'); /** REMOVE SCALING FROM VIEWPORT **/ var baseTransform = canvas.viewportTransform; canvas.viewportTransform = fabric.iMatrix.slice(0); switch(objtyp) { case 'rect': case 'ellipse': //dataRef = canvas.toDataURL({format: 'png', left: canvas.item(0).get('left'), top: canvas.item(0).get('top'), width: canvas.item(0).get('width'), height: canvas.item(0).get('height')}); dataRef = canvas.toDataURL({format: 'png', left: canvas.item(0).left, top: canvas.item(0).top, width: canvas.item(0).width, height: canvas.item(0).height}); break; case 'circle': case 'polygon': case 'triangle': case 'path': case 'path-group': case 'group' : //dataRef = canvas.toDataURL({format: 'png', left: canvas.item(0).get('left'), top: canvas.item(0).get('top'), width: canvas.item(0).get('width') * canvas.item(0).get('scaleX'), height: canvas.item(0).get('height') * canvas.item(0).get('scaleY')}); dataRef = canvas.toDataURL({format: 'png', left: canvas.item(0).left, top: canvas.item(0).top, width: canvas.item(0).width * canvas.item(0).scaleX, height: canvas.item(0).height * canvas.item(0).scaleY}); break; } // SHOW SHADOW //canvas.item(0).setShadow({ color: 'rgba(0,0,0,0.5) 0 0 15px' }); canvas.item(0).set('shadow', new fabric.Shadow('rgba(0,0,0,0.5) 0 0 15px')); var json = JSON.stringify(canvas); //alert(json); //json = json.replace(/'/g, "\\'"); //json=replace //json = json.replace(/'/g, '\'') //alert(json); // AJAX UPDATE REQUEST switch(type) { case 2: //onunloadEvent var oufd = new FormData(); $(formData).each(function(c, item) { if(item.name!='JSCONFIG') { oufd.append('OUFD_' + item.name, item.value); } }); oufd.append('com', 'cs'); oufd.append('json', json); oufd.append('ref', ''); //dataRef oufd.append('gf', parseFloat(gFull).toFixed(3)); oufd.append('su', parseFloat(sFull).toFixed(3)); oufd.append('width', canvas.item(0).get('height')); oufd.append('height', canvas.item(0).get('height')); oufd.append('gca', gColorRoam); oufd.append('gcalist', gColorList); oufd.append('bildmontage', bildmontage); oufd.append('staerke', staerke); oufd.append('fixholedata', fixHoleData); oufd.append('csdatamode', 1); // seems only 64KB possible navigator.sendBeacon("https://schilderstyle.de/konfigurator/scripts/mmk-io.php", oufd); //$.ajax({ url: "https://schilderstyle.de/konfigurator/scripts/mmk-io.php", // type: 'POST', // cache: false, // timeout: 30000, // async: true, // data: { data: formData, com: 'cs', json: json, ref: dataRef, gf: parseFloat(gFull).toFixed(3), su: parseFloat(sFull).toFixed(3), width: canvas.item(0).get('height'), height: canvas.item(0).get('height'), gca: gColorRoam, gcalist: gColorList, bildmontage: bildmontage, staerke: staerke, fixholedata: fixHoleData }, // error: function(){ // return true; // }, // success: function(cs) { $('#wkPrice').html(cs); return true; } //}); break; default: $.ajax({ url: "https://schilderstyle.de/konfigurator/scripts/mmk-io.php", type: 'POST', cache: false, timeout: 30000, async: false, data: { data: formData, com: 'cs', json: json, ref: dataRef, gf: parseFloat(gFull).toFixed(3), su: parseFloat(sFull).toFixed(3), width: canvas.item(0).get('height'), height: canvas.item(0).get('height'), gca: gColorRoam, gcalist: gColorList, bildmontage: bildmontage, staerke: staerke, fixholedata: fixHoleData }, error: function(){ return true; }, success: function(cs) { $('#wkPrice').html(cs); return true; } }); } /** READ SCALING FROM VP **/ canvas.viewportTransform = baseTransform; } else { $('#wkPrice').html('OFF'); } // CALUCLATE PRICE (JS) jsPrice = calculateSignJS(parseFloat(gFull).toFixed(3),parseFloat(sFull).toFixed(3),gColorRoam,bildmontage); // CALCULATE STUECK NETTO (JS) jsPriceLC = jsPrice.replace(/\,/,'.'); var TAXSET = parseFloat(19.00); var TAXCALCMETHOD = '1'; var TAX = parseFloat(100 + TAXSET); //alert(TAX +', ' + TAXSET +', ' +TAXCALCMETHOD); //var jsPriceStueck = parseFloat((jsPriceLC/119 * 100) / $('#MENGE').val()).toFixed(2); if(TAXCALCMETHOD==1) { //var jsPriceStueck = parseFloat((jsPriceLC/119 * 100) / $('#MENGE').val()).toFixed(2); var jsPriceStueck = parseFloat((jsPriceLC/TAX * 100) / $('#MENGE').val()).toFixed(2); } else { } jsPriceStueck = jsPriceStueck.replace(/\./,','); // PRICE OUT /** $('#wkPriceJS').html(jsPrice + ' €
inkl. MwSt.'); $('.wkRespPrice').html('Preis: ' + jsPrice + ' € inkl. MwSt.'); $('#wkPriceNetto').html(jsPriceStueck +' € / Stück netto'); **/ $('#wkPriceJS').html(jsPriceStueck +' €
netto / Stück'); $('.wkRespPrice').html('Preis: ' + jsPrice + ' € inkl. MwSt.'); $('#wkPriceNetto').html(jsPrice + ' € inkl. MwSt.'); // SELECT ACTIVE OBJECT if(obj) { canvas.setActiveObject(obj); } // REFRESH OBJ LIST / EBENEN var objLayerContent=''; $('#objLayers').html(); for(x=1; x1) { selectable=''; selectableEnd=''; } objLayerContent= objLayerContent + selectable +'
Ebene ' + x + ' / '+ objType +'
Typ: '+ layerType +'| Fill: '+ layerFill +'
' + selectableEnd; //if(canvas.item(x).mmkLayerType=='layerCutForm') { LOG && console.log('cutform ('+x+') - no fill'); } //else if(canvas.item(x).mmkLayerType=='layerFixation') { LOG && console.log('fixation ('+x+') - no fill'); } //else if(canvas.item(x).mmkLayerType=='layerOverlay') { LOG && console.log('overlay ('+x+') - no fill'); } //else //{ // MIT FARBE AUSLEGBAR/FUELLBAR // if($('#ENGRAVEFILLABLE').val()==1) // { // if(canvas.item(x).mmkLayerFill==1) { } // else { canvas.item(x).setFill(color); } // } // else { canvas.item(x).setFill(color); } //} } $('#objLayers').html(objLayerContent); var tdiff = timer(start); LOG && console.log('Calculated Price in: ' +tdiff); // ALWAYS MAKE SURE UNSELECTABLE if(canvas.item(0)!==undefined) { canvas.item(0).selectable=false; } if(canvas.item(1)!==undefined) { canvas.item(1).selectable=false; } handleInputs('enable'); } /** ---------------------------------------------------------------------------*/ /** CALCULATE SIGN (JS ONLY) */ /** ---------------------------------------------------------------------------*/ function calculateSignJS(gf,su,gca,bm) { handleInputs('disable'); // GET JSON var SHIELD = JSON.parse(SCONFIG); // GET MATERIAL + PRODUCT var matid = $('#MATERIALID').val(); var prodid = $('#PRODUCTID').val(); var colorid = $('#COLORID').val(); var formid = $('#FORMID').val(); var engraveid = $('#ENGRAVEMETHOD').val(); var MAT = SHIELD[matid]; var PROD = new Object(); var COLOR = new Object(); var SIGN_FORM = new Object(); var ENGRAVE = new Object(); $.each(MAT['PRODUCTS'],function(index, value){ if(value['PID']==prodid) { PROD = MAT['PRODUCTS'][index]; } }); $.each(PROD['COLORS'],function(index, value) { if(value['CID']==colorid) { COLOR = PROD['COLORS'][index]; } }); $.each(PROD['SIGN_FORMS'],function(index, value) { if(value['SFID']==formid) { SIGN_FORM = PROD['SIGN_FORMS'][index]; } }); $.each(PROD['ENGRAVE_METHODS'],function(index, value) { if(value['EMID']==engraveid) { ENGRAVE = PROD['ENGRAVE_METHODS'][index]; } }); /** ----------------------------------------------------------------------*/ var jsPrice='0.00'; // SIGN DIMS if($("input[name=DIMMODE]:checked").val()==0) { var dim = $('#DIMSTD').val().split("x"); var width=dim[0]; var height=dim[1]; } else { var width=$('#WIDTH').val(); var height=$('#HEIGHT').val(); } var width = width/10; var height = height/10; var mflaeche = width * height; var mumfang = width * 2 + height * 2; // MATERIAL FLAECHE var mprice = parseFloat(mflaeche) * parseFloat(PROD['PMK_CM2']); var mpriceDis = mprice.toFixed(2); // MATERIALZ var materialzuschlag = mprice * (COLOR['CPA']/100); // ZUSCHNITT var mzuschnitt = mumfang * PROD['PZK_CM']; var mzuschnittDis = mzuschnitt.toFixed(2); jsPrice = parseFloat(mprice) + parseFloat(mzuschnitt) + parseFloat(materialzuschlag); // RAB var groundPrice = jsPrice; //jsPrice = jsPrice/0.8; var discountAdd = (jsPrice - groundPrice).toFixed(2); // MEN RAB var tp = $('#TIERCONFIG').val().split("|"); var tierPrice50 = tp[0]/100; var tierPrice100 = tp[1]/100; var tierPrice500 = tp[2]/100; var tierPrice1000 = tp[3]/100; var oldMPrice = jsPrice; var rabattaufschlag = jsPrice - oldMPrice; var rabattaufschlagDis = rabattaufschlag.toFixed(2); var rabatt=0; if($('#MENGE').val() < 5) { } else if ($('#MENGE').val() < 10) { jsPrice = jsPrice * (1 - tierPrice50); rabatt=tp[0]; } else if ($('#MENGE').val() < 50) { jsPrice = jsPrice * (1 - tierPrice100); rabatt=tp[1]; } else if ($('#MENGE').val() < 100) { jsPrice = jsPrice * (1 - tierPrice500); rabatt=tp[2]; } else { jsPrice = jsPrice * (1 - tierPrice1000); rabatt=tp[3]; } var rabattDiff = (rabattaufschlagDis - (jsPrice - oldMPrice)).toFixed(2); // MINDES var priceForm = 0; var priceSondermasz = 0; // FORM MP priceForm = SIGN_FORM['MP']; // SONDER if($("input[name=DIMMODE]:checked").val()==1) { priceSondermasz = PROD['PMP_SM']; } // RAB var discountDis = $('#DISCCONFIG').val(); var discount = $('#DISCCONFIG').val()/100; var aktionsrabatt = (jsPrice * discount).toFixed(2); // FORM var formprice = SIGN_FORM['SFPA']; jsPrice = parseFloat(jsPrice) + parseFloat(formprice); var materialprice = parseFloat(jsPrice).toFixed(2); // GRAVUR var gravurflaeche = gf; //$SOURCE['GRAVURFLAECHE']; var gravurpreis = gravurflaeche * ENGRAVE['EMGK_CM2']; //$EM['EMGRAVURKOSTEN_CM2']; var gravurFlaechenPreis = gravurpreis.toFixed(2); var gravurAufschlag = (gravurpreis * (ENGRAVE['PEMPAPROZ']/100)); var gravurAufschlagDis = gravurAufschlag.toFixed(2); gravurpreis = gravurpreis + gravurAufschlag; // MIN SCHILD var minPricePerSign = 0; var chkm = $('#MENGE').val(); var chkmps = new Array(); var chkx = 0; $.each(ENGRAVE['EM_MINIMUM_QUANTITIES'],function(index, value) { if(value['EMID']==$('#ENGRAVEMETHOD option:selected').val()) { chkmps[chkx]=value['MQPPS']; chkx++; } }); if(chkm<5) { minPricePerSign = chkmps[0]; } else if(chkm<10) { minPricePerSign = chkmps[1]; } else if(chkm<25) { minPricePerSign = chkmps[2]; } else if(chkm<50) { minPricePerSign = chkmps[3]; } else if(chkm<75) { minPricePerSign = chkmps[4]; } else if(chkm<100) { minPricePerSign = chkmps[5]; } else if(chkm<250) { minPricePerSign = chkmps[6]; } else if(chkm<500) { minPricePerSign = chkmps[7]; } else if(chkm<1000) { minPricePerSign = chkmps[8]; } else { minPricePerSign = chkmps[9]; } // GRAVURFLACHE var gravurMindestPreisAktiv='Ja'; var gravurAktiv=''; if(gravurflaeche!=0) { if(gravurpreis 0) { var frow= gca.split("###"); xs=1 for(x=0; x ENGRAVE['EMFF_MP_PF']) { fbauslage = fcrow; } else { fbauslage = ENGRAVE['EMFF_MP_PF']; farbeMinAktiv = 'Nein'; } farbtmp= '+ Farbe ' + xs +': ' + fc + ' * ' + ENGRAVE['EMFF_MP_PF'] + ' = ' + fcrow + ' > ' + ENGRAVE['EMFF_MP_PF'] + ' (' +farbeMinAktiv +')' + "\n"; farbstr = farbstr + farbtmp; farbauslage= parseFloat(farbauslage) + parseFloat(fbauslage); } xs++; } } var farbauslageDis = parseFloat(farbauslage).toFixed(2); // SERIENTEXT var serientextPreis ='0.00'; var serienTextRows='0.00'; var zeilenCount=0; var serienTextRowsMore='Nein'; var words = new Array(); var txtdata=$('#TXTDATA').val(); var xs=0; if(txtdata.length > 0) { rows = txtdata.split("|"); for (x=0; x0) { if(first==0) { serienTextRows= parseFloat(serienTextRows) + parseFloat(ENGRAVE['EM_P_ZEILE']); } else { serienTextRows= parseFloat(serienTextRows) + parseFloat(ENGRAVE['EM_P_NEXTZEILE']); } zeilenCount++; first=1; } } xs=0; words= new Array(); } } serientextPreis = serienTextRows > ENGRAVE['EM_P_MAXZEILE'] ? ENGRAVE['EM_P_MAXZEILE'] : serienTextRows; serienTextRowsMore = serienTextRows > ENGRAVE['EM_P_MAXZEILE'] ? 'Ja' : 'Nein'; serientextPreis= parseFloat((serientextPreis/$('#MENGE').val())).toFixed(2); } // BEFESTIGUNG var fxprice=0; var SIGN_FORMS = new Array(); var FIXATION= new Array(); $.each(PROD['SIGN_FORMS'],function(index, value) { if(value['SFID']==$('#FORMID').val()) { SIGN_FORMS = PROD['SIGN_FORMS'][index]; } }); //if(SIGN_FORMS['SFFIXATIONS']!==null) if(SIGN_FORMS['SFFIXATIONS'].length > 0) { $.each(SIGN_FORMS['SFFIXATIONS'],function(index, value) { if(value['FXID']==$('#FIXATIONID').val()) { FIXATION = SIGN_FORMS['SFFIXATIONS'][index]; } }); if(FIXATION['FXMODE']==0) { fxprice=parseFloat(FIXATION['FXP_ST']); } else if(FIXATION['FXMODE']==1) { fxprice = parseFloat(FIXATION['FXP_CM2'] * (mflaeche/10)); if(fxprice<=FIXATION['FXMP']) { fxprice= parseFloat(FIXATION['FXMP']); } } } // ZUBEHOER / KOMPONENTEN var componentprice=0; var componentList = getComponents(); for(var key in componentList) { $.each(PROD['COMPONENTS'],function(index, value) { //console.log('cp: ' + key + ',' + index + ',' + value['CPID']); if(value['CPID'] == key) { componentprice = componentprice + (value['CPPREIS_STUECK'] * componentList[key]); } }); } // ADD PROGRAMMKOSTEN + BILDMONTAGE TO ALL (IF FRAESGRAVUR) var programmkosten = ENGRAVE['EMPK']; var bildmontage = bm==1 ? ENGRAVE['EMBILDMONTAGE'] : '0.00'; //alert(jsPrice); jsPrice = parseFloat(jsPrice) + parseFloat(gravurpreis) + parseFloat(ausschnittpreis) + parseFloat(farbauslage) + parseFloat(serientextPreis) + parseFloat(ENGRAVE['EMHANDLING']) + parseFloat(fxprice) + componentprice; jsPrice = parseFloat(jsPrice).toFixed(2); var pricePerSign = jsPrice; var priceAllSigns= (jsPrice * $('#MENGE').val()).toFixed(2); //alert(priceAllSigns + ', ' + $('#MENGE').val()); var priceFormOrSondermasz = parseFloat(priceForm) > parseFloat(priceSondermasz) ? priceForm : priceSondermasz; var priceFormDis = parseFloat(priceForm) > parseFloat(priceSondermasz) ? 'Ja' : 'Nein'; var priceSondermaszDis = parseFloat(priceForm) > parseFloat(priceSondermasz) ? 'Nein' : 'Ja'; if(priceFormOrSondermasz==0 || 0.00) { priceFormDis='Nein'; priceSondermaszDis='Nein'; } jsPrice = jsPrice * parseInt($('#MENGE').val()) + parseFloat(priceFormOrSondermasz) + parseFloat(programmkosten) + parseFloat(bildmontage); jsPrice = parseFloat(jsPrice * 1.19).toFixed(2); jsPrice = jsPrice.replace(".",","); /** PRLOG && console.log('PriceCALC: ' +width, height); PRLOG && console.log('-----------------------------------------------------------------------------') PRLOG && console.log('+ A: ' + mflaeche +' cm2 * '+ PROD['PMK_CM2'] +' = ' + mpriceDis + ' EUR'); PRLOG && console.log('+ U: ' + mumfang + ' cm * '+ PROD['PZK_CM'] + ' = ' + mzuschnittDis + ' EUR'); PRLOG && console.log('+ Materialzuschlag: ' + materialzuschlag + ' EUR (' + COLOR['CPA'] +' %)'); PRLOG && console.log('+ Rabatt auf Mat: ' + discountAdd + ' EUR (20%)'); PRLOG && console.log('+ Mengenstaffelaufschlag: ' + rabattaufschlagDis +' EUR'); PRLOG && console.log('- Gewaehrter Mengenrabatt: ' + rabattDiff + ' EUR (' + rabatt +' %)'); PRLOG && console.log('+ Form: ' + formprice+' EUR '); PRLOG && console.log('= Materialpeis: ' + materialprice + ' EUR '); PRLOG && console.log('-----------------------------------------------------------------------------'); PRLOG && console.log('+ Gravur: ' + gravurflaeche +' cm2 * ' + ENGRAVE['EMGK_CM2'] + ' = ' +gravurFlaechenPreis +' EUR '); PRLOG && console.log('+ Gravuraufschlag: ' + ENGRAVE['PEMPAPROZ'] + ' % = ' + gravurAufschlagDis + ' EUR '); PRLOG && console.log('> MinGravurPreis/Schild?: ' + minPricePerSign + ' EUR ('+gravurMindestPreisAktiv+')'); PRLOG && console.log('= Gravurpreis: ' + gravurpreisDis + ' EUR ' + gravurAktiv); PRLOG && console.log('-----------------------------------------------------------------------------'); PRLOG && console.log('+ Ausschnitte: ' + ausschnittumfang + ' cm * ' + PROD['PZK_CM'] + ' = ' +ausschnittpreisDis + ' EUR'); PRLOG && console.log('-----------------------------------------------------------------------------') PRLOG && console.log(farbstr); PRLOG && console.log('= Farbe auslegen: ' + farbauslageDis + ' EUR'); PRLOG && console.log('-----------------------------------------------------------------------------'); PRLOG && console.log('+ Befestigung: ' + fxprice + ' EUR '); PRLOG && console.log('+ Zubehoer: ' + componentprice + ' EUR '); PRLOG && console.log('+ Handling: ' + ENGRAVE['EMHANDLING'] + ' EUR'); PRLOG && console.log('= Preis pro Schild: ' + pricePerSign + ' EUR '); PRLOG && console.log('-----------------------------------------------------------------------------'); PRLOG && console.log('+ Serientext: ' + serienTextRows +' EUR ('+ zeilenCount +' Zeilen)'); PRLOG && console.log('> Maximalpreis?: ' + ENGRAVE['EM_P_MAXZEILE'] + ' EUR (' +serienTextRowsMore +')'); PRLOG && console.log('= Serientext (pro Schild): ' + serientextPreis +' EUR '); PRLOG && console.log('-----------------------------------------------------------------------------'); PRLOG && console.log('+ Preis alle Schilder: ' + priceAllSigns + ' EUR'); PRLOG && console.log('+ MinBest.Wert Schildform?: ' + priceForm + ' EUR (' +priceFormDis+')'); PRLOG && console.log('+ MinBest.Wert Sondermasse?: ' + priceSondermasz + ' EUR (' +priceSondermaszDis+ ')'); PRLOG && console.log('+ Programmkosten: ' + programmkosten + ' EUR (pro Auftrag)'); PRLOG && console.log('+ Bildmontage: ' + bildmontage + ' EUR (pro Auftrag)'); PRLOG && console.log('= Gesamtpreis: ' + jsPrice + ' EUR (Netto)'); PRLOG && console.log('-----------------------------------------------------------------------------'); **/ handleInputs('enable'); return jsPrice; } /** ---------------------------------------------------------------------------*/ /** UPDATE OBJECTS FROM CONTROLS */ /** Recalcs Objects size + pos from form elements like ... */ /** ---------------------------------------------------------------------------*/ async function updateObjFromControls(mode) { var obj = canvas.getActiveObject(); var type = 'none'; var proportional = true; var minHeight = parseFloat($('#ENGRAVEMINFONTSIZE').val()); if(obj) { type = obj.get('type'); // var proportional INACTIVE FOR NOW, as it would change classic width/height scaling behaviour if(obj.mmkLayerType == 'layerCutForm' || type=='image' || type=='path') { proportional = false; } LOG && console.log('Type: ' +type+ ', Proportional: ' +proportional); } else { return; } // AUTO CORRECT OBJECT / FONT SIZE (HEIGHT) if(parseFloat($('#objHeight').val()) < minHeight || parseFloat($('#textSize').val()) < minHeight) { $('#objHeight').val(parseFloat($('#ENGRAVEMINFONTSIZE').val())); $('#textSize').val(parseFloat($('#ENGRAVEMINFONTSIZE').val())); var height = parseFloat($('#objHeight').val()) * SIGN.scaleFac; var ratio = height / obj.height; obj.set({'scaleX': ratio, 'scaleY': ratio}); } // SCALE OBJECT SIZE if(mode=='scaleX') { var width = parseFloat($('#objWidth').val()) * SIGN.scaleFac; var ratio = width / obj.width; if(obj.mmkLayerType=='layerCutForm') { // unproportional obj.set('scaleX', ratio); $('#objWidth').val($('#objWidth').val()); } else { // proportional obj.set({'scaleX': ratio, 'scaleY': ratio}); $('#objHeight').val(((obj.height * obj.scaleY) / SIGN.scaleFac).toFixed(1)); $('#objWidth').val($('#objWidth').val()); } //if(type=='i-text') { $('#textSize').val($('#objHeight').val()); } } else if(mode=='scaleY') { var height = parseFloat($('#objHeight').val()) * SIGN.scaleFac; var ratio = height / obj.height; if(obj.mmkLayerType=='layerCutForm') { // unproportional obj.set('scaleY', ratio); $('#objHeight').val($('#objHeight').val()); } else { // proportional obj.set({'scaleX': ratio, 'scaleY': ratio}); $('#objWidth').val((obj.width * obj.scaleX / SIGN.scaleFac).toFixed(1)); $('#objHeight').val($('#objHeight').val()); } //if(type=='i-text') { $('#textSize').val($('#objHeight').val()); } } else if(mode=='scaleText') { var height = parseFloat($('#textSize').val()) * SIGN.scaleFac; var ratio = height / obj.height; obj.set({'scaleX': ratio, 'scaleY': ratio}); $('#objWidth').val((obj.width * obj.scaleX / SIGN.scaleFac).toFixed(1)); $('#objHeight').val($('#textSize').val()); } else if(mode=='posX') { var left = parseFloat(($('#objXPos').val() * SIGN.scaleFac) + canvas.item(0).get('left')); obj.set('left', left); $('#objYPos').val(parseFloat((obj.get('top') - canvas.item(0).get('top')) / SIGN.scaleFac).toFixed(1)); } else if(mode=='posY') { var top = parseFloat(($('#objYPos').val() * SIGN.scaleFac) + canvas.item(0).get('top')); obj.set('top', top); $('#objXPos').val(parseFloat((obj.get('left') - canvas.item(0).get('left')) / SIGN.scaleFac).toFixed(1)); } else if (mode=='angle') { if($("#objAngle").val().length > 0 && $('#objAngle').val()>= 0 && $('#objAngle').val() <=359) {} else { $('#objAngle').val('0'); } obj.set({ angle: parseFloat($('#objAngle').val()) }); } if(obj.type=='i-text') { $('#textSize').val($('#objHeight').val()); await vectorizeFont(obj,'obj_modified',obj.type); console.log('nicht synchron'); } // RESTORE CUTFORM DISPLAYrestore cutform borders if(obj.mmkLayerType=='layerCutForm') { restoreCutFormBorder(obj); } obj.setCoords(); canvas.renderAll(); setBlackWhiteControlPos(); refreshMiniView(); // ??? LOG && console.log('UpdateObjFromControls: Mode: ' + mode+', Type: ' +type ); } /** ---------------------------------------------------------------------------*/ /** UPDATE OBJECT CONTROLS */ /** Recalcs Objects size + pos from Canvas/Object */ /** ---------------------------------------------------------------------------*/ async function updateObjControls(source) { // if(obj.mmkObjError) // Ein oder Mehrere Objekte // { // $('#errorbar').hide(); // } // FIX DISABLE ALL CLICK EVENTS handleInputs('disable'); hideBlackWhiteControl(); var obj = canvas.getActiveObject(); var type =''; var strokeWidth=0; if(obj) { type = obj.get('type'); } if(source=='selection:cleared') { hideObjControls(); } $('#textSelector').hide(); $('#objEditFontSelector').hide(); LOG && console.log('UpdateObjControls: Type: ' +type+ ', Event: '+source); switch(type) { case 'i-text': $('#textSelector').is(':hidden') ? $('#textSelector').show(): ''; $('#objEditFontSelector').is(':hidden') ? $('#objEditFontSelector').show() : ''; if(obj.mmkLayerType=='layerSerienText') { $('#textBox').val('Es ist ein Serientextfeld ausgewählt. Um den Text zu bearbeiten klicken Sie bitte oben auf "Serientext / Importieren'); $('#textBox').prop('disabled', true); $('#textSymbols').hide(); } else { $('#textBox').val(obj.text); $('#textBox').prop('disabled', false); $('#textSymbols').show(); } if(obj.fontFamily.match(/SST_Montserrat/)) { $('#textFontSelector').val('Montserrat'); // RESTORE TO ORIGINAL FONT NAME $('.textFontSelector').val('Montserrat'); } else { if (!$('#textFontSelector option[value="' +obj.fontFamily+ '"]').prop("selected", true).length) { //$('#textFontSelector').val($("#textFontSelector option:first").val()); chooseText($("#textFontSelector option:first").val()); } else { $('#textFontSelector').val(obj.fontFamily); $('.textFontSelector').val(obj.fontFamily); } } $('#textFontList').hide(); // Maybe still open $('#textFontListClose').hide(); // RENDER SVG IF MODIFIED OR OBJ_MODIFIED OR ON CREATION //if(obj.fontFamily.match(/SST_Montserrat/)) //{ await vectorizeFont(obj,source,type); // ONLY MONTSERRAT FOR NOW //console.log('nicht synchron'); //} // TEXT SIZE //var textSize = parseFloat(obj.get('height') * obj.get('scaleY')/SIGN.scaleFac).toFixed(1); var textSize = parseFloat(obj.height * obj.scaleY / SIGN.scaleFac).toFixed(1); if(textSize < parseFloat($('#ENGRAVEMINFONTSIZE').val())) { textSize=$('#ENGRAVEMINFONTSIZE').val(); /** $('#errorbar').html('Ups, Die Mindestschrifth\u00F6he f\u00FCr diese Gravurmethode liegt bei ' +$('#ENGRAVEMINFONTSIZE').val()+'mm!'); $('#errorbar').show(); **/ } $('#textSize').val(textSize); // GET TEXT PROPERTIES $('.textBold').each(function() { $(this).removeClass('gradSelect').addClass('grad'); }); if(obj.fontWeight=='bold') { $('.textBold').addClass('gradSelect'); } $('.textItalic').each(function() { $(this).removeClass('gradSelect').addClass('grad'); }); if(obj.fontStyle =='italic') { $('.textItalic').addClass('gradSelect'); } $('.textUnderline').each(function() { $(this).removeClass('gradSelect').addClass('grad'); }); if(obj.underline==true) { $('.textUnderline').addClass('gradSelect'); } //console.log(obj); // GET TEXT ALIGNMENT var align= obj.get('textAlign'); switch(align) { case 'left' : $(".ttformat").each(function() { $(this).removeClass('gradSelect').addClass('grad'); }); $('.textLeft').addClass('gradSelect'); break; case 'center' : $(".ttformat").each(function() { $(this).removeClass('gradSelect').addClass('grad'); }); $('.textCenter').addClass('gradSelect'); break; case 'right' : $(".ttformat").each(function() { $(this).removeClass('gradSelect').addClass('grad'); }); $('.textRight').addClass('gradSelect'); break; } fabric.util.clearFabricFontCache(); break; case 'image': if(obj.filters[0]) { showBlackWhiteControl(obj, obj.filters[0]['distance']); //setBlackWhiteControlPos(); } break; case 'path-group': break; // doesn't exist anymore case 'group': if(obj.mmkLayerType=='layerVectorResult') { var sibling = getVectorResultSibling(obj,'layerVectorEditor'); if(sibling!=0) { canvas.item(sibling).set({'left': obj.left, 'top': obj.top, 'scaleX': obj.scaleX, 'scaleY': obj.scaleY}); } } break; default: } if(obj) { checkObjectWidthHeight($('#objWidth').val(),$('#objHeight').val()); // DISPLAY POSITION $('#objXPos').val(parseFloat((obj.get('left') / SIGN.scaleFac) - (canvas.item(0).get('left') / SIGN.scaleFac)).toFixed(1)); $('#objYPos').val(parseFloat((obj.get('top') / SIGN.scaleFac) - (canvas.item(0).get('top') / SIGN.scaleFac)).toFixed(1)); $('#objWidth').val(parseFloat(obj.get('width') * obj.get('scaleX') / SIGN.scaleFac).toFixed(1)); $('#objHeight').val(parseFloat(obj.get('height') * obj.get('scaleY') / SIGN.scaleFac).toFixed(1)); $('#objAngle').val(parseInt(obj.get('angle'))); //console.log(obj.get('left') +', ' + obj.get('top')); // SHOW OBJECTEDIT PANEL if($(window).width()>1024) { $('#objectEdit').show(); } else { $('#respObjectEditButton').show(); } // IF OBJECT TYPE GROUP AND layerCOMPONENT NO SCALE if(obj.mmkLayerType=='layerComponent') { $('#objWidth').prop('readonly', true); $('#objWidth').addClass('inputInactive'); $('#objHeight').prop('readonly', true); $('#objHeight').addClass('inputInactive'); } else { $('#objWidth').prop('readonly', false); $('#objWidth').removeClass('inputInactive'); $('#objHeight').prop('readonly', false); $('#objHeight').removeClass('inputInactive'); } // RESTORE CUTFORM DISPLAYrestore cutform borders if(obj.mmkLayerType=='layerCutForm') { restoreCutFormBorder(obj); } } // RENDER //canvas.renderAll(); // REFRESH MINi VIEW FOR BETTER PERFORMANCE delay(function() { refreshMiniView(); }, SIGN.miniViewRefreshDelay); calculateSign('updateObjControls',0); handleInputs('enable'); } // FOR SHOWING/HIDING CONTORLS function hideObjControls() { $('#textSelector').hide(); // SHOW OBJECTEDIT PANEL if($('#objXPos').is(':focus')) { } else { $('#objectEdit').hide(); } $('#respObjectEditButton').hide(); $('#addSymbolPanel').hide(); $('#addTextPanel').show(); $('#textSymbols').removeClass('gradSelect').addClass('grad'); var obj = canvas.getActiveObject(); if(obj && obj.mmkLayerType=='layerVectorEditor') { var sibling = getVectorResultSibling(obj,'layerVectorResult'); if(sibling!=0) { obj.set({'opacity': SIGN.fontVectorizeOpacity, 'evented': false, 'selectable': false}); canvas.item(sibling).set({'opacity': 1, 'evented': true, 'selectable': true}); canvas.setActiveObject(canvas.item(sibling)); } } } function formatObjControls(obj,mode) { if(mode==1) { var type = obj.get('type'); if(type=='i-text' || obj.mmkLayerType=='layerVectorResult') { obj['setControlVisible']('ml',0); obj['setControlVisible']('mb',0); obj['setControlVisible']('mr',0); obj['setControlVisible']('mt',0); } else { } // show all /** ROTATE LOCK ? **/ SIGN.lockRotate == 1 ? obj['setControlVisible']('mtr',0) : obj['setControlVisible']('mtr',1); } obj['padding']= SIGN.selectorPadding; //4; obj['cornerSize']=SIGN.selectorCornerSize; //8 obj['borderColor']=SIGN.selectorBorderColor; obj['cornerColor']=SIGN.selectorCornerColor; obj['cornerStyle']=SIGN.selectorCornerStyle; obj['transparentCorners'] = SIGN.selectorCornerTransparent; if(obj['mmkLayerType']=='layerSerienText') { // RE-REGISTER obj.set({ caching: false, editable: false, 'borderColor':SIGN.selectorSerienText,'cornerColor':SIGN.selectorSerienText, mmkLayerType: 'layerSerienText' }); register_mmkLayerType(obj); } // RE-REGISTER OWN VARS // OR THEY WILL DISAPEAR if(typeof obj['mmkObjectID'] !== 'undefined') { obj.set({ mmkObjectID: obj['mmkObjectID'] }); register_mmkObjectID(obj); } if(obj['mmkLayerType']=='layerCutForm') { obj.set({ mmkLayerType: 'layerCutForm' }); register_mmkLayerType(obj); } if(obj['mmkLayerType']=='layerFixation') { obj.set({ selectable: false, mmkLayerType: 'layerFixation' }); register_mmkLayerType(obj); } if(obj['mmkLayerType']=='layerOverlay') { obj.set({ selectable: false, mmkLayerType: 'layerOverlay' }); register_mmkLayerType(obj); } if(obj['mmkLayerType']=='layerCompFixation') { obj.set({ selectable: false, mmkLayerType: 'layerCompFixation' }); register_mmkLayerType(obj); } if(obj['mmkLayerType']=='layerComponent') { obj.set({ selectable: true, mmkLayerType: 'layerComponent', 'borderColor': SIGN.selectorBorderColor,'cornerColor':SIGN.selectorCornerColor }); obj.setControlsVisibility({ mt: false, mb: false, ml: false, mr: false, mtr: false }); register_mmkLayerType(obj); } if(obj['mmkLayerType']=='layerVectorResult') { extendObject(obj, 'mmkLayerType','layerVectorResult'); } if(obj['mmkLayerType']=='layerVectorEditor') { extendObject(obj, 'mmkLayerType','layerVectorEditor'); } if(obj['mmkLayerUniqueID']) { extendObject(obj, 'mmkLayerUniqueID', obj['mmkLayerUniqueID']); } if((obj['mmkLayerFill']) && $('#ENGRAVEFILLABLE').val()==1) //=='layerFillColor' { obj.set({ mmkLayerFill: 1 }); register_mmkLayerFill(obj); } // UNREGISTER VARS if((obj['mmkLayerFill']) && $('#ENGRAVEFILLABLE').val()==0) //=='layerFillColor' { obj.set({ mmkLayerFill: '' }); register_mmkLayerFill(obj); } // TRUE COLOR if((obj['mmkTrueColor'])==1) { obj.set({ mmkTrueColor: 1 }); register_mmkTrueColor(obj); } if((obj['mmkImageResolution'])) { obj.set({ mmkImageResolution: obj['mmkImageResolution'] }); register_mmkTrueColor(obj); } LOG && console.log('FormatObjControls: Obj: '+obj+ ', Mode: ' +mode); } /** REGISTERS / EXTENDS NEW PARAMS TO OBJECT (ONLY WAY TO STORE DATA IN JSON) **/ function extendObject(obj, param, val) { obj.set({[param]: val}); obj.toObject = (function (toObject) { return function () { return fabric.util.object.extend(toObject.call(this), { [param]: val }); }; })(obj.toObject); } function register_mmkObjectID(obj) { obj.toObject = (function (toObject) { return function () { return fabric.util.object.extend(toObject.call(this), { mmkObjectID: this.mmkObjectID }); }; })(obj.toObject); } function register_mmkLayerType(obj) { obj.toObject = (function (toObject) { return function () { return fabric.util.object.extend(toObject.call(this), { mmkLayerType: this.mmkLayerType }); }; })(obj.toObject); } function register_mmkLayerFill(obj) { obj.toObject = (function (toObject) { return function () { return fabric.util.object.extend(toObject.call(this), { mmkLayerFill: this.mmkLayerFill }); }; })(obj.toObject); } function register_mmkTrueColor(obj) { obj.toObject = (function (toObject) { return function () { return fabric.util.object.extend(toObject.call(this), { mmkTrueColor: this.mmkTrueColor }); }; })(obj.toObject); } function register_mmkImageResolution(obj) { obj.toObject = (function (toObject) { return function () { return fabric.util.object.extend(toObject.call(this), { mmkImageResolution: this.mmkImageResolution }); }; })(obj.toObject); } function selectObjListLayer(id) { obj = canvas.setActiveObject(canvas.item(id)); console.log('ID ('+id+') => W/H: ' +canvas.item(id).width, canvas.item(id).height+ ', T/L: ' +canvas.item(id).top, canvas.item(id).left+ ', SX/SY: ' +canvas.item(id).scaleX, canvas.item(id).scaleY); //console.log(canvas.item(id)); calculateSign('selectObjectFromListLayer',0); } /* RESTORES TOP/LEFT X/Y FORM FIELDS ON INVALID INPUT **/ function setCalculateObjXY(obj) { if(obj) { $('#objXPos').val(parseFloat((obj.get('left') - canvas.item(0).get('left')) / SIGN.scaleFac).toFixed(1)); $('#objYPos').val(parseFloat((obj.get('top') - canvas.item(0).get('top')) / SIGN.scaleFac).toFixed(1)); } } /* RESTORES WIDTH/HEIGHT FORM FIELDS ON INVALID INPUT **/ function restoreObjWidthHeight(obj) { if(obj) { $('#objWidth').val(parseFloat(obj.get('width') * obj.get('scaleX') / SIGN.scaleFac).toFixed(1)); $('#objHeight').val(parseFloat(obj.get('height') * obj.get('scaleY') / SIGN.scaleFac).toFixed(1)); if(obj.type=='i-text') { $('#textSize').val($('#objHeight').val()); } } } function setCanvasZoom(mode) { handleInputs('disable'); var zoom = canvas.getZoom(); switch(mode) { case 'inc': if(!(zoom >= 1.9)) { zoom+=0.1; } else { zoom=2; } break; case 'dec': if(!(zoom <= 0.2)) { zoom-=0.1; } else { zoom=0.1; }break; } canvas.zoomToPoint(new fabric.Point(canvas.width/2, canvas.height / 2), zoom); showZoomDim('setCanvasZoom'); setBlackWhiteControlPos(); handleInputs('enable'); } function setCanvasZoomInit(frompoint) { handleInputs('disable'); //canvas.setZoom(1); canvas.setHeight($('#canvasBox').height()); canvas.setWidth($('#canvasBox').width()); canvas.calcOffset(); var canvasWidth = $('#canvasBox').width(); var canvasHeight = $('#canvasBox').height(); var signWidth = (canvas.item(0).width * canvas.item(0).scaleX) + 40 ; // + extra space var signHeight = (canvas.item(0).height * canvas.item(0).scaleY) + 40; // + extra space var zoomRatio = canvas.getZoom(); //console.log('setCanvasZoom from ' +frompoint + ' WIDTH/HEIGHT: ' + canvasWidth + ', ' +canvasHeight+ ', ZoomRatio: ' + zoomRatio); var zoomRatio = canvas.getZoom(); /** AUTO CORRECT */ if(canvasWidth <= signWidth && canvasHeight <= signHeight) { //console.log ('WIDTH & HEIGHT < MODE'); zoomRatio = canvasWidth/signWidth < canvasHeight/signHeight ? canvasWidth/signWidth : canvasHeight/signHeight; //console.log('CANVAS WIDTH + HEIGHT KLEINER > Z: ' + zoomRatio + ' X: ' + ratioX + ' Y: ' + ratioY); } else if(canvasWidth < signWidth) { //console.log ('MAXHEIGHT MODE'); zoomRatio = canvasWidth/signWidth; //console.log('CANVAS HEIGHT < SIGN HEIGHT > Z: ' + zoomRatio + ' X: ' + ratioX + ' Y: ' + ratioY); } else if(canvasHeight < signHeight) { //console.log ('MAXHEIGHT MODE'); zoomRatio = canvasHeight/signHeight; //console.log('CANVAS HEIGHT < SIGN HEIGHT > Z: ' + zoomRatio + ' X: ' + ratioX + ' Y: ' + ratioY); } else { zoomRatio = 1; //canvas.viewportTransform = [1, 0, 0, 1, 0, 0]; canvas.viewportTransform = fabric.iMatrix.slice(0); // RECALC INITAL SIZE (CANVAS larger than SIGN) if(signWidth > signHeight) { if(canvasWidth > 1024) { zoomRatio = (canvasWidth - 560) / signWidth; } // 560 + sicherheitsabstand Menu else { zoomRatio = (canvasWidth - 20) / signWidth; } if((signHeight * zoomRatio) > canvasHeight) { //corrrect higher sign than screen zoomRatio = (canvasHeight - 20) / signHeight; } } else { if(signHeight > canvasHeight) { zoomRatio = (canvasHeight - 20) / signHeight; } else { zoomRatio = (canvasHeight - 20) / signHeight; } } } //console.log('zoomRatio after check: ' + zoomRatio + ', CurrentWidth / Height: ' + signWidth + ', ' + signHeight); //var zoomLevel = maxWidth > maxHeight ? currentHeight/maxHeight : currentWidthh/maxWidth; if(zoomRatio <=0.1) { zoomRatio =0.1; } //console.log('RESIZE MAXW: ' +maxWidth+ '(' + $('#canvasBox').width() + ') , MAXH: ' +maxHeight+ '(' + $('#canvasBox').height() + ') , CURW: ' +currentWidth+ ', CURH: ' +currentHeight + ', ZOOMLEVEL: ' + zoomLevel+ ', ZOOMRATIO: ' + zoomRatio); //console.log('POINT: ' + canvas.width / 2 + ', ' + canvas.height / 2); //console.log('CANVAS SIZE ON RESIZE:' + $('#canvasBox').width() + ', ' + $('#canvasBox').height()); //var zoom = canvas.getZoom(); //parseFloat($('#canvasBox').height()/$('#canvasBox').width()); //canvas.zoomToPoint(new fabric.Point(canvas.width / 2, canvas.height / 2), (zoomLevel+zoomRatio)); //var center = canvas.getCenter(), // point = { // x: center.left, // y: center.top // }; //console.log(center.left, canvas.width/2, center.top, canvas.height/2, zoomRatio); //canvas.zoomToPoint(point, zoomRatio) ; //canvas.setZoom(zoomRatio); //canvas.zoomToPoint(new fabric.Point(canvas.width/2, canvas.height/2), canvas.getZoom()); //var p = {x: canvas.width/2, y: canvas.height/2}; //canvas.zoomToPoint(new fabric.Point(p['x'], p['y']), zoomRatio); //canvas.zoomToPoint(new fabric.Point(canvas.width/2, canvas.height/2), zoomRatio); /** PAN ACTION **/ var w = canvas.width; var h = canvas.height; //console.log('PanAction W/H: ' +w+ ', '+h); var targetX = (canvas.item(0).left + (canvas.item(0).width * canvas.item(0).scaleX) / 2 ) * zoomRatio; var targetY = (canvas.item(0).top + (canvas.item(0).height * canvas.item(0).scaleY) / 2 ) * zoomRatio //console.log('Targets: ' +targetX+ ','+targetY+ ' Left/Top: ' + canvas.item(0).left + ', ' + canvas.item(0).top); canvas.setZoom(zoomRatio); canvas.absolutePan(new fabric.Point(-w/2+targetX, -h/2+targetY)); //canvas.zoomToPoint(point, zoomRatio) ; //canvas.setZoom(zoomRatio); // $('#objXPos').val(parseFloat((obj.get('left') / SIGN.scaleFac) - (canvas.item(0).get('left') / SIGN.scaleFac)).toFixed(1)); // $('#objYPos').val(parseFloat((obj.get('top') / SIGN.scaleFac) - (canvas.item(0).get('top') / SIGN.scaleFac)).toFixed(1)); // $('#objWidth').val(parseFloat(obj.get('width') * obj.get('scaleX') / SIGN.scaleFac).toFixed(1)); // $('#objHeight').val(parseFloat(obj.get('height') * obj.get('scaleY') / SIGN.scaleFac).toFixed(1)); // canvas.item(0).center(); for(x=0; x CW/CH: ' + canvas.width +' ,' + canvas.height + '
'; var paninfo = 'ZX/ZY: ' +p['x']+', '+p['y'] +'
VT: ' +vt[0]+','+vt[1]+','+vt[2]+',
'+vt[3]+','+vt[4]+','+vt[5] + '
TP: ' +tp['x'].toFixed(1)+','+tp['y'].toFixed(1); $('.zoominfo').html(zoominfo); $('.paninfo').html(paninfo); //console.log(zoominfo); //console.log(paninfo); } /** MINIVIEW **/ function calcMiniView() { LOG && console.log('Calculating Rendered MiniView after loaded JSON'); //var zoomLevel = calcViewPort(miniView,canvas.item(0).width,canvas.item(0).height,100,0); var zoomLevel = calcViewPort(miniView,canvas.item(0),100,0); var zoomedx = canvas.item(0).width * canvas.item(0).scaleX * (zoomLevel/100); var zoomedy = canvas.item(0).height * canvas.item(0).scaleY * (zoomLevel/100); // console.log('miniViewType: ' +canvas.item(0).type + ', ZoomLevel:' + zoomedx +','+zoomedy+ ', ScaleX :' + canvas.item(0).scaleX + ', ' + canvas.item(0).scaleY) ; var xdiff = (SIGN.miniViewWidth - zoomedx) / 2; var ydiff = (SIGN.miniViewHeight - zoomedy) / 2; //console.log('xdiff (+16): '+xdiff+',ydiff (+11): '+ydiff+',zoomedx: '+zoomedx+',zoomedy: '+zoomedy+',canvasZoom: '+canvas.getZoom()+',miniViewZoom: '+miniView.getZoom()); miniView.viewportTransform = [(zoomLevel/100), 0, 0, (zoomLevel/100), xdiff, ydiff]; //$('#shownarea').css({'width': parseInt(zoomedx+1), 'height': parseInt(zoomedy+1), 'left': parseInt(xdiff+5), 'top': parseInt(ydiff+5) }); miniView.renderAll.bind(miniView); } function refreshMiniView() { LOG && console.log('Refreshing MiniView'); /** GLOBAL ERROR HANDLER */ var error = 0; var warn = 0; $('#errorbar').html(''); $('#warnbar').html(''); /** CHECK ERRORS */ SIGN.error['intersectObj'] = 0; SIGN.error['fontMinSize'] = 0; SIGN.warn['imageResLow'] = 0; for(xobj=2; xobj0) { $('#errorbar').append('Mehrere Objekte liegen übereinander!
'); } if(SIGN.error['fontMinSize']>0) { $('#errorbar').append('Die Mindestschrifthöhe für diese Gravurmethode liegt bei ' +$('#ENGRAVEMINFONTSIZE').val()+'mm!
'); } if(SIGN.warn['imageResLow']>0) { if(SIGN.warn['imageResLow']==1) { $('#warnbar').append('Ein Bild hat eine geringe Auflösung. Das kann zu Qualitätseinbußen führen.'); } else { $('#warnbar').append('Mehrere Bilder haben eine geringe Auflösung. Das kann zu Qualitätseinbußen führen.'); }} $.each(SIGN.error, function(key,errval) { error+= errval; }); $.each(SIGN.warn, function(key,warnval) { warn+= warnval}); if(error>=1) { $('#errorbar').show(); } else { $('#errorbar').hide(); } if(warn >=1) { $('#warnbar').show(); } else { $('#warnbar').hide(); } canvas.renderAll(); var canvasJSON = JSON.stringify(canvas); //console.log(canvasJSON); /* REMOVE CLIPPATH */ var objects_obj = JSON.parse(canvasJSON);//object var objects_array = objects_obj['objects']; var obj_with_clipPath = objects_array.filter(function(val) { /* 0nly objs having clipPath */ if (val.clipPath !== void 0) return true; }); var without_clipPath = $.each(objects_array, function(index,elem){ delete elem.clipPath; }) objects_obj['objects'] = without_clipPath; var string_objects_data_without_clipPath = JSON.stringify(objects_obj);//JSON /* LOAD JSON ASYNC -> CALLBACK calcMiniView() */ miniView.loadFromJSON(string_objects_data_without_clipPath, function() { calcMiniView(); miniView.renderAll(); }, function (o, object) { //console.log(o); //console.log(object); object.set({'left': object.left - canvas.item(0).left,'top': object.top - canvas.item(0).top }); object.setCoords(); }); // miniView.viewportTransform = [1, 0, 0, 1, 0, 0]; // miniView.viewportTransform = fabric.iMatrix.slice(0); miniView.calcOffset(); miniView.renderAll(); } function calcViewPort(sourceCanvas,destinationCanvas,maxZoom,zoomCanvas) { var zoom = 0; var zoomLevel = 100; var displayWidth = sourceCanvas.width / 100 * maxZoom; // 80% var displayHeight = sourceCanvas.height / 100 * maxZoom; var x = destinationCanvas.width * destinationCanvas.scaleX; var y = destinationCanvas.height * destinationCanvas.scaleY; // console.log(x, y); if(x>displayWidth || y > displayHeight) { zoom=1; } LOG && console.log('CalcViewPort => X: ' +x+ ' dpwidth('+displayWidth+'), Y: '+y+' dpheight('+displayHeight+'), SCWidth: '+sourceCanvas.width+', SCHeight: '+sourceCanvas.height); if(x!=0 && y!=0 && zoom==1) { if(x>=y) { // xsize calc if(x>=sourceCanvas.width) { //zoomLevel = parseInt(displayWidth/x * 100); zoomLevel = displayWidth/x * 100; if(zoomCanvas==1) { setCanvasZoom(sourceCanvas,zoomLevel); } //alert('CASE 1, ZoomLevel: ' + zoomLevel); } if((y/100*zoomLevel) >= sourceCanvas.height) // COULD BE LARGER BECAUSE OF ASPECT RATIO (Square) { //alert('y größer als 80% in X-MODE'); //zoomLevel = parseInt(displayHeight/y * 100); zoomLevel = displayHeight/y * 100; if(zoomCanvas==1) { setCanvasZoom(sourceCanvas,zoomLevel); } //alert('CASE 2, ZoomLevel: ' + zoomLevel); } } else { // ysize calc if(y>=sourceCanvas.height) { //zoomLevel = parseInt(displayHeight/y * 100); zoomLevel = displayHeight/y * 100; if(zoomCanvas==1) { setCanvasZoom(sourceCanvas,zoomLevel); } // alert('CASE 3'); } if((x/100*zoomLevel) >= (sourceCanvas.width/100 * maxZoom)) { //zoomLevel = parseInt(displayWidth/x * 100); zoomLevel = displayWidth/x * 100; if(zoomCanvas==1) { setCanvasZoom(sourceCanvas,zoomLevel); } //alert('CASE 4'); } } } return zoomLevel; } /** GUIDELINES **/ function initCenteringGuidelines(canvas) { var canvasWidth = canvas.getWidth(), canvasHeight = canvas.getHeight(), canvasWidthCenter = canvasWidth / 2, canvasHeightCenter = canvasHeight / 2, canvasWidthCenterMap = { }, canvasHeightCenterMap = { }, centerLineMargin = 4, centerLineColor = 'rgba(255,0,241,1)', centerLineWidth = 1.5, ctx = canvas.getSelectionContext(), viewportTransform; for (var i = canvasWidthCenter - centerLineMargin, len = canvasWidthCenter + centerLineMargin; i <= len; i++) { canvasWidthCenterMap[Math.round(i)] = true; } for (var i = canvasHeightCenter - centerLineMargin, len = canvasHeightCenter + centerLineMargin; i <= len; i++) { canvasHeightCenterMap[Math.round(i)] = true; } function showVerticalCenterLine() { showCenterLine(canvasWidthCenter + 0.5, 0, canvasWidthCenter + 0.5, canvasHeight); } function showHorizontalCenterLine() { showCenterLine(0, canvasHeightCenter + 0.5, canvasWidth, canvasHeightCenter + 0.5); } function showCenterLine(x1, y1, x2, y2) { var originXY = fabric.util.transformPoint(new fabric.Point(x1, y1), canvas.viewportTransform), dimmensions = fabric.util.transformPoint(new fabric.Point(x2, y2),canvas.viewportTransform); ctx.save() ctx.strokeStyle = centerLineColor ctx.lineWidth = centerLineWidth ctx.beginPath() ctx.moveTo( ( (originXY.x ) ), ( (originXY.y ) ) ) ctx.lineTo( ( (dimmensions.x ) ), ( (dimmensions.y ) ) ) ctx.stroke() ctx.restore() } // function showCenterLine(x1, y1, x2, y2) { // ctx.save(); // ctx.strokeStyle = centerLineColor; // ctx.lineWidth = centerLineWidth; // ctx.beginPath(); // ctx.moveTo(x1 * viewportTransform[0], y1 * viewportTransform[3]); // ctx.lineTo(x2 * viewportTransform[0], y2 * viewportTransform[3]); // ctx.stroke(); // ctx.restore(); // } var afterRenderActions = [], isInVerticalCenter, isInHorizontalCenter; canvas.on('mouse:down', function () { viewportTransform = canvas.viewportTransform; }); canvas.on('object:moving', function(e) { var object = e.target, objectCenter = object.getCenterPoint(), transform = canvas._currentTransform; if (!transform) return; isInVerticalCenter = Math.round(objectCenter.x) in canvasWidthCenterMap, isInHorizontalCenter = Math.round(objectCenter.y) in canvasHeightCenterMap; if (isInHorizontalCenter || isInVerticalCenter) { object.setPositionByOrigin(new fabric.Point((isInVerticalCenter ? canvasWidthCenter : objectCenter.x), (isInHorizontalCenter ? canvasHeightCenter : objectCenter.y)), 'center', 'center'); } }); canvas.on('before:render', function() { //canvas.clearContext(canvas.contextTop); //canvas.clearContext(ctx); const ct = canvas.contextTop; if(ct) { canvas.clearContext(ct); } }); canvas.on('after:render', function() { if (isInVerticalCenter) { showVerticalCenterLine(); } if (isInHorizontalCenter) { showHorizontalCenterLine(); } }); canvas.on('mouse:up', function() { // clear these values, to stop drawing guidelines once mouse is up isInVerticalCenter = isInHorizontalCenter = null; canvas.renderAll(); }); } function initAligningGuidelines(canvas) { var ctx = canvas.getSelectionContext(), aligningLineOffset = 5, aligningLineMargin = 4, aligningLineWidth = 1.5, aligningLineColor = 'rgba(0,147,219,1)', viewportTransform, zoom = 1; function drawVerticalLine(coords) { drawLine( coords.x + 0.5, coords.y1 > coords.y2 ? coords.y2 : coords.y1, coords.x + 0.5, coords.y2 > coords.y1 ? coords.y2 : coords.y1); } function drawHorizontalLine(coords) { drawLine( coords.x1 > coords.x2 ? coords.x2 : coords.x1, coords.y + 0.5, coords.x2 > coords.x1 ? coords.x2 : coords.x1, coords.y + 0.5); } //function drawLine(x1, y1, x2, y2) { // ctx.save(); // ctx.lineWidth = aligningLineWidth; // ctx.strokeStyle = aligningLineColor; // ctx.beginPath(); // ctx.moveTo(((x1+viewportTransform[4])*zoom), ((y1+viewportTransform[5])*zoom)); // ctx.lineTo(((x2+viewportTransform[4])*zoom), ((y2+viewportTransform[5])*zoom)); // ctx.stroke(); // ctx.restore(); //} function drawLine(x1, y1, x2, y2) { var originXY = fabric.util.transformPoint(new fabric.Point(x1, y1), canvas.viewportTransform), dimensions = fabric.util.transformPoint(new fabric.Point(x2, y2),canvas.viewportTransform); ctx.save() ctx.lineWidth = aligningLineWidth ctx.strokeStyle = aligningLineColor ctx.beginPath() ctx.moveTo( ( (originXY.x ) ), ( (originXY.y ) ) ) ctx.lineTo( ( (dimensions.x ) ), ( (dimensions.y ) ) ) ctx.stroke() ctx.restore() } function isInRange(value1, value2) { value1 = Math.round(value1); value2 = Math.round(value2); for (var i = value1 - aligningLineMargin, len = value1 + aligningLineMargin; i <= len; i++) { if (i === value2) { return true; } } return false; } var verticalLines = [], horizontalLines = []; canvas.on('mouse:down', function () { viewportTransform = canvas.viewportTransform; zoom = canvas.getZoom(); }); canvas.on('object:moving', function(e) { var activeObject = e.target, canvasObjects = canvas.getObjects(), activeObjectCenter = activeObject.getCenterPoint(), activeObjectLeft = activeObjectCenter.x, activeObjectTop = activeObjectCenter.y, activeObjectBoundingRect = activeObject.getBoundingRect(), activeObjectHeight = activeObjectBoundingRect.height / viewportTransform[3], activeObjectWidth = activeObjectBoundingRect.width / viewportTransform[0], horizontalInTheRange = false, verticalInTheRange = false, transform = canvas._currentTransform; if (!transform) return; // It should be trivial to DRY this up by encapsulating (repeating) creation of x1, x2, y1, and y2 into functions, // but we're not doing it here for perf. reasons -- as this a function that's invoked on every mouse move for (var i = canvasObjects.length; i--; ) { if (canvasObjects[i] === activeObject) continue; var objectCenter = canvasObjects[i].getCenterPoint(), objectLeft = objectCenter.x, objectTop = objectCenter.y, objectBoundingRect = canvasObjects[i].getBoundingRect(), objectHeight = objectBoundingRect.height / viewportTransform[3], objectWidth = objectBoundingRect.width / viewportTransform[0]; // snap by the horizontal center line if (isInRange(objectLeft, activeObjectLeft)) { verticalInTheRange = true; verticalLines.push({ x: objectLeft, y1: (objectTop < activeObjectTop) ? (objectTop - objectHeight / 2 - aligningLineOffset) : (objectTop + objectHeight / 2 + aligningLineOffset), y2: (activeObjectTop > objectTop) ? (activeObjectTop + activeObjectHeight / 2 + aligningLineOffset) : (activeObjectTop - activeObjectHeight / 2 - aligningLineOffset) }); activeObject.setPositionByOrigin(new fabric.Point(objectLeft, activeObjectTop), 'center', 'center'); } // snap by the left edge if (isInRange(objectLeft - objectWidth / 2, activeObjectLeft - activeObjectWidth / 2)) { verticalInTheRange = true; verticalLines.push({ x: objectLeft - objectWidth / 2, y1: (objectTop < activeObjectTop) ? (objectTop - objectHeight / 2 - aligningLineOffset) : (objectTop + objectHeight / 2 + aligningLineOffset), y2: (activeObjectTop > objectTop) ? (activeObjectTop + activeObjectHeight / 2 + aligningLineOffset) : (activeObjectTop - activeObjectHeight / 2 - aligningLineOffset) }); activeObject.setPositionByOrigin(new fabric.Point(objectLeft - objectWidth / 2 + activeObjectWidth / 2, activeObjectTop), 'center', 'center'); } // snap by the right edge if (isInRange(objectLeft + objectWidth / 2, activeObjectLeft + activeObjectWidth / 2)) { verticalInTheRange = true; verticalLines.push({ x: objectLeft + objectWidth / 2, y1: (objectTop < activeObjectTop) ? (objectTop - objectHeight / 2 - aligningLineOffset) : (objectTop + objectHeight / 2 + aligningLineOffset), y2: (activeObjectTop > objectTop) ? (activeObjectTop + activeObjectHeight / 2 + aligningLineOffset) : (activeObjectTop - activeObjectHeight / 2 - aligningLineOffset) }); activeObject.setPositionByOrigin(new fabric.Point(objectLeft + objectWidth / 2 - activeObjectWidth / 2, activeObjectTop), 'center', 'center'); } // snap by the vertical center line if (isInRange(objectTop, activeObjectTop)) { horizontalInTheRange = true; horizontalLines.push({ y: objectTop, x1: (objectLeft < activeObjectLeft) ? (objectLeft - objectWidth / 2 - aligningLineOffset) : (objectLeft + objectWidth / 2 + aligningLineOffset), x2: (activeObjectLeft > objectLeft) ? (activeObjectLeft + activeObjectWidth / 2 + aligningLineOffset) : (activeObjectLeft - activeObjectWidth / 2 - aligningLineOffset) }); activeObject.setPositionByOrigin(new fabric.Point(activeObjectLeft, objectTop), 'center', 'center'); } // snap by the top edge if (isInRange(objectTop - objectHeight / 2, activeObjectTop - activeObjectHeight / 2)) { horizontalInTheRange = true; horizontalLines.push({ y: objectTop - objectHeight / 2, x1: (objectLeft < activeObjectLeft) ? (objectLeft - objectWidth / 2 - aligningLineOffset) : (objectLeft + objectWidth / 2 + aligningLineOffset), x2: (activeObjectLeft > objectLeft) ? (activeObjectLeft + activeObjectWidth / 2 + aligningLineOffset) : (activeObjectLeft - activeObjectWidth / 2 - aligningLineOffset) }); activeObject.setPositionByOrigin(new fabric.Point(activeObjectLeft, objectTop - objectHeight / 2 + activeObjectHeight / 2), 'center', 'center'); } // snap by the bottom edge if (isInRange(objectTop + objectHeight / 2, activeObjectTop + activeObjectHeight / 2)) { horizontalInTheRange = true; horizontalLines.push({ y: objectTop + objectHeight / 2, x1: (objectLeft < activeObjectLeft) ? (objectLeft - objectWidth / 2 - aligningLineOffset) : (objectLeft + objectWidth / 2 + aligningLineOffset), x2: (activeObjectLeft > objectLeft) ? (activeObjectLeft + activeObjectWidth / 2 + aligningLineOffset) : (activeObjectLeft - activeObjectWidth / 2 - aligningLineOffset) }); activeObject.setPositionByOrigin(new fabric.Point(activeObjectLeft, objectTop + objectHeight / 2 - activeObjectHeight / 2), 'center', 'center'); } } if (!horizontalInTheRange) { horizontalLines.length = 0; } if (!verticalInTheRange) { verticalLines.length = 0; } }); canvas.on('before:render', function() { //canvas.clearContext(canvas.contextTop); const ct = canvas.contextTop; if(ct) { canvas.clearContext(ct); } }); canvas.on('after:render', function() { for (var i = verticalLines.length; i--; ) { drawVerticalLine(verticalLines[i]); } for (var i = horizontalLines.length; i--; ) { drawHorizontalLine(horizontalLines[i]); } verticalLines.length = horizontalLines.length = 0; }); canvas.on('mouse:up', function() { verticalLines.length = horizontalLines.length = 0; canvas.renderAll(); }); } // * MOVE OBJ FUNCTIONS * // function moveObj(direction) { var obj = canvas.getActiveObject(); if(obj) { switch (direction) { case 'left': obj.set('left',parseInt(obj.get('left')) - 1); break; case 'right': obj.set('left',parseInt(obj.get('left')) + 1); break; case 'up': obj.set('top',parseInt(obj.get('top')) - 1); break; case 'down': obj.set('top',parseInt(obj.get('top')) + 1); break; case 'rotate': if(obj.get('angle') < 90) { obj.set({'angle':90}); centerObjHV(); } else if(obj.get('angle') < 180) { obj.set({'angle':180}); centerObjHV(); } else if(obj.get('angle') < 270) { obj.set({'angle':270}); centerObjHV(); } else if(obj.get('angle') < 360) { obj.set({'angle':0}); centerObjHV(); } break; case 'flipx': obj.set('flipX',!obj.flipX); break; case 'flipy': obj.set('flipY',!obj.flipY); break; case 'moveObjBack': if(canvas.getObjects().indexOf(obj) > 2) { obj.sendBackwards(); } break; case 'moveObjFront': obj.bringForward(); break; case 'moveObjToFront': obj.bringToFront(); break; } obj.setCoords(); updateObjControls('func_moveObj'); canvas.renderAll(); } } function centerObjHV () { var obj = canvas.getActiveObject(); /**obj.center();**/ obj.viewportCenter(); obj.setCoords(); updateObjControls('func_centerObjHV'); canvas.renderAll(); } function centerObjH () { var obj = canvas.getActiveObject(); /**obj.centerH();**/ obj.viewportCenterH(); obj.setCoords(); updateObjControls('func_centerObjH'); canvas.renderAll(); } function centerObjV () { var obj = canvas.getActiveObject(); /**obj.centerV();**/ obj.viewportCenterV(); obj.setCoords(); updateObjControls('func_centerObjV'); canvas.renderAll(); } function removeObj () { var obj = canvas.getActiveObject(); if(obj) { if(obj.mmkLayerType=='layerSerienText') { $('#serientext').hide(); $('#TXTMODE').val(0); $('#TXTDATA').val(''); $('#MENGE').prop('readonly', false); } else if(obj.mmkLayerType=='layerComponent') { var componentList = getComponents(); componentList[obj.mmkObjectID]--; setComponents(componentList); } else if(obj.mmkLayerType == 'layerVectorResult' || obj.mmkLayerType == 'layerVectorEditor') { // search for corresponding sibling var sibling = obj.mmkLayerType=='layerVectorResult' ? 'layerVectorEditor': 'layerVectorResult'; var siblingObj = 0; for (var i=0; i < canvas.getObjects().length; i++) { if(canvas.item(i).mmkLayerType == sibling && canvas.item(i).mmkLayerUniqueID == obj.mmkLayerUniqueID) { siblingObj=i; break; }} if(siblingObj!=0) { canvas.remove(canvas.item(siblingObj)); } } canvas.remove(obj); hideObjControls(); calculateSign('removeObj()',0); canvas.renderAll(); } } function fillObj(color) { var obj = canvas.getActiveObject(); if(obj.mmkLayerType=='layerCutForm') {} else if(obj.mmkLayerType=='layerFixation') {} else { if(obj.get('type')=='image') { obj.filters.push(filterBlendColor(color)); obj.set({fill: color, mmkLayerFill: 1}); obj.applyFilters(); canvas.renderAll(); } else { // FILL UN- / GROUPED OBJECTS obj.set({ mmkLayerFill: 1 }); fillObjWithColor(obj, color); } register_mmkLayerFill(obj); /** FIND VECTOR EDITOR OR VECTOR RESULT FILL SIBLING */ if(obj.mmkLayerType=='layerVectorEditor' || obj.mmkLayerType=='layerVectorResult') { var search = obj.mmkLayerType=='layerVectorEditor' ? 'layerVectorResult' : 'layerVectorEditor'; var sibling = getVectorResultSibling(obj,search); if(sibling!=0) { console.log(sibling, canvas.item(sibling).mmkLayerType) canvas.item(sibling).set({ mmkLayerFill: 1 }); fillObjWithColor(canvas.item(sibling), color); register_mmkLayerFill(canvas.item(sibling)); } } } obj.setCoords(); updateObjControls('func_fillObj'); canvas.renderAll(); calculateSign('fillObj()',0); } /** ---------------------------------------------------------------------------*/ /** RESIZE BACK */ /** ---------------------------------------------------------------------------*/ function resizeBack(x,y) { //console.log(x,y); // DESELECT ALL OBJECTS canvas.discardActiveObject(); hideObjControls(); // TYPECAST x = parseFloat(x); //Only for full digits y = parseFloat(y); // IF SIZE > x CHANGE MASSSTAB var max = SIGN.dimMax.split('x'); var min = SIGN.dimMin.split('x'); // CHECK MAX/MIN DIM (value now checked by input events) var dimError=0; if($("#DIMMODE1").is(':checked')) { //console.log('X/Y: ' + max[0] + ',' + min[0] + ', ' +x) if(x > parseInt(max[0])) { x=max[0]; $('#WIDTH').val(max[0]+'.0'); dimError=1; $('#errorbarFix').html('Der Artikel kann maximal ' +max[0]+' x '+max[1]+ ' mm groß sein! Die Größe wurde zurück gesetzt.
'); } if(x < parseInt(min[0])) { x=min[0]; $('#WIDTH').val(min[0]+'.0'); dimError=1; $('#errorbarFix').html('Der Artikel muss mindestens ' +min[0]+' x '+min[1]+ ' mm groß sein! Die Größe wurde zurück gesetzt.
'); } if(y > parseInt(max[1])) { y=max[1]; $('#HEIGHT').val(max[1]+'.0'); dimError=1; $('#errorbarFix').html('Der Artikel kann maximal ' +max[0]+' x '+max[1]+ ' mm groß sein! Die Größe wurde zurück gesetzt.
'); } if(y < parseInt(min[1])) { y=min[1]; $('#HEIGHT').val(min[1]+'.0'); dimError=1; $('#errorbarFix').html('Der Artikel muss mindestens ' +min[0]+' x '+min[1]+ ' mm groß sein! Die Größe wurde zurück gesetzt.
'); } } // XAXIS CORRECT SIZE xAxisDim= parseFloat(x).toFixed(1); yAxisDim= parseFloat(y).toFixed(1); // EMMIT MAX RATIO //var cw=SIGN.maxWidth; //728; // CANVAS MAX WIDTH //var cy=470; // CANVAS MAX HEIGHT var xRatio = parseFloat(SIGN.maxWidth/x); var yRatio = parseFloat(SIGN.maxHeight/y); //.toPrecision(5); // GET SCALE DIM if(x > y && (xRatio*y) < SIGN.maxHeight) { SIGN.scaleFac=xRatio; x = SIGN.maxWidth; y = y * SIGN.scaleFac; } else { SIGN.scaleFac=yRatio; y = SIGN.maxHeight; x = x * SIGN.scaleFac; } //console.log('SIGNscaleFac: ' +SIGN.scaleFac); if(parseInt(SIGN.scaleFac)==0) { // //var scaleDec=SIGN.scaleFac.replace(/0\./g,''); //SIGN.scale='1:'+parseInt(scaleDec); if(SIGN.scaleFac==xRatio) { SIGN.scale='1:'+ Math.round(xAxisDim/SIGN.maxWidth); } else { SIGN.scale='1:'+ Math.round(yAxisDim/SIGN.maxHeight); } } else { SIGN.scale=parseInt(SIGN.scaleFac)+':1'; } // RESIZE OBJECT BY TYPE var obj = canvas.item(0); var oldobj = canvas.item(0); var borderobj = canvas.item(1); var type = obj.get('type'); // RECALC BORDER calculateBorder($('#BORDERID').val()); //LOG = true; LOG && console.log('ResizeBack to: '+ x+ 'x' +y+ ' ('+SIGN.scaleFac+' / ' + SIGN.scale+')'); switch(type) { case 'rect': obj.set({ width: x, height: y}); borderobj.set({ width: x-SIGN.borderDistance, height: y - SIGN.borderDistance }); if($('#FORMDATA').val()=='rounded') { obj.set({rx:parseInt(SIGN.cornerRadius * SIGN.scaleFac), ry: parseInt(SIGN.cornerRadius * SIGN.scaleFac)}); borderobj.set({rx:parseInt(SIGN.cornerRadius * SIGN.scaleFac), ry: parseInt(SIGN.cornerRadius * SIGN.scaleFac)}); } break; case 'circle' : console.log('circle not detected'); break; case 'ellipse': obj.set({ rx: parseInt(x/2), ry: parseInt(y/2) }); borderobj.set({ rx: parseInt((x-SIGN.borderDistance)/2), ry: parseInt((y-SIGN.borderDistance)/2) }); break; case 'path': case 'group': case 'path-group': obj.set({ scaleY: parseInt(y)/obj.height, scaleX: parseInt(x)/obj.width }); borderobj.set({ scaleY: parseInt(y-SIGN.borderDistance)/borderobj.height, scaleX: parseInt(x-SIGN.borderDistance)/borderobj.width }); break; } // REDRAW BORDEROBJ redrawBorder(borderobj); // CALC OBJECTS obj.setCoords(); borderobj.setCoords(); // SET DIMENSION DISPLAY (inactive) var xCorr = 20; $('#xDim').css('width', x+'px'); $('#xDim').css('left', xCorr+'px'); $('#xDimValue').html('Breite: '+xAxisDim+' mm, H\u00F6he: '+yAxisDim+' mm  (Ma\u00DFstab '+ SIGN.scale+')'); // SET SCALE SIGN.width=x; SIGN.height=y; // SET SIGN DIM IN WK $('#wkSignDim').html($('#WIDTH').val() + ' x ' + $('#HEIGHT').val() + ' mm'); // SHOW ERROR if(dimError==1) { $('#errorbarFix').show().delay(SIGN.errorDelay).fadeOut('slow'); } // CHECK IF FIXATION IS POSSIBLE delay(function() { var startdelay = timer(0); checkFixation(); restoreComponents(); redrawStayOnTopLayer(); calculateSign('resizeBack()',0); var tdiffdelay = timer(startdelay); LOG && console.log('Delayed Object Loader in resizeBack() (25 ms) loads in: ' +tdiffdelay); }, 25); canvas.calcOffset(); canvas.renderAll(); setCanvasZoomInit('ResizeBack'); } /** ---------------------------------------------------------------------------*/ /** CHANGE BACK COLOR */ /** ---------------------------------------------------------------------------*/ function changeBackColor(obj,color,bgcolor,name,id,bgimage,groupid, mustCalculateSign) { // DESELECT ALL OBJECTS canvas.discardActiveObject(); hideObjControls(); // SET BG PATTERN ON SIGN if(bgimage.length>0) { loadBackgroundPattern(bgimage); } else { canvas.item(0).set({'fill':bgcolor}); } // SET FOREGROUND FOR ALL OBJECTS EXCEPT FILL COLORS IN FILLABLE MODE for(x=2; x