/******************************************************************************* * 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 nu.xom.Attribute; import nu.xom.Element; import toxi.geom.Vec2D; /** * Represents a control point on a path. * @author gregsaul * */ //#ENDIF JAVA public class SketchPoint extends Vec2D { public Vec2D controlPoint1 = null; public Vec2D controlPoint2 = null; public boolean isOver = false; private boolean smooth; public SketchPoint(Element element) { //wrong type if (!element.getLocalName().equals("SketchPoint")) return; //ERROR checking ? if (element.getAttributeValue("x") != null) this.x = Float.valueOf(element.getAttributeValue("x")); if (element.getAttributeValue("y") != null) this.y = Float.valueOf(element.getAttributeValue("y")); if (element.getAttributeValue("c1x") != null && element.getAttributeValue("c1x") != null) { float xmlC1X = Float.valueOf(element.getAttributeValue("c1x")); float xmlC1Y = Float.valueOf(element.getAttributeValue("c1y")); this.controlPoint1 = new Vec2D(xmlC1X, xmlC1Y); } if (element.getAttributeValue("c2x") != null && element.getAttributeValue("c2x") != null) { float xmlC2X = Float.valueOf(element.getAttributeValue("c2x")); float xmlC2Y = Float.valueOf(element.getAttributeValue("c2y")); this.controlPoint2 = new Vec2D(xmlC2X, xmlC2Y); } } public SketchPoint(float x, float y) { super(x, y); } public SketchPoint(Vec2D vec) { this.x = vec.x; this.y = vec.y; } public SketchPoint clone() { SketchPoint returnPoint = new SketchPoint(this.x, this.y); if (this.controlPoint1 != null) returnPoint.controlPoint1 = new Vec2D(this.controlPoint1.x, this.controlPoint1.y); if (this.controlPoint2 != null) returnPoint.controlPoint2 = new Vec2D(this.controlPoint2.x, this.controlPoint2.y); return returnPoint; } public boolean containsBezier() { if (controlPoint2 != null || controlPoint1 != null) return true; else return false; } public Vec2D getControlPoint1() { if (controlPoint1 == null) return new Vec2D(this.x, this.y); else return controlPoint1; } public Vec2D getControlPoint2() { if (controlPoint2 == null) return new Vec2D(this.x, this.y); else return controlPoint2; } public void removeBezier() { this.controlPoint1 = null; this.controlPoint2 = null; } public Element toXML() { Element element = new Element("SketchPoint"); element.addAttribute(new Attribute("x", String.valueOf(this.x))); element.addAttribute(new Attribute("y", String.valueOf(this.y))); if (this.controlPoint1 != null) { element.addAttribute(new Attribute("c1x", String .valueOf(this.controlPoint1.x))); element.addAttribute(new Attribute("c1y", String .valueOf(this.controlPoint1.y))); } if (this.controlPoint2 != null) { element.addAttribute(new Attribute("c2x", String .valueOf(this.controlPoint2.x))); element.addAttribute(new Attribute("c2y", String .valueOf(this.controlPoint2.y))); } return element; } SketchPoint sub(SketchPoint p ){ return p; } }