OSDN Git Service

321
[psychlops/silverlight.git] / dev3 / psychlops / core / graphic / shape.cs
1 using System;\r
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
10 \r
11 \r
12 \r
13 namespace Psychlops{\r
14 \r
15         public interface Shape : Figure\r
16         {\r
17         }\r
18         public static class ShapeExtention\r
19         {\r
20                 /*\r
21                 public static void draw(this Shape drawee)\r
22                 {\r
23                         drawee.draw(Color.white);\r
24                 }\r
25                 */\r
26         }\r
27 \r
28 \r
29         public class Line : Shape\r
30         {\r
31                 public Point begin, end;\r
32 \r
33                 public Line(Point v1, Point v2)\r
34                 {\r
35                         begin = v1;\r
36                         end   = v2;\r
37                 }\r
38 \r
39                 public Figure shift(Point p)\r
40                 {\r
41                         begin += p;\r
42                         end   += p;\r
43                         return this;\r
44                 }\r
45                 public Figure centering(Point p)\r
46                 {\r
47                         double h = width, v = height;\r
48                         begin.x = p.x - h / 2.0;\r
49                         begin.y = p.y - v / 2.0;\r
50                         end.x = begin.x + h;\r
51                         end.y = begin.y + v;\r
52                         return this;\r
53                 }\r
54 \r
55                 public void draw(Color c)\r
56                 {\r
57                         Main.drawable.line(this, c);\r
58                 }\r
59                 public void draw()\r
60                 {\r
61                         Main.drawable.line(this, Color.white);\r
62                 }\r
63 \r
64                 public double width { get { return Math.abs(begin.x - end.x); } }\r
65                 public double height { get { return Math.abs(begin.y - end.y); } }\r
66 \r
67                 public static implicit operator System.Windows.Shapes.Line(Line d)\r
68                 {\r
69                         var tmp = new System.Windows.Shapes.Line();\r
70                         tmp.X1 = d.begin.x;\r
71                         tmp.Y1 = d.begin.y;\r
72                         tmp.X2 = d.end.x;\r
73                         tmp.Y2 = d.end.y;\r
74                         return tmp;\r
75                 }\r
76         }\r
77 \r
78 \r
79         public class Rectangle : Shape\r
80         {\r
81                 public Point v1, v2;\r
82 \r
83                 public Rectangle()\r
84                 {\r
85                         set(0,0);\r
86                 }\r
87                 public Rectangle(double wid, double hei)\r
88                 {\r
89                         set(wid, hei);\r
90                 }\r
91                 \r
92                 public Rectangle set(double wid, double hei)\r
93                 {\r
94                         v1.set(0, 0, 0);\r
95                         v2.set(wid, hei, 0);\r
96                         return this;\r
97                 }\r
98 \r
99                 public Figure shift(Point p)\r
100                 {\r
101                         v1 += p;\r
102                         v2 += p;\r
103                         return this;\r
104                 }\r
105                 public Figure centering(Point p)\r
106                 {\r
107                         double h = width, v = height;\r
108                         v1.x = p.x - h / 2.0;\r
109                         v1.y = p.y - v / 2.0;\r
110                         v2.x = v1.x + h;\r
111                         v2.y = v1.y + v;\r
112                         return this;\r
113                 }\r
114 \r
115                 public void draw(Color c)\r
116                 {\r
117                         Main.drawable.rect(this, c);\r
118                 }\r
119                 public void draw()\r
120                 {\r
121                         Main.drawable.rect(this, Color.white);\r
122                 }\r
123 \r
124                 public double left   { get { return v1.x; } }\r
125                 public double top    { get { return v1.y; } }\r
126                 public double right  { get { return v2.x; } }\r
127                 public double bottom { get { return v2.y; } }\r
128                 public double width { get { return Math.abs(v1.x - v2.x); } }\r
129                 public double height { get { return Math.abs(v1.y - v2.y); } }\r
130 \r
131 \r
132                 public static implicit operator System.Windows.Rect(Rectangle d)\r
133                 {\r
134                         return new System.Windows.Rect(d.v1.x, d.v1.y, d.v2.x, d.v2.y);\r
135                 }\r
136 \r
137         }\r
138 \r
139 \r
140         public class Ellipse : Shape\r
141         {\r
142                 public Point datum;\r
143                 public double xdiameter, ydiameter;\r
144 \r
145                 public Figure shift(Point p)\r
146                 {\r
147                         datum += p;\r
148                         return this;\r
149                 }\r
150                 public Figure centering(Point p)\r
151                 {\r
152                         datum = p;\r
153                         return this;\r
154                 }\r
155 \r
156                 public void draw(Color c)\r
157                 {\r
158                         Main.drawable.ellipse(this, c);\r
159                 }\r
160                 public void draw()\r
161                 {\r
162                         Main.drawable.ellipse(this, Color.white);\r
163                 }\r
164         }\r
165 \r
166 \r
167         public class Polygon : Shape\r
168         {\r
169                 public Point datum;\r
170                 public System.Collections.Generic.List<Point> vertices;\r
171 \r
172                 public Polygon()\r
173                 {\r
174                         vertices = new System.Collections.Generic.List<Point>();\r
175                 }\r
176                 public Polygon append(Point p) { vertices.Add(p); return this; }\r
177                 public Polygon append(double x, double y) { return append(new Point(x, y, 0.0)); }\r
178                 public Polygon append(double x, double y, double z) { return append(new Point(x, y, z)); }\r
179 \r
180 \r
181                 public Figure shift(Point p)\r
182                 {\r
183                         datum += p;\r
184                         return this;\r
185                 }\r
186                 public Figure centering(Point p)\r
187                 {\r
188                         datum = p;\r
189                         return this;\r
190                 }\r
191 \r
192                 public void draw(Color c)\r
193                 {\r
194                         Main.drawable.polygon(this, c);\r
195                 }\r
196                 public void draw()\r
197                 {\r
198                         Main.drawable.polygon(this, Color.white);\r
199                 }\r
200         }\r
201 \r
202 }