\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
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
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
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
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
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
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