Package cc.sketchchair.sketch

Source Code of cc.sketchchair.sketch.SketchOutline

/*******************************************************************************
* 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/>.
******************************************************************************/
//#IF JAVA
package cc.sketchchair.sketch;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.vecmath.Vector3f;

import cc.sketchchair.core.LOGGER;

import com.bulletphysics.linearmath.Transform;
import ShapePacking.spShape;
import processing.core.PApplet;
import processing.core.PGraphics;
import toxi.geom.Vec2D;
import toxi.geom.Vec3D;

/**
* Represents the generated outline of SketchShapes, this is used as the cutting outline and is passed to the shape packing package.
* @author gregsaul
*
*/
//#ENDIF JAVA

public class SketchOutline {
  //List<SketchPoint> l = new ArrayList<SketchPoint>();

  private SketchPath path = new SketchPath(getParentSketch());
  public Sketch parentSketch = null;

  public SketchOutline(Sketch sketch) {
    setParentSketch(sketch);
    this.getPath().parentSketch = this.parentSketch;
    getPath().editable = false;
    getPath().setClosed(true);
  }

  public void add(SketchPoint point) {
    getPath().add(point);
    // this.l.add(vec2d);
  }

  public ArrayList cloneArray() {
    return getPath().cloneArray();
  }

  public void flipHorizontal(toxi.geom.Vec3D centre) {
    this.getPath().flipHorizontal(centre);

  }

  public float getArea() {

    return this.getWidth() * this.getHeight();

  }

  public Vec2D getCentreOfMass() {

    long x = 0;
    long y = 0;
    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);

      x += v.x;
      y += v.y;
    }
    if (this.getPath().size() > 0)
      return new Vec2D(x / this.getPath().size(), y
          / this.getPath().size());
    else
      return null;
  }

  float getHeight() {
    float minY = -1;
    float maxY = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);
      if (minY == -1 || v.y < minY)
        minY = v.y;

      if (maxY == -1 || v.y > maxY)
        maxY = v.y;
    }

    return maxY - minY;
  }

  float getMaxX() {
    float maxX = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);

      if (maxX == -1 || v.x > maxX)
        maxX = v.x;
    }

    return maxX;
  }

  public float getMaxXWorldSpace(Transform currentWorldTransform) {
    float maxX = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);

      Vector3f vecWorld = new Vector3f(
          v.x
              / getParentSketch().getSketchGlobals().physicsEngineScale,
          v.y
              / getParentSketch().getSketchGlobals().physicsEngineScale,
          0);
      currentWorldTransform.transform(vecWorld);
      vecWorld.x -= currentWorldTransform.origin.x;
      vecWorld.scale(getParentSketch().getSketchGlobals().physicsEngineScale);

      if (i == 0 || vecWorld.x > maxX)
        maxX = vecWorld.x;
    }

    return maxX;
  }

  float getMaxY() {
    float maxY = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);

      if (maxY == -1 || v.y > maxY)
        maxY = v.y;
    }

    return maxY;
  }

  public float getMaxYWorldSpace(Transform currentWorldTransform) {
    float maxY = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);

      Vector3f vecWorld = new Vector3f(
          v.x
              / getParentSketch().getSketchGlobals().physicsEngineScale,
          v.y
              / getParentSketch().getSketchGlobals().physicsEngineScale,
          0);
      //Vector3f vecWorld = new Vector3f(1,1,1);
      //System.out.print(currentWorldTransform.origin);
      //System.out.print("before Y:"+vecWorld);
      currentWorldTransform.transform(vecWorld);
      //System.out.print(" after1  Y:"+vecWorld);

      vecWorld.y -= currentWorldTransform.origin.y;
      //System.out.print(" after2  Y:"+vecWorld);
      vecWorld.scale(getParentSketch().getSketchGlobals().physicsEngineScale);
      //System.out.println(" after3  Y:"+vecWorld);

      if (i == 0 || -vecWorld.y > maxY)
        maxY = -vecWorld.y;
    }

    return maxY;
  }

  float getMinX() {

    float minX = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);
      if (minX == -1 || v.x < minX)
        minX = v.x;

    }

    return minX;
  }

  public float getMinXWorldSpace(Transform currentWorldTransform) {
    float MinX = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);

      Vector3f vecWorld = new Vector3f(
          v.x
              / getParentSketch().getSketchGlobals().physicsEngineScale,
          v.y
              / getParentSketch().getSketchGlobals().physicsEngineScale,
          0);

      currentWorldTransform.transform(vecWorld);
      vecWorld.x -= currentWorldTransform.origin.x;
      vecWorld.scale(getParentSketch().getSketchGlobals().physicsEngineScale);

      if (i == 0 || vecWorld.x < MinX)
        MinX = vecWorld.x;
    }

    return MinX;
  }

  float getMinY() {

    float minY = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);
      if (minY == -1 || v.y < minY)
        minY = v.y;

    }

    return minY;
  }

  public float getMinYWorldSpace(Transform currentWorldTransform) {
    float MinY = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);

      Vector3f vecWorld = new Vector3f(
          v.x
              / getParentSketch().getSketchGlobals().physicsEngineScale,
          v.y
              / getParentSketch().getSketchGlobals().physicsEngineScale,
          0);
      currentWorldTransform.transform(vecWorld);
      vecWorld.y -= currentWorldTransform.origin.y;
      vecWorld.scale(getParentSketch().getSketchGlobals().physicsEngineScale);

      if (i == 0 || -vecWorld.y < MinY)
        MinY = -vecWorld.y;
    }

    return MinY;
  }

  public Sketch getParentSketch() {
    return parentSketch;
  }

  /**
   * @return the path
   */
  public SketchPath getPath() {
    return this.path;
  }

  public ArrayList getVector2DLoop() {
    return getPath().getVectorLoop();
  }

  float getWidth() {
    float minX = -1;
    float maxX = -1;

    for (int i = 0; i < this.getPath().size(); i++) {
      SketchPoint v = (SketchPoint) this.getPath().get(i);
      if (minX == -1 || v.x < minX)
        minX = v.x;

      if (maxX == -1 || v.x > maxX)
        maxX = v.x;
    }

    return maxX - minX;
  }

  public void optimize() {
    this.path.removeOverlapping(PApplet.EPSILON);
  }

  public void optimizeForCollision() {

    /*
     * Vec2D lastStoredPoint = (Vec2D) this.l.get(0); float minDist = 5;
     * float lastAngle = 0; for (int i = 2; i < this.l.size()-1; i++) {
     * Vec2D curVec = (Vec2D) this.l.get(i);
     *
     * if(curVec.distanceTo(lastStoredPoint) > minDist){ lastStoredPoint =
     * curVec; }else{
     *
     * this.l.remove(i-1); i--; }
     *
     * }
     */

  }

  public void render(PGraphics g) {
    getPath().isOutline = true;
    getPath().setClosed(true);
    getPath().render(g);
  }
 
  public void renderFlat(PGraphics g){
    getPath().renderFlat(g);
  }

  public void scale(float scale, toxi.geom.Vec3D centre) {
    this.getPath().scale(scale, centre);
  }

  public void setParentSketch(Sketch sketch) {
    parentSketch = sketch;
  }

  /**
   * @param path the path to set
   */
  public void setPath(SketchPath path) {
    this.path = path;
  }

  public void setupSpShape(spShape shape) {
    getPath().setupSpShape(shape);
  }
  public void addCollisionToSpShape(spShape shape) {
    getPath().addCollisionToSpShape(shape);
  }
 

}
TOP

Related Classes of cc.sketchchair.sketch.SketchOutline

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.