OSDN Git Service

71f33cb512b78aa459bd628552c60650a23211cf
[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 width { get { return Math.abs(v1.x - v2.x); } }\r
125                 public double height { get { return Math.abs(v1.y - v2.y); } }\r
126 \r
127 \r
128                 public static implicit operator System.Windows.Rect(Rectangle d)\r
129                 {\r
130                         return new System.Windows.Rect(d.v1.x, d.v1.y, d.v2.x, d.v2.y);\r
131                 }\r
132 \r
133         }\r
134 \r
135 \r
136         public class Ellipse : Shape\r
137         {\r
138                 public Point datum;\r
139                 public double xdiameter, ydiameter;\r
140 \r
141                 public Figure shift(Point p)\r
142                 {\r
143                         datum += p;\r
144                         return this;\r
145                 }\r
146                 public Figure centering(Point p)\r
147                 {\r
148                         datum = p;\r
149                         return this;\r
150                 }\r
151 \r
152                 public void draw(Color c)\r
153                 {\r
154                         Main.drawable.ellipse(this, c);\r
155                 }\r
156                 public void draw()\r
157                 {\r
158                         Main.drawable.ellipse(this, Color.white);\r
159                 }\r
160         }\r
161 \r
162 \r
163         public class Polygon : Shape\r
164         {\r
165                 public Point datum;\r
166                 public System.Collections.Generic.List<Point> vertices;\r
167 \r
168                 public Polygon()\r
169                 {\r
170                         vertices = new System.Collections.Generic.List<Point>();\r
171                 }\r
172                 public Polygon append(Point p) { vertices.Add(p); return this; }\r
173                 public Polygon append(double x, double y) { return append(new Point(x, y, 0.0)); }\r
174                 public Polygon append(double x, double y, double z) { return append(new Point(x, y, z)); }\r
175 \r
176 \r
177                 public Figure shift(Point p)\r
178                 {\r
179                         datum += p;\r
180                         return this;\r
181                 }\r
182                 public Figure centering(Point p)\r
183                 {\r
184                         datum = p;\r
185                         return this;\r
186                 }\r
187 \r
188                 public void draw(Color c)\r
189                 {\r
190                         Main.drawable.polygon(this, c);\r
191                 }\r
192                 public void draw()\r
193                 {\r
194                         Main.drawable.polygon(this, Color.white);\r
195                 }\r
196         }\r
197 \r
198 }