|
01 package Jam;
02 import java.awt.geom.Area;
03 import java.awt.geom.Ellipse2D;
04 import java.awt.geom.Point2D;
05 import java.awt.geom.Rectangle2D;
06
07 import fang.*;
08
09 public class LineSprite extends Sprite
10 {
11 private Point2D.Double start;
12 private Point2D.Double end;
13 private boolean firstTime=true;
14 private double lineThickness=0.05;
15
16 public LineSprite(double startX, double startY,
17 double endX, double endY)
18 {
19 start=new Point2D.Double(startX, startY);
20 end=new Point2D.Double(endX, endY);
21 initializeLine();
22 }
23
24 //need to fix setting new endpoints and thickness.
25
26 private void initializeLine()
27 {
28 Point2D.Double midpoint=new Point2D.Double(
29 (start.x+end.x)/2,
30 (start.y+end.y)/2);
31 double angle=Math.atan2(end.y-start.y, end.x-start.x);
32 double distance=start.distance(end);
33 Rectangle2D.Double rectangle=new Rectangle2D.Double(
34 0, 0, distance, lineThickness);
35 Ellipse2D.Double startButt=new Ellipse2D.Double(
36 -lineThickness/2, 0,
37 lineThickness, lineThickness);
38 Ellipse2D.Double endButt=new Ellipse2D.Double(
39 distance-lineThickness/2, 0,
40 lineThickness, lineThickness);
41 Area total=new Area(rectangle);
42 total.add(new Area(startButt));
43 total.add(new Area(endButt));
44 setShape(total);
45 double scale=lineThickness+Math.max(Math.abs(start.x-end.x), Math.abs(start.y-end.y));
46 setScale(scale);
47 midpoint.x+=getLocation().x;
48 midpoint.y+=getLocation().y;
49 setLocation(midpoint);
50 angle+=getRotation();
51 setRotation(angle);
52 }
53
54 public void setLineThickness(double thickness)
55 {
56 lineThickness=thickness;
57 initializeLine();
58 }
59 }
60
|