Package cc.sketchchair.environments

Source Code of cc.sketchchair.environments.Environment

/*******************************************************************************
* 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 cc.sketchchair.environments;

import cc.sketchchair.core.GLOBAL;
import cc.sketchchair.core.LOGGER;
import cc.sketchchair.core.MeasureTool;
import cc.sketchchair.core.UITools;
import processing.core.PApplet;
import processing.core.PGraphics;
import processing.core.PImage;
import toxi.geom.Vec2D;
import toxi.geom.Vec3D;

/**
* Environments are 2d textures loaded from png's that can be places of a sketchPlane for reference.
*
* @author gregsaul
*
*/
public class Environment {
  float scale = 1f;
  public Vec2D pos = new Vec2D(400, 150);
  Vec2D posDelta = new Vec2D(0, 0);

  private PImage img = null;
  public boolean visible = true;
  public boolean beingDragged = false;
  public boolean beingScaled = false;
  public String fileName;
  boolean destroy;
  private int minX = -1;
  private int maxX = -1;
  private int minY = -1;
  private int maxY = -1;
  public String linkedChair = null;
  public boolean beingPushed = false;
  private float zPos = 0;

  Environment(PImage imgIn) {
    this.img = imgIn;
    this.getMinMax();
  }

  public Environment(String fileName, PApplet applet) {
    this.fileName = fileName;
    this.img = applet.loadImage(fileName);

    if (this.img == null)
      destroy();
    else
      this.getMinMax();

  }

  public void destroy() {
    this.destroy = true;
  }

  void getMinMax() {
    img.loadPixels();

    for (int x = 0; x < img.width; x++) {
      for (int y = 0; y < img.height; y++) {

        int col = img.get(x, y);

        if (col != 16777215) {
          if (x > this.maxX || this.maxX == -1)
            this.maxX = x;

          if (x < this.minX || this.minX == -1)
            this.minX = x;

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

          if (y < this.minY || this.minY == -1)
            this.minY = y;

        }

      }

    }

  }

  boolean isOver(Vec2D p) {
    //System.out.println(p + " " + pos);
    LOGGER.info("isOver?");
    if (p.x < pos.x || p.x > pos.x + (img.width * this.scale)
        || p.y < pos.y || p.y > pos.y + (img.height * this.scale)) {
      LOGGER.info("not in bounds" + p.x + " " + pos.x);

      return false;

    }

    img.loadPixels();
    int col = img.get((int) ((p.x - pos.x) / this.scale),
        (int) ((p.y - pos.y) / this.scale));

    LOGGER.info("COLOR" + col);
    //System.out.println((int)((p.x-pos.x)*this.scale)+ " " +(int)((p.y-pos.y)*this.scale) + "col" + GLOBAL.applet.brightness(col));

    if (GLOBAL.applet.brightness(col) != 0
        && !GLOBAL.person.clickedOnPerson)
      return true;
    else
      return false;

  }

  public void render(PGraphics g) {
    // TODO Auto-generated method stub
    g.pushMatrix();
    g.translate(pos.x, pos.y, zPos);
    g.scale(this.scale);
    g.image(this.img, 0, 0);
    g.popMatrix();

    if (beingScaled) {
      MeasureTool.measure(pos.x + (this.maxX * this.scale), pos.x
          + (this.minX * this.scale), pos.y
          + (this.maxY * this.scale), pos.y
          + (this.minY * this.scale), g);

    }
  }

  void update() {
    if (beingDragged) {
      pos.x += (GLOBAL.uiTools.mouseX - GLOBAL.uiTools.pmouseX)
          / GLOBAL.getZOOM();
      pos.y += (GLOBAL.uiTools.mouseY - GLOBAL.uiTools.pmouseY)
          / GLOBAL.getZOOM();

      posDelta.x += (GLOBAL.uiTools.mouseX - GLOBAL.uiTools.pmouseX)
          / GLOBAL.getZOOM();
      posDelta.y += (GLOBAL.uiTools.mouseY - GLOBAL.uiTools.pmouseY)
          / GLOBAL.getZOOM();

    }

    if (beingScaled) {
      scale += ((GLOBAL.uiTools.mouseX - GLOBAL.uiTools.pmouseX) / GLOBAL
          .getZOOM()) * .01f;
      scale += ((GLOBAL.uiTools.mouseY - GLOBAL.uiTools.pmouseY) / GLOBAL
          .getZOOM()) * .01f;
    }

    if (beingPushed) {
      zPos += ((GLOBAL.uiTools.mouseX - GLOBAL.uiTools.pmouseX) / GLOBAL
          .getZOOM());
    }

  }

  void wakeUp() {

    if (this.linkedChair != null) {
      GLOBAL.sketchChairs.hybernate();
      UITools.load(this.linkedChair);

      if (GLOBAL.sketchChairs.getCurChair() != null) {
        GLOBAL.sketchChairs.getCurChair().drag(
            new Vec3D(posDelta.x, posDelta.y, 0));
        //float height = (this.maxY - minY)*this.scale;
        //GLOBAL.sketchChairs.curChair.setHeight(height);
      }
      this.destroy();
    }

  }
}
TOP

Related Classes of cc.sketchchair.environments.Environment

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.