1 31 32 package org.antlr.xjlib.appkit.gview.base; 33 34 import java.awt.*; 35 import java.util.ArrayList ; 36 import java.util.Iterator ; 37 import java.util.List ; 38 39 public class Path2D { 40 41 private List <Vector2D> points = new ArrayList <Vector2D>(); 42 43 public Path2D() { 44 45 } 46 47 public void clear() { 48 points.clear(); 49 } 50 51 public void add(Vector2D v) { 52 points.add(v); 53 } 54 55 public void add(double x, double y) { 56 add(new Vector2D(x, y)); 57 } 58 59 public void draw(Graphics g) { 60 Vector2D lastV = null; 61 62 Iterator <Vector2D> iterator = points.iterator(); 63 while(iterator.hasNext()) { 64 Vector2D v = iterator.next(); 65 if(lastV != null) 66 g.drawLine((int)lastV.getX(), (int)lastV.getY(), (int)v.getX(), (int)v.getY()); 67 68 lastV = v; 69 } 70 } 71 72 public boolean contains(double x, double y) { 73 Vector2D oldv = null; 74 Iterator <Vector2D> iterator = points.iterator(); 75 while(iterator.hasNext()) { 76 Vector2D v = iterator.next(); 77 if(oldv != null) { 78 Rect r = new Rect(oldv, v); 79 r.inset(-4); 80 if(r.contains(x, y)) 81 return true; 82 } 83 oldv = v; 84 } 85 return false; 86 } 87 88 public Vector2D getEndDirection() { 89 if(points.size()<2) 90 return null; 91 92 Vector2D v1 = points.get(points.size()-2); 93 Vector2D v2 = points.get(points.size()-1); 94 return v1.sub(v2); 95 } 96 } 97 | Popular Tags |