OSDN Git Service

flip ok
[psychlops/silverlight.git] / dev3 / psychlops / core / graphic / module.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 \r
16         public partial struct Point\r
17         {\r
18                 public double x, y, z;\r
19                 public Point(double dx, double dy, double dz)\r
20                 {\r
21                         x = dx;\r
22                         y = dy;\r
23                         z = dz;\r
24                 }\r
25                 public Point(double dx, double dy)\r
26                 {\r
27                         x = dx;\r
28                         y = dy;\r
29                         z = 0.0;\r
30                 }\r
31                 public Point set(double dx, double dy, double dz)\r
32                 {\r
33                         x = dx;\r
34                         y = dy;\r
35                         z = dz;\r
36                         return this;\r
37                 }\r
38                 public Point set(double dx, double dy)\r
39                 {\r
40                         x = dx;\r
41                         y = dy;\r
42                         z = 0.0;\r
43                         return this;\r
44                 }\r
45 \r
46                 public static Point operator +(Point lhs, Point rhs)\r
47                 {\r
48                         return new Point(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z);\r
49                 }\r
50                 public static Point operator -(Point lhs, Point rhs)\r
51                 {\r
52                         return new Point(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z);\r
53                 }\r
54         }\r
55 \r
56 \r
57         public partial struct Color\r
58         {\r
59                 public double r, g, b, a;\r
60                 public Color(double lum)\r
61                 {\r
62                         r = g = b = lum;\r
63                         a = 1.0;\r
64                 }\r
65                 public Color(double red, double green, double blue)\r
66                 {\r
67                         r = red;\r
68                         g = green;\r
69                         b = blue;\r
70                         a = 1.0;\r
71                 }\r
72                 public Color(double red, double green, double blue, double alpha)\r
73                 {\r
74                         r = red;\r
75                         g = green;\r
76                         b = blue;\r
77                         a = alpha;\r
78                 }\r
79                 public void set(double lum)\r
80                 {\r
81                         r = g = b = lum;\r
82                         a = 1.0;\r
83                 }\r
84                 public void set(double red, double green, double blue)\r
85                 {\r
86                         r = red;\r
87                         g = green;\r
88                         b = blue;\r
89                         a = 1.0;\r
90                 }\r
91                 public void set(double red, double green, double blue, double alpha)\r
92                 {\r
93                         r = red;\r
94                         g = green;\r
95                         b = blue;\r
96                         a = alpha;\r
97                 }\r
98 \r
99                 public static readonly Color\r
100                         black = new Color(0, 0, 0, 1),\r
101                         red = new Color(1, 0, 0, 1),\r
102                         green = new Color(0, 1, 0, 1),\r
103                         blue = new Color(0, 0, 1, 1),\r
104                         yellow = new Color(1, 1, 0, 1),\r
105                         magenta = new Color(1, 0, 1, 1),\r
106                         cyan = new Color(0, 1, 1, 1),\r
107                         white = new Color(1, 1, 1, 1),\r
108                         gray = new Color(.5, .5, .5, 1);\r
109 \r
110         }\r
111 \r
112 \r
113         public interface Drawable\r
114         {\r
115                 Point getCenter();\r
116                 void clear(Color col);\r
117                 void pix(int x, int y, Color col);\r
118                 void line(Line drawee);\r
119                 void line(Line drawee, Color col);\r
120                 //void line(Line drawee, Stroke strk);\r
121                 void rect(Rectangle drawee);\r
122                 void rect(Rectangle drawee, Color col);\r
123                 //void rect(Rectangle drawee, Stroke strk);\r
124                 void ellipse(Ellipse drawee);\r
125                 void ellipse(Ellipse drawee, Color col);\r
126                 //void ellipse(Ellipse drawee, Stroke strk);\r
127                 void polygon(Polygon drawee);\r
128                 void polygon(Polygon drawee, Color col);\r
129                 //void polygon(Polygon drawee, Stroke strk);\r
130                 void letters(Letters drawee);\r
131                 void letters(Letters drawee, Color col);\r
132                 //void letters(Letters drawee, Stroke strk);\r
133                 void image(Image drawee);\r
134                 void msg(string s, double x, double y, Color c);\r
135         }\r
136 \r
137 \r
138 \r
139         public interface Figure\r
140         {\r
141                 Figure shift(Point p);\r
142                 Figure centering(Point p);\r
143                 void draw();\r
144                 UIElement toNative();\r
145         }\r
146         public static class FigureExtention\r
147         {\r
148                 public static Figure shift(this Figure target, double x, double y)\r
149                 {\r
150                         return target.shift(new Point(x, y));\r
151                 }\r
152                 public static Figure centering(this Figure target)\r
153                 {\r
154                         return target.centering(Main.drawable.getCenter());\r
155                 }\r
156                 public static Figure centering(this Figure target, double x, double y)\r
157                 {\r
158                         return target.centering(new Point(x, y));\r
159                 }\r
160         }\r
161 \r
162         public partial class Image : Figure\r
163         {\r
164                 public WriteableBitmap buffer;\r
165                 public Point datum;\r
166                 public Rectangle self_rect;\r
167 \r
168                 public Image(int wid, int hei)\r
169                 {\r
170                         initialize__(wid, hei);\r
171                         self_rect = new Rectangle(wid, hei);\r
172                 }\r
173 \r
174                 /*public Image shift(double x, double y)\r
175                 {\r
176                         datum.x += x;\r
177                         datum.y += y;\r
178                         return this;\r
179                 }*/\r
180                 public Figure shift(Point p)\r
181                 {\r
182                         datum += p;\r
183                         return this;\r
184                 }\r
185                 public Figure centering(Point p)\r
186                 {\r
187                         datum.x = p.x - width / 2.0;\r
188                         datum.y = p.y - height / 2.0;\r
189                         return this;\r
190                 }\r
191 \r
192                 public void pix(int x, int y, Color col)\r
193                 {\r
194                         buffer.SetPixel(x, y, col);\r
195                 }\r
196 \r
197 \r
198                 public void field(System.Func<int,int,System.Windows.Media.Color> func)\r
199                 {\r
200                         field__(func);\r
201                         //buffer.ForEach(func);\r
202                 }\r
203                 public void field(System.Func<int, int, System.Windows.Media.Color, System.Windows.Media.Color> func)\r
204                 {\r
205                         field__(func);\r
206                         //buffer.ForEach(func);\r
207                 }\r
208 \r
209                 public void draw()\r
210                 {\r
211                         Main.drawable.image(this);\r
212                 }\r
213 \r
214                 public double width  { get { return self_rect.width; } }\r
215                 public double height { get { return self_rect.height; } }\r
216 \r
217         }\r
218 \r
219 }