diff --git a/src/octoprint/plugins/svgtogcode/static/js/drag_scale_rotate.js b/src/octoprint/plugins/svgtogcode/static/js/drag_scale_rotate.js index 8d284183..ed218976 100644 --- a/src/octoprint/plugins/svgtogcode/static/js/drag_scale_rotate.js +++ b/src/octoprint/plugins/svgtogcode/static/js/drag_scale_rotate.js @@ -64,7 +64,7 @@ Snap.plugin(function (Snap, Element, Paper, global) { return elem; }; - + }); @@ -103,7 +103,7 @@ Snap.plugin(function (Snap, Element, Paper, global) { freetransEl.data( "scaleFactor", calcDistance( bb.cx, bb.cy, rotateDragger.attr('cx'), rotateDragger.attr('cy') ) ); translateDragger.drag( - elementDragMove.bind( translateDragger, freetransEl ), + elementDragMove.bind( translateDragger, freetransEl ), elementDragStart.bind( translateDragger, freetransEl ), elementDragEnd.bind( translateDragger, freetransEl ) ); diff --git a/src/octoprint/plugins/svgtogcode/static/js/working_area.js b/src/octoprint/plugins/svgtogcode/static/js/working_area.js index b603c1d5..b32ec741 100644 --- a/src/octoprint/plugins/svgtogcode/static/js/working_area.js +++ b/src/octoprint/plugins/svgtogcode/static/js/working_area.js @@ -241,6 +241,14 @@ $(function(){ if(hasText !== null && hasText.length > 0){ self.svg_contains_text_warning(newSvg); } + // TODO debug. bounding boxes are always zero sized when not displayed. +// var misfitting = self.outsideWorkingArea(newSvg); +// if(misfitting.oversized || misfitting.outside){ +// self.svg_misfitting_warning(newSvg, misfitting); +// newSvg.translate(misfitting.dx, misfitting.dy); +// newSvg.scale(misfitting.scale); +// } + newSvg.bake(); // remove transforms newSvg.attr(newSvgAttrs); var id = self.getEntryId(file); @@ -277,6 +285,26 @@ $(function(){ // }); }; + self.outsideWorkingArea = function(svg){ + var waBB = snap.select('#userContent').getBBox(); + var svgBB = svg.getBBox(); + var tooWide = svgBB.w > waBB.w; + var tooHigh = svgBB.h > waBB.h; + var scale = 1; + if(tooWide || tooHigh){ + scale = Math.min(waBB.w / svgBB.w, waBB.h / svgBB.h); + } + var outside = svgBB.x < waBB.x || svgBB.x2 > waBB.x2 || svgBB.y < waBB.y || svgBB.y2 > waBB.y2; + var dx = 0; + var dy = 0; + if(outside){ + dx = -svgBB.x; + dy = -svgBB.y; + } + + return { oversized: tooWide || tooHigh, outside: outside, scale: scale, dx: dx, dy: dy }; + }; + self.svg_contains_text_warning = function(svg){ var error = "

" + gettext("The svg file contains text elements.
Please convert them to paths.
Otherwise they will be ignored.") + "

"; //error += pnotifyAdditionalInfo("
" + data.jqXHR.responseText + "
"); @@ -288,6 +316,20 @@ $(function(){ }); svg.selectAll('text,tspan').remove(); }; + + self.svg_misfitting_warning = function(svg, misfitting){ + var outside = gettext("
It has been moved to (0,0). "); + var oversized = gettext("
It has resized to %d %. ", misfitting.scale); + var error = "

" + gettext("The design was originally not fitting into the working area.") + + outside + oversized + gettext("
Please check the result.") + "

"; + new PNotify({ + title: "Design moved", + text: error, + type: "warn", + hide: false + }); + + }; self.getDocumentDimensionsInPt = function(doc_width, doc_height, doc_viewbox){ if(doc_width === null){