Move scaling of SelectionNodes to upper g-element with transform 37/1337/2
authorjsimomaa <jani.simomaa@gmail.com>
Thu, 28 Dec 2017 09:12:32 +0000 (11:12 +0200)
committerJani Simomaa <jani.simomaa@semantum.fi>
Thu, 28 Dec 2017 09:13:29 +0000 (11:13 +0200)
refs #7696

Change-Id: Ibc4502c9adad9be6fb71801b042ec8464baac283

bundles/org.simantics.modeling/src/org/simantics/modeling/SCLScenegraph.java

index 1e80b832d70aa15fbc2752772792e8202175a08d..7545106580b7ea0fa3eebeef97605f7e87605687 100644 (file)
@@ -378,12 +378,14 @@ public class SCLScenegraph {
 
                public static final String svgNS = "http://www.w3.org/2000/svg";
 
-               public Generator(SVGGeneratorContext ctx, boolean joku) {
-                       super(ctx, joku);
+               public Generator(SVGGeneratorContext ctx, boolean textAsShapes) {
+                       super(ctx, textAsShapes);
                }
 
                public Generator(Document document) {
                        super(document);
+                       // prevent batik comment in each g-element
+                       getGeneratorContext().setComment(null);
                }
 
                @Override
@@ -623,6 +625,7 @@ public class SCLScenegraph {
 
                RenderSVGContext result = new RenderSVGContext();
 
+               double[] matrix = new double[6];
                try {
 
             Selection selection = ctx.getAtMostOneItemOfClass(Selection.class);
@@ -649,10 +652,15 @@ public class SCLScenegraph {
                        
                        double scale = width < 0 || height < 0 ? 1.0 : Math.min((width - 2*offset) / content.getWidth(), (height - 2*offset) / content.getHeight());
                
-                       svgGenerator.translate(offset, offset);
-                       svgGenerator.scale(scale, scale);
+                       AffineTransform tr = new AffineTransform();
+                       tr.translate(offset, offset);
+                       tr.scale(scale, scale);
+                       tr.translate(-content.getX(), -content.getY());
+                       tr.getMatrix(matrix);
+                       //svgGenerator.translate(offset, offset);
+                       //svgGenerator.scale(scale, scale);
                        // translate svgGenerator to the x and y coordinates of current content
-                       svgGenerator.translate(-content.getX(), -content.getY());
+                       //svgGenerator.translate(-content.getX(), -content.getY());
 
                        svgGenerator.setSVGCanvasSize(new Dimension((int)Math.ceil(scale * content.getWidth()) + 2*offset, (int)Math.ceil(scale * content.getHeight()) + 2*offset));
                        //svgGenerator.setClip(content);
@@ -681,9 +689,11 @@ public class SCLScenegraph {
 
                StringBuilder res = new StringBuilder();
                res.append("<svg width=\"100%\" height=\"100%\" stroke=\"black\">");
+               res.append("<g transform=\"matrix(").append(matrix[0]).append(",").append(matrix[1]).append(",").append(matrix[2]).append(",").append(matrix[3]).append(",").append(matrix[4]).append(",").append(matrix[5]).append(")\">");
                res.append(result.get(MAIN_SECTION));
                res.append(result.get(SELECTION_SECTION));
                res.append(result.get(SELECTION_MASK_SECTION));
+               res.append("</g>");
                res.append("</svg>");
 
 //             System.err.println(" == FINAL RESULT == ");
@@ -808,11 +818,7 @@ public class SCLScenegraph {
                     parentBuilder2.append(SELECTION_SECTION, "\n<g style=\"visibility:hidden\" class=\"selection\" id=\"" + key + "\">");
                     parentBuilder2.append(SELECTION_SECTION, svg);
                     parentBuilder2.append(SELECTION_SECTION, "\n</g>");
-                    AffineTransform transform = svgGenerator.getTransform();
-                    double[] matrix = new double[6];
-                    transform.getMatrix(matrix);
-                    String matrixString = String.format("matrix(%f,%f,%f,%f,%f,%f)", matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
-                    parentBuilder2.append(SELECTION_MASK_SECTION, "\n<g class=\"selectionMask\" id=\"" + key + "\" transform=\"" + matrixString + "\">");
+                    parentBuilder2.append(SELECTION_MASK_SECTION, "\n<g class=\"selectionMask\" id=\"" + key /*+ "\" transform=\"" + matrixString + "\"*/+ "\">");
                     Rectangle2D rect = n.getRect();
                     // NaN
                     if(rect.getHeight() == rect.getHeight() && rect.getWidth() == rect.getWidth()) {