/**
* SlicePlanes
*
* ___________________
* / /_
* / / /_
* / / / /_
* / / / / /
* / / / / /
* /__________________/ / / /
* /__________________/ / /
* /__________________/ /
* /__________________/
*/
package cc.sketchchair.geometry;
import java.util.ArrayList;
import java.util.List;
import nu.xom.Element;
import processing.core.PConstants;
import processing.core.PGraphics;
import processing.pdf.PGraphicsPDF;
import toxi.geom.Plane;
import toxi.geom.Vec2D;
import toxi.geom.Vec3D;
import cc.sketchchair.core.GLOBAL;
import cc.sketchchair.core.LOGGER;
import cc.sketchchair.core.PickBuffer;
import cc.sketchchair.sketch.SETTINGS_SKETCH;
import cc.sketchchair.sketch.Sketch;
import cc.sketchchair.sketch.SketchPath;
import cc.sketchchair.sketch.SketchPoint;
import cc.sketchchair.sketch.SketchShape;
import cc.sketchchair.sketch.SketchShapes;
import cc.sketchchair.sketch.SketchSpline;
import com.bulletphysics.linearmath.Transform;
/**
* A container class for Sliceplanes.
* @author gregsaul
*
*/
public class SlicePlanes {
SlicePlane selectedSlicePlane;
int selectedSlicePlaneNum = 0;
private List<SlicePlane> l = new ArrayList<SlicePlane>();
public float depthZ;
public SlicePlanes() {
// TODO Auto-generated constructor stub
}
public SlicePlanes(Element element) {
//wrong type
if (!element.getLocalName().equals("SlicePlanes"))
return;
for (int i = 0; i < element.getChildCount(); i++) {
Element child = (Element) element.getChild(i);
if (child != null && child.getLocalName().equals("SlicePlane")) {
SlicePlane plane = new SlicePlane(child);
if (plane != null)
this.add(plane);
}
}
}
public void add(int index, SlicePlane copyPlane) {
getList().add(index, copyPlane);
}
public void add(SlicePlane plane) {
this.getList().add(plane);
}
public void add(SlicePlanes slicePlanesIn) {
for (int i = 0; i < slicePlanesIn.getList().size(); i++) {
SlicePlane curSlice = slicePlanesIn.getList().get(i);
this.getList().add(curSlice);
}
}
/*
void addFelt(FeltCover felt) {
for (int i = 0; i < this.getList().size() - 1; i++) {
SlicePlane curSlice = this.getList().get(i);
SlicePlane nextSlice = this.getList().get(i + 1);
curSlice.loftFelt(nextSlice, felt);
}
}
*/
public void addNewSketchShape() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
SketchSpline newSketch = new SketchSpline(curSlice.getSketch());
curSlice.getSketch().add(newSketch);
curSlice.getSketch().setCurrentShape(newSketch);
}
}
public void addSketchVec2D(float mouseX, float mouseY) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.getSketch().getCurrentShape()
.add(new SketchPoint(mouseX, mouseY));
}
}
public void build() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
curPlane.build();
}
}
public void buildCurrentSketch() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if (curSlice.getSketch().getCurrentShape() != null) {
// curSlice.sketchShapes.getCurrentShape().optimize();
// curSlice.sketchShapes.getCurrentShape().offset();
//
if (curSlice.getSketch().getCurrentShape() != null)
curSlice.getSketch()
.getCurrentShape()
.mouseReleased(GLOBAL.uiTools.mouseX,
GLOBAL.uiTools.mouseY);
}
curSlice.getSketch().buildOutline();
}
}
public boolean checkForCollisions() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.checkForCollisions();
}
return false;
}
public void clear() {
this.getList().clear();
}
public SlicePlanes copy() {
SlicePlanes newSlicePlanes = new SlicePlanes();
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
newSlicePlanes.add(curPlane.copy());
}
return newSlicePlanes;
}
public int count() {
return this.getList().size();
}
public int countNumberOfShapes() {
int val = 0;
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
val += curSlice.getSketch().numerOfShapes();
}
return val;
}
public int countSelectedNodes() {
int count = 0;
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
count += curSlice.getSketch().countSelectedNodes();
}
return count;
}
public void deleteSelectedShapes() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.getSketch().deleteSelectedShapes();
}
}
public void destroyPlanes() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.destroy = true;
}
}
public void empty() {
this.setList(new ArrayList<SlicePlane>());
}
public void flipHorizontal(Vec3D centre) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.flipHorizontal(centre);
}
}
public SlicePlane get(int i) {
return getList().get(i);
}
public float getArea() {
float area = 0;
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
area += curSlice.getArea();
}
return area;
}
public Vec3D getCentre() {
Vec3D centre = new Vec3D();
for (SlicePlane plane : this.getList()) {
centre.addSelf(plane.getPlane());
}
centre.scaleSelf(1 / this.getList().size());
return centre;
}
public SlicePlane getFirst() {
if (this.getList().size() > 0)
return this.getList().get(0);
else
return null;
}
public SlicePlane getLast() {
if (this.getList().size() > 0)
return this.getList().get(this.getList().size() - 1);
else
return null;
}
/**
* @return the l
*/
public List<SlicePlane> getList() {
return l;
}
public float getMaxX() {
float maxX = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMaxX();
if (returnVal != -1 && (maxX == -1 || returnVal > maxX))
maxX = returnVal;
}
return maxX;
}
public float getMaxXWorldSpace(Transform currentWorldTransform) {
float maxX = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMaxXWorldSpace(
currentWorldTransform);
if (returnVal != -1 && (maxX == -1 ||returnVal > maxX ))
maxX = returnVal;
}
return maxX;
}
public float getMaxY() {
float maxY = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMaxY() ;
if (returnVal != -1 && (maxY == -1 || returnVal > maxY))
maxY = returnVal;
}
return maxY;
}
public float getMaxYWorldSpace(Transform currentWorldTransform) {
float maxY = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMaxYWorldSpace(
currentWorldTransform);
if (returnVal != -1 && (maxY == -1 || returnVal > maxY))
maxY = returnVal;
}
return maxY;
}
public float getMaxZ() {
float maxZ = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getPlane().z;
if (returnVal != -1 && (maxZ == -1 || returnVal > maxZ))
maxZ = plane.getPlane().z;
}
return maxZ;
}
public float getMinX() {
float minX = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMinX() ;
if (returnVal != -1 &&(minX == -1 || returnVal< minX))
minX = returnVal;
}
return minX;
}
public float getMaxProfileHeight() {
float maxHeight = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMinX();
if (returnVal != -1 && (maxHeight == -1 || returnVal > maxHeight))
maxHeight = plane.profileHeight;
}
return maxHeight;
}
public float getMinXWorldSpace(Transform currentWorldTransform) {
float minX = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMinXWorldSpace(
currentWorldTransform);
if (returnVal != -1 && (minX == -1
|| returnVal < minX ))
minX = returnVal;
}
return minX;
}
public float getMinY() {
float minY = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMinY();
if (returnVal != -1 && (minY == -1 || returnVal< minY))
minY = returnVal;
}
return minY;
}
public float getMinYWorldSpace(Transform currentWorldTransform) {
float minY = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getSketch().getMinYWorldSpace(
currentWorldTransform) ;
if (returnVal != -1 && (minY == -1
|| returnVal< minY ))
minY = returnVal;
}
return minY;
}
public float getMinZ() {
float minZ = -1;
for (SlicePlane plane : this.getList()) {
float returnVal = plane.getPlane().z ;
if (returnVal != -1 && (minZ == -1 || returnVal < minZ))
minZ = returnVal;
}
return minZ;
}
public SketchPoint getOverSelectPoint(float x, float y) {
SketchPoint p = null;
SketchPoint closest = null;
float dist = -1;
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
Vec2D pointOnPlan = GLOBAL.uiTools.getPointOnPlane(new Vec2D(x, y),
curPlane.getPlane());
p = curPlane.getOverSelectPoint(pointOnPlan.x, pointOnPlan.y);
if (p != null
&& (dist == -1 || p.distanceTo(new Vec2D(pointOnPlan.x,
pointOnPlan.y)) < dist)) {
closest = p;
dist = p.distanceTo(new Vec2D(pointOnPlan.x, pointOnPlan.y));
}
}
return closest;
}
public SketchShapes getOverShapes(float x, float y) {
SketchShapes overShapes = new SketchShapes(null);
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
Vec2D pointOnPlan = GLOBAL.uiTools.getPointOnPlane(new Vec2D(x, y),
curPlane.getPlane());
overShapes.addAll(curPlane.getOverShape(pointOnPlan.x,
pointOnPlan.y));
}
return overShapes;
}
public SlicePlane getPlaneContainingShape(SketchShape path) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if (curSlice.getSketch().contains(path))
return curSlice;
}
return null;
}
public SlicePlane getPlanePickBuffer(int col) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D selectedVec = curSlice.sketchSpline.getVec2DpickBuffer(col);
if (selectedVec != null)
return curSlice;
}
return null;
}
public SketchShape getSelectedShape() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if (curSlice.getSketch().getSelectedShape() != null)
return curSlice.getSketch().getSelectedShape();
}
return null;
}
public SlicePlane getSelectedShapePlane() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if (curSlice.getSketch().getSelectedShape() != null)
return curSlice;
}
return null;
}
public SketchShape getShapePickBuffer(int col) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
SketchShape shape = curSlice.getSketch().getShapePickBuffer(col);
if (shape != null)
return shape;
}
return null;
}
public SketchShape getSketchShapeById(int linkedSketchId) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if (curSlice.getSketchShapeById(linkedSketchId) != null)
return curSlice.getSketchShapeById(linkedSketchId);
}
return null;
}
public Vec2D getVec2DpickBuffer(int col) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D selectedVec = curSlice.getSketch().getVec2DpickBuffer(col);
if (selectedVec != null)
return selectedVec;
}
return null;
}
public int indexOf(SlicePlane first) {
return getList().indexOf(first);
}
public boolean lastSketchOverlaps() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if (!curSlice.lastSketchOverlaps())
return false;
}
return true;
}
public void mouseDragged(float mouseX, float mouseY) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.mouseDragged(mouseX, mouseY);
}
/*
if ((GLOBAL.uiTools.getCurrentTool() == UITools.DRAW_TOOL || GLOBAL.uiTools.getCurrentTool() == UITools.LEG_TOOL)
&& !GLOBAL.gui.overComponent()) {
if (GLOBAL.uiTools.getCurrentTool() == UITools.LEG_TOOL) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D pointOnPlan = GLOBAL.uiTools.getPointOnPlane(
new Vec2D(mouseX, mouseY), curSlice.getPlane());
if (curSlice.getSketch().getLastVec() != null) {
curSlice.getSketch().getLastVec().set(pointOnPlan.x,
pointOnPlan.y);
curSlice.getSketch().getCurrentShape().offset();
}
}
}
if (GLOBAL.uiTools.getCurrentTool() == UITools.DRAW_TOOL) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D pointOnPlan = GLOBAL.uiTools.getPointOnPlane(
new Vec2D(mouseX, mouseY), curSlice.getPlane());
this.addSketchVec2D(pointOnPlan.x, pointOnPlan.y);
}
}
}
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.mouseDragged();
}
*/
}
public void mousePressed(float mouseX, float mouseY) {
Sketch tempSketch = new Sketch(GLOBAL.uiTools.SketchTools,
GLOBAL.SketchGlobals);
//THIS IS A HACK TO ADD A PLANE IF NONE EXISTS CHANGE IT!!!!!
/*
if (count() == 0) {
Plane plane = new Plane(new Vec3D(0, 0, 0), new Vec3D(0, 0, -1));
SlicePlane slicePlane = new SlicePlane(tempSketch, plane);
tempSketch.setOnSlicePlane(slicePlane);
// this.curSlicePlane = slicePlane;
add(slicePlane);
}
*/
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.mousePressed(mouseX, mouseY);
}
/*
if (GLOBAL.uiTools.getCurrentTool() == UITools.DRAW_TOOL) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
SketchSpline newSketch = new SketchSpline(curSlice.getSketch(),SETTINGS_SKETCH.offsetSide);
newSketch.setOffsetSize(GLOBAL.uiTools.brush_dia);
curSlice.getSketch().add(newSketch);
curSlice.getSketch().setCurrentShape(newSketch);
GLOBAL.undo.addOperation(new UndoAction(newSketch,
UndoAction.ADD_SHAPE));
}
}
if (GLOBAL.uiTools.getCurrentTool() == UITools.LEG_TOOL) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D pointOnPlan = GLOBAL.uiTools.getPointOnPlane(new Vec2D(
mouseX, mouseY), curSlice.getPlane());
SketchSpline newSketch = new SketchSpline(curSlice.getSketch(),
SketchSpline.OFFSET_BOTH);
newSketch.setOffsetSize(GLOBAL.uiTools.brush_dia*SETTINGS_SKETCH.LEG_BRUSH_RATIO_TOP);
newSketch.offsetSizeEnd = GLOBAL.uiTools.brush_dia*SETTINGS_SKETCH.LEG_BRUSH_RATIO_BOTTOM;
newSketch.add(new SketchPoint(pointOnPlan.x, pointOnPlan.y));
newSketch.add(new SketchPoint(pointOnPlan.x, pointOnPlan.y));
//newSketch.offset();
//SketchPoint p1 = (SketchPoint) newSketch.outineRight
// .get(1);
//SketchPoint p2 = (SketchPoint) newSketch.outineLeft
// .get(0);
//newSketch.movePoint(p1,new Vec2D(p1.x,p1.y));
//newSketch.movePoint(p2,new Vec2D(p2.x,p2.y));
curSlice.getSketch().add(newSketch);
curSlice.getSketch().setCurrentShape(newSketch) ;
GLOBAL.undo.addOperation(new UndoAction(newSketch,
UndoAction.ADD_SHAPE));
}
}
*/
}
public void mouseReleased(float mouseX, float mouseY) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.mouseReleased(mouseX, mouseY);
}
/*
if ((GLOBAL.uiTools.getCurrentTool() == UITools.DRAW_TOOL
&& !GLOBAL.gui.overComponent())) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if (curSlice.getSketch().getCurrentShape() == null
&& curSlice.getSketch().getCurrentShape().getType() != SketchShape.TYPE_SPLINE) {
curSlice.getSketch().getCurrentShape().optimize();
}
}
}
if ((GLOBAL.uiTools.getCurrentTool() == UITools.DRAW_PATH_TOOL)
&& !GLOBAL.gui.overComponent()) {
boolean skip = false;
if(!skip && GLOBAL.uiTools.mouseButton == PConstants.LEFT && GLOBAL.uiTools.keyPressed && GLOBAL.uiTools.keyCode == PConstants.CONTROL){
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D pointOnPlane = GLOBAL.uiTools.getPointOnPlane(new Vec2D(
mouseX, mouseY), curSlice.getPlane());
SketchPoint pathVert = curSlice.getSketch().getClosestPathVertex(pointOnPlane);
if(pathVert != null && pointOnPlane.distanceTo(pathVert) < SETTINGS_SKETCH.select_dia){
curSlice.removeVertex(pathVert);
skip = true;
}
}
}
//check to see if we are adding a new point to an existing path
if(!skip && GLOBAL.uiTools.mouseButton == PConstants.LEFT && GLOBAL.uiTools.keyPressed && GLOBAL.uiTools.keyCode == PConstants.CONTROL){
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D pointOnPlane = GLOBAL.uiTools.getPointOnPlane(new Vec2D(
mouseX, mouseY), curSlice.getPlane());
if(curSlice.addPointAlongPath(pointOnPlane.x,pointOnPlane.y))
skip = true;
}
}
if(!skip){
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D pointOnPlan = GLOBAL.uiTools.getPointOnPlane(new Vec2D(
mouseX, mouseY), curSlice.getPlane());
if(GLOBAL.uiTools.mouseButton == PConstants.RIGHT){
SketchPoint pathVert = curSlice.getClosestPathVertex(pointOnPlan);
if(pathVert != null && pointOnPlan.distanceTo(pathVert) < SETTINGS_SKETCH.select_dia){
curSlice.removeVertex(pathVert);
skip = true;
}
}
if (curSlice.getSketch().getCurrentShape() != null
&& curSlice.getSketch().getCurrentShape().getType() == SketchShape.TYPE_PATH
&& GLOBAL.uiTools.mouseButton == PConstants.LEFT
&& !skip) {
SketchPath sketchP = (SketchPath) curSlice.getSketch().getCurrentShape();
if (sketchP.closed) {
SketchPath sketch = new SketchPath(curSlice.getSketch());
sketch.setType(SketchShape.TYPE_PATH);
curSlice.getSketch().add(sketch);
//sketch.add(new Vec2D(pointOnPlan.x, pointOnPlan.y));
}
}
if (curSlice.getSketch().getCurrentShape() == null
|| curSlice.getSketch().getCurrentShape().getType() != SketchShape.TYPE_PATH
&& GLOBAL.uiTools.mouseButton == PConstants.LEFT
&& !skip
) {
SketchPath sketch = new SketchPath(curSlice.getSketch());
sketch.setType(SketchShape.TYPE_PATH);
sketch.setOpen(true);
curSlice.getSketch().add(sketch);
//sketch.add(new Vec2D(pointOnPlan.x, pointOnPlan.y));
}
if (curSlice.getSketch().getCurrentShape().getType() == SketchShape.TYPE_PATH
&& GLOBAL.uiTools.mouseButton == PConstants.LEFT
&& !skip) {
curSlice.getSketch().getCurrentShape().add(new SketchPoint(
pointOnPlan.x, pointOnPlan.y));
}
if (curSlice.getSketch().getCurrentShape().getType() == SketchShape.TYPE_PATH
&& GLOBAL.uiTools.mouseButton == PConstants.RIGHT
&& !skip) {
SketchPath sketch = (SketchPath)curSlice.getSketch().getCurrentShape();
sketch.closed = true;
sketch.setOpen(false);
}
}
}
}
*/
}
public void mouseDoubleClick(int mouseX, int mouseY) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.mouseDoubleClick(mouseX, mouseY);
}
}
public boolean overSelectPoint(float mouseX, float mouseY) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
Vec2D pointOnPlan = GLOBAL.uiTools.getPointOnPlane(new Vec2D(
mouseX, mouseY), curPlane.getPlane());
if (curPlane.overSelectPoint(pointOnPlan.x, pointOnPlan.y))
return true;
}
return false;
}
public void remove(int i) {
getList().remove(i);
}
public void remove(SlicePlane removePlane) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if (curSlice == removePlane)
this.getList().remove(i);
}
}
public boolean removeCollisions() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
for (int j = 0; j < this.getList().size(); j++) {
SlicePlane otherSlice = this.getList().get(j);
if (curSlice != otherSlice && !curSlice.destroy
&& !otherSlice.destroy) {
if (curSlice.intersects(otherSlice)) {
if (curSlice.tiedToLeg)
otherSlice.destroy();
else if (otherSlice.tiedToLeg)
curSlice.destroy();
else
curSlice.destroy();
}
}
}
}
return false;
}
public void removeLastSketch() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.getSketch().removeLast();
}
}
public void render(PGraphics g) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.render(g);
}
}
public void renderPickBuffer(PGraphics pickBuffer) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.renderPickBuffer(pickBuffer);
}
}
public void renderSilhouette(PGraphics g) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.renderSilhouette(g);
}
}
public void saveToPDF(PGraphics g) {
PGraphicsPDF pdf = (PGraphicsPDF) g; // Get the renderer
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.render(g);
pdf.nextPage();
}
}
public void saveToPDF(PGraphics g, boolean translate) {
PGraphicsPDF pdf = (PGraphicsPDF) g; // Get the renderer
for (int i = 0; i < this.getList().size(); i++) {
g.pushMatrix();
g.translate(SETTINGS_SKETCH.chair_width, 20);
SlicePlane curSlice = this.getList().get(i);
curSlice.render(g);
g.popMatrix();
pdf.nextPage();
}
}
public void scale(float scale, Vec3D centre) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.scale(scale, centre);
}
}
void select(int i) {
SlicePlane curSlice = this.getList().get(i);
curSlice.select();
// curSlice.sketchSpline.selected = true;
}
public void selectAll() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.select();
}
}
public SlicePlane selectNext() {
unselectAll();
selectedSlicePlaneNum++;
if (selectedSlicePlaneNum > this.getList().size() - 1)
selectedSlicePlaneNum = 0;
SlicePlane curSlice = this.getList().get(selectedSlicePlaneNum);
curSlice.select();
return curSlice;
// curSlice.sketchSpline.selected = true;
}
public void selectNodes(int mouseX, int mouseY) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.selectNodes(mouseX, mouseY);
}
}
public SlicePlane selectPrev() {
unselectAll();
selectedSlicePlaneNum--;
if (selectedSlicePlaneNum < 0)
selectedSlicePlaneNum = this.getList().size() - 1;
SlicePlane curSlice = this.getList().get(selectedSlicePlaneNum);
curSlice.select();
return curSlice;
// curSlice.sketchSpline.selected = true;
}
public void setBrushCap(int cap) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
curPlane.setBrushCap(cap);
}
}
public void setBrushDia(float val) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
curPlane.setBrushDia(val);
}
}
/**
* @param l the l to set
*/
public void setList(List<SlicePlane> l) {
this.l = l;
}
public void setPlaneWidth(float planeThickness) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
curPlane.thickness = planeThickness;
}
}
public void setRenderMode(int mode) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
curPlane.setRenderMode(mode);
}
}
public void setRender3D(boolean b) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
curPlane.setRender3D(b);
}
}
public Vec2D setVec2DpickBuffer(int col, SketchPoint selectedVec,
SketchShape selectedShape, SlicePlane selectedVecPlane,
boolean isSelectedVecOnOutline) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
Vec2D selectedVec1 = curSlice.getSketch().setVec2DpickBuffer(col,
selectedVec, selectedShape, selectedVecPlane,
isSelectedVecOnOutline);
if (selectedVec1 != null) {
selectedVecPlane = curSlice;
return selectedVec1;
}
}
return null;
}
public int size() {
return getList().size();
}
public void toggleGuide() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
curPlane.guide = !curPlane.guide;
}
}
public void toggleUnion() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curPlane = this.getList().get(i);
curPlane.toggleUnion();
}
}
public Element toXML() {
Element element = new Element("SlicePlanes");
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
element.appendChild(curSlice.toXML());
}
return element;
}
public void unselectAll() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.unselect();
// curSlice.sketchSpline.selected = false;
}
}
public void unselectShapesAll() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.unselectShapes();
}
}
public void update() {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.update();
if (curSlice.destroy) {
this.remove(i);
}
}
}
public void buildOutline(boolean includeSlot, boolean addToPath) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.buildOutline(includeSlot,addToPath);
}
}
public void importSVG(String path) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.importSVG(path);
}
}
public void setEditable(boolean editable) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
curSlice.setEditable(editable);
}
}
public Object getById(int _id) {
for (int i = 0; i < this.getList().size(); i++) {
SlicePlane curSlice = this.getList().get(i);
if(curSlice.getId() == _id)
return curSlice;
}
return null;
}
}