From 013ccc73974ade08c86675575d369bc16eab34df Mon Sep 17 00:00:00 2001 From: Hannes <13hannes11@gmail.com> Date: Fri, 10 Nov 2017 00:39:39 +0100 Subject: [PATCH] corrected still remaining duplicated files --- XKCDPoster.iml | 12 -- src/org/kuchelmeister/xkcd/poster/Main.java | 130 -------------- .../xkcd/poster/RectangleImage.java | 58 ------ .../poster/construction/ImageArranger.java | 170 ------------------ .../poster/construction/ImageDataLoader.java | 87 --------- .../poster/construction/ImageSticher.java | 80 --------- .../comparator/AreaComparator.java | 26 --- .../comparator/HeightFirstComparator.java | 30 ---- .../comparator/ImageMegapixelComparator.java | 21 --- .../comparator/WidthFirstComparator.java | 30 ---- .../poster/rectangle/CustomRectangle.java | 46 ----- .../ClockwiseSplitFreeSpaceRectangle.java | 74 -------- .../CounterclockwiseFreeSpaceRectangle.java | 76 -------- .../rectangle/freespace/FreeSpaceFactory.java | 31 ---- .../freespace/FreeSpaceRectangle.java | 34 ---- .../LeftRightSplitFreeSpaceRectangle.java | 18 -- .../OptimalSplitFreeSpaceRectangle.java | 21 --- .../TopBottomSplitFreeSpaceRectangle.java | 22 --- .../rectangle/imagepath/PathRectangle.java | 39 ---- 19 files changed, 1005 deletions(-) delete mode 100644 XKCDPoster.iml delete mode 100644 src/org/kuchelmeister/xkcd/poster/Main.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/RectangleImage.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/construction/ImageArranger.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/construction/ImageDataLoader.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/construction/ImageSticher.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/construction/comparator/AreaComparator.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/construction/comparator/HeightFirstComparator.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/construction/comparator/ImageMegapixelComparator.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/construction/comparator/WidthFirstComparator.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/CustomRectangle.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/freespace/ClockwiseSplitFreeSpaceRectangle.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/freespace/CounterclockwiseFreeSpaceRectangle.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/freespace/FreeSpaceFactory.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/freespace/FreeSpaceRectangle.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/freespace/LeftRightSplitFreeSpaceRectangle.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/freespace/OptimalSplitFreeSpaceRectangle.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/freespace/TopBottomSplitFreeSpaceRectangle.java delete mode 100644 src/org/kuchelmeister/xkcd/poster/rectangle/imagepath/PathRectangle.java diff --git a/XKCDPoster.iml b/XKCDPoster.iml deleted file mode 100644 index d5c0743..0000000 --- a/XKCDPoster.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/src/org/kuchelmeister/xkcd/poster/Main.java b/src/org/kuchelmeister/xkcd/poster/Main.java deleted file mode 100644 index 7dba152..0000000 --- a/src/org/kuchelmeister/xkcd/poster/Main.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.kuchelmeister.xkcd.poster; - -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.LinkedList; - -import javax.swing.JFileChooser; -import javax.swing.filechooser.FileFilter; - -import org.kuchelmeister.xkcd.poster.construction.ImageArranger; -import org.kuchelmeister.xkcd.poster.construction.ImageDataLoader; -import org.kuchelmeister.xkcd.poster.construction.ImageSticher; -import org.kuchelmeister.xkcd.poster.rectangle.imagepath.PathRectangle; - -public class Main { - - private double aspectRatio; - private Collection inputImages; - private File outputImagePath; - - public Main() { - this.aspectRatio = 3D / 2D; - } - - public Main(final double outputAspectRatio) { - this.aspectRatio = outputAspectRatio; - } - - public Main(final Collection input, final File output) { - this.inputImages = input; - this.outputImagePath = output; - } - - public Main(final Collection input, final File output, final double outputAspectRatio) { - this.aspectRatio = outputAspectRatio; - this.inputImages = input; - this.outputImagePath = output; - } - - public void selectFilesDialog() { - this.inputImages = new LinkedList<>(); - - JFileChooser fileChooser; - fileChooser = new JFileChooser(); - - // FileOpenDialog - fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); - fileChooser.setDialogTitle("Load Images File or Directory"); - fileChooser.setMultiSelectionEnabled(true); - int returnVal = fileChooser.showOpenDialog(null); - - if (returnVal != JFileChooser.APPROVE_OPTION) { - System.out.println("Aborted!"); - return; - } - - for (final File file : fileChooser.getSelectedFiles()) { - inputImages.add(file); - } - - // FileSaveDialog - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - fileChooser.setDialogTitle("Save Image"); - fileChooser.setMultiSelectionEnabled(false); - fileChooser.setFileFilter(new FileFilter() { - - @Override - public String getDescription() { - return ".png"; - } - - @Override - public boolean accept(final File f) { - return true; - } - }); - - returnVal = fileChooser.showSaveDialog(null); - if (returnVal != JFileChooser.APPROVE_OPTION) { - System.out.println("Aborted!"); - return; - } - if (!fileChooser.getSelectedFile().getName().endsWith(".png")) { - fileChooser.setSelectedFile(new File(fileChooser.getSelectedFile().getAbsolutePath() + ".png")); - } - - this.outputImagePath = fileChooser.getSelectedFile(); - } - - public void run() { - if (inputImages == null || inputImages.size() == 0 || outputImagePath == null) { - return; - } - - System.out.println("Loading Now!"); - final ImageDataLoader loader = new ImageDataLoader(); - - Collection images; - if (inputImages.size() == 1 && ((File) inputImages.toArray()[0]).isDirectory()) { - images = loader.load(((File) inputImages.toArray()[0])); - } else { - images = loader.load(inputImages); - } - - System.out.println("Arranging Now!"); - final ImageArranger arranger = new ImageArranger(); - images = arranger.arrangeRectangles(images, aspectRatio); - System.out.println("Count: " + images.size()); - - System.out.println("Saving Now!"); - final ImageSticher sticher = new ImageSticher(images); - - try { - // TODO: take scaling into account - sticher.saveImage(outputImagePath); - } catch (final IOException e) { - // TODO: catch exception in appropriate way - e.printStackTrace(); - } - - System.out.println("DONE!"); - } - - public static void main(final String[] args) throws IOException { - final Main main = new Main(); - main.selectFilesDialog(); - main.run(); - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/RectangleImage.java b/src/org/kuchelmeister/xkcd/poster/RectangleImage.java deleted file mode 100644 index e341e8f..0000000 --- a/src/org/kuchelmeister/xkcd/poster/RectangleImage.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster; - -import java.awt.Rectangle; -import java.awt.image.BufferedImage; - -/** - * - * @author Hannes - */ -public class RectangleImage { - Rectangle r; - - public RectangleImage(BufferedImage image, int x, int y) { - r = new Rectangle(x, y, image.getWidth(), image.getHeight()); - } - public RectangleImage(Rectangle rec){ - r = rec; - } - - public int getHeight() { - return r.height; - } - - public int getWidth() { - return r.width; - } - - public int getBoundY() { - return r.y + r.height; - } - - public int getBoundX() { - return r.x + r.width; - } - - public int getX() { - return r.x; - } - - public int getY() { - return r.y; - } - - public Rectangle getRectangle() { - return r; - } - public void setY(int y){ - r.y = y; - } - public boolean intersects(RectangleImage image) { - return r.intersects(image.getRectangle()); - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/construction/ImageArranger.java b/src/org/kuchelmeister/xkcd/poster/construction/ImageArranger.java deleted file mode 100644 index 49f4900..0000000 --- a/src/org/kuchelmeister/xkcd/poster/construction/ImageArranger.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.construction; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.TreeSet; - -import org.kuchelmeister.xkcd.poster.construction.comparator.AreaComparator; -import org.kuchelmeister.xkcd.poster.construction.comparator.HeightFirstComparator; -import org.kuchelmeister.xkcd.poster.construction.comparator.WidthFirstComparator; -import org.kuchelmeister.xkcd.poster.rectangle.freespace.ClockwiseSplitFreeSpaceRectangle; -import org.kuchelmeister.xkcd.poster.rectangle.freespace.FreeSpaceRectangle; -import org.kuchelmeister.xkcd.poster.rectangle.imagepath.PathRectangle; - -/** - * @author Hannes - */ -public class ImageArranger { - - private final FreeSpaceRectangle currentBounds; - - private final Collection placed; - - private final double factor; - private final int startStepCount; - private final int stopper; - - public ImageArranger() { - factor = 0.5D; - startStepCount = 10000; - stopper = 500; - - currentBounds = null; - - placed = new ArrayList<>(); - - } - - /** - * Shifts the left top corener to the coordinates (0;0) - */ - private void shiftToLeftTop() { - if (currentBounds == null) { - return; - } - final int x = (int) -currentBounds.getX(); - final int y = (int) -currentBounds.getY(); - - for (final PathRectangle rect : placed) { - rect.setX((int) (rect.getX() + x)); - rect.setY((int) (rect.getY() + y)); - } - currentBounds.setX(0); - currentBounds.setY(0); - } - - public Collection arrangeRectangles(final Collection rectangles, - final double heightToWidthRatio) { - int stepCount = startStepCount; - - int height = stepCount; - int width = calcWidthFromHeight(stepCount, heightToWidthRatio); - - int direction = 1; - boolean readyToStop = false; - - while (!readyToStop || arrangeRectangles(rectangles, width, height) == null) { - // Loopcancelpermission: if accuracy is reached (stopper) and direction is from - // to small to to big (direction > 0) - if (stepCount < stopper && direction > 0) { - readyToStop = true; - } - if ((arrangeRectangles(rectangles, width, height) != null && direction > 0) - || (arrangeRectangles(rectangles, width, height) == null && direction < 0)) { - stepCount *= factor; - direction *= -1; - } - height += direction * stepCount; - width = calcWidthFromHeight(height, heightToWidthRatio); - System.out.println("W: " + width + " H:" + height + " StepCount: " + stepCount + " Direction: " + direction - + " ArrangeRectangles: " + ((arrangeRectangles(rectangles, width, height) == null) ? null - : arrangeRectangles(rectangles, width, height).size())); - } - - return arrangeRectangles(rectangles, width, height); - } - - private int calcWidthFromHeight(final int height, final double heightToWidthRatio) { - return (int) Math.round(height * heightToWidthRatio); - } - - public Collection arrangeRectangles(final Collection rectangles, final int width, - final int height) { - // System.out.println("Size: " + rectangles); - - placed.clear(); - final TreeSet widthSortedSet = new TreeSet<>(new WidthFirstComparator()); - final TreeSet heightSortedSet = new TreeSet<>(new HeightFirstComparator()); - - final TreeSet freeSpaceArea = new TreeSet<>(new AreaComparator()); - - widthSortedSet.addAll(rectangles); - heightSortedSet.addAll(rectangles); - - freeSpaceArea.add(new ClockwiseSplitFreeSpaceRectangle(0, 0, width, height)); - - while (widthSortedSet.size() > 0 && heightSortedSet.size() > 0) { - final PathRectangle _tmp = (widthSortedSet.last().getWidth() > heightSortedSet.last().getHeight()) - ? widthSortedSet.last() - : heightSortedSet.last(); - - widthSortedSet.remove(_tmp); - heightSortedSet.remove(_tmp); - - FreeSpaceRectangle _space = null; - - for (final FreeSpaceRectangle s : freeSpaceArea) { - if (s.couldContain(_tmp)) { - _space = s; - break; - } - } - // No space means not every image can be placed - if (_space == null) { - return null; - } - - placed.add(_tmp); - _tmp.setLocation((int) _space.getX(), (int) _space.getY()); - freeSpaceArea.addAll(_space.divideUp(_tmp)); - freeSpaceArea.remove(_space); - } - - shiftToLeftTop(); - - // - /* - * double spaceHeight = 0; double spaceWidth = 0; for (final FreeSpaceRectangle - * rect : freeSpaceArea) { if (rect.getWidth() + rect.getX() > spaceWidth) { - * spaceWidth = rect.getWidth() + rect.getX(); } if (rect.getHeight() + - * rect.getY() > spaceHeight) { spaceHeight = rect.getHeight() + rect.getY(); } - * } final double multiplier = 0.1; final BufferedImage bImage = new - * BufferedImage((int) (spaceWidth * multiplier), (int) (spaceHeight * - * multiplier), BufferedImage.TYPE_INT_ARGB); - * - * for (final FreeSpaceRectangle rect : freeSpaceArea) { final Graphics g = - * bImage.getGraphics(); - * - * - * g.setColor(Color.blue); g.fillRect((int) (rect.getX() * multiplier), (int) - * (rect.getY() * multiplier), (int) (rect.getWidth() * multiplier), (int) - * (rect.getHeight() * multiplier)); g.setColor(Color.red); g.drawRect((int) - * (rect.getX() * multiplier), (int) (rect.getY() * multiplier), (int) - * (rect.getWidth() * multiplier), (int) (rect.getHeight() * multiplier)); } try - * { ImageIO.write(bImage, "png", new - * File("C:\\Users\\Hannes\\Desktop\\savedNewFreeSpace.png")); } catch (final - * IOException e) { e.printStackTrace(); } - */ - // - return placed; - } - - private PathRectangle getNextPathRectangle(final PathRectangle widthRec, final PathRectangle heightRect) { - return (widthRec.getWidth() > heightRect.getHeight()) ? widthRec : heightRect; - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/construction/ImageDataLoader.java b/src/org/kuchelmeister/xkcd/poster/construction/ImageDataLoader.java deleted file mode 100644 index ecfb23e..0000000 --- a/src/org/kuchelmeister/xkcd/poster/construction/ImageDataLoader.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.construction; - -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.Collection; -import java.util.LinkedList; - -import javax.imageio.ImageIO; - -import org.kuchelmeister.xkcd.poster.rectangle.imagepath.PathRectangle; - -/** - * @author Hannes - */ -public class ImageDataLoader { - public ImageDataLoader() { - } - - /** - * loads images from a directory and all subdirectories - * - * @param directoryPath - * path to the directory - * @return returns a collection of loaded pathrectangles - */ - public Collection load(final File directoryPath) { - return load(loadFromDirectory(directoryPath)); - } - - /** - * Loads images from the specified paths in the collection - * - * @param paths - * collection of paths to the images that should be loaded - * @return returns the loaded pathRectangles - */ - public Collection load(final Collection paths) { - final Collection images = new LinkedList<>(); - for (final File file : paths) { - if (loadFile(file) != null) { - images.add(loadFile(file)); - } - } - return images; - } - - /** - * Searches recursively through a directory and adds all files to a list that is - * returned - * - * @param directory - * the directory that will be searched through - * @return returns all the added files from the directory - */ - private Collection loadFromDirectory(final File directory) { - final Collection files = new LinkedList<>(); - - for (final File fileEntry : directory.listFiles()) { - if (fileEntry.isDirectory()) { - files.addAll(loadFromDirectory(fileEntry)); - } else { - files.add(fileEntry); - } - } - return files; - } - - private PathRectangle loadFile(final File file) { - try { - final BufferedImage tmpImage = ImageIO.read(file); - // TODO use correct rotation data of an Image and rotate image if necessary - if (tmpImage == null) { - return null; - } - return new PathRectangle(file, 0, 0, tmpImage.getWidth(), tmpImage.getHeight()); - - } catch (final IOException ex) { - return null; - } - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/construction/ImageSticher.java b/src/org/kuchelmeister/xkcd/poster/construction/ImageSticher.java deleted file mode 100644 index cdb704e..0000000 --- a/src/org/kuchelmeister/xkcd/poster/construction/ImageSticher.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.construction; - -import java.awt.Color; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.util.Collection; - -import javax.imageio.ImageIO; - -import org.kuchelmeister.xkcd.poster.rectangle.imagepath.PathRectangle; - -/** - * @author Hannes - */ -public class ImageSticher { - private static final double DEFAULT_SCALE = 1D; - private static final int IMAGE_TYPE = BufferedImage.TYPE_4BYTE_ABGR; - private static final Color BACKGROUND_COLOR = Color.BLACK; - - private BufferedImage collage; - private final Collection rectangles; - - public ImageSticher(final Collection rect) { - this.rectangles = rect; - } - - public void saveImage(final File saveFile) throws IOException { - saveImage(saveFile, DEFAULT_SCALE); - } - - public void saveImage(final File saveFile, final double scale) throws IOException { - initBufferedImage(scale); - for (final PathRectangle rectangle : rectangles) { - try { - final BufferedImage image = loadImage(rectangle.getPath()); - // System.out.println(rectangle); - collage.getGraphics().drawImage(image, (int) (rectangle.getX() * scale), - (int) (rectangle.getY() * scale), (int) (rectangle.getWidth() * scale), - (int) (rectangle.getHeight() * scale), null); - } catch (final IOException ex) { - System.err.println(ex.getMessage()); - } - } - ImageIO.write(collage, "png", saveFile); - } - - private void initBufferedImage(final double scale) { - int width = 0; - int height = 0; - for (final PathRectangle rectangle : rectangles) { - final int tmpWidth = (int) (rectangle.getWidth() + rectangle.getX()); - final int tmpHeight = (int) (rectangle.getHeight() + rectangle.getY()); - - if (tmpWidth > width) { - width = tmpWidth; - } - if (tmpHeight > height) { - height = tmpHeight; - } - } - - collage = new BufferedImage((int) (width * scale), (int) (height * scale), IMAGE_TYPE); - - // collage.getGraphics().setColor(BACKGROUND_COLOR); - // collage.getGraphics().drawRect(0, 0, collage.getWidth(), - // collage.getHeight()); - // collage.getGraphics().fillRect(0, 0, collage.getWidth(), - // collage.getHeight()); - } - - private BufferedImage loadImage(final File filePath) throws IOException { - return ImageIO.read(filePath); - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/construction/comparator/AreaComparator.java b/src/org/kuchelmeister/xkcd/poster/construction/comparator/AreaComparator.java deleted file mode 100644 index 9ff515f..0000000 --- a/src/org/kuchelmeister/xkcd/poster/construction/comparator/AreaComparator.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.construction.comparator; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -import java.util.Comparator; - -/** - * @author Hannes - */ -public class AreaComparator implements Comparator { - - @Override - public int compare(final CustomRectangle o1, final CustomRectangle o2) { - if (Double.compare(o1.width * o1.height, o2.width * o2.height) == 0) { - return Integer.compare(o1.hashCode(), o2.hashCode()); - } else { - return Double.compare(o1.width * o1.height, o2.width * o2.height); - } - } - -} diff --git a/src/org/kuchelmeister/xkcd/poster/construction/comparator/HeightFirstComparator.java b/src/org/kuchelmeister/xkcd/poster/construction/comparator/HeightFirstComparator.java deleted file mode 100644 index b61f27a..0000000 --- a/src/org/kuchelmeister/xkcd/poster/construction/comparator/HeightFirstComparator.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.construction.comparator; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -import java.util.Comparator; - -/** - * @author Hannes - */ -public class HeightFirstComparator implements Comparator { - - @Override - public int compare(final CustomRectangle o1, final CustomRectangle o2) { - if (Double.compare(o1.getHeight(), o2.getHeight()) == 0) { - if (Double.compare(o1.getWidth(), o2.getWidth()) == 0) { - return Integer.compare(o1.hashCode(), o2.hashCode()); - } else { - return Double.compare(o1.getWidth(), o2.getWidth()); - } - } else { - return Double.compare(o1.getHeight(), o2.getHeight()); - } - } - -} diff --git a/src/org/kuchelmeister/xkcd/poster/construction/comparator/ImageMegapixelComparator.java b/src/org/kuchelmeister/xkcd/poster/construction/comparator/ImageMegapixelComparator.java deleted file mode 100644 index bee359c..0000000 --- a/src/org/kuchelmeister/xkcd/poster/construction/comparator/ImageMegapixelComparator.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.construction.comparator; - -import java.awt.image.BufferedImage; -import java.util.Comparator; - -/** - * - * @author Hannes - */ -public class ImageMegapixelComparator implements Comparator { - - @Override - public int compare(final BufferedImage o1, final BufferedImage o2) { - return o2.getWidth() * o2.getHeight() - o1.getWidth() * o1.getHeight(); - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/construction/comparator/WidthFirstComparator.java b/src/org/kuchelmeister/xkcd/poster/construction/comparator/WidthFirstComparator.java deleted file mode 100644 index a7a84e8..0000000 --- a/src/org/kuchelmeister/xkcd/poster/construction/comparator/WidthFirstComparator.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.construction.comparator; - -import java.util.Comparator; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -/** - * @author Hannes - */ -public class WidthFirstComparator implements Comparator { - - @Override - public int compare(final CustomRectangle o1, final CustomRectangle o2) { - if (Double.compare(o1.getWidth(), o2.getWidth()) == 0) { - if (Double.compare(o1.getHeight(), o2.getHeight()) == 0) { - return Integer.compare(o1.hashCode(), o2.hashCode()); - } else { - return Double.compare(o1.getHeight(), o2.getHeight()); - } - } else { - return Double.compare(o1.getWidth(), o2.getWidth()); - } - } - -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/CustomRectangle.java b/src/org/kuchelmeister/xkcd/poster/rectangle/CustomRectangle.java deleted file mode 100644 index 59bb55e..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/CustomRectangle.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.rectangle; - -import java.awt.*; - -/** - * @author Hannes - */ -public abstract class CustomRectangle extends Rectangle { - - public CustomRectangle(final int x, final int y, final int width, final int height) { - super(x, y, width, height); - } - - - public final void setX(final int x) { - this.setLocation(x, (int) this.getY()); - } - - public final void setY(final int y) { - this.setLocation((int) this.getX(), y); - } - - public final void setWidth(final int width) { - this.setSize(width, (int) this.getHeight()); - } - - public final void setHeight(final int height) { - this.setSize((int) this.getWidth(), height); - } - - public final boolean couldContain(final Rectangle rect) { - return (rect.getWidth() <= this.getWidth() && rect.getHeight() <= this.getHeight()); - } - - @Override - public String toString() { - String str = ""; - str += "X: " + this.getX() + " Y: " + this.getY() + " w: " + this.getWidth() + " h: " + this.getHeight(); - return str; - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/ClockwiseSplitFreeSpaceRectangle.java b/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/ClockwiseSplitFreeSpaceRectangle.java deleted file mode 100644 index 1ffc2d1..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/ClockwiseSplitFreeSpaceRectangle.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.kuchelmeister.xkcd.poster.rectangle.freespace; - -import java.util.ArrayList; -import java.util.Collection; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -/** - * @author Hannes - */ -public class ClockwiseSplitFreeSpaceRectangle extends FreeSpaceRectangle { - - public ClockwiseSplitFreeSpaceRectangle(final int x, final int y, final int width, final int height) { - super(x, y, width, height); - } - - @Override - public Collection divideUp(final CustomRectangle r) { - // System.out.println("Main: " + r.toString()); - // System.out.println("THIS: " + this.toString()); - final Collection rectangles = new ArrayList<>(); - if (!this.contains(r)) { - return rectangles; - } - final FreeSpaceFactory factory = new FreeSpaceFactory(); - - // Left - int x = 0; - int y = 0; - int tmpWidth = (int) (r.getX() - this.getX()); - int tmpHeight = (int) (r.getY() + r.getHeight() - this.getY()); - - if (tmpHeight > 0 && tmpWidth > 0) { - rectangles.add(factory.getFreeSpaceRect(x, y, tmpWidth, tmpHeight)); - // System.out.println("Left: " + factory.getFreeSpaceRect(x, y, tmpWidth, - // tmpHeight).toString()); - } - // Top - x = (int) r.getX(); - y = (int) this.getY(); - tmpWidth = (int) (this.getX() + this.getWidth() - r.getX()); - tmpHeight = (int) (r.getY() - this.getY()); - - if (tmpHeight > 0 && tmpWidth > 0) { - rectangles.add(factory.getFreeSpaceRect(x, y, tmpWidth, tmpHeight)); - // System.out.println("Top: " + factory.getFreeSpaceRect(x, y, tmpWidth, - // tmpHeight).toString()); - } - // Right - x = (int) (r.getX() + r.getWidth()); - y = (int) r.getY(); - tmpWidth = (int) (this.getX() + this.getWidth() - (r.getX() + r.getWidth())); - tmpHeight = (int) (this.getY() + this.getHeight() - r.getY()); - - if (tmpHeight > 0 && tmpWidth > 0) { - rectangles.add(factory.getFreeSpaceRect(x, y, tmpWidth, tmpHeight)); - // System.out.println("Right: " + factory.getFreeSpaceRect(x, y, tmpWidth, - // tmpHeight).toString()); - } - - // Bottom - x = (int) this.getX(); - y = (int) (r.getY() + r.getHeight()); - tmpWidth = (int) ((r.getX() + r.getWidth()) - this.getX()); - tmpHeight = (int) (this.getY() + this.getHeight() - (r.getY() + r.getHeight())); - - if (tmpHeight > 0 && tmpWidth > 0) { - rectangles.add(factory.getFreeSpaceRect(x, y, tmpWidth, tmpHeight)); - // System.out.println("Bottom: " + factory.getFreeSpaceRect(x, y, tmpWidth, - // tmpHeight).toString()); - } - return rectangles; - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/CounterclockwiseFreeSpaceRectangle.java b/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/CounterclockwiseFreeSpaceRectangle.java deleted file mode 100644 index 5a24db4..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/CounterclockwiseFreeSpaceRectangle.java +++ /dev/null @@ -1,76 +0,0 @@ -package org.kuchelmeister.xkcd.poster.rectangle.freespace; - -import java.util.ArrayList; -import java.util.Collection; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; -import org.kuchelmeister.xkcd.poster.rectangle.freespace.FreeSpaceFactory; -import org.kuchelmeister.xkcd.poster.rectangle.freespace.FreeSpaceRectangle; - -/** - * @author Hannes - */ -public class CounterclockwiseFreeSpaceRectangle extends FreeSpaceRectangle { - - public CounterclockwiseFreeSpaceRectangle(final int x, final int y, final int width, final int height) { - super(x, y, width, height); - } - - @Override - public Collection divideUp(final CustomRectangle r) { - // System.out.println("Main: " + r.toString()); - // System.out.println("THIS: " + this.toString()); - final Collection rectangles = new ArrayList<>(); - if (!this.contains(r)) { - return rectangles; - } - final FreeSpaceFactory factory = new FreeSpaceFactory(); - - // Left - int x = 0; - int y = 0; - int tmpWidth = (int) ((r.getX() + r.getWidth()) - this.getX()); - int tmpHeight = (int) (r.getY() - this.getY()); - - if (tmpHeight > 0 && tmpWidth > 0) { - rectangles.add(factory.getFreeSpaceRect(x, y, tmpWidth, tmpHeight)); - // System.out.println("Left: " + factory.getFreeSpaceRect(x, y, tmpWidth, - // tmpHeight).toString()); - } - // Top - x = (int) (r.getX() + r.getWidth()); - y = (int) this.getY(); - tmpWidth = (int) (this.getX() + this.getWidth() - (r.getX() + r.getWidth())); - tmpHeight = (int) (r.getY() + r.getHeight() - this.getY()); - - if (tmpHeight > 0 && tmpWidth > 0) { - rectangles.add(factory.getFreeSpaceRect(x, y, tmpWidth, tmpHeight)); - // System.out.println("Top: " + factory.getFreeSpaceRect(x, y, tmpWidth, - // tmpHeight).toString()); - } - // Right - x = (int) (r.getX()); - y = (int) (r.getY() + r.getHeight()); - tmpWidth = (int) (this.getX() + this.getWidth() - r.getX()); - tmpHeight = (int) (this.getY() + this.getHeight() - (r.getY() + r.getHeight())); - - if (tmpHeight > 0 && tmpWidth > 0) { - rectangles.add(factory.getFreeSpaceRect(x, y, tmpWidth, tmpHeight)); - // System.out.println("Right: " + factory.getFreeSpaceRect(x, y, tmpWidth, - // tmpHeight).toString()); - } - - // Bottom - x = (int) this.getX(); - y = (int) (r.getY()); - tmpWidth = (int) (r.getX() - this.getX()); - tmpHeight = (int) (this.getY() + this.getHeight() - r.getY()); - - if (tmpHeight > 0 && tmpWidth > 0) { - rectangles.add(factory.getFreeSpaceRect(x, y, tmpWidth, tmpHeight)); - // System.out.println("Bottom: " + factory.getFreeSpaceRect(x, y, tmpWidth, - // tmpHeight).toString()); - } - return rectangles; - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/FreeSpaceFactory.java b/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/FreeSpaceFactory.java deleted file mode 100644 index 7d1a692..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/FreeSpaceFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.rectangle.freespace; - -import org.kuchelmeister.xkcd.poster.rectangle.freespace.ClockwiseSplitFreeSpaceRectangle; -import org.kuchelmeister.xkcd.poster.rectangle.freespace.FreeSpaceRectangle; - -/** - * @author Hannes - */ -public class FreeSpaceFactory { - private int counter; - - public FreeSpaceFactory() { - counter = 0; - } - - public FreeSpaceRectangle getFreeSpaceRect(final int x, final int y, final int width, final int height) { - counter++; - switch (counter % 2) { - case 1: - return new ClockwiseSplitFreeSpaceRectangle(x, y, width, height); - // case 0 - default: - return new CounterclockwiseFreeSpaceRectangle(x, y, width, height); - } - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/FreeSpaceRectangle.java b/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/FreeSpaceRectangle.java deleted file mode 100644 index 56cd5c3..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/FreeSpaceRectangle.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.rectangle.freespace; - -import java.util.Collection; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -/** - * - * @author Hannes - */ -public abstract class FreeSpaceRectangle extends CustomRectangle { - - public FreeSpaceRectangle(final int x, final int y, final int width, final int height) { - super(x, y, width, height); - } - - /** - * Method returns the smaller rectangles that will be generated if 'r' is placed - * inside the xkcd.rectangle If r is outsdie of this xkcd.rectangle the - * Collection will conly contain this. Otherwise it will only contain - * subrectangles. - * - * @param r - * the xkcd.rectangle which is placed and arround which shall be - * split - * @return xkcd.rectangle - */ - public abstract Collection divideUp(CustomRectangle r); -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/LeftRightSplitFreeSpaceRectangle.java b/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/LeftRightSplitFreeSpaceRectangle.java deleted file mode 100644 index a6b2e15..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/LeftRightSplitFreeSpaceRectangle.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.kuchelmeister.xkcd.poster.rectangle.freespace; - -import java.util.Collection; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -public class LeftRightSplitFreeSpaceRectangle extends FreeSpaceRectangle { - - public LeftRightSplitFreeSpaceRectangle(final int x, final int y, final int width, final int height) { - super(x, y, width, height); - } - - @Override - public Collection divideUp(final CustomRectangle r) { - throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose - // Tools | Templates. - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/OptimalSplitFreeSpaceRectangle.java b/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/OptimalSplitFreeSpaceRectangle.java deleted file mode 100644 index bca0d63..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/OptimalSplitFreeSpaceRectangle.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.kuchelmeister.xkcd.poster.rectangle.freespace; - -import java.util.Collection; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -/** - * @author Hannes - */ -public class OptimalSplitFreeSpaceRectangle extends FreeSpaceRectangle { - - public OptimalSplitFreeSpaceRectangle(final int x, final int y, final int width, final int height) { - super(x, y, width, height); - } - - @Override - public Collection divideUp(final CustomRectangle r) { - throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose - // Tools | Templates. - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/TopBottomSplitFreeSpaceRectangle.java b/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/TopBottomSplitFreeSpaceRectangle.java deleted file mode 100644 index 2da7f42..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/freespace/TopBottomSplitFreeSpaceRectangle.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.kuchelmeister.xkcd.poster.rectangle.freespace; - -import java.util.Collection; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -/** - * @param - * @author Hannes - */ -public class TopBottomSplitFreeSpaceRectangle extends FreeSpaceRectangle { - - public TopBottomSplitFreeSpaceRectangle(final int x, final int y, final int width, final int height) { - super(x, y, width, height); - } - - @Override - public Collection divideUp(final CustomRectangle r) { - throw new UnsupportedOperationException("Not supported yet."); // To change body of generated methods, choose - // Tools | Templates. - } -} diff --git a/src/org/kuchelmeister/xkcd/poster/rectangle/imagepath/PathRectangle.java b/src/org/kuchelmeister/xkcd/poster/rectangle/imagepath/PathRectangle.java deleted file mode 100644 index bb029d3..0000000 --- a/src/org/kuchelmeister/xkcd/poster/rectangle/imagepath/PathRectangle.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.kuchelmeister.xkcd.poster.rectangle.imagepath; - -import java.io.File; -import java.io.FileNotFoundException; - -import org.kuchelmeister.xkcd.poster.rectangle.CustomRectangle; - -/** - * @author Hannes - */ -public class PathRectangle extends CustomRectangle { - private final File path; - - public PathRectangle(final File filePath, final int x, final int y, final int width, final int height) - throws FileNotFoundException { - super(x, y, width, height); - path = filePath; - if (!path.exists()) { - throw new FileNotFoundException("The filepath is not valid"); - } - } - - /** - * @return the path - */ - public File getPath() { - return path; - } - - @Override - public String toString() { - return super.toString() + " Path: " + path.toString(); - } -}