Package cc.sketchchair.widgets

Source Code of cc.sketchchair.widgets.WidgetPlanes

/*******************************************************************************
* 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.widgets;

import java.awt.event.MouseEvent;

import cc.sketchchair.core.GLOBAL;
import cc.sketchchair.core.LOGGER;
import cc.sketchchair.core.SETTINGS;
import cc.sketchchair.core.UITools;
import cc.sketchchair.geometry.SlicePlane;
import cc.sketchchair.geometry.SlicePlanes;

import ModalGUI.GUIButton;
import ModalGUI.GUIComponent;
import ModalGUI.GUIComponents;
import ModalGUI.GUIEvent;
import ModalGUI.GUILabel;
import ModalGUI.GUIPanel;
import ModalGUI.GUISlider;
import ModalGUI.GUITextfield;
import ModalGUI.GUIToggle;
import ModalGUI.ModalGUI;
import processing.core.PApplet;
import processing.core.PConstants;
import processing.core.PGraphics;

/**
* GUI widget used for changing layer properties.
* @author gregsaul
*
*/
public class WidgetPlanes extends GUIPanel {

  ModalGUI gui;
  public SlicePlanes planes = null;
  SlicePlane displayPlane = null;
  SlicePlane mouseOverPlane = null;
  GUIButton buttonAddPlane = null;

  GUIButton buttonDeletePlane = null;
  float offsetX = 650;
  float offsetY = 50;
  float minSelectHeight = 10;
  float scale = .2f;

  private float chairWidth;
  boolean resizing = false;
  private float chairDisplayWidth = 400;
  public GUISlider slider = null;
  private float lastWidth;
  private float chairScale = 1;
  private int selectWidth = 8;
  private GUIToggle mirrorPlaneToggle;
  private GUIButton selectAllPlanes;
  public boolean mirrorSelection = true;
  public GUISlider SlatSlider;
  GUISlider SlatSliderStart;
  public GUISlider SlatSliderEnd;
  GUISlider SlatSliderSpacing;
  private GUITextfield slotSizeTextfield;
  private GUITextfield scaleTextfield;
  private GUIButton toggleGuide;

  public WidgetPlanes(float x, float y, float w, float h, ModalGUI gui) {
    super(x, y, w, h, gui);
    this.gui = gui;
    this.renderBorder = false;

    // TODO Auto-generated constructor stub
  }

  private SlicePlane getMirrored(SlicePlane overPlane) {
    for (int i = 0; i < this.planes.getList().size(); i++) {
      SlicePlane curPlane = this.planes.getList().get(i);

      if (overPlane == curPlane) {
        int mirrorIndex = 0;

        mirrorIndex = this.planes.getList().size() - i;

        SlicePlane returnPlane = this.planes.getList().get(
            mirrorIndex - 1);

        if (returnPlane == overPlane)
          return null;
        else
          return returnPlane;

      }

    }

    return null;
  }

  SlicePlane getMouseOver(float mouseX, float mouseY) {

    if (this.planes == null)
      return null;

    float xOffset = 25;

    float plMaxY = planes.getMaxY();
    float plMinY = planes.getMinY();

    float plMaxX = planes.getMaxX();
    float plMinX = planes.getMinX();
    float plMinZ = planes.getMinZ();

    float chairW = (plMaxX - plMinX);
    float chairH = (plMaxY - plMinY);

    float largest = Math.max(chairW, chairH);
    float chairScale = this.chairDisplayWidth / largest;

    float centreX = ((plMaxX - plMinX) / 2) + plMinX;
    float centreY = ((plMaxY - plMinY) / 2) + plMinY;
    float maxProfileHeight = planes.getMaxProfileHeight();

    mouseOverPlane = null;
    float i = 0;
    for (SlicePlane plane : this.planes.getList()) {
      i++;
      float pX2 = 5;
      float selectBoxHeight = plane.profileHeight;
      float planeMaxY = plane.getSketch().getMaxY();

      if(selectBoxHeight <= 5){
        selectBoxHeight = maxProfileHeight;
        planeMaxY = plMaxY;
      }
     
     

      float pX1 = (((i * pX2 * 2)))

      //float pX1 = ((plane.getPlane().z - plMinZ) * chairScale)
          + this.chairDisplayWidth + this.getX() + xOffset;
      float pY1 = this.getY() + (this.getHeight() - 30)
          - ((plMaxY - planeMaxY) * chairScale);
      float pY2 = -(selectBoxHeight * chairScale);

      if (mouseX >= pX1 - this.selectWidth / 2
          && mouseX <= pX1 + this.selectWidth / 2 && mouseY <= pY1
          && mouseY >= pY1 + pY2) {
        //System.out.println("over");
        // plane.selected = true;
        mouseOverPlane = plane;
      }

    }
    return mouseOverPlane;

  }

  public void mirrorPlanesToggle(GUIEvent e) {
    this.mirrorSelection = !this.mirrorSelection;
  }

  public void mouseClicked(float mouseX, float mouseY) {

    if (mouseX >= offsetX && mouseX <= offsetX + 30 && mouseY >= offsetY
        && mouseY <= offsetY + 130) {

      this.resizing = true;

    }

  }

  public void mouseDragged(int mouseX, int mouseY) {
    float deltaMouseY = (GLOBAL.uiTools.mouseX - GLOBAL.uiTools.pmouseX)
        * 1 / this.scale;

    // if()
    // if(this.resizing && GLOBAL.sketchChairs.curChair != null)
    // GLOBAL.sketchChairs.curChair.changeWidth(deltaMouseY);
  }

  @Override
  public void mouseEvent(MouseEvent e) {

    if (!this.visible)
      return;

    super.mouseEvent(e);

    int mouseX = controller.applet.mouseX;
    int mouseY = controller.applet.mouseY;

    if (e.getID() == MouseEvent.MOUSE_PRESSED) {
      this.mousePressed(mouseX, mouseY);

    } else if (e.getID() == MouseEvent.MOUSE_RELEASED && wasClicked
        && isMouseOver()) {
      this.mouseClicked(mouseX, mouseY);
    }

    if (e.getID() == MouseEvent.MOUSE_RELEASED) {
      this.mouseReleased(mouseX, mouseY);
    }

  }

  public void mousePressed(float mouseX, float mouseY) {

  }

  public void mouseReleased(float mouseX, float mouseY) {

    SlicePlane overPlane = this.getMouseOver(mouseX, mouseY);
    planeClickedOn(overPlane);
  }
 
 
 
  public void planeClickedOn(SlicePlane plane) {
   
   
    SlicePlane overPlane = plane;
    SlicePlane mirroredPlane = null;

    if (overPlane != null) {
     
      if (this.mirrorSelection)
        mirroredPlane = this.getMirrored(overPlane);

      if (GLOBAL.uiTools.keyPressed
          && (GLOBAL.uiTools.keyCode == PConstants.CONTROL || GLOBAL.uiTools.keyCode == 157)) {
        if (GLOBAL.sketchChairs.getCurChair().selectedPlanes.getList()
            .contains(overPlane)) {
          GLOBAL.sketchChairs.getCurChair().selectedPlanes.getList()
              .remove(overPlane);
        } else {
          GLOBAL.sketchChairs.getCurChair().selectedPlanes
              .add(overPlane);
          overPlane.setSelected(true);
        }

        if (mirroredPlane != null) {
          if (GLOBAL.sketchChairs.getCurChair().selectedPlanes
              .getList().contains(mirroredPlane)) {
            GLOBAL.sketchChairs.getCurChair().selectedPlanes
                .getList().remove(mirroredPlane);
          } else {
            GLOBAL.sketchChairs.getCurChair().selectedPlanes
                .add(mirroredPlane);
            mirroredPlane.setSelected(true);
          }
        }

      } else {
        GLOBAL.sketchChairs.getCurChair().slicePlanesSlatSlices.unselectAll();
        GLOBAL.sketchChairs.getCurChair().selectedPlanes.unselectAll();
        GLOBAL.sketchChairs.getCurChair().selectedPlanes.empty();
        GLOBAL.sketchChairs.getCurChair().selectedPlanes.add(overPlane);
       
       
        overPlane.setSelected(true);
        //GLOBAL.sketchChairs.getCurChair().selectedPlanes
        //.add(overPlane);
        if (mirroredPlane != null) {
          GLOBAL.sketchChairs.getCurChair().selectedPlanes
              .add(mirroredPlane);
          mirroredPlane.setSelected(true);

        }
      }

    }

    if (this.resizing && GLOBAL.sketchChairs.getCurChair() != null)
      GLOBAL.sketchChairs.getCurChair().updateCollisionShape();

    GLOBAL.sketchChairs.getCurChair().selectedPlanes.selectAll();
   
    GLOBAL.previewWidget.rebuildPatternPreview();
    this.resizing = false;

  }
 
 

  public void render(PGraphics g) {

    super.render(g);

    if (this.minimized || !this.visible)
      return;

    update();

    g.fill(0);

    if (this.planes == null)
      return;

    float plMaxY = planes.getMaxY();
    float plMinY = planes.getMinY();
    float plMaxX = planes.getMaxX();
    float plMinX = planes.getMinX();
    float plMinZ = planes.getMinZ();

    float chairW = (plMaxX - plMinX);
    float chairH = (plMaxY - plMinY);

    float largest = Math.max(chairW, chairH);
    this.chairDisplayWidth = 45;
    this.chairScale = this.chairDisplayWidth / largest;
    float centreX = ((plMaxX - plMinX) / 2) + plMinX;
    float centreY = ((plMaxY - plMinY) / 2) + plMinY;

    float maxProfileHeight = planes.getMaxProfileHeight();
    // System.out.println(centreX);
    float xOffset = 25;
    int i = 0;
    for (SlicePlane plane : this.planes.getList()) {
      i++;
     
      float selectBoxHeight = plane.profileHeight;
      float planeMaxY = plane.getSketch().getMaxY();
     
      g.strokeWeight(1);
      g.noFill();

      if (plane.guide) {
        if (plane.isSelected())
          g.stroke(10, 10, 20);
        else
          g.stroke(100, 100, 200);
      } else {
        if (plane.isSelected())
          g.stroke(20, 20, 20);
        else
          g.stroke(200, 200, 200);
      }
     
      if(selectBoxHeight <= 5){
        if (plane.isSelected())
          g.stroke(100, 100, 200);
        else
          g.stroke(200, 200, 255);
       
        selectBoxHeight = maxProfileHeight;
        planeMaxY = plMaxY;
      }
       
      g.strokeWeight(2);

      float pX2 = 5;

      float pX1 = (((i * pX2 * 2))) + this.chairDisplayWidth
          + this.getX() + xOffset;
      float pY1 = this.getY() + (this.getHeight() - 30)
          - ((plMaxY - planeMaxY) * chairScale);
      float pY2 = -(selectBoxHeight * chairScale);

      g.rect(pX1, pY1, pX2, pY2);
    }

    if (displayPlane == null)
      return;

    g.pushMatrix();
    //
    // g.translate(((GLOBAL.windowWidth-plMaxX)*scale) +
    // (offsetX-chairWidth),offsetY);
    g.translate(this.getX() + 15, this.getY() + (this.getHeight() - 30));

    g.scale(chairScale);
    g.translate(-plMinX, -plMaxY);
    // g.scale(chairScale);
    // g.translate(100,100);
    if (mouseOverPlane == null)
      displayPlane.renderSilhouette(g);
    else
      mouseOverPlane.renderSilhouette(g);

    g.popMatrix();
  }

  public void selectAllPlanes(GUIEvent e) {
    GLOBAL.sketchChairs.getCurChair().selectedPlanes.empty();
    if (GLOBAL.sketchChairs.getCurChair() != null) {
      GLOBAL.sketchChairs.getCurChair().selectedPlanes
          .add(GLOBAL.sketchChairs.getCurChair().slicePlanesSlatSlices);
      GLOBAL.sketchChairs.getCurChair().selectedPlanes
          .add(GLOBAL.sketchChairs.getCurChair().getSlicePlanesY());

    }
  }

  @Override
  public void setup() {
    String LANGUAGE = "ENG";
    float panelX = 200;
    this.clear();
    this.setContentPosition(250, 25);// = 200;

    buttonAddPlane = new GUIButton(panelX, 15,
        "gui/GUI_LAYER_NEWLAYER_BUTTON.png", this.controller);
    buttonAddPlane.addActionListener(GLOBAL.uiTools, "addPlane",
        UITools.LEG_TOOL);
    buttonAddPlane.setLabel("new");
    buttonAddPlane.label.align = GUILabel.CENTRE;
    buttonAddPlane.label.layout = GUILabel.UNDER_COMPONENT;
    placeComponent(buttonAddPlane);
    buttonAddPlane.setParentPanel(this);

    buttonDeletePlane = new GUIButton(panelX, 15,
        "gui/GUI_LAYER_DELETE_BUTTON.png", this.controller);
    buttonDeletePlane.addActionListener(GLOBAL.uiTools,
        "removeSelectedPlanes", UITools.LEG_TOOL);
    buttonDeletePlane.setLabel("delete");
    buttonDeletePlane.label.align = GUILabel.CENTRE;
    buttonDeletePlane.label.layout = GUILabel.UNDER_COMPONENT;

    super.placeComponent(buttonDeletePlane);
    buttonDeletePlane.setParentPanel(this);

    this.mirrorPlaneToggle = new GUIToggle(200, 50,
        "gui/GUI_LAYER_MIRROR_BUTTON.png", this.controller);
    mirrorPlaneToggle.addActionListener(this, "mirrorPlanesToggle",
        UITools.LEG_TOOL);
    mirrorPlaneToggle.setLabel("mirror");
    mirrorPlaneToggle.label.align = GUILabel.CENTRE;
    mirrorPlaneToggle.label.layout = GUILabel.UNDER_COMPONENT;

    //this.mirrorPlaneToggle.addToolTip(GLOBAL.applet,
    //    "GUI_SLICE_MIRROR_TOOLTIP", LANGUAGE);

    super.placeComponent(this.mirrorPlaneToggle);
    this.mirrorPlaneToggle.setParentPanel(this);
    this.mirrorPlaneToggle.setState(true);

    this.selectAllPlanes = new GUIButton(200, 70,
        "gui/GUI_LAYER_SELECTALL_BUTTON.png", this.controller);
    this.selectAllPlanes.addActionListener(this, "selectAllPlanes",
        UITools.LEG_TOOL);
    this.selectAllPlanes.setLabel("all");
    this.selectAllPlanes.label.align = GUILabel.CENTRE;
    this.selectAllPlanes.label.layout = GUILabel.UNDER_COMPONENT;
    ///this.selectAllPlanes.addToolTip(GLOBAL.applet,
    //    "proButtons/GUI_SLICE_SELECT_ALL_TOOLTIP", LANGUAGE);

    super.placeComponent(this.selectAllPlanes);
    this.selectAllPlanes.setParentPanel(this);

    this.toggleGuide = new GUIButton(230, 15,
        "gui/GUI_LAYER_GUIDELAYER_BUTTON.png", this.controller);
    this.toggleGuide.addActionListener(this, "toggleGuide",
        UITools.LEG_TOOL);
    toggleGuide.setLabel("guide");
    toggleGuide.label.align = GUILabel.CENTRE;
    toggleGuide.label.layout = GUILabel.UNDER_COMPONENT;

    ///this.selectAllPlanes.addToolTip(GLOBAL.applet,
    //    "proButtons/GUI_SLICE_SELECT_ALL_TOOLTIP", LANGUAGE);

    super.placeComponent(this.toggleGuide);
    this.toggleGuide.setParentPanel(this);

    slider = new GUISlider(550, 40, 150, 0, 2000, this.controller);
    slider.setParentPanel(this);
    slider.setVal(SETTINGS.chair_width);
    slider.setLabel("chair width");
    slider.label.align = GUILabel.CENTRE;
    slider.label.layout = GUILabel.UNDER_COMPONENT;
    slider.setShowValLabel(true);
    slider.setLabelValMultiplier(1.0f);
   
   
   
   
    //TODO removed this
    /*
    GLOBAL.widgetMaterials.setSlotSizeTextfield(new GUITextfield(15, 70,
        60, 15, gui));
    GLOBAL.widgetMaterials.getSlotSizeTextfield().addActionListener(null,
        "mirrorPlanesToggle", UITools.LEG_TOOL);

    GLOBAL.widgetMaterials.getSlotSizeTextfield().setText(
        Float.toString(SETTINGS.materialThickness));
    GLOBAL.widgetMaterials.getSlotSizeTextfield().setLabel("mm (d)");

 
    materialsPanel.add(GLOBAL.widgetMaterials.getSlotSizeTextfield());
    GLOBAL.widgetMaterials.getSlotSizeTextfield().setParentPanel(
        materialsPanel);
    */
    super.add(slider);
    slider.addNumberField();

    this.hideSelectBar = true;

  }

  public void setupGUI(PApplet applet, ModalGUI gui) {

  }

  public void toggleGuide(GUIEvent e) {
    if (GLOBAL.sketchChairs.getCurChair() != null) {
      GLOBAL.sketchChairs.getCurChair().selectedPlanes.toggleGuide();
    }
  }

  @Override
  public void update() {
    super.update();

    if (slider == null)
      return;

    if (GLOBAL.sketchChairs.getCurChair() != null) {
      // GLOBAL.sketchChairs.curChair.startCoverPercent =
      // this.SlatSliderStart.getVal();
      // GLOBAL.sketchChairs.curChair.endCoverPercent =
      // this.SlatSliderEnd.getVal();
      // GLOBAL.sketchChairs.curChair.slatSpacingX =
      // this.SlatSliderSpacing.getVal();

    }
    if (this.lastWidth != slider.getVal()) {
      if (GLOBAL.sketchChairs.getCurChair() != null) {

        GLOBAL.sketchChairs.getCurChair()
            .setWidth(slider.getVal());
        GLOBAL.sketchChairs.getCurChair().rebuildLength = true;
        GLOBAL.sketchChairs.getCurChair().buildLen();
      }
      this.lastWidth = slider.getVal();
    } else {
      if (GLOBAL.sketchChairs.getCurChair() != null)
        slider.setVal(GLOBAL.sketchChairs.getCurChair().getWidth());
      else
        slider.setVal(0);
    }

    if (this.planes != null && GLOBAL.sketchChairs.getCurChair() != null) {

      this.chairWidth = GLOBAL.sketchChairs.getCurChair().getWidth();
      // buttonAddPlane.setPos((chairWidth/2*scale) + offsetX , 10 +
      // offsetY);
      // buttonDeletePlane.setPos((chairWidth/2*scale) + + offsetX , 30 +
      // offsetY);
      displayPlane = GLOBAL.sketchChairs.getCurChair().selectedPlanes
          .getFirst();
    }

    getMouseOver(GLOBAL.uiTools.mouseX, GLOBAL.uiTools.mouseY);
  }

  public void unselectAll() {
    GLOBAL.sketchChairs.getCurChair().slicePlanesSlatSlices.unselectAll();
    GLOBAL.sketchChairs.getCurChair().selectedPlanes.unselectAll();
    GLOBAL.sketchChairs.getCurChair().selectedPlanes.empty();   
  }

}
TOP

Related Classes of cc.sketchchair.widgets.WidgetPlanes

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.