Package com.badlogic.gdx.tools.imagepacker

Examples of com.badlogic.gdx.tools.imagepacker.TexturePacker2


      int height = rect.height;
      int rotatedWidth = height - settings.paddingY + settings.paddingX;
      int rotatedHeight = width - settings.paddingX + settings.paddingY;
      boolean rotate = rect.canRotate && settings.rotation;

      Rect newNode = null;
      switch (method) {
      case BestShortSideFit:
        newNode = findPositionForNewNodeBestShortSideFit(width, height, rotatedWidth, rotatedHeight, rotate);
        break;
      case BottomLeftRule:
View Full Code Here


        usedSurfaceArea += usedRectangles.get(i).width * usedRectangles.get(i).height;
      return (float)usedSurfaceArea / (binWidth * binHeight);
    }

    private Rect findPositionForNewNodeBottomLeft (int width, int height, int rotatedWidth, int rotatedHeight, boolean rotate) {
      Rect bestNode = new Rect();

      bestNode.score1 = Integer.MAX_VALUE; // best y, score2 is best x

      for (int i = 0; i < freeRectangles.size; i++) {
        // Try to place the rectangle in upright (non-rotated) orientation.
View Full Code Here

      return bestNode;
    }

    private Rect findPositionForNewNodeBestShortSideFit (int width, int height, int rotatedWidth, int rotatedHeight,
      boolean rotate) {
      Rect bestNode = new Rect();
      bestNode.score1 = Integer.MAX_VALUE;

      for (int i = 0; i < freeRectangles.size; i++) {
        // Try to place the rectangle in upright (non-rotated) orientation.
        if (freeRectangles.get(i).width >= width && freeRectangles.get(i).height >= height) {
View Full Code Here

      return bestNode;
    }

    private Rect findPositionForNewNodeBestLongSideFit (int width, int height, int rotatedWidth, int rotatedHeight,
      boolean rotate) {
      Rect bestNode = new Rect();

      bestNode.score2 = Integer.MAX_VALUE;

      for (int i = 0; i < freeRectangles.size; i++) {
        // Try to place the rectangle in upright (non-rotated) orientation.
View Full Code Here

      }
      return bestNode;
    }

    private Rect findPositionForNewNodeBestAreaFit (int width, int height, int rotatedWidth, int rotatedHeight, boolean rotate) {
      Rect bestNode = new Rect();

      bestNode.score1 = Integer.MAX_VALUE; // best area fit, score2 is best short side fit

      for (int i = 0; i < freeRectangles.size; i++) {
        int areaFit = freeRectangles.get(i).width * freeRectangles.get(i).height - width * height;
 
View Full Code Here

      }
      return score;
    }

    private Rect findPositionForNewNodeContactPoint (int width, int height, int rotatedWidth, int rotatedHeight, boolean rotate) {
      Rect bestNode = new Rect();

      bestNode.score1 = -1; // best contact score

      for (int i = 0; i < freeRectangles.size; i++) {
        // Try to place the rectangle in upright (non-rotated) orientation.
View Full Code Here

        || usedNode.y >= freeNode.y + freeNode.height || usedNode.y + usedNode.height <= freeNode.y) return false;

      if (usedNode.x < freeNode.x + freeNode.width && usedNode.x + usedNode.width > freeNode.x) {
        // New node at the top side of the used node.
        if (usedNode.y > freeNode.y && usedNode.y < freeNode.y + freeNode.height) {
          Rect newNode = new Rect(freeNode);
          newNode.height = usedNode.y - newNode.y;
          freeRectangles.add(newNode);
        }

        // New node at the bottom side of the used node.
        if (usedNode.y + usedNode.height < freeNode.y + freeNode.height) {
          Rect newNode = new Rect(freeNode);
          newNode.y = usedNode.y + usedNode.height;
          newNode.height = freeNode.y + freeNode.height - (usedNode.y + usedNode.height);
          freeRectangles.add(newNode);
        }
      }

      if (usedNode.y < freeNode.y + freeNode.height && usedNode.y + usedNode.height > freeNode.y) {
        // New node at the left side of the used node.
        if (usedNode.x > freeNode.x && usedNode.x < freeNode.x + freeNode.width) {
          Rect newNode = new Rect(freeNode);
          newNode.width = usedNode.x - newNode.x;
          freeRectangles.add(newNode);
        }

        // New node at the right side of the used node.
        if (usedNode.x + usedNode.width < freeNode.x + freeNode.width) {
          Rect newNode = new Rect(freeNode);
          newNode.x = usedNode.x + usedNode.width;
          newNode.width = freeNode.x + freeNode.width - (usedNode.x + usedNode.width);
          freeRectangles.add(newNode);
        }
      }
View Full Code Here

    if (pages == null) {
      Random random = new Random(1243);
      Array<Rect> inputRects = new Array();
      for (int i = 0; i < 240; i++) {
        Rect rect = new Rect();
        rect.name = "rect" + i;
        rect.height = 16 + random.nextInt(120);
        rect.width = 16 + random.nextInt(240);
        inputRects.add(rect);
      }
      for (int i = 0; i < 10; i++) {
        Rect rect = new Rect();
        rect.name = "rect" + (40 + i);
        rect.height = 400 + random.nextInt(340);
        rect.width = 1 + random.nextInt(10);
        inputRects.add(rect);
      }

      long s = System.nanoTime();

      pages = new MaxRectsPacker(settings).pack(inputRects);

      long e = System.nanoTime();
      System.out.println("fast: " + settings.fast);
      System.out.println((e - s) / 1e6f + " ms");
      System.out.println();
    }

    int x = 20, y = 20;
    for (Page page : pages) {
      renderer.setColor(Color.GRAY);
      renderer.begin(ShapeType.Filled);
      for (int i = 0; i < page.outputRects.size; i++) {
        Rect rect = page.outputRects.get(i);
        renderer.rect(x + rect.x + settings.paddingX, y + rect.y + settings.paddingY, rect.width - settings.paddingX,
          rect.height - settings.paddingY);
      }
      renderer.end();
      renderer.setColor(Color.RED);
      renderer.begin(ShapeType.Line);
      for (int i = 0; i < page.outputRects.size; i++) {
        Rect rect = page.outputRects.get(i);
        renderer.rect(x + rect.x + settings.paddingX, y + rect.y + settings.paddingY, rect.width - settings.paddingX,
          rect.height - settings.paddingY);
      }
      renderer.setColor(Color.GREEN);
      renderer.rect(x, y, page.width + settings.paddingX * 2, page.height + settings.paddingY * 2);
 
View Full Code Here

    // Strip extension.
    int dotIndex = name.lastIndexOf('.');
    if (dotIndex != -1) name = name.substring(0, dotIndex);

    Rect rect = addImage(image, name);
    if (rect != null && settings.limitMemory) rect.unloadImage(file);
  }
View Full Code Here

    if (rect != null && settings.limitMemory) rect.unloadImage(file);
  }

  /** The image will be kept in-memory during packing. */
  public Rect addImage (BufferedImage image, String name) {
    Rect rect = processImage(image, name);

    if (rect == null) {
      System.out.println("Ignoring blank input image: " + name);
      return null;
    }

    if (settings.alias) {
      String crc = hash(rect.getImage(this));
      Rect existing = crcs.get(crc);
      if (existing != null) {
        System.out.println(rect.name + " (alias of " + existing.name + ")");
        existing.aliases.add(new Alias(rect));
        return null;
      }
View Full Code Here

TOP

Related Classes of com.badlogic.gdx.tools.imagepacker.TexturePacker2

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.