Package ShapePacking

Source Code of ShapePacking.spShape

/*******************************************************************************
* 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 nu.xom.Attribute;
import nu.xom.Element;

import cc.sketchchair.core.GLOBAL;
import cc.sketchchair.core.LOGGER;
import cc.sketchchair.core.PickBuffer;
import cc.sketchchair.core.SETTINGS;
import cc.sketchchair.sketch.Sketch;
import cc.sketchchair.sketch.SketchSpline;

import ToolPathWriter.DXFWriter;
import ToolPathWriter.HPGLWriter;
import processing.core.PGraphics;
import toxi.geom.Vec2D;
import toxi.geom.Vec3D;

/**
* A low level base class for any SketchShapes in the package.
* @author gregsaul
*
*/
public class spShape {
  spOutlines outlines = new spOutlines();
  spOutlines collisionOutlines = new spOutlines();

  Sketch sketch;
  boolean built = false;
 
  float width = 0;
  float height = 0;
  float offsetX = 0;
  float offsetY = 0;
  float scale = 1;
  float rotate = 0;
 
 
  public Object linkedObject;

  private String label;

  public boolean packed = false;
  public spShapePack shapePack;


  public void addOutline(ArrayList l) {
    outlines.add(new spOutline(new Sketch(GLOBAL.uiTools.SketchTools, GLOBAL.SketchGlobals),l));
  }

  public void addCollisionOutline(ArrayList l) {
    collisionOutlines.add(new spOutline(new Sketch(GLOBAL.uiTools.SketchTools, GLOBAL.SketchGlobals),l));
  }
 
 
 
 
  public void build() {

   
    this.outlines.build();
    this.collisionOutlines.build();
    width = this.outlines.getWidth();
    height = this.outlines.getHeight();
   
   
    for(int i =0; i < this.collisionOutlines.l.size();i++){
      spOutline outline = (spOutline) this.collisionOutlines.l.get(i);
      outline.offsetPath(1.5f*shapePack.scale);
      //float scaleCol = 0.1f;
      //outlineClone.scale(scaleCol,new Vec3D(0,0,0));   
      //outlineClone.offsetPath(new Vec2D(-(width-(width/scaleCol))/2,-(height-(height/scaleCol))/2)); 
    }
   
    //collisionOutlines.simplifyDouglasPeucker(1f);


  }

  public float getHeight() {
    return height;
  }

  public float getWidth() {
    return width;
  }

  public void render(PGraphics g) {

    g.fill(0);
    if(GLOBAL.shapePack.addLabels && this.label != null){
    g.text(this.label,outlines.getMinX()-(g.textWidth(this.label)+1),outlines.getMinY()- (1));
    }

    g.fill(0);
    g.noStroke();
    //g.stroke(0,0,0);
    this.outlines.render(g);
   
    if(SETTINGS.DEBUG){
      g.stroke(255,0,0);
      this.collisionOutlines.render(g);
      this.collisionOutlines.renderDebug(g);
    }


  }
 
 
  public void renderPickBuffer(PGraphics pickBuffer) {
       
    pickBuffer.fill(PickBuffer.getInstance().getPickColour(this.linkedObject));
    pickBuffer.noStroke();
    this.outlines.render(pickBuffer);
   
  }
 
 

  public void renderDXF(DXFWriter dxf, float offsetX, float offsetY) {

    //if(this.label != null)
    //g.text(this.label,outlines.getMinX(),outlines.getMinY());

    this.outlines.renderDXF(dxf, offsetX, offsetY);

  }

  public void renderToPlotter(HPGLWriter hpglWriter) {
    this.outlines.renderToPlotter(hpglWriter);

  }

  public void scale(float scale) {
    this.outlines.scale(scale);
    this.collisionOutlines.scale(scale);

  }

  public void setLabel(String string) {
    this.label = string;
  }

  public void translate(float xPos, float yPos) {
    this.outlines.translate(xPos,yPos);
    this.collisionOutlines.translate(xPos,yPos);

   
  }
 
  protected spShape clone(){
    spShape clone = new spShape();
    clone.outlines = this.outlines.clone();
    clone.collisionOutlines = this.collisionOutlines.clone();
    clone.height =  this.height;
    clone.width = this.width;
    clone.offsetX = this.offsetX;
    clone.offsetY = this.offsetY;
    clone.label = this.label;
    clone.linkedObject = this.linkedObject;
    return clone;
  }

  public void rotate(float r) {
    Vec2D centre = this.outlines.getCentre();
    this.outlines.rotate(r,centre);
    this.collisionOutlines.rotate(r,centre);


  }

  public boolean collides(spShape shapeOther) {
    return this.collisionOutlines.collides(shapeOther);
  }

  public boolean inBoundss(float pageX, float pageY, float pageW,float pageH) {
    if(this.collisionOutlines.getMaxX() > pageX+pageW || this.collisionOutlines.getMinX() < pageX ||
      this.collisionOutlines.getMaxY() > pageY+pageH || this.collisionOutlines.getMinY() < pageY 
        )
      return false;
   
    return true;
   
  }
  public boolean inBounds(float pageX, float pageY, float pageW,float pageH) {
    float maxX = this.outlines.getMaxX() ;
    float minX = this.outlines.getMinX();
    float maxY = this.outlines.getMaxY() ;
    float minY = this.outlines.getMinY() ;
   
   
    if(maxX > pageX+pageW ||  minX < pageX ||
        maxY > pageY+pageH || minY< pageY 
        )
      return false;
   
    return true;
   
  }
 

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

   
  }

  public boolean collidesBounds(spShape shapeOther, float border) {
    float x1max = this.outlines.getMaxX() + border;
    float x1min = this.outlines.getMinX()- border;
    float y1max = this.outlines.getMaxY()+ border;
    float y1min = this.outlines.getMinY()- border;

    float x2max = shapeOther.outlines.getMaxX()+ border;
    float x2min = shapeOther.outlines.getMinX()- border;
    float y2max = shapeOther.outlines.getMaxY()+ border;
    float y2min = shapeOther.outlines.getMinY()- border;

    if ((x1min < x2max) && (x1max > x2min) && (y1min < y2max)
        && (y1max > y2min)

    ) {
      return true;
    } else {
      return false;
    }
  }





}
TOP

Related Classes of ShapePacking.spShape

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.