Package ShapePacking

Source Code of ShapePacking.spOutline

/*******************************************************************************
* 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.Hashtable;
import java.util.List;
import java.util.Map;

import cc.sketchchair.functions.functions;
import cc.sketchchair.sketch.Sketch;
import cc.sketchchair.sketch.SketchPath;
import cc.sketchchair.sketch.SketchPoint;
import cc.sketchchair.sketch.SketchSpline;

import ToolPathWriter.DXFWriter;
import ToolPathWriter.HPGLWriter;

import processing.core.PConstants;
import processing.core.PGraphics;

import toxi.geom.Vec2D;

/**
* Cutting paths for pieces.
* @author gregsaul
*
*/
public class spOutline extends SketchPath {
//  List<spPoint> l = new ArrayList<spPoint>(); // list of Vec2D points (toxi)
//
//  //Map bezierPoints = new Hashtable();
//
//  spOutline(ArrayList l2) {
//    this.l = l2;
//
//  }
//
//  //public spOutline(ArrayList l2) {
//  //  this.l = l2;
//  //this.bezierPoints = beziers;
//
//  //System.out.println(this.bezierPoints);
//  //}
//
//  public float getMaxX() {
//    float maxX = 0;
//    for (int i = 0; i < l.size(); i++) {
//      spPoint vec = (spPoint) l.get(i);
//      if (i == 0)
//        maxX = vec.x;
//
//      if (vec.x > maxX)
//        maxX = vec.x;
//    }
//    return maxX;
//  }
//
//  public float getMaxY() {
//    float maxY = 0;
//    for (int i = 0; i < l.size(); i++) {
//      spPoint vec = (spPoint) l.get(i);
//      if (i == 0)
//        maxY = vec.y;
//
//      if (vec.y > maxY)
//        maxY = vec.y;
//    }
//    return maxY;
//  }
//
//  public float getMinX() {
//    float minX = 0;
//
//    for (int i = 0; i < l.size(); i++) {
//      spPoint vec = (spPoint) l.get(i);
//
//      if (i == 0)
//        minX = vec.x;
//
//      if (vec.x < minX)
//        minX = vec.x;
//
//    }
//    return minX;
//
//  }
//
//  public float getMinY() {
//    float minY = 0;
//    for (int i = 0; i < l.size(); i++) {
//      spPoint vec = (spPoint) l.get(i);
//      if (i == 0)
//        minY = vec.y;
//
//      if (vec.y < minY)
//        minY = vec.y;
//    }
//    return minY;
//  }
//
//  public void offsetPath(Vec2D offset) {
//    for (int i = 0; i < l.size(); i++) {
//      spPoint vec = (spPoint) l.get(i);
//      spPoint newVec = new spPoint(vec.x + offset.x, vec.y + offset.y);
//
//      //  if(vec.containsBezier())
//      //    System.out.println("OUTLINE " + vec + " : " + vec.controlPoint1 + " : " + vec.controlPoint2);
//
//      if (vec.containsBezier()) {
//
//        if (vec.controlPoint1 != null) {
//          newVec.controlPoint1 = new Vec2D(vec.controlPoint1.x
//              + offset.x, vec.controlPoint1.y + offset.y);
//        }
//
//        if (vec.controlPoint2 != null) {
//          newVec.controlPoint2 = new Vec2D(vec.controlPoint2.x
//              + offset.x, vec.controlPoint2.y + offset.y);
//        }
//
//      }
//      /*
//      if(this.bezierPoints.containsKey(vec)){
//        BezierControlNode bc = (BezierControlNode) this.bezierPoints.get(vec);
//        bc.c1.x += offset.x;
//        bc.c1.y += offset.y;
//        bc.c2.x += offset.x;
//        bc.c2.y += offset.y;
//        this.bezierPoints.remove(vec);
//        this.bezierPoints.put(newVec, bc);
//      }
//      */
//
//      this.l.set(i, newVec);
//
//    }
//  }
//
  public void render(PGraphics g) {
    this.setClosed(true);
    this.renderFace(g);
    //this.renderNodes(g);
  }

  public spOutline(Sketch parentSketch, ArrayList<SketchPoint> outline) {
    super(parentSketch, outline);
    this.setClosed(true);
    // TODO Auto-generated constructor stub
  }

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

    for (int i = 1; i < this.l.size() + 1; i++) {
      SketchPoint curVec = null;
      SketchPoint preVec = null;

      if (i >= 1)
        preVec = (SketchPoint) this.l.get(i - 1);

      // --- last or first point ---
      if (i == 1) {
        dxf.lineTo(preVec.x + offsetX, preVec.y + offsetY);
      }

      if (i == this.l.size()) {
        curVec = (SketchPoint) this.l.get(0);
      } else {
        curVec = (SketchPoint) this.l.get(i);
      }

      if (curVec.containsBezier() || preVec.containsBezier()) {

        for (float t = 0; t <= 1; t += 0.1f) {
          float x = functions.bezierPoint(preVec.x,
              preVec.getControlPoint2().x,
              curVec.getControlPoint1().x, curVec.x, t);
          float y = functions.bezierPoint(preVec.y,
              preVec.getControlPoint2().y,
              curVec.getControlPoint1().y, curVec.y, t);
          dxf.lineTo(x + offsetX, y + offsetY);
        }

      } else {
        dxf.lineTo(curVec.x + offsetX, curVec.y + offsetY);
      }

      if (i == this.l.size()) {
        dxf.lineTo(curVec.x + offsetX, curVec.y + offsetY);

      }

    }

  }

  /*
        public void addBeziers(Hashtable beziers) {
          this.bezierPoints = beziers; 
        }
        */

  public void renderToPlotter(HPGLWriter hpglWriter) {
    for (int i = 1; i < this.l.size() + 1; i++) {
      SketchPoint curVec = null;
      SketchPoint preVec = null;

      // --- last or first point ---
      if (i == 1) {
        curVec = (SketchPoint) this.l.get(0);
        hpglWriter.move(curVec.x, curVec.y);
      }

      if (i >= 1)
        preVec = (SketchPoint) this.l.get(i - 1);

      if (i == this.l.size()) {
        curVec = (SketchPoint) this.l.get(0);
        preVec = (SketchPoint) this.l.get(this.l.size() - 1);

      } else {
        curVec = (SketchPoint) this.l.get(i);
      }

      /*
      if (this.bezierPoints.containsKey(curVec) || preVec != null
          && this.bezierPoints.containsKey(preVec)) {

        spPoint c1 = preVec;
        spPoint c2 = curVec;

        if (c1 == null)
          c1 = new spPoint(0, 0);

        if (preVec != null && this.bezierPoints.containsKey(preVec)) {
          BezierControlNode bc = (BezierControlNode) this.bezierPoints
              .get(preVec);
          c1 = bc.c2;
        }

        if (this.bezierPoints.containsKey(curVec)) {
          BezierControlNode bc = (BezierControlNode) this.bezierPoints
              .get(curVec);
          c2 = bc.c1;
        }

        if (c1 != null && c2 != null && curVec != null)
        //  g.bezierVertex(c1.x, c1.y, c2.x, c2.y, curVec.x, curVec.y);
        hpglWriter.bezier(preVec.x,preVec.y,c1.x, c1.y, c2.x, c2.y, curVec.x, curVec.y);


      }
      */

      if (curVec.containsBezier() || preVec.containsBezier()) {
        hpglWriter.bezier(preVec.x, preVec.y,
            preVec.getControlPoint2().x,
            preVec.getControlPoint2().y,
            curVec.getControlPoint1().x,
            curVec.getControlPoint1().y, curVec.x, curVec.y);

      } else {
        if (false) {
          //g.curveVertex(curVec.x, curVec.y);
        } else {
          //g.vertex(curVec.x, curVec.y);
          hpglWriter.lineTo(curVec.x, curVec.y);
        }
      }

    }

  }
//
//  public void scale(float scale) {
//    for (int i = 0; i < l.size(); i++) {
//      spPoint vec = (spPoint) l.get(i);
//      vec.scaleSelff(scale);
//    }
//    /*
//    for (Object obj : this.bezierPoints.values()){
//
//      BezierControlNode bc = (BezierControlNode)obj;
//     
//      bc.c1.scaleSelf(scale);
//      bc.c2.scaleSelf(scale);
//     
//    }
//    */
//
//  }
//
 
   
//    ArrayList points =  new ArrayList<spPoint>();
//   
//    for(int i =0 ; i < this.l.size() ; i++){
//      spPoint point = this.l.get(i);
//      points.add(point.clone());
//    }
//    spOutline clone = new spOutline(points);
//    return clone;
//  }

  public spOutline clone() {
    spOutline clone = new spOutline(this.parentSketch,this.cloneArray());
    return clone;
   
  }
 
  public void offsetPath(float o){
    super.offsetPath(o);
  }

 



}
TOP

Related Classes of ShapePacking.spOutline

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.