OSDN Git Service

456
[psychlops/silverlight.git] / dev4 / psychlops / core / graphic / module.cs
index 7afeeaf..e55a779 100644 (file)
@@ -4,34 +4,63 @@ using System.Windows;
 \r
 namespace Psychlops\r
 {\r
-\r
-       public partial struct Point\r
+       public static class StaticFunctions\r
        {\r
-               public double x, y, z;\r
-               public Point(double dx, double dy, double dz)\r
+               public static T[] NewArray<T>(int x)\r
+                       where T : new()\r
                {\r
-                       x = dx;\r
-                       y = dy;\r
-                       z = dz;\r
+                       T[] t = new T[x];\r
+                       for (int i = 0; i < x; i++)\r
+                       {\r
+                               t[i] = new T();\r
+                       }\r
+                       return t;\r
                }\r
-               public Point(double dx, double dy)\r
+               public static T[,] NewArray<T>(int x, int y)\r
+                       where T : new()\r
                {\r
-                       x = dx;\r
-                       y = dy;\r
-                       z = 0.0;\r
+                       T[,] t = new T[x,y];\r
+                       for (int i = 0; i < x; i++)\r
+                       {\r
+                               for (int j = 0; j < x; j++)\r
+                               {\r
+                                       t[i,j] = new T();\r
+                               }\r
+                       }\r
+                       return t;\r
                }\r
-               public Point set(double dx, double dy, double dz)\r
+               public static T[,,] NewArray<T>(int x, int y, int z)\r
+                       where T : new()\r
+               {\r
+                       T[,,] t = new T[x, y, z];\r
+                       for (int i = 0; i < x; i++)\r
+                       {\r
+                               for (int j = 0; j < y; j++)\r
+                               {\r
+                                       for (int k = 0; k < z; k++)\r
+                                       {\r
+                                               t[i, j, k] = new T();\r
+                                       }\r
+                               }\r
+                       }\r
+                       return t;\r
+               }\r
+       }\r
+\r
+       public partial struct Point\r
+       {\r
+               public double x, y, z;\r
+               public Point(double dx, double dy, double dz = 0.0)\r
                {\r
                        x = dx;\r
                        y = dy;\r
                        z = dz;\r
-                       return this;\r
                }\r
-               public Point set(double dx, double dy)\r
+               public Point set(double dx, double dy, double dz = 0.0)\r
                {\r
                        x = dx;\r
                        y = dy;\r
-                       z = 0.0;\r
+                       z = dz;\r
                        return this;\r
                }\r
 \r
@@ -58,14 +87,7 @@ namespace Psychlops
                        r = g = b = lum;\r
                        a = 1.0;\r
                }\r
-               public Color(double red, double green, double blue)\r
-               {\r
-                       r = red;\r
-                       g = green;\r
-                       b = blue;\r
-                       a = 1.0;\r
-               }\r
-               public Color(double red, double green, double blue, double alpha)\r
+               public Color(double red, double green, double blue, double alpha = 1.0)\r
                {\r
                        r = red;\r
                        g = green;\r
@@ -77,14 +99,7 @@ namespace Psychlops
                        r = g = b = lum;\r
                        a = 1.0;\r
                }\r
-               public void set(double red, double green, double blue)\r
-               {\r
-                       r = red;\r
-                       g = green;\r
-                       b = blue;\r
-                       a = 1.0;\r
-               }\r
-               public void set(double red, double green, double blue, double alpha)\r
+               public void set(double red, double green, double blue, double alpha = 1.0)\r
                {\r
                        r = red;\r
                        g = green;\r
@@ -105,9 +120,10 @@ namespace Psychlops
                        yellow = new Color(1, 1, 0, 1),\r
                        magenta = new Color(1, 0, 1, 1),\r
                        cyan = new Color(0, 1, 1, 1),\r
-                       white = new Color(1, 1, 1, 1),\r
                        gray = new Color(.5, .5, .5, 1),\r
-                       null_color = new Color(0, 0, 0, 0);\r
+                       white = new Color(1, 1, 1, 1),\r
+                       null_color = new Color(0, 0, 0, 0),\r
+                       transparent = new Color(0, 0, 0, 0);\r
 \r
        }\r
 \r
@@ -123,6 +139,7 @@ namespace Psychlops
                void polygon(Polygon drawee);\r
                void letters(Letters drawee);\r
                void image(Image drawee);\r
+               void group(Group drawee);\r
                void msg(string s, double x, double y, Color c);\r
        }\r
 \r
@@ -146,17 +163,17 @@ namespace Psychlops
                        target.datum = p;\r
                        return target.datum;\r
                }\r
-               public static Figure shift(this Figure target, double x, double y)\r
+               public static Figure shift(this Figure target, double x, double y, double z = 0.0)\r
                {\r
-                       return target.shift(new Point(x, y));\r
+                       return target.shift(new Point(x, y, z));\r
                }\r
                public static Figure centering(this Figure target)\r
                {\r
                        return target.centering(Main.drawable.getCenter());\r
                }\r
-               public static Figure centering(this Figure target, double x, double y)\r
+               public static Figure centering(this Figure target, double x, double y, double z = 0.0)\r
                {\r
-                       return target.centering(new Point(x, y));\r
+                       return target.centering(new Point(x, y, z));\r
                }\r
        }\r
 \r
@@ -165,6 +182,76 @@ namespace Psychlops
                public interface PrimitiveFigure : Figure\r
                {\r
                        UIElement toNative();\r
+                       UIElement poolNative(Canvas c);\r
                }\r
        }\r
+\r
+       public partial class Group : Internal.PrimitiveFigure\r
+       {\r
+               System.Collections.Generic.List<Figure> list;\r
+               System.Windows.Controls.Canvas cnvs;\r
+               System.Windows.Media.TransformGroup trans;\r
+               System.Windows.Media.TransformCollection transF;\r
+               System.Windows.Media.RotateTransform rotateF;\r
+               SimpleProcedure setRotation_;\r
+               System.Windows.Media.ScaleTransform scaleF;\r
+               SimpleProcedure setScaling_;\r
+               System.Windows.Media.TranslateTransform translateF;\r
+\r
+               bool AsyncBool;\r
+               double rotation_;\r
+               public double rotation\r
+               {\r
+                       get { return rotation_; }\r
+                       set { rotation_ = value; rotateF.Dispatcher.BeginInvoke(setRotation_); }\r
+               }               \r
+               public Point axis\r
+               {\r
+                       get;\r
+                       set;\r
+               }\r
+               Point scaling_;\r
+               public Point scaling\r
+               {\r
+                       get { return scaling_; }\r
+                       set { scaling_ = value; scaleF.Dispatcher.BeginInvoke(setScaling_); }\r
+               }\r
+\r
+               AppendFunc1 append_;\r
+\r
+               public Group()\r
+               {\r
+                       setRotation_ = new SimpleProcedure(setRotation__);\r
+                       setScaling_ = new SimpleProcedure(setScaling__);\r
+                       append_ = new AppendFunc1(append__);\r
+                       list = new System.Collections.Generic.List<Figure>();\r
+                       AsyncBool = false;\r
+                       initialize__();\r
+                       while (!AsyncBool) { }\r
+               }\r
+\r
+               public Group append(Internal.PrimitiveFigure fig)\r
+               {\r
+                       list.Add(fig);\r
+                       cnvs.Dispatcher.BeginInvoke(append_, fig);\r
+                       return this;\r
+               }\r
+\r
+               public Point datum { get; set; }\r
+               public Figure shift(Point p)\r
+               {\r
+                       datum = datum + p;\r
+                       return this;\r
+               }\r
+               public Figure centering(Point p)\r
+               {\r
+                       datum = p;\r
+                       return this;\r
+               }\r
+               public void draw()\r
+               {\r
+                       Main.drawable.group(this);\r
+               }\r
+       }\r
+\r
 }
\ No newline at end of file