From 23bb021ae034d03d599c01712e32697aee2ab1f0 Mon Sep 17 00:00:00 2001
From: Leonard Kupper <leonard.kupper@mailbox.tu-dresden.de>
Date: Fri, 26 Jul 2019 12:18:16 +0200
Subject: [PATCH] Extended loggin for canvas and rectangle

---
 .../java/de/tudresden/inf/mci/brailleplot/App.java   | 12 ++++++++++++
 .../mci/brailleplot/rendering/AbstractCanvas.java    |  1 +
 .../brailleplot/rendering/FunctionalRasterizer.java  |  2 +-
 .../rendering/FunctionalRenderingBase.java           |  2 +-
 .../mci/brailleplot/rendering/ImageRasterizer.java   | 11 ++++++++---
 .../inf/mci/brailleplot/rendering/Rectangle.java     |  7 +++++++
 6 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/App.java b/src/main/java/de/tudresden/inf/mci/brailleplot/App.java
index cf1adf5a..cf6c170b 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/App.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/App.java
@@ -8,7 +8,9 @@ import de.tudresden.inf.mci.brailleplot.commandline.SettingsWriter;
 
 import de.tudresden.inf.mci.brailleplot.configparser.ConfigurationParser;
 import de.tudresden.inf.mci.brailleplot.configparser.JavaPropertiesConfigurationParser;
+import de.tudresden.inf.mci.brailleplot.rendering.FunctionalRasterizer;
 import de.tudresden.inf.mci.brailleplot.rendering.Image;
+import de.tudresden.inf.mci.brailleplot.rendering.ImageRasterizer;
 import de.tudresden.inf.mci.brailleplot.rendering.MasterRenderer;
 
 import org.slf4j.Logger;
@@ -146,6 +148,16 @@ public final class App {
                     getClass().getClassLoader().getResource("config/default.properties").getFile()
             );
             MasterRenderer renderer = new MasterRenderer(parser.getPrinter(), parser.getFormat("A4"));
+
+            // Replace default Image rasterizer
+            renderer.getRenderingBase().registerRasterizer(new FunctionalRasterizer<>(
+                    Image.class,
+                    new ImageRasterizer(
+                            false, false, false,
+                            25
+                    )
+            ));
+
             renderer.rasterize(new Image(
                     new File(getClass().getClassLoader().getResource("examples/img/2_image_chart.png").toURI())
             ));
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractCanvas.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractCanvas.java
index fa580925..caff397c 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractCanvas.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractCanvas.java
@@ -51,6 +51,7 @@ public abstract class AbstractCanvas {
         mLogger.trace("Determined page box: {}", pageBox);
 
         // Create a margin box
+        mLogger.trace("Cropping edges by defined margins:");
         int marginTop = mFormat.getProperty("margin.top").toInt();
         int marginLeft = mFormat.getProperty("margin.left").toInt();
         int marginBottom = mFormat.getProperty("margin.bottom").toInt();
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizer.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizer.java
index a045e46b..b7c6b877 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizer.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRasterizer.java
@@ -26,7 +26,7 @@ public class FunctionalRasterizer<T extends Renderable> implements Rasterizer {
     public FunctionalRasterizer(
             final Class<T> supportedRenderableClass,
             final Rasterizer<T> rasterizer) {
-        mLogger.info("Creating new FunctionalRasterizer: Binding {} rasterizer {}.",
+        mLogger.info("Creating new FunctionalRasterizer: Binding rasterizer reference (renderable type {}): {}.",
                 supportedRenderableClass.getSimpleName(), rasterizer);
         mSupportedRenderableClass = supportedRenderableClass;
         mRasterizingAlgorithm = rasterizer::rasterize;
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRenderingBase.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRenderingBase.java
index c424df6c..0714dd13 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRenderingBase.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/FunctionalRenderingBase.java
@@ -66,7 +66,7 @@ public class FunctionalRenderingBase {
         mLogger.trace("Registering new rasterizer {} for type {}", rasterizer,
                 rasterizer.getSupportedRenderableClass().getSimpleName());
         if (mRasterizingAlgorithms.containsKey(rasterizer.getSupportedRenderableClass())) {
-            mLogger.trace("Already registered rasterizer {} will be overwritten!",
+            mLogger.warn("Already registered rasterizer {} will be overwritten!",
                     mRasterizingAlgorithms.get(rasterizer.getSupportedRenderableClass()));
         }
 
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/ImageRasterizer.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/ImageRasterizer.java
index 497a714e..224048a2 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/ImageRasterizer.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/ImageRasterizer.java
@@ -38,7 +38,7 @@ public class ImageRasterizer implements Rasterizer<Image> {
      */
     public ImageRasterizer() {
         this(true, true, true, DEFAULT_THRESHOLD);
-        mLogger.trace("Created ImageRasterizer with default settings");
+        mLogger.trace("ImageRasterizer has been setup with default settings");
     }
 
     /**
@@ -105,7 +105,7 @@ public class ImageRasterizer implements Rasterizer<Image> {
 
     private void linearMapping(final BufferedImage imgBuf, final RasterCanvas canvas) {
 
-        mLogger.trace("Apply linear mapping algorithm.");
+        mLogger.trace("Applying linear mapping algorithm.");
 
         // A canvas is basically a wrapper for multiple representations of printable data, each representing a page.
         // These representations can be acquired by either requesting the current page or creating a new page.
@@ -143,6 +143,7 @@ public class ImageRasterizer implements Rasterizer<Image> {
         // This can lead to distortions because the original pixel raster is equidistant, but the output raster
         // does not have to be equidistant.
 
+        mLogger.trace("Scanning through image pixel values...");
         // Scan through each pixel of the original image
         for (int x = 0; x < imgBuf.getWidth(); x++) {
             // Convert from original pixel x-position to braille dot x-position.
@@ -158,16 +159,18 @@ public class ImageRasterizer implements Rasterizer<Image> {
                 }
             }
         }
+        mLogger.trace("Done!");
     }
 
     private void quantifiedPositionMapping(final BufferedImage imgBuf, final RasterCanvas canvas) {
 
-        mLogger.trace("Apply quantified position algorithm.");
+        mLogger.trace("Applying quantified position algorithm.");
 
         MatrixData<Boolean> data = canvas.getNewPage();
 
         // Instead of using the dot rectangle a rectangle representing the target printing space in millimeters
         // is built from the canvas information.
+        mLogger.trace("Determining available area (in mm):");
         Rectangle availableArea = new Rectangle(0, 0, canvas.getPrintableWidth(), canvas.getPrintableHeight());
 
         // Calculate the ratios between original image and target printable area. (mm / pixel)
@@ -190,6 +193,7 @@ public class ImageRasterizer implements Rasterizer<Image> {
         // In a second step, the calculated exact position is quantified to fit a dot position on the raster.
         // Distortions can still be introduced but are minimized.
 
+        mLogger.trace("Scanning through image pixel values...");
         // Scan through all pixels of the original image
         for (int x = 0; x < imgBuf.getWidth(); x++) {
             // Convert from original pixel x-position to printed dot x-position in millimeters.
@@ -208,6 +212,7 @@ public class ImageRasterizer implements Rasterizer<Image> {
                 }
             }
         }
+        mLogger.trace("Done!");
     }
 
 
diff --git a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/Rectangle.java b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/Rectangle.java
index c653368b..59b51ed6 100644
--- a/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/Rectangle.java
+++ b/src/main/java/de/tudresden/inf/mci/brailleplot/rendering/Rectangle.java
@@ -113,6 +113,7 @@ public class Rectangle {
      * @throws OutOfSpaceException If the requested partition is greater than the underlying rectangle itself.
      */
     public Rectangle fromTop(final double height) throws OutOfSpaceException {
+        mLogger.trace("Getting partition of height {} from top of {}", height, this);
         checkHeight(height);
         return new Rectangle(getX(), getY(), getWidth(), height);
     }
@@ -124,6 +125,7 @@ public class Rectangle {
      * @throws OutOfSpaceException If the requested partition is greater than the underlying rectangle itself.
      */
     public Rectangle fromLeft(final double width) throws OutOfSpaceException {
+        mLogger.trace("Getting partition of width {} from left side of {}", width, this);
         checkWidth(width);
         return new Rectangle(getX(), getY(), width, getHeight());
     }
@@ -135,6 +137,7 @@ public class Rectangle {
      * @throws OutOfSpaceException If the requested partition is greater than the underlying rectangle itself.
      */
     public Rectangle fromBottom(final double height) throws OutOfSpaceException {
+        mLogger.trace("Getting partition of height {} from bottom of {}", height, this);
         checkHeight(height);
         double newY = (getY() + (getHeight() - height));
         return new Rectangle(getX(), newY, getWidth(), height);
@@ -147,6 +150,7 @@ public class Rectangle {
      * @throws OutOfSpaceException If the requested partition is greater than the underlying rectangle itself.
      */
     public Rectangle fromRight(final double width) throws OutOfSpaceException {
+        mLogger.trace("Getting partition of width {} from right side of {}", width, this);
         checkWidth(width);
         double newX = (getX() + (getWidth() - width));
         return new Rectangle(newX, getY(), width, getHeight());
@@ -262,6 +266,7 @@ public class Rectangle {
      * @return New rectangle with scaled position and size.
      */
     public Rectangle scaledBy(final double xScale, final double yScale) {
+        mLogger.trace("Scaling rectangle {} by {}x{}", this, xScale, yScale);
         return new Rectangle(mX * xScale, mY * yScale, mW * xScale, mH * yScale);
     }
 
@@ -271,6 +276,7 @@ public class Rectangle {
      * @return New rectangle representing the intersection.
      */
     public Rectangle intersectedWith(final Rectangle otherRectangle) {
+        mLogger.trace("Intersecting rectangles: {} & {}", this, otherRectangle);
         double itsctX = max(getX(), otherRectangle.getX());
         double itsctY = max(getY(), otherRectangle.getY());
         double itsctB = min(getBottom(), otherRectangle.getBottom());
@@ -285,6 +291,7 @@ public class Rectangle {
      * @return A new rectangle representing a translated copy of this rectangle.
      */
     public Rectangle translatedBy(final double alongX, final double alongY) {
+        mLogger.trace("Translating rectangle {} along {},{}", this, alongX, alongY);
         return new Rectangle(getX() + alongX, getY() + alongY, getWidth(), getHeight());
     }
 
-- 
GitLab