// Path: kendzi-math-geometry/src/main/java/kendzi/math/geometry/ray/Ray2d.java
// public class Ray2d extends LineParametric2d {
//     public Ray2d(Point2d pA, Vector2d pU) {
//         super(pA, pU);
//     }
// 
//     public static Point2d collide(Ray2d ray, LineLinear2d line, double epsilon) {
//         // FIXME rewrite?
//         Point2d collide = LineLinear2d.collide(ray.getLinearForm(), line);
//         if (collide == null) {
//             return null;
//         }
// 
//         /*
//          * Portably there is better way to do this. this is from graphical.
//          */
//         Vector2d collideVector = new Vector2d(collide);
//         collideVector.sub(ray.A);
// 
//         double dot = ray.U.dot(collideVector);
// 
//         if (dot < epsilon) {
//             return null;
//         }
// 
//         return collide;
//     }
// 
//     @Override
//     public String toString() {
//         return "Ray2d [A=" + A + ", U=" + U + "]";
//     }
// 
// }
// 
// Path: kendzi-straight-skeleton/src/main/java/kendzi/math/geometry/skeleton/path/FaceNode.java
// public class FaceNode extends PathQueueNode<FaceNode> {
// 
//     private Vertex vertex;
// 
//     public FaceNode(Vertex vertex) {
//         super();
//         this.vertex = vertex;
//     }
// 
//     public Vertex getVertex() {
//         return vertex;
//     }
// 
//     public boolean isQueueClosed() {
//         FaceQueue fq = getFaceQueue();
//         return fq.isClosed();
//     }
// 
//     public FaceQueue getFaceQueue() {
//         return (FaceQueue) list();
//     }
// 
//     public boolean isQueueUnconnected() {
//         FaceQueue fq = getFaceQueue();
//         return fq.isUnconnected();
//     }
// 
//     public void queueClose() {
//         getFaceQueue().close();
//         // TODO Auto-generated method stub
// 
//     }
// 
// }


import javax.vecmath.Point2d;
import kendzi.math.geometry.ray.Ray2d;
import kendzi.math.geometry.skeleton.path.FaceNode;
package kendzi.math.geometry.skeleton.circular;



/**
 * @author kendzi
 * 
 */
public class Vertex extends CircularNode {

    private Point2d point;

    private double distance;

    private boolean processed;

    private Ray2d bisector;

    /**
     * Previous edge.
     */
    public Edge previousEdge;

    /**
     * Next edge.
     */
    public Edge nextEdge;

    public FaceNode leftFace;

    public FaceNode rightFace;

    public Vertex(Point2d point, double distance, Ray2d bisector, Edge previousEdge, Edge nextEdge) {
        super();
        this.point = point;
        this.distance = distance;
        this.bisector = bisector;
        this.previousEdge = previousEdge;
        this.nextEdge = nextEdge;

        processed = false;
    }

    public Vertex() {
        // TODO Auto-generated constructor stub
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
// Path: kendzi-math-geometry/src/main/java/kendzi/math/geometry/ray/Ray2d.java
// public class Ray2d extends LineParametric2d {
//     public Ray2d(Point2d pA, Vector2d pU) {
//         super(pA, pU);
//     }
// 
//     public static Point2d collide(Ray2d ray, LineLinear2d line, double epsilon) {
//         // FIXME rewrite?
//         Point2d collide = LineLinear2d.collide(ray.getLinearForm(), line);
//         if (collide == null) {
//             return null;
//         }
// 
//         /*
//          * Portably there is better way to do this. this is from graphical.
//          */
//         Vector2d collideVector = new Vector2d(collide);
//         collideVector.sub(ray.A);
// 
//         double dot = ray.U.dot(collideVector);
// 
//         if (dot < epsilon) {
//             return null;
//         }
// 
//         return collide;
//     }
// 
//     @Override
//     public String toString() {
//         return "Ray2d [A=" + A + ", U=" + U + "]";
//     }
// 
// }
// 
// Path: kendzi-straight-skeleton/src/main/java/kendzi/math/geometry/skeleton/path/FaceNode.java
// public class FaceNode extends PathQueueNode<FaceNode> {
// 
//     private Vertex vertex;
// 
//     public FaceNode(Vertex vertex) {
//         super();
//         this.vertex = vertex;
//     }
// 
//     public Vertex getVertex() {
//         return vertex;
//     }
// 
//     public boolean isQueueClosed() {
//         FaceQueue fq = getFaceQueue();
//         return fq.isClosed();
//     }
// 
//     public FaceQueue getFaceQueue() {
//         return (FaceQueue) list();
//     }
// 
//     public boolean isQueueUnconnected() {
//         FaceQueue fq = getFaceQueue();
//         return fq.isUnconnected();
//     }
// 
//     public void queueClose() {
//         getFaceQueue().close();
//         // TODO Auto-generated method stub
// 
//     }
// 
// }


// Path: kendzi-straight-skeleton/src/main/java/kendzi/math/geometry/skeleton/circular/Vertex.java
import javax.vecmath.Point2d;
import kendzi.math.geometry.ray.Ray2d;
import kendzi.math.geometry.skeleton.path.FaceNode;

package kendzi.math.geometry.skeleton.circular;



/**
 * @author kendzi
 * 
 */
public class Vertex extends CircularNode {

    private Point2d point;

    private double distance;

    private boolean processed;

    private Ray2d bisector;

    /**
     * Previous edge.
     */
    public Edge previousEdge;

    /**
     * Next edge.
     */
    public Edge nextEdge;

    public FaceNode leftFace;

    public FaceNode rightFace;

    public Vertex(Point2d point, double distance, Ray2d bisector, Edge previousEdge, Edge nextEdge) {
        super();
        this.point = point;
        this.distance = distance;
        this.bisector = bisector;
        this.previousEdge = previousEdge;
        this.nextEdge = nextEdge;

        processed = false;
    }

    public Vertex() {
        // TODO Auto-generated constructor stub
    }

    /*
     * (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        return "VertexEntry [v=" + this.point + ", processed=" + this.processed + ", bisector=" + this.bisector