Package ShapePacking

Source Code of ShapePacking.spPages

/*******************************************************************************
* This is part of SketchChair, an open-source tool for designing your own furniture.
*     www.sketchchair.cc
*    
*     Copyright (C) 2012, Diatom Studio ltd.  Contact: hello@diatom.cc
*
*     This program is free software: you can redistribute it and/or modify
*     it under the terms of the GNU General Public License as published by
*     the Free Software Foundation, either version 3 of the License, or
*     (at your option) any later version.
*
*     This program is distributed in the hope that it will be useful,
*     but WITHOUT ANY WARRANTY; without even the implied warranty of
*     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*     GNU General Public License for more details.
*
*     You should have received a copy of the GNU General Public License
*     along with this program.  If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/
package ShapePacking;

import java.util.ArrayList;
import java.util.List;

import cc.sketchchair.core.LOGGER;
import cc.sketchchair.sketch.SketchShape;

import nu.xom.Attribute;
import nu.xom.Element;

import ToolPathWriter.CraftRoboWriter;
import ToolPathWriter.DXFWriter;
import ToolPathWriter.HPGLWriter;

import processing.core.PGraphics;
import processing.pdf.PGraphicsPDF;

/**
* Container class for spPages.
* @author gregsaul
*
*/
public class spPages {
  public List l = new ArrayList();
  spShapePack shapePack;

  public void addShapes(spShapes shapes) {
    spPage page = new spPage();

    //if(scale){
    //g.translate(200,30);
    //g.rect(0,0,targetWidth,targetHeight);
    //g.translate(pageBoarder, pageBoarder);

    //}else
    //g.translate(30,30);

    float lineWidth = 200;//getWidth();
    float currentLineWidth = 0;
    float tallestFound = 0;
    //g.textSize(11);
    //g.noFill();

    //float pageScale = targetWidth / lineWidth;

    //if(scale){

    //g.scale((targetWidth / lineWidth));

    //}
    float currentY = 0;
    for (int i = 0; i < l.size(); i++) {
      spShape shape = (spShape) l.get(i);
      //System.out.println(shape.getWidth());
      //g.pushMatrix();

      /*
      if((currentLineWidth+shape.getWidth()) > targetWidth-(pageBoarder*2)){
        currentY += tallestFound + yGap ;
        currentLineWidth = 0;
        tallestFound = 0;
      }
      */

      //g.translate(currentLineWidth, currentY);
      //shape.render(g);
      //g.ellipse(0,0, 4, 4);
      //currentLineWidth += shape.getWidth()+xGap;

      if (shape.getHeight() > tallestFound)
        tallestFound = shape.getHeight();

      //System.out.println(currentLineWidth + " : " + lineWidth);

      //g.popMatrix();
    }
    //g.popMatrix();   
  }

  public void empty() {
    this.l.clear();
  }
 
  public void packShapesTile02(spShapes shapes) {

    spShapes packingShapes = shapes.copy();
    int i = 0;

    while (packingShapes.l.size() > 0 && i < 10000) {
      spPage packPage = new spPage();
      packPage.shapePack = this.shapePack;

      packPage.packTile(packingShapes);
      this.l.add(packPage);
      i++;
    }
  }
 
 
 

  public void packShapesTile(spShapes shapes) {

    LOGGER.debug("packTileSmart");

    spShapes packingShapes = shapes.copy();
    int i = 0;

    while (packingShapes.l.size() > 0 && i < 12) {
      spPage packPage = new spPage();
      packPage.shapePack = this.shapePack;

      packPage.packTileSmart(packingShapes);
      this.l.add(packPage);
      i++;
    }
  }
 
 
  public void packShapesSmart(spShapes shapes) {

    spShapes packingShapes = shapes.copy();
    int i = 0;

    while (packingShapes.l.size() > 0 && i < 10) {
      spPage packPage = new spPage();
      packPage.shapePack = this.shapePack;

      packPage.packSmart(packingShapes);
      this.l.add(packPage);
      i++;
    }
  }

  void render(PGraphics g) {

    for (int i = 0; i < l.size(); i++) {
      spPage page = (spPage) this.l.get(i);
      g.pushMatrix();
      g.translate(this.shapePack.materialWidth * i, 0);
      page.render(g);
      g.popMatrix();

    }
  }
 
  public void renderPickBuffer(PGraphics pickBuffer) {
    for (int i = 0; i < l.size(); i++) {
      spPage page = (spPage) this.l.get(i);
      pickBuffer.pushMatrix();
      pickBuffer.translate(this.shapePack.materialWidth * i, 0);
      page.renderPickBuffer(pickBuffer);
      pickBuffer.popMatrix();

    }   
  }
 
 
 
  public void renderList(PGraphics g) {
    for (int i = 0; i < l.size(); i++) {
      spPage page = (spPage) this.l.get(i);
      g.pushMatrix();
      g.translate(this.shapePack.materialWidth * i, 0);
      page.renderList(g);
      g.popMatrix();

    }   
  }
 
 
  public void renderPickBufferList(PGraphics pickBuffer) {
    for (int i = 0; i < l.size(); i++) {
      spPage page = (spPage) this.l.get(i);
      pickBuffer.pushMatrix();
      pickBuffer.translate(this.shapePack.materialWidth * i, 0);
      page.renderPickBufferList(pickBuffer);
      pickBuffer.popMatrix();

    }     
  }
 
 

  public void renderDXF(DXFWriter dxf) {
    for (int i = 0; i < l.size(); i++) {
      spPage page = (spPage) this.l.get(i);
      page.renderDXF(dxf, page.shapes.getWidth(), 0);
      //dxf.translate(page.shapes.getWidth(), 0);
    }
  }

  public void renderPDF(PGraphicsPDF pdf, float pageScale) {
    for (int i = 0; i < l.size(); i++) {
      spPage page = (spPage) this.l.get(i);

      pdf.scale(pageScale);
      page.render(pdf);

      if (i != l.size() - 1)
        pdf.nextPage();

    }
  }

  public void renderToPlotter(HPGLWriter craftRoboWriter) {
    for (int i = 0; i < l.size(); i++) {
      spPage page = (spPage) this.l.get(i);

      page.renderToPlotter(craftRoboWriter);
      //craftRoboWriter.nextPage();
      if (craftRoboWriter instanceof DXFWriter)
        craftRoboWriter.translate(this.shapePack.materialWidth, 0);

    }
  }

  public float getHeight() {
float returnHeight = 0;
for (int i = 0; i < l.size(); i++) {
  spPage page = (spPage) this.l.get(i);
  returnHeight += page.getHeight();
}
return returnHeight;
  }

  public Element toXML() {
    Element element = new Element("g","http://www.w3.org/2000/svg");
    element.addAttribute(new Attribute("id","pages"));

   
    for (int i = 0; i < l.size(); i++) {
      spPage page = (spPage) this.l.get(i);
      element.appendChild(page.toXML())
    }
   
    return element;

   
  }







}
TOP

Related Classes of ShapePacking.spPages

TOP
Copyright © 2018 www.massapi.com. 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.