OSDN Git Service

shader
[psychlops/silverlight.git] / dev4 / psychlops / core / graphic / module.cs
index e55a779..8a5be98 100644 (file)
@@ -140,6 +140,7 @@ namespace Psychlops
                void letters(Letters drawee);\r
                void image(Image drawee);\r
                void group(Group drawee);\r
+               void shader(ShaderField drawee);\r
                void msg(string s, double x, double y, Color c);\r
        }\r
 \r
@@ -254,4 +255,114 @@ namespace Psychlops
                }\r
        }\r
 \r
+\r
+\r
+       public partial class ShaderField : Internal.PrimitiveFigure\r
+       {\r
+               public Point v1, v2;\r
+               \r
+               public ShaderField()\r
+               {\r
+                       set(0,0);\r
+               }\r
+               public ShaderField(double wid, double hei)\r
+               {\r
+                       initialized = false;\r
+                       set(wid, hei);\r
+               }\r
+               public ShaderField(Rectangle another)\r
+               {\r
+                       v1 = another.v1;\r
+                       v2 = another.v2;\r
+               }\r
+               public ShaderField set(double wid, double hei)\r
+               {\r
+                       v1.set(0, 0, 0);\r
+                       v2.set(wid, hei, 0);\r
+                       return this;\r
+               }\r
+               ShaderField set(Point po1, Point po2)\r
+               {\r
+                       v1 = po1;\r
+                       v2 = po2;\r
+                       return this;\r
+               }\r
+               public ShaderField set(double l, double t, double r, double b)\r
+               {\r
+                       v1.set(l, t, 0);\r
+                       v2.set(r, b, 0);\r
+                       return this;\r
+               }\r
+               public ShaderField set(ShaderField another)\r
+               {\r
+                       v1 = another.v1;\r
+                       v2 = another.v2;\r
+                       return this;\r
+               }\r
+\r
+               public ShaderField resize(double width, double height)\r
+               {\r
+                       Point po = center;\r
+                       set(width, height);\r
+                       centering(po);\r
+                       return this;\r
+               }\r
+\r
+\r
+               public Point datum\r
+               {\r
+                       get { return v1; }\r
+                       set { double w = width, h = height; v1 = value; v2 = v1 + new Point(w,h); }\r
+               }\r
+               public ShaderField move_to(Point p) { datum = p; return this; }\r
+               public ShaderField move_to(double x, double y, double z = 0.0) { datum = new Point(x, y, z); return this; }\r
+               public ShaderField locate(Point p) { datum = p; return this; }\r
+               public ShaderField locate(double x, double y, double z = 0.0) { datum = new Point(x, y, z); return this; }\r
+\r
+               public Figure shift(Point p)\r
+               {\r
+                       v1 += p;\r
+                       v2 += p;\r
+                       return this;\r
+               }\r
+               public Figure centering(Point p)\r
+               {\r
+                       double h = width, v = height;\r
+                       v1.x = p.x - h / 2.0;\r
+                       v1.y = p.y - v / 2.0;\r
+                       v2.x = v1.x + h;\r
+                       v2.y = v1.y + v;\r
+                       return this;\r
+               }\r
+\r
+               public virtual void draw()\r
+               {\r
+                       Main.drawable.shader(this);\r
+               }\r
+\r
+               internal Action setParameters = initialize___;\r
+               internal Action initialize__ = initialize___;\r
+               private static void initialize___() {}\r
+               internal bool initialized = false;\r
+\r
+               public double left { get { return v1.x; } }\r
+               public double top { get { return v1.y; } }\r
+               public double right { get { return v2.x; } }\r
+               public double bottom { get { return v2.y; } }\r
+               public double width { get { return Math.abs(v1.x - v2.x); } }\r
+               public double height { get { return Math.abs(v1.y - v2.y); } }\r
+               public Point center\r
+               {\r
+                       get { return new Point((left + right) / 2, (top + bottom) / 2); }\r
+                       set { centering(value); }\r
+               }\r
+               public double getLeft() { return left; }\r
+               public double getTop() { return top; }\r
+               public double getRight() { return right; }\r
+               public double getBottom() { return bottom; }\r
+               public double getWidth() { return width; }\r
+               public double getHeight() { return height; }\r
+               public Point getCenter() { return center; }\r
+       }\r
+\r
 }
\ No newline at end of file