2 using System.Windows;
\r
3 using System.Windows.Controls;
\r
4 using System.Windows.Documents;
\r
5 using System.Windows.Input;
\r
6 using System.Windows.Media;
\r
7 using System.Windows.Media.Animation;
\r
8 using System.Windows.Media.Imaging;
\r
9 using System.Windows.Shapes;
\r
13 namespace Psychlops{
\r
15 public interface Shape : Figure
\r
19 public static class ShapeExtention
\r
22 public static void draw(this Shape drawee)
\r
24 drawee.draw(Color.white);
\r
29 public struct Stroke
\r
34 public class Line : Shape
\r
36 public Point begin, end;
\r
38 public Line(double x1, double y1, double x2, double y2)
\r
40 set(x1, y1, x2, y2);
\r
42 public Line(Point v1, Point v2)
\r
46 public void set(double x1, double y1, double x2, double y2)
\r
51 public void set(Point v1, Point v2)
\r
57 public Figure shift(Point p)
\r
63 public Figure centering(Point p)
\r
65 double h = width, v = height;
\r
66 begin.x = p.x - h / 2.0;
\r
67 begin.y = p.y - v / 2.0;
\r
68 end.x = begin.x + h;
\r
69 end.y = begin.y + v;
\r
73 public void draw(Color c)
\r
75 Main.drawable.line(this, c);
\r
79 Main.drawable.line(this, Color.white);
\r
82 public double left { get { return begin.x < end.x ? begin.x : end.x; } }
\r
83 public double top { get { return begin.y < end.y ? begin.y : end.y; ; } }
\r
84 public double right { get { return begin.x > end.x ? begin.x : end.x; ; } }
\r
85 public double bottom { get { return begin.y > end.y ? begin.y : end.y; ; } }
\r
86 public double width { get { return Math.abs(begin.x - end.x); } }
\r
87 public double height { get { return Math.abs(begin.y - end.y); } }
\r
89 public static implicit operator System.Windows.Shapes.Line(Line d)
\r
91 var tmp = new System.Windows.Shapes.Line();
\r
101 public class Rectangle : Shape
\r
103 public Point v1, v2;
\r
109 public Rectangle(double wid, double hei)
\r
114 public Rectangle set(double wid, double hei)
\r
117 v2.set(wid, hei, 0);
\r
121 public Figure shift(Point p)
\r
127 public Figure centering(Point p)
\r
129 double h = width, v = height;
\r
130 v1.x = p.x - h / 2.0;
\r
131 v1.y = p.y - v / 2.0;
\r
137 public void draw(Color c)
\r
139 Main.drawable.rect(this, c);
\r
143 Main.drawable.rect(this, Color.white);
\r
146 public double left { get { return v1.x; } }
\r
147 public double top { get { return v1.y; } }
\r
148 public double right { get { return v2.x; } }
\r
149 public double bottom { get { return v2.y; } }
\r
150 public double width { get { return Math.abs(v1.x - v2.x); } }
\r
151 public double height { get { return Math.abs(v1.y - v2.y); } }
\r
154 public static implicit operator System.Windows.Rect(Rectangle d)
\r
156 return new System.Windows.Rect(d.v1.x, d.v1.y, d.v2.x, d.v2.y);
\r
162 public class Ellipse : Shape
\r
164 public Point datum;
\r
165 public double xdiameter, ydiameter;
\r
171 public Ellipse(double wid, double hei)
\r
176 public Ellipse set(double wid, double hei)
\r
182 public Figure shift(Point p)
\r
187 public Figure centering(Point p)
\r
193 public void draw(Color c)
\r
195 Main.drawable.ellipse(this, c);
\r
199 Main.drawable.ellipse(this, Color.white);
\r
202 public double left { get { return datum.x - xdiameter/2.0; } }
\r
203 public double top { get { return datum.y - ydiameter / 2.0; } }
\r
204 public double right { get { return datum.x + xdiameter / 2.0; } }
\r
205 public double bottom { get { return datum.y + ydiameter / 2.0; } }
\r
206 public double width { get { return Math.abs(xdiameter); } }
\r
207 public double height { get { return Math.abs(ydiameter); } }
\r
211 public class Polygon : Shape
\r
213 public Point datum;
\r
214 public System.Collections.Generic.List<Point> vertices;
\r
218 vertices = new System.Collections.Generic.List<Point>();
\r
220 public Polygon(double[] verts)
\r
222 vertices = new System.Collections.Generic.List<Point>();
\r
223 for (int i=0; i < verts.Length; i+=2)
\r
225 vertices.Add(new Point(verts[i], verts[i+1]));
\r
229 public Polygon(Point[] verts)
\r
231 vertices = new System.Collections.Generic.List<Point>();
\r
232 foreach (Point p in verts)
\r
238 public Polygon append(Point p) { vertices.Add(p); return this; }
\r
239 public Polygon append(double x, double y) { return append(new Point(x, y, 0.0)); }
\r
240 public Polygon append(double x, double y, double z) { return append(new Point(x, y, z)); }
\r
243 public Figure shift(Point p)
\r
248 public Figure centering(Point p)
\r
254 public void draw(Color c)
\r
256 Main.drawable.polygon(this, c);
\r
260 Main.drawable.polygon(this, Color.white);
\r