diff --git a/BalanceBoardState.cs b/BalanceBoardState.cs new file mode 100644 index 0000000..5d53a60 --- /dev/null +++ b/BalanceBoardState.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework.Input; + +using System.Text; + +namespace TheraWii +{ + class BalanceBoardState : WiiControllerState + { + public ButtonState button; + public float frontLeft; + public float frontRight; + public float backLeft; + public float backRight; + + public BalanceBoardState() + { + + } + + public void Initialize() + { + frontLeft = 0.0f; //measured in kg + frontRight = 0.0f; //measured in kg + backLeft = 0.0f; //measured in kg + backRight = 0.0f; //measured in kg + connected = false; + button = ButtonState.Released; + } + + public double getWeight() + { + return frontLeft + frontRight + backLeft + backRight; //measured in kg + } + + public Boolean connected; + public Boolean isConnected() + { + return connected; + } + + internal BalanceBoardState Copy() + { + return (BalanceBoardState)this.MemberwiseClone(); + } + } +} diff --git a/Basketball.cs b/Basketball.cs new file mode 100644 index 0000000..dcc232c --- /dev/null +++ b/Basketball.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Audio; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.GamerServices; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Net; +using Microsoft.Xna.Framework.Storage; + +namespace TheraWii +{ + class Basketball : Ellipsoid + { + private Vector3 _scale; + //private Vector3 ambient; + //private Texture2D bbalTex; + + public Basketball(GraphicsDeviceManager g, ContentManager c, Vector3 position, Vector3 scale, Color color) + { + this.Scale = 0.1f*scale; + this.Position = position; + //this.color = new Vector3(0.8f, 0.4f, 0.0f); + //this.ambient = new Vector3(0.4f, 0.4f, 0.4f); + + graphics = g; + Content = c; + + aspectRatio = graphics.GraphicsDevice.Viewport.AspectRatio; + + ellipsoidModel = Content.Load("Models\\basketball"); + + // Fix missing logo texture by coloring the patch orange + BasicEffect e = (BasicEffect)ellipsoidModel.Meshes[1].Effects[2]; + e.DiffuseColor = new Vector3(0.827847719192505f, 0.432608515024185f, 0.20047302544117f); + e.SpecularColor = new Vector3(0.2f, 0.2f, 0.2f); + e.SpecularPower = 64.0f; + //bbalTex = Content.Load("Textures\\spalding"); + //e.Texture = bbalTex; + //e.TextureEnabled = true; + } + + public override Vector3 Scale + { + set { this._scale = 0.04f * value; } + get { return this._scale; } + } + + public override void Draw() + { + // Copy any parent transforms. + Matrix[] transforms = new Matrix[ellipsoidModel.Bones.Count]; + ellipsoidModel.CopyAbsoluteBoneTransformsTo(transforms); + + + // Draw the model. A model can have multiple meshes, so loop. + //foreach (ModelMesh mesh in ellipsoidModel.Meshes) + ModelMesh mesh = ellipsoidModel.Meshes[1]; + { + // This is where the mesh orientation is set, as well as our camera and projection. + foreach (BasicEffect effect in mesh.Effects) + //BasicEffect effect = (BasicEffect)mesh.Effects[3]; + { + effect.EnableDefaultLighting(); + effect.PreferPerPixelLighting = true; + //effect.TextureEnabled = true; + //effect.Texture = bbalTex; + //effect.TextureEnabled = true; + //effect.DiffuseColor = this.color; + //effect.AmbientLightColor = this.ambient; + effect.LightingEnabled = true; + //effect.DirectionalLight0.Direction = new Vector3(0.0f, 0.0f, 1.0f); + + effect.View = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up); + effect.Projection = Matrix.CreatePerspective(0.2f, 0.2f, 1.0f, 1000.0f); + effect.World = transforms[mesh.ParentBone.Index] + //* Matrix.CreateRotationX(MathHelper.ToRadians(189.0f)) + * Matrix.CreateScale(Scale.X/aspectRatio, Scale.Y, Scale.Z) + * Matrix.CreateTranslation(Position) + ; + } + // Draw the mesh, using the effects set above. + mesh.Draw(); + } + } + } +} diff --git a/Content/Content.contentproj b/Content/Content.contentproj new file mode 100755 index 0000000..bef744a --- /dev/null +++ b/Content/Content.contentproj @@ -0,0 +1,87 @@ + + + {7536376D-BAEC-4BD1-B221-29613EDBB7CE} + {96E2B04D-8817-42c6-938A-82C39BA4D311};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + Debug + x86 + Library + Properties + v3.5 + v3.0 + x86 + ..\bin\$(Configuration) + + + Windows + + + Windows + + + + False + + + False + + + False + + + False + + + False + + + + + GameFont + FontDescriptionImporter + FontDescriptionProcessor + + + + + sphere + XImporter + ModelProcessor + + + + + text_background + TextureImporter + TextureProcessor + + + + + cube + XImporter + ModelProcessor + + + + + hoop + XImporter + ModelProcessor + + + + + basketball + FbxImporter + ModelProcessor + + + + + \ No newline at end of file diff --git a/Content/Fonts/GameFont.spritefont b/Content/Fonts/GameFont.spritefont new file mode 100755 index 0000000..9d7b892 --- /dev/null +++ b/Content/Fonts/GameFont.spritefont @@ -0,0 +1,55 @@ + + + + + + + Verdana + + + 14 + + + 0 + + + true + + + + + + + + + ~ + + + + \ No newline at end of file diff --git a/Content/Models/basketball.fbx b/Content/Models/basketball.fbx new file mode 100755 index 0000000..4f42e3d Binary files /dev/null and b/Content/Models/basketball.fbx differ diff --git a/Content/Models/cube.x b/Content/Models/cube.x new file mode 100755 index 0000000..4aa90e0 --- /dev/null +++ b/Content/Models/cube.x @@ -0,0 +1,120 @@ +xof 0303txt 0032 + + +template VertexDuplicationIndices { + + DWORD nIndices; + DWORD nOriginalVertices; + array DWORD indices[nIndices]; +} +template XSkinMeshHeader { + <3cf169ce-ff7c-44ab-93c0-f78f62d172e2> + WORD nMaxSkinWeightsPerVertex; + WORD nMaxSkinWeightsPerFace; + WORD nBones; +} +template SkinWeights { + <6f0d123b-bad2-4167-a0d0-80224f25fabb> + STRING transformNodeName; + DWORD nWeights; + array DWORD vertexIndices[nWeights]; + array float weights[nWeights]; + Matrix4x4 matrixOffset; +} + +Frame RootFrame { + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000, + 0.000000,1.000000,0.000000,0.000000, + 0.000000,0.000000,-1.000000,0.000000, + 0.000000,0.000000,0.000000,1.000000;; + } +Frame Cube { + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000, + 0.000000,1.000000,0.000000,0.000000, + 0.000000,0.000000,1.000000,0.000000, + 0.000000,0.000000,0.000000,1.000000;; + } +Mesh { +24; +1.000000; 1.000000; -1.000000;, +1.000000; -1.000000; -1.000000;, +-1.000000; -1.000000; -1.000000;, +-1.000000; 1.000000; -1.000000;, +1.000000; 1.000000; 1.000000;, +-1.000000; 1.000000; 1.000000;, +-1.000000; -1.000000; 1.000000;, +1.000000; -1.000000; 1.000000;, +1.000000; 1.000000; -1.000000;, +1.000000; 1.000000; 1.000000;, +1.000000; -1.000000; 1.000000;, +1.000000; -1.000000; -1.000000;, +1.000000; -1.000000; -1.000000;, +1.000000; -1.000000; 1.000000;, +-1.000000; -1.000000; 1.000000;, +-1.000000; -1.000000; -1.000000;, +-1.000000; -1.000000; -1.000000;, +-1.000000; -1.000000; 1.000000;, +-1.000000; 1.000000; 1.000000;, +-1.000000; 1.000000; -1.000000;, +1.000000; 1.000000; 1.000000;, +1.000000; 1.000000; -1.000000;, +-1.000000; 1.000000; -1.000000;, +-1.000000; 1.000000; 1.000000;; +6; +4; 0, 3, 2, 1;, +4; 4, 7, 6, 5;, +4; 8, 11, 10, 9;, +4; 12, 15, 14, 13;, +4; 16, 19, 18, 17;, +4; 20, 23, 22, 21;; + MeshMaterialList { + 0; + 6; + 0, + 0, + 0, + 0, + 0, + 0;; + } //End of MeshMaterialList + MeshNormals { +24; + 0.577349; 0.577349; -0.577349;, + 0.577349; -0.577349; -0.577349;, + -0.577349; -0.577349; -0.577349;, + -0.577349; 0.577349; -0.577349;, + 0.577349; 0.577349; 0.577349;, + -0.577349; 0.577349; 0.577349;, + -0.577349; -0.577349; 0.577349;, + 0.577349; -0.577349; 0.577349;, + 0.577349; 0.577349; -0.577349;, + 0.577349; 0.577349; 0.577349;, + 0.577349; -0.577349; 0.577349;, + 0.577349; -0.577349; -0.577349;, + 0.577349; -0.577349; -0.577349;, + 0.577349; -0.577349; 0.577349;, + -0.577349; -0.577349; 0.577349;, + -0.577349; -0.577349; -0.577349;, + -0.577349; -0.577349; -0.577349;, + -0.577349; -0.577349; 0.577349;, + -0.577349; 0.577349; 0.577349;, + -0.577349; 0.577349; -0.577349;, + 0.577349; 0.577349; 0.577349;, + 0.577349; 0.577349; -0.577349;, + -0.577349; 0.577349; -0.577349;, + -0.577349; 0.577349; 0.577349;; +6; +4; 0, 3, 2, 1;, +4; 4, 7, 6, 5;, +4; 8, 11, 10, 9;, +4; 12, 15, 14, 13;, +4; 16, 19, 18, 17;, +4; 20, 23, 22, 21;; +} //End of MeshNormals + } +} +} diff --git a/Content/Models/hoop.x b/Content/Models/hoop.x new file mode 100755 index 0000000..3ffb655 --- /dev/null +++ b/Content/Models/hoop.x @@ -0,0 +1,2140 @@ +xof 0303txt 0032 +// SketchUp 6 -> DirectX (c)2008 edecadoudal, supports: faces, normals and textures +Material Default_Material{ +1.0;1.0;1.0;1.0;; +3.2; +0.000000;0.000000;0.000000;; +0.000000;0.000000;0.000000;; +} +Material _Red_{ +1.0;0.0;0.0;1.0;; +3.2; +0.000000;0.000000;0.000000;; +0.000000;0.000000;0.000000;; +} +Material _Black_{ +0.0;0.0;0.0;1.0;; +3.2; +0.000000;0.000000;0.000000;; +0.000000;0.000000;0.000000;; +} +Material _Gray_Glass_{ +0.501960784313725;0.501960784313725;0.501960784313725;0.5;; +3.2; +0.000000;0.000000;0.000000;; +0.000000;0.000000;0.000000;; +} +Material _DarkOrange_{ +1.0;0.549019607843137;0.0;1.0;; +3.2; +0.000000;0.000000;0.000000;; +0.000000;0.000000;0.000000;; +} +Mesh mesh_0{ + 408; + -38.2778;16.7372;4.1823;, + -38.2778;16.7372;4.1823;, + -40.9862;13.9632;2.1042;, + -40.9862;13.9632;2.1042;, + -38.2778;-6.7576;4.1823;, + -38.2778;-6.7576;4.1823;, + -60.3764;16.7372;-12.7745;, + -60.3764;16.7372;-12.7745;, + -57.3199;13.9632;-10.4292;, + -57.3199;13.9632;-10.4292;, + -57.3199;-4.4451;-10.4292;, + -57.3199;-4.4451;-10.4292;, + -40.9862;-4.4451;2.1042;, + -40.9862;-4.4451;2.1042;, + -46.5940;-6.7576;-2.1989;, + -46.5940;-6.7576;-2.1989;, + -50.6723;-6.7576;-5.3282;, + -50.6723;-6.7576;-5.3282;, + -60.3764;-6.7576;-12.7745;, + -60.3764;-6.7576;-12.7745;, + -31.8062;-24.6212;15.8649;, + -31.8062;-24.6212;15.8649;, + -32.8097;-22.8968;15.0949;, + -32.8097;-22.8968;15.0949;, + -31.8062;20.9152;15.8649;, + -31.8062;20.9152;15.8649;, + -73.1210;-24.6212;-15.8371;, + -73.1210;-24.6212;-15.8371;, + -72.0107;-22.8968;-14.9851;, + -72.0107;-22.8968;-14.9851;, + -72.0107;19.7330;-14.9851;, + -72.0107;19.7330;-14.9851;, + -32.8097;19.7330;15.0949;, + -32.8097;19.7330;15.0949;, + -73.1210;20.9152;-15.8371;, + -73.1210;20.9152;-15.8371;, + -57.3199;13.9632;-10.4292;, + -57.3199;13.9632;-10.4292;, + -40.9862;-4.4451;2.1042;, + -40.9862;-4.4451;2.1042;, + -40.9862;13.9632;2.1042;, + -40.9862;13.9632;2.1042;, + -57.3199;-4.4451;-10.4292;, + -57.3199;-4.4451;-10.4292;, + -28.5623;20.9152;11.6373;, + -28.5623;20.9152;11.6373;, + -29.7570;19.3438;10.7206;, + -29.7570;19.3438;10.7206;, + -28.5623;-24.6212;11.6373;, + -28.5623;-24.6212;11.6373;, + -69.8771;20.9152;-20.0646;, + -69.8771;20.9152;-20.0646;, + -68.5737;19.3438;-19.0645;, + -68.5737;19.3438;-19.0645;, + -68.5737;-23.0438;-19.0645;, + -68.5737;-23.0438;-19.0645;, + -29.7570;-23.0438;10.7206;, + -29.7570;-23.0438;10.7206;, + -69.8771;-24.6212;-20.0646;, + -69.8771;-24.6212;-20.0646;, + -69.8771;20.9152;-20.0646;, + -69.8771;20.9152;-20.0646;, + -73.1210;-24.6212;-15.8371;, + -73.1210;-24.6212;-15.8371;, + -69.8771;-24.6212;-20.0646;, + -69.8771;-24.6212;-20.0646;, + -73.1210;20.9152;-15.8371;, + -73.1210;20.9152;-15.8371;, + -28.5623;20.9152;11.6373;, + -28.5623;20.9152;11.6373;, + -73.1210;20.9152;-15.8371;, + -73.1210;20.9152;-15.8371;, + -69.8771;20.9152;-20.0646;, + -69.8771;20.9152;-20.0646;, + -31.8062;20.9152;15.8649;, + -31.8062;20.9152;15.8649;, + -31.8062;20.9152;15.8649;, + -31.8062;20.9152;15.8649;, + -28.5623;-24.6212;11.6373;, + -28.5623;-24.6212;11.6373;, + -31.8062;-24.6212;15.8649;, + -31.8062;-24.6212;15.8649;, + -28.5623;20.9152;11.6373;, + -28.5623;20.9152;11.6373;, + -73.1210;-24.6212;-15.8371;, + -73.1210;-24.6212;-15.8371;, + -28.5623;-24.6212;11.6373;, + -28.5623;-24.6212;11.6373;, + -69.8771;-24.6212;-20.0646;, + -69.8771;-24.6212;-20.0646;, + -31.8062;-24.6212;15.8649;, + -31.8062;-24.6212;15.8649;, + -29.7570;19.3438;10.7206;, + -29.7570;19.3438;10.7206;, + -38.2778;16.7372;4.1823;, + -38.2778;16.7372;4.1823;, + -29.7570;-23.0438;10.7206;, + -29.7570;-23.0438;10.7206;, + -68.5737;19.3438;-19.0645;, + -68.5737;19.3438;-19.0645;, + -60.3764;16.7372;-12.7745;, + -60.3764;16.7372;-12.7745;, + -60.3764;-6.7576;-12.7745;, + -60.3764;-6.7576;-12.7745;, + -38.2778;-6.7576;4.1823;, + -38.2778;-6.7576;4.1823;, + -68.5737;-23.0438;-19.0645;, + -68.5737;-23.0438;-19.0645;, + -46.5940;-6.7576;-2.1989;, + -46.5940;-6.7576;-2.1989;, + -50.6723;-6.7576;-5.3282;, + -50.6723;-6.7576;-5.3282;, + -72.0107;-22.8968;-14.9851;, + -72.0107;-22.8968;-14.9851;, + -32.8097;19.7330;15.0949;, + -32.8097;19.7330;15.0949;, + -32.8097;-22.8968;15.0949;, + -32.8097;-22.8968;15.0949;, + -72.0107;19.7330;-14.9851;, + -72.0107;19.7330;-14.9851;, + -50.6723;-6.7576;-17.4192;, + -50.6723;-6.7576;-17.4192;, + -51.9685;-9.1798;-15.1741;, + -51.9685;-9.1798;-15.1741;, + -50.6723;-9.1798;-17.4192;, + -50.6723;-9.1798;-17.4192;, + -51.9685;-6.7576;-15.1741;, + -51.9685;-6.7576;-15.1741;, + -51.9685;-6.7576;-15.1741;, + -51.9685;-6.7576;-15.1741;, + -52.6395;-9.1798;-12.6700;, + -52.6395;-9.1798;-12.6700;, + -51.9685;-9.1798;-15.1741;, + -51.9685;-9.1798;-15.1741;, + -52.6395;-6.7576;-12.6700;, + -52.6395;-6.7576;-12.6700;, + -52.6395;-6.7576;-12.6700;, + -52.6395;-6.7576;-12.6700;, + -52.6395;-9.1798;-10.0775;, + -52.6395;-9.1798;-10.0775;, + -52.6395;-9.1798;-12.6700;, + -52.6395;-9.1798;-12.6700;, + -52.6395;-6.7576;-10.0775;, + -52.6395;-6.7576;-10.0775;, + -52.6395;-6.7576;-10.0775;, + -52.6395;-6.7576;-10.0775;, + -51.9685;-9.1798;-7.5734;, + -51.9685;-9.1798;-7.5734;, + -52.6395;-9.1798;-10.0775;, + -52.6395;-9.1798;-10.0775;, + -51.9685;-6.7576;-7.5734;, + -51.9685;-6.7576;-7.5734;, + -38.9933;-6.7576;-20.5486;, + -38.9933;-6.7576;-20.5486;, + -44.0899;-6.7576;-21.2196;, + -44.0899;-6.7576;-21.2196;, + -41.4974;-6.7576;-21.2196;, + -41.4974;-6.7576;-21.2196;, + -46.5940;-6.7576;-20.5486;, + -46.5940;-6.7576;-20.5486;, + -42.3507;-6.7576;-20.5148;, + -42.3507;-6.7576;-20.5148;, + -39.9776;-6.7576;-20.1386;, + -39.9776;-6.7576;-20.1386;, + -36.7481;-6.7576;-19.2524;, + -36.7481;-6.7576;-19.2524;, + -37.7826;-6.7576;-19.1611;, + -37.7826;-6.7576;-19.1611;, + -34.9150;-6.7576;-17.4192;, + -34.9150;-6.7576;-17.4192;, + -35.9155;-6.7576;-17.6487;, + -35.9155;-6.7576;-17.6487;, + -34.5034;-6.7576;-15.7047;, + -34.5034;-6.7576;-15.7047;, + -33.6188;-6.7576;-15.1741;, + -33.6188;-6.7576;-15.1741;, + -33.6426;-6.7576;-13.4614;, + -33.6426;-6.7576;-13.4614;, + -32.9478;-6.7576;-12.6700;, + -32.9478;-6.7576;-12.6700;, + -33.3917;-6.7576;-11.0718;, + -33.3917;-6.7576;-11.0718;, + -32.9478;-6.7576;-10.0775;, + -32.9478;-6.7576;-10.0775;, + -33.7679;-6.7576;-8.6987;, + -33.7679;-6.7576;-8.6987;, + -33.6188;-6.7576;-7.5734;, + -33.6188;-6.7576;-7.5734;, + -34.7454;-6.7576;-6.5037;, + -34.7454;-6.7576;-6.5037;, + -34.9150;-6.7576;-5.3282;, + -34.9150;-6.7576;-5.3282;, + -36.2578;-6.7576;-4.6366;, + -36.2578;-6.7576;-4.6366;, + -36.7481;-6.7576;-3.4951;, + -36.7481;-6.7576;-3.4951;, + -38.2018;-6.7576;-3.2245;, + -38.2018;-6.7576;-3.2245;, + -38.9933;-6.7576;-2.1989;, + -38.9933;-6.7576;-2.1989;, + -40.4451;-6.7576;-2.3637;, + -40.4451;-6.7576;-2.3637;, + -42.8347;-6.7576;-2.1128;, + -42.8347;-6.7576;-2.1128;, + -41.4974;-6.7576;-1.5279;, + -41.4974;-6.7576;-1.5279;, + -44.0899;-6.7576;-1.5279;, + -44.0899;-6.7576;-1.5279;, + -44.7403;-6.7576;-20.2639;, + -44.7403;-6.7576;-20.2639;, + -48.8391;-6.7576;-19.2524;, + -48.8391;-6.7576;-19.2524;, + -46.9836;-6.7576;-19.4031;, + -46.9836;-6.7576;-19.4031;, + -48.9277;-6.7576;-17.9910;, + -48.9277;-6.7576;-17.9910;, + -50.6723;-6.7576;-17.4192;, + -50.6723;-6.7576;-17.4192;, + -50.4400;-6.7576;-16.1239;, + -50.4400;-6.7576;-16.1239;, + -51.9685;-6.7576;-15.1741;, + -51.9685;-6.7576;-15.1741;, + -51.4175;-6.7576;-13.9289;, + -51.4175;-6.7576;-13.9289;, + -52.6395;-6.7576;-12.6700;, + -52.6395;-6.7576;-12.6700;, + -51.7937;-6.7576;-11.5558;, + -51.7937;-6.7576;-11.5558;, + -52.6395;-6.7576;-10.0775;, + -52.6395;-6.7576;-10.0775;, + -51.5428;-6.7576;-9.1662;, + -51.5428;-6.7576;-9.1662;, + -51.9685;-6.7576;-7.5734;, + -51.9685;-6.7576;-7.5734;, + -50.6820;-6.7576;-6.9229;, + -50.6820;-6.7576;-6.9229;, + -50.6723;-6.7576;-5.3282;, + -50.6723;-6.7576;-5.3282;, + -49.2699;-6.7576;-4.9788;, + -49.2699;-6.7576;-4.9788;, + -48.8391;-6.7576;-3.4951;, + -48.8391;-6.7576;-3.4951;, + -47.4028;-6.7576;-3.4665;, + -47.4028;-6.7576;-3.4665;, + -46.5940;-6.7576;-2.1989;, + -46.5940;-6.7576;-2.1989;, + -45.2078;-6.7576;-2.4890;, + -45.2078;-6.7576;-2.4890;, + -36.7481;-6.7576;-3.4951;, + -36.7481;-6.7576;-3.4951;, + -34.9150;-9.1798;-5.3282;, + -34.9150;-9.1798;-5.3282;, + -36.7481;-9.1798;-3.4951;, + -36.7481;-9.1798;-3.4951;, + -34.9150;-6.7576;-5.3282;, + -34.9150;-6.7576;-5.3282;, + -34.9150;-6.7576;-5.3282;, + -34.9150;-6.7576;-5.3282;, + -33.6188;-9.1798;-7.5734;, + -33.6188;-9.1798;-7.5734;, + -34.9150;-9.1798;-5.3282;, + -34.9150;-9.1798;-5.3282;, + -33.6188;-6.7576;-7.5734;, + -33.6188;-6.7576;-7.5734;, + -33.6188;-6.7576;-7.5734;, + -33.6188;-6.7576;-7.5734;, + -32.9478;-9.1798;-10.0775;, + -32.9478;-9.1798;-10.0775;, + -33.6188;-9.1798;-7.5734;, + -33.6188;-9.1798;-7.5734;, + -32.9478;-6.7576;-10.0775;, + -32.9478;-6.7576;-10.0775;, + -32.9478;-6.7576;-10.0775;, + -32.9478;-6.7576;-10.0775;, + -32.9478;-9.1798;-12.6700;, + -32.9478;-9.1798;-12.6700;, + -32.9478;-9.1798;-10.0775;, + -32.9478;-9.1798;-10.0775;, + -32.9478;-6.7576;-12.6700;, + -32.9478;-6.7576;-12.6700;, + -32.9478;-6.7576;-12.6700;, + -32.9478;-6.7576;-12.6700;, + -33.6188;-9.1798;-15.1741;, + -33.6188;-9.1798;-15.1741;, + -32.9478;-9.1798;-12.6700;, + -32.9478;-9.1798;-12.6700;, + -33.6188;-6.7576;-15.1741;, + -33.6188;-6.7576;-15.1741;, + -33.6188;-6.7576;-15.1741;, + -33.6188;-6.7576;-15.1741;, + -34.9150;-9.1798;-17.4192;, + -34.9150;-9.1798;-17.4192;, + -33.6188;-9.1798;-15.1741;, + -33.6188;-9.1798;-15.1741;, + -34.9150;-6.7576;-17.4192;, + -34.9150;-6.7576;-17.4192;, + -34.9150;-6.7576;-17.4192;, + -34.9150;-6.7576;-17.4192;, + -36.7481;-9.1798;-19.2524;, + -36.7481;-9.1798;-19.2524;, + -34.9150;-9.1798;-17.4192;, + -34.9150;-9.1798;-17.4192;, + -36.7481;-6.7576;-19.2524;, + -36.7481;-6.7576;-19.2524;, + -38.9933;-6.7576;-20.5486;, + -38.9933;-6.7576;-20.5486;, + -36.7481;-9.1798;-19.2524;, + -36.7481;-9.1798;-19.2524;, + -36.7481;-6.7576;-19.2524;, + -36.7481;-6.7576;-19.2524;, + -38.9933;-9.1798;-20.5486;, + -38.9933;-9.1798;-20.5486;, + -41.4974;-6.7576;-21.2196;, + -41.4974;-6.7576;-21.2196;, + -38.9933;-9.1798;-20.5486;, + -38.9933;-9.1798;-20.5486;, + -38.9933;-6.7576;-20.5486;, + -38.9933;-6.7576;-20.5486;, + -41.4974;-9.1798;-21.2196;, + -41.4974;-9.1798;-21.2196;, + -44.0899;-6.7576;-21.2196;, + -44.0899;-6.7576;-21.2196;, + -41.4974;-9.1798;-21.2196;, + -41.4974;-9.1798;-21.2196;, + -41.4974;-6.7576;-21.2196;, + -41.4974;-6.7576;-21.2196;, + -44.0899;-9.1798;-21.2196;, + -44.0899;-9.1798;-21.2196;, + -46.5940;-6.7576;-20.5486;, + -46.5940;-6.7576;-20.5486;, + -44.0899;-9.1798;-21.2196;, + -44.0899;-9.1798;-21.2196;, + -44.0899;-6.7576;-21.2196;, + -44.0899;-6.7576;-21.2196;, + -46.5940;-9.1798;-20.5486;, + -46.5940;-9.1798;-20.5486;, + -48.8391;-6.7576;-19.2524;, + -48.8391;-6.7576;-19.2524;, + -46.5940;-9.1798;-20.5486;, + -46.5940;-9.1798;-20.5486;, + -46.5940;-6.7576;-20.5486;, + -46.5940;-6.7576;-20.5486;, + -48.8391;-9.1798;-19.2524;, + -48.8391;-9.1798;-19.2524;, + -48.8391;-6.7576;-19.2524;, + -48.8391;-6.7576;-19.2524;, + -50.6723;-9.1798;-17.4192;, + -50.6723;-9.1798;-17.4192;, + -48.8391;-9.1798;-19.2524;, + -48.8391;-9.1798;-19.2524;, + -50.6723;-6.7576;-17.4192;, + -50.6723;-6.7576;-17.4192;, + -51.9685;-6.7576;-7.5734;, + -51.9685;-6.7576;-7.5734;, + -50.6723;-9.1798;-5.3282;, + -50.6723;-9.1798;-5.3282;, + -51.9685;-9.1798;-7.5734;, + -51.9685;-9.1798;-7.5734;, + -50.6723;-6.7576;-5.3282;, + -50.6723;-6.7576;-5.3282;, + -50.6723;-6.7576;-5.3282;, + -50.6723;-6.7576;-5.3282;, + -48.8391;-9.1798;-3.4951;, + -48.8391;-9.1798;-3.4951;, + -50.6723;-9.1798;-5.3282;, + -50.6723;-9.1798;-5.3282;, + -48.8391;-6.7576;-3.4951;, + -48.8391;-6.7576;-3.4951;, + -48.8391;-9.1798;-3.4951;, + -48.8391;-9.1798;-3.4951;, + -46.5940;-6.7576;-2.1989;, + -46.5940;-6.7576;-2.1989;, + -46.5940;-9.1798;-2.1989;, + -46.5940;-9.1798;-2.1989;, + -48.8391;-6.7576;-3.4951;, + -48.8391;-6.7576;-3.4951;, + -46.5940;-9.1798;-2.1989;, + -46.5940;-9.1798;-2.1989;, + -44.0899;-6.7576;-1.5279;, + -44.0899;-6.7576;-1.5279;, + -44.0899;-9.1798;-1.5279;, + -44.0899;-9.1798;-1.5279;, + -46.5940;-6.7576;-2.1989;, + -46.5940;-6.7576;-2.1989;, + -44.0899;-9.1798;-1.5279;, + -44.0899;-9.1798;-1.5279;, + -41.4974;-6.7576;-1.5279;, + -41.4974;-6.7576;-1.5279;, + -41.4974;-9.1798;-1.5279;, + -41.4974;-9.1798;-1.5279;, + -44.0899;-6.7576;-1.5279;, + -44.0899;-6.7576;-1.5279;, + -41.4974;-9.1798;-1.5279;, + -41.4974;-9.1798;-1.5279;, + -38.9933;-6.7576;-2.1989;, + -38.9933;-6.7576;-2.1989;, + -38.9933;-9.1798;-2.1989;, + -38.9933;-9.1798;-2.1989;, + -41.4974;-6.7576;-1.5279;, + -41.4974;-6.7576;-1.5279;, + -38.9933;-9.1798;-2.1989;, + -38.9933;-9.1798;-2.1989;, + -36.7481;-6.7576;-3.4951;, + -36.7481;-6.7576;-3.4951;, + -36.7481;-9.1798;-3.4951;, + -36.7481;-9.1798;-3.4951;, + -38.9933;-6.7576;-2.1989;, + -38.9933;-6.7576;-2.1989;; + 288; + 3;4,2,0, + 3;1,3,5, + 3;6,0,2, + 3;3,1,7, + 3;8,6,2, + 3;3,7,9, + 3;10,6,8, + 3;9,7,11, + 3;14,12,4, + 3;5,13,15, + 3;2,4,12, + 3;13,5,3, + 3;10,12,14, + 3;15,13,11, + 3;16,10,14, + 3;15,11,17, + 3;18,10,16, + 3;17,11,19, + 3;6,10,18, + 3;19,11,7, + 3;24,22,20, + 3;21,23,25, + 3;26,20,22, + 3;23,21,27, + 3;28,26,22, + 3;23,27,29, + 3;30,26,28, + 3;29,27,31, + 3;34,32,24, + 3;25,33,35, + 3;22,24,32, + 3;33,25,23, + 3;30,32,34, + 3;35,33,31, + 3;26,30,34, + 3;35,31,27, + 3;40,38,36, + 3;37,39,41, + 3;42,36,38, + 3;39,37,43, + 3;48,46,44, + 3;45,47,49, + 3;50,44,46, + 3;47,45,51, + 3;52,50,46, + 3;47,51,53, + 3;54,50,52, + 3;53,51,55, + 3;58,56,48, + 3;49,57,59, + 3;46,48,56, + 3;57,49,47, + 3;54,56,58, + 3;59,57,55, + 3;50,54,58, + 3;59,55,51, + 3;64,62,60, + 3;61,63,65, + 3;66,60,62, + 3;63,61,67, + 3;72,70,68, + 3;69,71,73, + 3;74,68,70, + 3;71,69,75, + 3;80,78,76, + 3;77,79,81, + 3;82,76,78, + 3;79,77,83, + 3;88,86,84, + 3;85,87,89, + 3;90,84,86, + 3;87,85,91, + 3;96,94,92, + 3;93,95,97, + 3;98,92,94, + 3;95,93,99, + 3;100,98,94, + 3;95,99,101, + 3;102,98,100, + 3;101,99,103, + 3;106,104,96, + 3;97,105,107, + 3;94,96,104, + 3;105,97,95, + 3;108,104,106, + 3;107,105,109, + 3;110,108,106, + 3;107,109,111, + 3;102,110,106, + 3;107,111,103, + 3;98,102,106, + 3;107,103,99, + 3;116,114,112, + 3;113,115,117, + 3;118,112,114, + 3;115,113,119, + 3;124,122,120, + 3;121,123,125, + 3;126,120,122, + 3;123,121,127, + 3;132,130,128, + 3;129,131,133, + 3;134,128,130, + 3;131,129,135, + 3;140,138,136, + 3;137,139,141, + 3;142,136,138, + 3;139,137,143, + 3;148,146,144, + 3;145,147,149, + 3;150,144,146, + 3;147,145,151, + 3;156,154,152, + 3;153,155,157, + 3;158,152,154, + 3;155,153,159, + 3;160,152,158, + 3;159,153,161, + 3;162,152,160, + 3;161,153,163, + 3;164,152,162, + 3;163,153,165, + 3;166,164,162, + 3;163,165,167, + 3;168,164,166, + 3;167,165,169, + 3;170,168,166, + 3;167,169,171, + 3;172,168,170, + 3;171,169,173, + 3;174,168,172, + 3;173,169,175, + 3;176,174,172, + 3;173,175,177, + 3;178,174,176, + 3;177,175,179, + 3;180,178,176, + 3;177,179,181, + 3;182,178,180, + 3;181,179,183, + 3;184,182,180, + 3;181,183,185, + 3;186,182,184, + 3;185,183,187, + 3;188,186,184, + 3;185,187,189, + 3;190,186,188, + 3;189,187,191, + 3;192,190,188, + 3;189,191,193, + 3;194,190,192, + 3;193,191,195, + 3;196,194,192, + 3;193,195,197, + 3;198,194,196, + 3;197,195,199, + 3;200,198,196, + 3;197,199,201, + 3;202,198,200, + 3;201,199,203, + 3;204,198,202, + 3;203,199,205, + 3;206,204,202, + 3;203,205,207, + 3;210,208,158, + 3;159,209,211, + 3;160,158,208, + 3;209,159,161, + 3;212,208,210, + 3;211,209,213, + 3;214,212,210, + 3;211,213,215, + 3;216,214,210, + 3;211,215,217, + 3;218,214,216, + 3;217,215,219, + 3;220,218,216, + 3;217,219,221, + 3;222,218,220, + 3;221,219,223, + 3;224,222,220, + 3;221,223,225, + 3;226,222,224, + 3;225,223,227, + 3;228,226,224, + 3;225,227,229, + 3;230,226,228, + 3;229,227,231, + 3;232,230,228, + 3;229,231,233, + 3;234,230,232, + 3;233,231,235, + 3;236,234,232, + 3;233,235,237, + 3;238,234,236, + 3;237,235,239, + 3;240,238,236, + 3;237,239,241, + 3;242,238,240, + 3;241,239,243, + 3;244,242,240, + 3;241,243,245, + 3;246,242,244, + 3;245,243,247, + 3;202,246,244, + 3;245,247,203, + 3;206,202,244, + 3;245,203,207, + 3;252,250,248, + 3;249,251,253, + 3;254,248,250, + 3;251,249,255, + 3;260,258,256, + 3;257,259,261, + 3;262,256,258, + 3;259,257,263, + 3;268,266,264, + 3;265,267,269, + 3;270,264,266, + 3;267,265,271, + 3;276,274,272, + 3;273,275,277, + 3;278,272,274, + 3;275,273,279, + 3;284,282,280, + 3;281,283,285, + 3;286,280,282, + 3;283,281,287, + 3;292,290,288, + 3;289,291,293, + 3;294,288,290, + 3;291,289,295, + 3;300,298,296, + 3;297,299,301, + 3;302,296,298, + 3;299,297,303, + 3;308,306,304, + 3;305,307,309, + 3;310,304,306, + 3;307,305,311, + 3;316,314,312, + 3;313,315,317, + 3;318,312,314, + 3;315,313,319, + 3;324,322,320, + 3;321,323,325, + 3;326,320,322, + 3;323,321,327, + 3;332,330,328, + 3;329,331,333, + 3;334,328,330, + 3;331,329,335, + 3;340,338,336, + 3;337,339,341, + 3;342,336,338, + 3;339,337,343, + 3;348,346,344, + 3;345,347,349, + 3;350,344,346, + 3;347,345,351, + 3;356,354,352, + 3;353,355,357, + 3;358,352,354, + 3;355,353,359, + 3;364,362,360, + 3;361,363,365, + 3;366,360,362, + 3;363,361,367, + 3;372,370,368, + 3;369,371,373, + 3;374,368,370, + 3;371,369,375, + 3;380,378,376, + 3;377,379,381, + 3;382,376,378, + 3;379,377,383, + 3;388,386,384, + 3;385,387,389, + 3;390,384,386, + 3;387,385,391, + 3;396,394,392, + 3;393,395,397, + 3;398,392,394, + 3;395,393,399, + 3;404,402,400, + 3;401,403,405, + 3;406,400,402, + 3;403,401,407;; + MeshMaterialList { + 5; + 288; + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 0, + 3, + 0, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 3, + 0, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4; + { Default_Material } + { _Red_ } + { _Black_ } + { _Gray_Glass_ } + { _DarkOrange_ } + } + MeshTextureCoords { + 408; + -26.8218,-16.7372; + -26.8218,-16.7372; + -30.2356,-13.9632; + -30.2356,-13.9632; + -26.8218,6.7576; + -26.8218,6.7576; + -54.6765,-16.7372; + -54.6765,-16.7372; + -50.8238,-13.9632; + -50.8238,-13.9632; + -50.8238,4.4451; + -50.8238,4.4451; + -30.2356,4.4451; + -30.2356,4.4451; + -37.3041,6.7576; + -37.3041,6.7576; + -42.4446,6.7576; + -42.4446,6.7576; + -54.6765,6.7576; + -54.6765,6.7576; + 16.5757,24.6212; + 16.5757,24.6212; + 17.8404,22.8968; + 17.8404,22.8968; + 16.5757,-20.9152; + 16.5757,-20.9152; + 68.6518,24.6212; + 68.6518,24.6212; + 67.2522,22.8968; + 67.2522,22.8968; + 67.2522,-19.7330; + 67.2522,-19.7330; + 17.8404,-19.7330; + 17.8404,-19.7330; + 68.6518,-20.9152; + 68.6518,-20.9152; + -50.8238,-13.9632; + -50.8238,-13.9632; + -30.2356,4.4451; + -30.2356,4.4451; + -30.2356,-13.9632; + -30.2356,-13.9632; + -50.8238,4.4451; + -50.8238,4.4451; + -14.5757,-20.9152; + -14.5757,-20.9152; + -16.0815,-19.3438; + -16.0815,-19.3438; + -14.5757,24.6212; + -14.5757,24.6212; + -66.6518,-20.9152; + -66.6518,-20.9152; + -65.0088,-19.3438; + -65.0088,-19.3438; + -65.0088,23.0438; + -65.0088,23.0438; + -16.0815,23.0438; + -16.0815,23.0438; + -66.6518,24.6212; + -66.6518,24.6212; + -25.6201,-20.9152; + -25.6201,-20.9152; + -30.9489,24.6212; + -30.9489,24.6212; + -25.6201,24.6212; + -25.6201,24.6212; + -30.9489,-20.9152; + -30.9489,-20.9152; + 12.6373,-28.5623; + 12.6373,-28.5623; + -14.8371,-73.1210; + -14.8371,-73.1210; + -19.0646,-69.8771; + -19.0646,-69.8771; + 16.8649,-31.8062; + 16.8649,-31.8062; + 32.9489,-20.9152; + 32.9489,-20.9152; + 27.6201,24.6212; + 27.6201,24.6212; + 32.9489,24.6212; + 32.9489,24.6212; + 27.6201,-20.9152; + 27.6201,-20.9152; + 16.8371,-73.1210; + 16.8371,-73.1210; + -10.6373,-28.5623; + -10.6373,-28.5623; + 21.0646,-69.8771; + 21.0646,-69.8771; + -14.8649,-31.8062; + -14.8649,-31.8062; + -16.0815,-19.3438; + -16.0815,-19.3438; + -26.8218,-16.7372; + -26.8218,-16.7372; + -16.0815,23.0438; + -16.0815,23.0438; + -65.0088,-19.3438; + -65.0088,-19.3438; + -54.6765,-16.7372; + -54.6765,-16.7372; + -54.6765,6.7576; + -54.6765,6.7576; + -26.8218,6.7576; + -26.8218,6.7576; + -65.0088,23.0438; + -65.0088,23.0438; + -37.3041,6.7576; + -37.3041,6.7576; + -42.4446,6.7576; + -42.4446,6.7576; + 67.2522,22.8968; + 67.2522,22.8968; + 17.8404,-19.7330; + 17.8404,-19.7330; + 17.8404,22.8968; + 17.8404,22.8968; + 67.2522,-19.7330; + 67.2522,-19.7330; + -9.2507,6.7576; + -9.2507,6.7576; + -11.8431,9.1798; + -11.8431,9.1798; + -9.2507,9.1798; + -9.2507,9.1798; + -11.8431,6.7576; + -11.8431,6.7576; + 2.2066,6.7576; + 2.2066,6.7576; + -0.3859,9.1798; + -0.3859,9.1798; + 2.2066,9.1798; + 2.2066,9.1798; + -0.3859,6.7576; + -0.3859,6.7576; + 13.6700,6.7576; + 13.6700,6.7576; + 11.0775,9.1798; + 11.0775,9.1798; + 13.6700,9.1798; + 13.6700,9.1798; + 11.0775,6.7576; + 11.0775,6.7576; + 24.3582,6.7576; + 24.3582,6.7576; + 21.7658,9.1798; + 21.7658,9.1798; + 24.3582,9.1798; + 24.3582,9.1798; + 21.7658,6.7576; + 21.7658,6.7576; + -19.5486,-38.9933; + -19.5486,-38.9933; + -20.2196,-44.0899; + -20.2196,-44.0899; + -20.2196,-41.4974; + -20.2196,-41.4974; + -19.5486,-46.5940; + -19.5486,-46.5940; + -19.5148,-42.3507; + -19.5148,-42.3507; + -19.1386,-39.9776; + -19.1386,-39.9776; + -18.2524,-36.7481; + -18.2524,-36.7481; + -18.1611,-37.7826; + -18.1611,-37.7826; + -16.4192,-34.9150; + -16.4192,-34.9150; + -16.6487,-35.9155; + -16.6487,-35.9155; + -14.7047,-34.5034; + -14.7047,-34.5034; + -14.1741,-33.6188; + -14.1741,-33.6188; + -12.4614,-33.6426; + -12.4614,-33.6426; + -11.6700,-32.9478; + -11.6700,-32.9478; + -10.0718,-33.3917; + -10.0718,-33.3917; + -9.0775,-32.9478; + -9.0775,-32.9478; + -7.6987,-33.7679; + -7.6987,-33.7679; + -6.5734,-33.6188; + -6.5734,-33.6188; + -5.5037,-34.7454; + -5.5037,-34.7454; + -4.3282,-34.9150; + -4.3282,-34.9150; + -3.6366,-36.2578; + -3.6366,-36.2578; + -2.4951,-36.7481; + -2.4951,-36.7481; + -2.2245,-38.2018; + -2.2245,-38.2018; + -1.1989,-38.9933; + -1.1989,-38.9933; + -1.3637,-40.4451; + -1.3637,-40.4451; + -1.1128,-42.8347; + -1.1128,-42.8347; + -0.5279,-41.4974; + -0.5279,-41.4974; + -0.5279,-44.0899; + -0.5279,-44.0899; + -19.2639,-44.7403; + -19.2639,-44.7403; + -18.2524,-48.8391; + -18.2524,-48.8391; + -18.4031,-46.9836; + -18.4031,-46.9836; + -16.9910,-48.9277; + -16.9910,-48.9277; + -16.4192,-50.6723; + -16.4192,-50.6723; + -15.1239,-50.4400; + -15.1239,-50.4400; + -14.1741,-51.9685; + -14.1741,-51.9685; + -12.9289,-51.4175; + -12.9289,-51.4175; + -11.6700,-52.6395; + -11.6700,-52.6395; + -10.5558,-51.7937; + -10.5558,-51.7937; + -9.0775,-52.6395; + -9.0775,-52.6395; + -8.1662,-51.5428; + -8.1662,-51.5428; + -6.5734,-51.9685; + -6.5734,-51.9685; + -5.9229,-50.6820; + -5.9229,-50.6820; + -4.3282,-50.6723; + -4.3282,-50.6723; + -3.9788,-49.2699; + -3.9788,-49.2699; + -2.4951,-48.8391; + -2.4951,-48.8391; + -2.4665,-47.4028; + -2.4665,-47.4028; + -1.1989,-46.5940; + -1.1989,-46.5940; + -1.4890,-45.2078; + -1.4890,-45.2078; + 24.5135,6.7576; + 24.5135,6.7576; + 21.9210,9.1798; + 21.9210,9.1798; + 24.5135,9.1798; + 24.5135,9.1798; + 21.9210,6.7576; + 21.9210,6.7576; + 13.8431,6.7576; + 13.8431,6.7576; + 11.2507,9.1798; + 11.2507,9.1798; + 13.8431,9.1798; + 13.8431,9.1798; + 11.2507,6.7576; + 11.2507,6.7576; + 2.3859,6.7576; + 2.3859,6.7576; + -0.2066,9.1798; + -0.2066,9.1798; + 2.3859,9.1798; + 2.3859,9.1798; + -0.2066,6.7576; + -0.2066,6.7576; + -9.0775,6.7576; + -9.0775,6.7576; + -11.6700,9.1798; + -11.6700,9.1798; + -9.0775,9.1798; + -9.0775,9.1798; + -11.6700,6.7576; + -11.6700,6.7576; + -19.7658,6.7576; + -19.7658,6.7576; + -22.3582,9.1798; + -22.3582,9.1798; + -19.7658,9.1798; + -19.7658,9.1798; + -22.3582,6.7576; + -22.3582,6.7576; + -28.9505,6.7576; + -28.9505,6.7576; + -31.5430,9.1798; + -31.5430,9.1798; + -28.9505,9.1798; + -28.9505,9.1798; + -31.5430,6.7576; + -31.5430,6.7576; + -36.0059,6.7576; + -36.0059,6.7576; + -38.5983,9.1798; + -38.5983,9.1798; + -36.0059,9.1798; + -36.0059,9.1798; + -38.5983,6.7576; + -38.5983,6.7576; + -43.0435,6.7576; + -43.0435,6.7576; + -40.4510,9.1798; + -40.4510,9.1798; + -40.4510,6.7576; + -40.4510,6.7576; + -43.0435,9.1798; + -43.0435,9.1798; + -44.5754,6.7576; + -44.5754,6.7576; + -41.9830,9.1798; + -41.9830,9.1798; + -41.9830,6.7576; + -41.9830,6.7576; + -44.5754,9.1798; + -44.5754,9.1798; + -43.0899,6.7576; + -43.0899,6.7576; + -40.4974,9.1798; + -40.4974,9.1798; + -40.4974,6.7576; + -40.4974,6.7576; + -43.0899,9.1798; + -43.0899,9.1798; + -38.6880,6.7576; + -38.6880,6.7576; + -36.0955,9.1798; + -36.0955,9.1798; + -36.0955,6.7576; + -36.0955,6.7576; + -38.6880,9.1798; + -38.6880,9.1798; + -31.6697,6.7576; + -31.6697,6.7576; + -29.0773,9.1798; + -29.0773,9.1798; + -29.0773,6.7576; + -29.0773,6.7576; + -31.6697,9.1798; + -31.6697,9.1798; + -19.9210,6.7576; + -19.9210,6.7576; + -22.5135,9.1798; + -22.5135,9.1798; + -19.9210,9.1798; + -19.9210,9.1798; + -22.5135,6.7576; + -22.5135,6.7576; + 33.5430,6.7576; + 33.5430,6.7576; + 30.9505,9.1798; + 30.9505,9.1798; + 33.5430,9.1798; + 33.5430,9.1798; + 30.9505,6.7576; + 30.9505,6.7576; + 40.5983,6.7576; + 40.5983,6.7576; + 38.0059,9.1798; + 38.0059,9.1798; + 40.5983,9.1798; + 40.5983,9.1798; + 38.0059,6.7576; + 38.0059,6.7576; + 45.0435,9.1798; + 45.0435,9.1798; + 42.4510,6.7576; + 42.4510,6.7576; + 42.4510,9.1798; + 42.4510,9.1798; + 45.0435,6.7576; + 45.0435,6.7576; + 46.5754,9.1798; + 46.5754,9.1798; + 43.9830,6.7576; + 43.9830,6.7576; + 43.9830,9.1798; + 43.9830,9.1798; + 46.5754,6.7576; + 46.5754,6.7576; + 45.0899,9.1798; + 45.0899,9.1798; + 42.4974,6.7576; + 42.4974,6.7576; + 42.4974,9.1798; + 42.4974,9.1798; + 45.0899,6.7576; + 45.0899,6.7576; + 40.6880,9.1798; + 40.6880,9.1798; + 38.0955,6.7576; + 38.0955,6.7576; + 38.0955,9.1798; + 38.0955,9.1798; + 40.6880,6.7576; + 40.6880,6.7576; + 33.6697,9.1798; + 33.6697,9.1798; + 31.0773,6.7576; + 31.0773,6.7576; + 31.0773,9.1798; + 31.0773,9.1798; + 33.6697,6.7576; + 33.6697,6.7576;; + } + MeshNormals { + 408; + 0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +-0.7934;-0.0000;-0.6088; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.7934;0.0000;0.6088; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.7934;0.0000;-0.6088; +0.7934;-0.0000;0.6088; +-0.9239;0.0000;-0.3827; +0.9239;-0.0000;0.3827; +-0.7934;0.0000;-0.6088; +0.7934;-0.0000;0.6088; +-0.9239;0.0000;-0.3827; +0.9239;-0.0000;0.3827; +-0.9239;0.0000;-0.3827; +0.9239;-0.0000;0.3827; +-0.9914;0.0000;-0.1305; +0.9914;-0.0000;0.1305; +-0.9239;0.0000;-0.3827; +0.9239;-0.0000;0.3827; +-0.9914;0.0000;-0.1305; +0.9914;-0.0000;0.1305; +-0.9914;0.0000;-0.1305; +0.9914;-0.0000;0.1305; +-0.9914;0.0000;0.1305; +0.9914;-0.0000;-0.1305; +-0.9914;0.0000;-0.1305; +0.9914;-0.0000;0.1305; +-0.9914;0.0000;0.1305; +0.9914;-0.0000;-0.1305; +-0.9914;0.0000;0.1305; +0.9914;-0.0000;-0.1305; +-0.9239;0.0000;0.3827; +0.9239;-0.0000;-0.3827; +-0.9914;0.0000;0.1305; +0.9914;-0.0000;-0.1305; +-0.9239;0.0000;0.3827; +0.9239;-0.0000;-0.3827; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.0000;1.0000;-0.0000; +-0.0000;-1.0000;0.0000; +0.6088;0.0000;0.7934; +-0.6088;-0.0000;-0.7934; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.6088;0.0000;0.7934; +-0.6088;-0.0000;-0.7934; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.9239;0.0000;0.3827; +-0.9239;-0.0000;-0.3827; +0.7934;0.0000;0.6088; +-0.7934;-0.0000;-0.6088; +0.9239;0.0000;0.3827; +-0.9239;-0.0000;-0.3827; +0.9239;0.0000;0.3827; +-0.9239;-0.0000;-0.3827; +0.9914;0.0000;0.1305; +-0.9914;-0.0000;-0.1305; +0.9239;0.0000;0.3827; +-0.9239;-0.0000;-0.3827; +0.9914;0.0000;0.1305; +-0.9914;-0.0000;-0.1305; +0.9914;0.0000;0.1305; +-0.9914;-0.0000;-0.1305; +0.9914;0.0000;-0.1305; +-0.9914;-0.0000;0.1305; +0.9914;0.0000;0.1305; +-0.9914;-0.0000;-0.1305; +0.9914;0.0000;-0.1305; +-0.9914;-0.0000;0.1305; +0.9914;0.0000;-0.1305; +-0.9914;-0.0000;0.1305; +0.9239;0.0000;-0.3827; +-0.9239;-0.0000;0.3827; +0.9914;0.0000;-0.1305; +-0.9914;-0.0000;0.1305; +0.9239;0.0000;-0.3827; +-0.9239;-0.0000;0.3827; +0.9239;0.0000;-0.3827; +-0.9239;-0.0000;0.3827; +0.7934;0.0000;-0.6088; +-0.7934;-0.0000;0.6088; +0.9239;0.0000;-0.3827; +-0.9239;-0.0000;0.3827; +0.7934;0.0000;-0.6088; +-0.7934;-0.0000;0.6088; +0.7934;0.0000;-0.6088; +-0.7934;-0.0000;0.6088; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.7934;0.0000;-0.6088; +-0.7934;-0.0000;0.6088; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.3827;0.0000;-0.9239; +-0.3827;-0.0000;0.9239; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.6088;0.0000;-0.7934; +-0.6088;-0.0000;0.7934; +0.3827;0.0000;-0.9239; +-0.3827;-0.0000;0.9239; +0.1305;0.0000;-0.9914; +-0.1305;-0.0000;0.9914; +0.3827;0.0000;-0.9239; +-0.3827;-0.0000;0.9239; +0.3827;0.0000;-0.9239; +-0.3827;-0.0000;0.9239; +0.1305;0.0000;-0.9914; +-0.1305;-0.0000;0.9914; +-0.1305;0.0000;-0.9914; +0.1305;-0.0000;0.9914; +0.1305;0.0000;-0.9914; +-0.1305;-0.0000;0.9914; +0.1305;0.0000;-0.9914; +-0.1305;-0.0000;0.9914; +-0.1305;0.0000;-0.9914; +0.1305;-0.0000;0.9914; +-0.3827;0.0000;-0.9239; +0.3827;-0.0000;0.9239; +-0.1305;0.0000;-0.9914; +0.1305;-0.0000;0.9914; +-0.1305;0.0000;-0.9914; +0.1305;-0.0000;0.9914; +-0.3827;0.0000;-0.9239; +0.3827;-0.0000;0.9239; +-0.6088;0.0000;-0.7934; +0.6088;-0.0000;0.7934; +-0.3827;0.0000;-0.9239; +0.3827;-0.0000;0.9239; +-0.3827;0.0000;-0.9239; +0.3827;-0.0000;0.9239; +-0.6088;0.0000;-0.7934; +0.6088;-0.0000;0.7934; +-0.6088;0.0000;-0.7934; +0.6088;-0.0000;0.7934; +-0.7934;0.0000;-0.6088; +0.7934;-0.0000;0.6088; +-0.6088;0.0000;-0.7934; +0.6088;-0.0000;0.7934; +-0.7934;0.0000;-0.6088; +0.7934;-0.0000;0.6088; +-0.9239;0.0000;0.3827; +0.9239;-0.0000;-0.3827; +-0.8660;-0.0000;0.5000; +0.8660;0.0000;-0.5000; +-0.9239;0.0000;0.3827; +0.9239;-0.0000;-0.3827; +-0.8660;-0.0000;0.5000; +0.8660;0.0000;-0.5000; +-0.7071;-0.0000;0.7071; +0.7071;0.0000;-0.7071; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.7071;-0.0000;0.7071; +0.7071;0.0000;-0.7071; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.5000;-0.0000;0.8660; +0.5000;0.0000;-0.8660; +-0.5000;-0.0000;0.8660; +0.5000;0.0000;-0.8660; +-0.6088;0.0000;0.7934; +0.6088;-0.0000;-0.7934; +-0.2588;-0.0000;0.9659; +0.2588;0.0000;-0.9659; +-0.1305;0.0000;0.9914; +0.1305;-0.0000;-0.9914; +-0.1305;0.0000;0.9914; +0.1305;-0.0000;-0.9914; +-0.2588;-0.0000;0.9659; +0.2588;0.0000;-0.9659; +-0.1305;0.0000;0.9914; +0.1305;-0.0000;-0.9914; +0.1305;0.0000;0.9914; +-0.1305;-0.0000;-0.9914; +0.1305;0.0000;0.9914; +-0.1305;-0.0000;-0.9914; +-0.1305;0.0000;0.9914; +0.1305;-0.0000;-0.9914; +0.1305;0.0000;0.9914; +-0.1305;-0.0000;-0.9914; +0.3827;0.0000;0.9239; +-0.3827;-0.0000;-0.9239; +0.3827;0.0000;0.9239; +-0.3827;-0.0000;-0.9239; +0.1305;0.0000;0.9914; +-0.1305;-0.0000;-0.9914; +0.3827;0.0000;0.9239; +-0.3827;-0.0000;-0.9239; +0.6088;0.0000;0.7934; +-0.6088;-0.0000;-0.7934; +0.6088;0.0000;0.7934; +-0.6088;-0.0000;-0.7934; +0.3827;0.0000;0.9239; +-0.3827;-0.0000;-0.9239;; + 288; + 3;4,2,0; + 3;1,3,5; + 3;6,0,2; + 3;3,1,7; + 3;8,6,2; + 3;3,7,9; + 3;10,6,8; + 3;9,7,11; + 3;14,12,4; + 3;5,13,15; + 3;2,4,12; + 3;13,5,3; + 3;10,12,14; + 3;15,13,11; + 3;16,10,14; + 3;15,11,17; + 3;18,10,16; + 3;17,11,19; + 3;6,10,18; + 3;19,11,7; + 3;24,22,20; + 3;21,23,25; + 3;26,20,22; + 3;23,21,27; + 3;28,26,22; + 3;23,27,29; + 3;30,26,28; + 3;29,27,31; + 3;34,32,24; + 3;25,33,35; + 3;22,24,32; + 3;33,25,23; + 3;30,32,34; + 3;35,33,31; + 3;26,30,34; + 3;35,31,27; + 3;40,38,36; + 3;37,39,41; + 3;42,36,38; + 3;39,37,43; + 3;48,46,44; + 3;45,47,49; + 3;50,44,46; + 3;47,45,51; + 3;52,50,46; + 3;47,51,53; + 3;54,50,52; + 3;53,51,55; + 3;58,56,48; + 3;49,57,59; + 3;46,48,56; + 3;57,49,47; + 3;54,56,58; + 3;59,57,55; + 3;50,54,58; + 3;59,55,51; + 3;64,62,60; + 3;61,63,65; + 3;66,60,62; + 3;63,61,67; + 3;72,70,68; + 3;69,71,73; + 3;74,68,70; + 3;71,69,75; + 3;80,78,76; + 3;77,79,81; + 3;82,76,78; + 3;79,77,83; + 3;88,86,84; + 3;85,87,89; + 3;90,84,86; + 3;87,85,91; + 3;96,94,92; + 3;93,95,97; + 3;98,92,94; + 3;95,93,99; + 3;100,98,94; + 3;95,99,101; + 3;102,98,100; + 3;101,99,103; + 3;106,104,96; + 3;97,105,107; + 3;94,96,104; + 3;105,97,95; + 3;108,104,106; + 3;107,105,109; + 3;110,108,106; + 3;107,109,111; + 3;102,110,106; + 3;107,111,103; + 3;98,102,106; + 3;107,103,99; + 3;116,114,112; + 3;113,115,117; + 3;118,112,114; + 3;115,113,119; + 3;124,122,120; + 3;121,123,125; + 3;126,120,122; + 3;123,121,127; + 3;132,130,128; + 3;129,131,133; + 3;134,128,130; + 3;131,129,135; + 3;140,138,136; + 3;137,139,141; + 3;142,136,138; + 3;139,137,143; + 3;148,146,144; + 3;145,147,149; + 3;150,144,146; + 3;147,145,151; + 3;156,154,152; + 3;153,155,157; + 3;158,152,154; + 3;155,153,159; + 3;160,152,158; + 3;159,153,161; + 3;162,152,160; + 3;161,153,163; + 3;164,152,162; + 3;163,153,165; + 3;166,164,162; + 3;163,165,167; + 3;168,164,166; + 3;167,165,169; + 3;170,168,166; + 3;167,169,171; + 3;172,168,170; + 3;171,169,173; + 3;174,168,172; + 3;173,169,175; + 3;176,174,172; + 3;173,175,177; + 3;178,174,176; + 3;177,175,179; + 3;180,178,176; + 3;177,179,181; + 3;182,178,180; + 3;181,179,183; + 3;184,182,180; + 3;181,183,185; + 3;186,182,184; + 3;185,183,187; + 3;188,186,184; + 3;185,187,189; + 3;190,186,188; + 3;189,187,191; + 3;192,190,188; + 3;189,191,193; + 3;194,190,192; + 3;193,191,195; + 3;196,194,192; + 3;193,195,197; + 3;198,194,196; + 3;197,195,199; + 3;200,198,196; + 3;197,199,201; + 3;202,198,200; + 3;201,199,203; + 3;204,198,202; + 3;203,199,205; + 3;206,204,202; + 3;203,205,207; + 3;210,208,158; + 3;159,209,211; + 3;160,158,208; + 3;209,159,161; + 3;212,208,210; + 3;211,209,213; + 3;214,212,210; + 3;211,213,215; + 3;216,214,210; + 3;211,215,217; + 3;218,214,216; + 3;217,215,219; + 3;220,218,216; + 3;217,219,221; + 3;222,218,220; + 3;221,219,223; + 3;224,222,220; + 3;221,223,225; + 3;226,222,224; + 3;225,223,227; + 3;228,226,224; + 3;225,227,229; + 3;230,226,228; + 3;229,227,231; + 3;232,230,228; + 3;229,231,233; + 3;234,230,232; + 3;233,231,235; + 3;236,234,232; + 3;233,235,237; + 3;238,234,236; + 3;237,235,239; + 3;240,238,236; + 3;237,239,241; + 3;242,238,240; + 3;241,239,243; + 3;244,242,240; + 3;241,243,245; + 3;246,242,244; + 3;245,243,247; + 3;202,246,244; + 3;245,247,203; + 3;206,202,244; + 3;245,203,207; + 3;252,250,248; + 3;249,251,253; + 3;254,248,250; + 3;251,249,255; + 3;260,258,256; + 3;257,259,261; + 3;262,256,258; + 3;259,257,263; + 3;268,266,264; + 3;265,267,269; + 3;270,264,266; + 3;267,265,271; + 3;276,274,272; + 3;273,275,277; + 3;278,272,274; + 3;275,273,279; + 3;284,282,280; + 3;281,283,285; + 3;286,280,282; + 3;283,281,287; + 3;292,290,288; + 3;289,291,293; + 3;294,288,290; + 3;291,289,295; + 3;300,298,296; + 3;297,299,301; + 3;302,296,298; + 3;299,297,303; + 3;308,306,304; + 3;305,307,309; + 3;310,304,306; + 3;307,305,311; + 3;316,314,312; + 3;313,315,317; + 3;318,312,314; + 3;315,313,319; + 3;324,322,320; + 3;321,323,325; + 3;326,320,322; + 3;323,321,327; + 3;332,330,328; + 3;329,331,333; + 3;334,328,330; + 3;331,329,335; + 3;340,338,336; + 3;337,339,341; + 3;342,336,338; + 3;339,337,343; + 3;348,346,344; + 3;345,347,349; + 3;350,344,346; + 3;347,345,351; + 3;356,354,352; + 3;353,355,357; + 3;358,352,354; + 3;355,353,359; + 3;364,362,360; + 3;361,363,365; + 3;366,360,362; + 3;363,361,367; + 3;372,370,368; + 3;369,371,373; + 3;374,368,370; + 3;371,369,375; + 3;380,378,376; + 3;377,379,381; + 3;382,376,378; + 3;379,377,383; + 3;388,386,384; + 3;385,387,389; + 3;390,384,386; + 3;387,385,391; + 3;396,394,392; + 3;393,395,397; + 3;398,392,394; + 3;395,393,399; + 3;404,402,400; + 3;401,403,405; + 3;406,400,402; + 3;403,401,407;; + } + } diff --git a/Content/Models/sphere.x b/Content/Models/sphere.x new file mode 100755 index 0000000..487b832 --- /dev/null +++ b/Content/Models/sphere.x @@ -0,0 +1,11190 @@ +xof 0303txt 0032 + + +template VertexDuplicationIndices { + + DWORD nIndices; + DWORD nOriginalVertices; + array DWORD indices[nIndices]; +} +template XSkinMeshHeader { + <3cf169ce-ff7c-44ab-93c0-f78f62d172e2> + WORD nMaxSkinWeightsPerVertex; + WORD nMaxSkinWeightsPerFace; + WORD nBones; +} +template SkinWeights { + <6f0d123b-bad2-4167-a0d0-80224f25fabb> + STRING transformNodeName; + DWORD nWeights; + array DWORD vertexIndices[nWeights]; + array float weights[nWeights]; + Matrix4x4 matrixOffset; +} + +Frame RootFrame { + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000, + 0.000000,1.000000,0.000000,0.000000, + 0.000000,0.000000,1.000000,0.000000, + 0.000000,0.000000,0.000000,1.000000;; + } +Frame Sphere { + + FrameTransformMatrix { + 1.000000,0.000000,0.000000,0.000000, + 0.000000,1.000000,0.000000,0.000000, + 0.000000,0.000000,1.000000,0.000000, + 0.000000,0.000000,0.000000,1.000000;; + } +Mesh { +4032; +-0.000000; -0.000000; -1.000000;, +0.096100; 0.019100; -0.995200;, +0.098000; 0.000000; -0.995200;, +0.098000; 0.000000; -0.995200;, +0.096100; 0.019100; -0.995200;, +0.191300; 0.038100; -0.980800;, +0.195100; 0.000000; -0.980800;, +0.195100; 0.000000; -0.980800;, +0.191300; 0.038100; -0.980800;, +0.284700; 0.056600; -0.956900;, +0.290300; 0.000000; -0.956900;, +0.290300; 0.000000; -0.956900;, +0.284700; 0.056600; -0.956900;, +0.375300; 0.074700; -0.923900;, +0.382700; 0.000000; -0.923900;, +0.382700; 0.000000; -0.923900;, +0.375300; 0.074700; -0.923900;, +0.462300; 0.092000; -0.881900;, +0.471400; 0.000000; -0.881900;, +0.471400; 0.000000; -0.881900;, +0.462300; 0.092000; -0.881900;, +0.544900; 0.108400; -0.831500;, +0.555600; 0.000000; -0.831500;, +0.555600; 0.000000; -0.831500;, +0.544900; 0.108400; -0.831500;, +0.622200; 0.123800; -0.773000;, +0.634400; 0.000000; -0.773000;, +0.634400; 0.000000; -0.773000;, +0.622200; 0.123800; -0.773000;, +0.693500; 0.137900; -0.707100;, +0.707100; 0.000000; -0.707100;, +0.707100; 0.000000; -0.707100;, +0.693500; 0.137900; -0.707100;, +0.758200; 0.150800; -0.634400;, +0.773000; 0.000000; -0.634400;, +0.773000; 0.000000; -0.634400;, +0.758200; 0.150800; -0.634400;, +0.815500; 0.162200; -0.555600;, +0.831500; 0.000000; -0.555600;, +0.831500; 0.000000; -0.555600;, +0.815500; 0.162200; -0.555600;, +0.865000; 0.172100; -0.471400;, +0.881900; 0.000000; -0.471400;, +0.881900; 0.000000; -0.471400;, +0.865000; 0.172100; -0.471400;, +0.906100; 0.180200; -0.382700;, +0.923900; 0.000000; -0.382700;, +0.923900; 0.000000; -0.382700;, +0.906100; 0.180200; -0.382700;, +0.938600; 0.186700; -0.290300;, +0.956900; 0.000000; -0.290300;, +0.956900; 0.000000; -0.290300;, +0.938600; 0.186700; -0.290300;, +0.961900; 0.191300; -0.195100;, +0.980800; 0.000000; -0.195100;, +0.980800; 0.000000; -0.195100;, +0.961900; 0.191300; -0.195100;, +0.976100; 0.194200; -0.098000;, +0.995200; 0.000000; -0.098000;, +0.995200; 0.000000; -0.098000;, +0.976100; 0.194200; -0.098000;, +0.980800; 0.195100; -0.000000;, +1.000000; 0.000000; -0.000000;, +1.000000; 0.000000; -0.000000;, +0.980800; 0.195100; -0.000000;, +0.976100; 0.194200; 0.098000;, +0.995200; 0.000000; 0.098000;, +0.995200; 0.000000; 0.098000;, +0.976100; 0.194200; 0.098000;, +0.961900; 0.191300; 0.195100;, +0.980800; 0.000000; 0.195100;, +0.980800; 0.000000; 0.195100;, +0.961900; 0.191300; 0.195100;, +0.938600; 0.186700; 0.290300;, +0.956900; 0.000000; 0.290300;, +0.956900; 0.000000; 0.290300;, +0.938600; 0.186700; 0.290300;, +0.906100; 0.180200; 0.382700;, +0.923900; 0.000000; 0.382700;, +0.923900; 0.000000; 0.382700;, +0.906100; 0.180200; 0.382700;, +0.865000; 0.172100; 0.471400;, +0.881900; 0.000000; 0.471400;, +0.881900; 0.000000; 0.471400;, +0.865000; 0.172100; 0.471400;, +0.815500; 0.162200; 0.555600;, +0.831500; 0.000000; 0.555600;, +0.831500; 0.000000; 0.555600;, +0.815500; 0.162200; 0.555600;, +0.758200; 0.150800; 0.634400;, +0.773000; 0.000000; 0.634400;, +0.773000; 0.000000; 0.634400;, +0.758200; 0.150800; 0.634400;, +0.693500; 0.137900; 0.707100;, +0.707100; 0.000000; 0.707100;, +0.707100; 0.000000; 0.707100;, +0.693500; 0.137900; 0.707100;, +0.622200; 0.123800; 0.773000;, +0.634400; 0.000000; 0.773000;, +0.634400; 0.000000; 0.773000;, +0.622200; 0.123800; 0.773000;, +0.544900; 0.108400; 0.831500;, +0.555600; 0.000000; 0.831500;, +0.555600; 0.000000; 0.831500;, +0.544900; 0.108400; 0.831500;, +0.462300; 0.092000; 0.881900;, +0.471400; 0.000000; 0.881900;, +0.471400; 0.000000; 0.881900;, +0.462300; 0.092000; 0.881900;, +0.375300; 0.074700; 0.923900;, +0.382700; 0.000000; 0.923900;, +0.382700; 0.000000; 0.923900;, +0.375300; 0.074700; 0.923900;, +0.284700; 0.056600; 0.956900;, +0.290300; 0.000000; 0.956900;, +0.290300; 0.000000; 0.956900;, +0.284700; 0.056600; 0.956900;, +0.191300; 0.038100; 0.980800;, +0.195100; 0.000000; 0.980800;, +0.195100; 0.000000; 0.980800;, +0.191300; 0.038100; 0.980800;, +0.096100; 0.019100; 0.995200;, +0.098000; 0.000000; 0.995200;, +0.098000; 0.000000; 0.995200;, +0.096100; 0.019100; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.096100; 0.019100; 0.995200;, +0.090600; 0.037500; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.191300; 0.038100; 0.980800;, +0.180200; 0.074700; 0.980800;, +0.090600; 0.037500; 0.995200;, +0.096100; 0.019100; 0.995200;, +0.284700; 0.056600; 0.956900;, +0.268200; 0.111100; 0.956900;, +0.180200; 0.074700; 0.980800;, +0.191300; 0.038100; 0.980800;, +0.375300; 0.074700; 0.923900;, +0.353600; 0.146400; 0.923900;, +0.268200; 0.111100; 0.956900;, +0.284700; 0.056600; 0.956900;, +0.462300; 0.092000; 0.881900;, +0.435500; 0.180400; 0.881900;, +0.353600; 0.146400; 0.923900;, +0.375300; 0.074700; 0.923900;, +0.544900; 0.108400; 0.831500;, +0.513300; 0.212600; 0.831500;, +0.435500; 0.180400; 0.881900;, +0.462300; 0.092000; 0.881900;, +0.622200; 0.123800; 0.773000;, +0.586100; 0.242800; 0.773000;, +0.513300; 0.212600; 0.831500;, +0.544900; 0.108400; 0.831500;, +0.693500; 0.137900; 0.707100;, +0.653300; 0.270600; 0.707100;, +0.586100; 0.242800; 0.773000;, +0.622200; 0.123800; 0.773000;, +0.758200; 0.150800; 0.634400;, +0.714200; 0.295800; 0.634400;, +0.653300; 0.270600; 0.707100;, +0.693500; 0.137900; 0.707100;, +0.815500; 0.162200; 0.555600;, +0.768200; 0.318200; 0.555600;, +0.714200; 0.295800; 0.634400;, +0.758200; 0.150800; 0.634400;, +0.865000; 0.172100; 0.471400;, +0.814800; 0.337500; 0.471400;, +0.768200; 0.318200; 0.555600;, +0.815500; 0.162200; 0.555600;, +0.906100; 0.180200; 0.382700;, +0.853600; 0.353600; 0.382700;, +0.814800; 0.337500; 0.471400;, +0.865000; 0.172100; 0.471400;, +0.938600; 0.186700; 0.290300;, +0.884100; 0.366200; 0.290300;, +0.853600; 0.353600; 0.382700;, +0.906100; 0.180200; 0.382700;, +0.961900; 0.191300; 0.195100;, +0.906100; 0.375300; 0.195100;, +0.884100; 0.366200; 0.290300;, +0.938600; 0.186700; 0.290300;, +0.976100; 0.194200; 0.098000;, +0.919400; 0.380800; 0.098000;, +0.906100; 0.375300; 0.195100;, +0.961900; 0.191300; 0.195100;, +0.980800; 0.195100; -0.000000;, +0.923900; 0.382700; -0.000000;, +0.919400; 0.380800; 0.098000;, +0.976100; 0.194200; 0.098000;, +0.976100; 0.194200; -0.098000;, +0.919400; 0.380800; -0.098000;, +0.923900; 0.382700; -0.000000;, +0.980800; 0.195100; -0.000000;, +0.961900; 0.191300; -0.195100;, +0.906100; 0.375300; -0.195100;, +0.919400; 0.380800; -0.098000;, +0.976100; 0.194200; -0.098000;, +0.938600; 0.186700; -0.290300;, +0.884100; 0.366200; -0.290300;, +0.906100; 0.375300; -0.195100;, +0.961900; 0.191300; -0.195100;, +0.906100; 0.180200; -0.382700;, +0.853600; 0.353600; -0.382700;, +0.884100; 0.366200; -0.290300;, +0.938600; 0.186700; -0.290300;, +0.865000; 0.172100; -0.471400;, +0.814800; 0.337500; -0.471400;, +0.853600; 0.353600; -0.382700;, +0.906100; 0.180200; -0.382700;, +0.815500; 0.162200; -0.555600;, +0.768200; 0.318200; -0.555600;, +0.814800; 0.337500; -0.471400;, +0.865000; 0.172100; -0.471400;, +0.758200; 0.150800; -0.634400;, +0.714200; 0.295800; -0.634400;, +0.768200; 0.318200; -0.555600;, +0.815500; 0.162200; -0.555600;, +0.693500; 0.137900; -0.707100;, +0.653300; 0.270600; -0.707100;, +0.714200; 0.295800; -0.634400;, +0.758200; 0.150800; -0.634400;, +0.622200; 0.123800; -0.773000;, +0.586100; 0.242800; -0.773000;, +0.653300; 0.270600; -0.707100;, +0.693500; 0.137900; -0.707100;, +0.544900; 0.108400; -0.831500;, +0.513300; 0.212600; -0.831500;, +0.586100; 0.242800; -0.773000;, +0.622200; 0.123800; -0.773000;, +0.462300; 0.092000; -0.881900;, +0.435500; 0.180400; -0.881900;, +0.513300; 0.212600; -0.831500;, +0.544900; 0.108400; -0.831500;, +0.375300; 0.074700; -0.923900;, +0.353600; 0.146400; -0.923900;, +0.435500; 0.180400; -0.881900;, +0.462300; 0.092000; -0.881900;, +0.284700; 0.056600; -0.956900;, +0.268200; 0.111100; -0.956900;, +0.353600; 0.146400; -0.923900;, +0.375300; 0.074700; -0.923900;, +0.191300; 0.038100; -0.980800;, +0.180200; 0.074700; -0.980800;, +0.268200; 0.111100; -0.956900;, +0.284700; 0.056600; -0.956900;, +0.096100; 0.019100; -0.995200;, +0.090600; 0.037500; -0.995200;, +0.180200; 0.074700; -0.980800;, +0.191300; 0.038100; -0.980800;, +0.090600; 0.037500; -0.995200;, +0.096100; 0.019100; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.000000; -0.000000; -1.000000;, +0.081500; 0.054500; -0.995200;, +0.090600; 0.037500; -0.995200;, +0.090600; 0.037500; -0.995200;, +0.081500; 0.054500; -0.995200;, +0.162200; 0.108400; -0.980800;, +0.180200; 0.074700; -0.980800;, +0.180200; 0.074700; -0.980800;, +0.162200; 0.108400; -0.980800;, +0.241400; 0.161300; -0.956900;, +0.268200; 0.111100; -0.956900;, +0.268200; 0.111100; -0.956900;, +0.241400; 0.161300; -0.956900;, +0.318200; 0.212600; -0.923900;, +0.353600; 0.146400; -0.923900;, +0.353600; 0.146400; -0.923900;, +0.318200; 0.212600; -0.923900;, +0.392000; 0.261900; -0.881900;, +0.435500; 0.180400; -0.881900;, +0.435500; 0.180400; -0.881900;, +0.392000; 0.261900; -0.881900;, +0.461900; 0.308700; -0.831500;, +0.513300; 0.212600; -0.831500;, +0.513300; 0.212600; -0.831500;, +0.461900; 0.308700; -0.831500;, +0.527500; 0.352400; -0.773000;, +0.586100; 0.242800; -0.773000;, +0.586100; 0.242800; -0.773000;, +0.527500; 0.352400; -0.773000;, +0.587900; 0.392800; -0.707100;, +0.653300; 0.270600; -0.707100;, +0.653300; 0.270600; -0.707100;, +0.587900; 0.392800; -0.707100;, +0.642700; 0.429500; -0.634400;, +0.714200; 0.295800; -0.634400;, +0.714200; 0.295800; -0.634400;, +0.642700; 0.429500; -0.634400;, +0.691300; 0.461900; -0.555600;, +0.768200; 0.318200; -0.555600;, +0.768200; 0.318200; -0.555600;, +0.691300; 0.461900; -0.555600;, +0.733300; 0.490000; -0.471400;, +0.814800; 0.337500; -0.471400;, +0.814800; 0.337500; -0.471400;, +0.733300; 0.490000; -0.471400;, +0.768200; 0.513300; -0.382700;, +0.853600; 0.353600; -0.382700;, +0.853600; 0.353600; -0.382700;, +0.768200; 0.513300; -0.382700;, +0.795700; 0.531600; -0.290300;, +0.884100; 0.366200; -0.290300;, +0.884100; 0.366200; -0.290300;, +0.795700; 0.531600; -0.290300;, +0.815500; 0.544900; -0.195100;, +0.906100; 0.375300; -0.195100;, +0.906100; 0.375300; -0.195100;, +0.815500; 0.544900; -0.195100;, +0.827500; 0.552900; -0.098000;, +0.919400; 0.380800; -0.098000;, +0.919400; 0.380800; -0.098000;, +0.827500; 0.552900; -0.098000;, +0.831500; 0.555600; -0.000000;, +0.923900; 0.382700; -0.000000;, +0.923900; 0.382700; -0.000000;, +0.831500; 0.555600; -0.000000;, +0.827500; 0.552900; 0.098000;, +0.919400; 0.380800; 0.098000;, +0.919400; 0.380800; 0.098000;, +0.827500; 0.552900; 0.098000;, +0.815500; 0.544900; 0.195100;, +0.906100; 0.375300; 0.195100;, +0.906100; 0.375300; 0.195100;, +0.815500; 0.544900; 0.195100;, +0.795700; 0.531600; 0.290300;, +0.884100; 0.366200; 0.290300;, +0.884100; 0.366200; 0.290300;, +0.795700; 0.531600; 0.290300;, +0.768200; 0.513300; 0.382700;, +0.853600; 0.353600; 0.382700;, +0.853600; 0.353600; 0.382700;, +0.768200; 0.513300; 0.382700;, +0.733300; 0.490000; 0.471400;, +0.814800; 0.337500; 0.471400;, +0.814800; 0.337500; 0.471400;, +0.733300; 0.490000; 0.471400;, +0.691300; 0.461900; 0.555600;, +0.768200; 0.318200; 0.555600;, +0.768200; 0.318200; 0.555600;, +0.691300; 0.461900; 0.555600;, +0.642700; 0.429500; 0.634400;, +0.714200; 0.295800; 0.634400;, +0.714200; 0.295800; 0.634400;, +0.642700; 0.429500; 0.634400;, +0.587900; 0.392800; 0.707100;, +0.653300; 0.270600; 0.707100;, +0.653300; 0.270600; 0.707100;, +0.587900; 0.392800; 0.707100;, +0.527500; 0.352500; 0.773000;, +0.586100; 0.242800; 0.773000;, +0.586100; 0.242800; 0.773000;, +0.527500; 0.352500; 0.773000;, +0.461900; 0.308700; 0.831500;, +0.513300; 0.212600; 0.831500;, +0.513300; 0.212600; 0.831500;, +0.461900; 0.308700; 0.831500;, +0.392000; 0.261900; 0.881900;, +0.435500; 0.180400; 0.881900;, +0.435500; 0.180400; 0.881900;, +0.392000; 0.261900; 0.881900;, +0.318200; 0.212600; 0.923900;, +0.353600; 0.146400; 0.923900;, +0.353600; 0.146400; 0.923900;, +0.318200; 0.212600; 0.923900;, +0.241400; 0.161300; 0.956900;, +0.268200; 0.111100; 0.956900;, +0.268200; 0.111100; 0.956900;, +0.241400; 0.161300; 0.956900;, +0.162200; 0.108400; 0.980800;, +0.180200; 0.074700; 0.980800;, +0.180200; 0.074700; 0.980800;, +0.162200; 0.108400; 0.980800;, +0.081500; 0.054500; 0.995200;, +0.090600; 0.037500; 0.995200;, +0.090600; 0.037500; 0.995200;, +0.081500; 0.054500; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.081500; 0.054500; 0.995200;, +0.069300; 0.069300; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.162200; 0.108400; 0.980800;, +0.137900; 0.137900; 0.980800;, +0.069300; 0.069300; 0.995200;, +0.081500; 0.054500; 0.995200;, +0.241400; 0.161300; 0.956900;, +0.205300; 0.205300; 0.956900;, +0.137900; 0.137900; 0.980800;, +0.162200; 0.108400; 0.980800;, +0.318200; 0.212600; 0.923900;, +0.270600; 0.270600; 0.923900;, +0.205300; 0.205300; 0.956900;, +0.241400; 0.161300; 0.956900;, +0.392000; 0.261900; 0.881900;, +0.333300; 0.333300; 0.881900;, +0.270600; 0.270600; 0.923900;, +0.318200; 0.212600; 0.923900;, +0.461900; 0.308700; 0.831500;, +0.392800; 0.392800; 0.831500;, +0.333300; 0.333300; 0.881900;, +0.392000; 0.261900; 0.881900;, +0.527500; 0.352500; 0.773000;, +0.448600; 0.448600; 0.773000;, +0.392800; 0.392800; 0.831500;, +0.461900; 0.308700; 0.831500;, +0.587900; 0.392800; 0.707100;, +0.500000; 0.500000; 0.707100;, +0.448600; 0.448600; 0.773000;, +0.527500; 0.352500; 0.773000;, +0.642700; 0.429500; 0.634400;, +0.546600; 0.546600; 0.634400;, +0.500000; 0.500000; 0.707100;, +0.587900; 0.392800; 0.707100;, +0.691300; 0.461900; 0.555600;, +0.587900; 0.587900; 0.555600;, +0.546600; 0.546600; 0.634400;, +0.642700; 0.429500; 0.634400;, +0.733300; 0.490000; 0.471400;, +0.623600; 0.623600; 0.471400;, +0.587900; 0.587900; 0.555600;, +0.691300; 0.461900; 0.555600;, +0.768200; 0.513300; 0.382700;, +0.653300; 0.653300; 0.382700;, +0.623600; 0.623600; 0.471400;, +0.733300; 0.490000; 0.471400;, +0.795700; 0.531600; 0.290300;, +0.676700; 0.676700; 0.290300;, +0.653300; 0.653300; 0.382700;, +0.768200; 0.513300; 0.382700;, +0.815500; 0.544900; 0.195100;, +0.693500; 0.693500; 0.195100;, +0.676700; 0.676700; 0.290300;, +0.795700; 0.531600; 0.290300;, +0.827500; 0.552900; 0.098000;, +0.703700; 0.703700; 0.098000;, +0.693500; 0.693500; 0.195100;, +0.815500; 0.544900; 0.195100;, +0.831500; 0.555600; -0.000000;, +0.707100; 0.707100; -0.000000;, +0.703700; 0.703700; 0.098000;, +0.827500; 0.552900; 0.098000;, +0.827500; 0.552900; -0.098000;, +0.703700; 0.703700; -0.098000;, +0.707100; 0.707100; -0.000000;, +0.831500; 0.555600; -0.000000;, +0.815500; 0.544900; -0.195100;, +0.693500; 0.693500; -0.195100;, +0.703700; 0.703700; -0.098000;, +0.827500; 0.552900; -0.098000;, +0.795700; 0.531600; -0.290300;, +0.676700; 0.676700; -0.290300;, +0.693500; 0.693500; -0.195100;, +0.815500; 0.544900; -0.195100;, +0.768200; 0.513300; -0.382700;, +0.653300; 0.653300; -0.382700;, +0.676700; 0.676700; -0.290300;, +0.795700; 0.531600; -0.290300;, +0.733300; 0.490000; -0.471400;, +0.623600; 0.623600; -0.471400;, +0.653300; 0.653300; -0.382700;, +0.768200; 0.513300; -0.382700;, +0.691300; 0.461900; -0.555600;, +0.587900; 0.587900; -0.555600;, +0.623600; 0.623600; -0.471400;, +0.733300; 0.490000; -0.471400;, +0.642700; 0.429500; -0.634400;, +0.546600; 0.546600; -0.634400;, +0.587900; 0.587900; -0.555600;, +0.691300; 0.461900; -0.555600;, +0.587900; 0.392800; -0.707100;, +0.500000; 0.500000; -0.707100;, +0.546600; 0.546600; -0.634400;, +0.642700; 0.429500; -0.634400;, +0.527500; 0.352400; -0.773000;, +0.448600; 0.448600; -0.773000;, +0.500000; 0.500000; -0.707100;, +0.587900; 0.392800; -0.707100;, +0.461900; 0.308700; -0.831500;, +0.392800; 0.392800; -0.831500;, +0.448600; 0.448600; -0.773000;, +0.527500; 0.352400; -0.773000;, +0.392000; 0.261900; -0.881900;, +0.333300; 0.333300; -0.881900;, +0.392800; 0.392800; -0.831500;, +0.461900; 0.308700; -0.831500;, +0.318200; 0.212600; -0.923900;, +0.270600; 0.270600; -0.923900;, +0.333300; 0.333300; -0.881900;, +0.392000; 0.261900; -0.881900;, +0.241400; 0.161300; -0.956900;, +0.205300; 0.205300; -0.956900;, +0.270600; 0.270600; -0.923900;, +0.318200; 0.212600; -0.923900;, +0.162200; 0.108400; -0.980800;, +0.137900; 0.137900; -0.980800;, +0.205300; 0.205300; -0.956900;, +0.241400; 0.161300; -0.956900;, +0.081500; 0.054500; -0.995200;, +0.069300; 0.069300; -0.995200;, +0.137900; 0.137900; -0.980800;, +0.162200; 0.108400; -0.980800;, +-0.000000; -0.000000; -1.000000;, +0.069300; 0.069300; -0.995200;, +0.081500; 0.054500; -0.995200;, +-0.000000; -0.000000; -1.000000;, +0.054500; 0.081500; -0.995200;, +0.069300; 0.069300; -0.995200;, +0.069300; 0.069300; -0.995200;, +0.054500; 0.081500; -0.995200;, +0.108400; 0.162200; -0.980800;, +0.137900; 0.137900; -0.980800;, +0.137900; 0.137900; -0.980800;, +0.108400; 0.162200; -0.980800;, +0.161300; 0.241400; -0.956900;, +0.205300; 0.205300; -0.956900;, +0.205300; 0.205300; -0.956900;, +0.161300; 0.241400; -0.956900;, +0.212600; 0.318200; -0.923900;, +0.270600; 0.270600; -0.923900;, +0.270600; 0.270600; -0.923900;, +0.212600; 0.318200; -0.923900;, +0.261900; 0.392000; -0.881900;, +0.333300; 0.333300; -0.881900;, +0.333300; 0.333300; -0.881900;, +0.261900; 0.392000; -0.881900;, +0.308700; 0.461900; -0.831500;, +0.392800; 0.392800; -0.831500;, +0.392800; 0.392800; -0.831500;, +0.308700; 0.461900; -0.831500;, +0.352400; 0.527500; -0.773000;, +0.448600; 0.448600; -0.773000;, +0.448600; 0.448600; -0.773000;, +0.352400; 0.527500; -0.773000;, +0.392800; 0.587900; -0.707100;, +0.500000; 0.500000; -0.707100;, +0.500000; 0.500000; -0.707100;, +0.392800; 0.587900; -0.707100;, +0.429500; 0.642700; -0.634400;, +0.546600; 0.546600; -0.634400;, +0.546600; 0.546600; -0.634400;, +0.429500; 0.642700; -0.634400;, +0.461900; 0.691300; -0.555600;, +0.587900; 0.587900; -0.555600;, +0.587900; 0.587900; -0.555600;, +0.461900; 0.691300; -0.555600;, +0.490000; 0.733300; -0.471400;, +0.623600; 0.623600; -0.471400;, +0.623600; 0.623600; -0.471400;, +0.490000; 0.733300; -0.471400;, +0.513300; 0.768200; -0.382700;, +0.653300; 0.653300; -0.382700;, +0.653300; 0.653300; -0.382700;, +0.513300; 0.768200; -0.382700;, +0.531600; 0.795700; -0.290300;, +0.676700; 0.676700; -0.290300;, +0.676700; 0.676700; -0.290300;, +0.531600; 0.795700; -0.290300;, +0.544900; 0.815500; -0.195100;, +0.693500; 0.693500; -0.195100;, +0.693500; 0.693500; -0.195100;, +0.544900; 0.815500; -0.195100;, +0.552900; 0.827500; -0.098000;, +0.703700; 0.703700; -0.098000;, +0.703700; 0.703700; -0.098000;, +0.552900; 0.827500; -0.098000;, +0.555600; 0.831500; -0.000000;, +0.707100; 0.707100; -0.000000;, +0.707100; 0.707100; -0.000000;, +0.555600; 0.831500; -0.000000;, +0.552900; 0.827500; 0.098000;, +0.703700; 0.703700; 0.098000;, +0.703700; 0.703700; 0.098000;, +0.552900; 0.827500; 0.098000;, +0.544900; 0.815500; 0.195100;, +0.693500; 0.693500; 0.195100;, +0.693500; 0.693500; 0.195100;, +0.544900; 0.815500; 0.195100;, +0.531600; 0.795700; 0.290300;, +0.676700; 0.676700; 0.290300;, +0.676700; 0.676700; 0.290300;, +0.531600; 0.795700; 0.290300;, +0.513300; 0.768200; 0.382700;, +0.653300; 0.653300; 0.382700;, +0.653300; 0.653300; 0.382700;, +0.513300; 0.768200; 0.382700;, +0.490000; 0.733300; 0.471400;, +0.623600; 0.623600; 0.471400;, +0.623600; 0.623600; 0.471400;, +0.490000; 0.733300; 0.471400;, +0.461900; 0.691300; 0.555600;, +0.587900; 0.587900; 0.555600;, +0.587900; 0.587900; 0.555600;, +0.461900; 0.691300; 0.555600;, +0.429500; 0.642700; 0.634400;, +0.546600; 0.546600; 0.634400;, +0.546600; 0.546600; 0.634400;, +0.429500; 0.642700; 0.634400;, +0.392800; 0.587900; 0.707100;, +0.500000; 0.500000; 0.707100;, +0.500000; 0.500000; 0.707100;, +0.392800; 0.587900; 0.707100;, +0.352400; 0.527500; 0.773000;, +0.448600; 0.448600; 0.773000;, +0.448600; 0.448600; 0.773000;, +0.352400; 0.527500; 0.773000;, +0.308700; 0.461900; 0.831500;, +0.392800; 0.392800; 0.831500;, +0.392800; 0.392800; 0.831500;, +0.308700; 0.461900; 0.831500;, +0.261900; 0.392000; 0.881900;, +0.333300; 0.333300; 0.881900;, +0.333300; 0.333300; 0.881900;, +0.261900; 0.392000; 0.881900;, +0.212600; 0.318200; 0.923900;, +0.270600; 0.270600; 0.923900;, +0.270600; 0.270600; 0.923900;, +0.212600; 0.318200; 0.923900;, +0.161300; 0.241400; 0.956900;, +0.205300; 0.205300; 0.956900;, +0.205300; 0.205300; 0.956900;, +0.161300; 0.241400; 0.956900;, +0.108400; 0.162200; 0.980800;, +0.137900; 0.137900; 0.980800;, +0.137900; 0.137900; 0.980800;, +0.108400; 0.162200; 0.980800;, +0.054500; 0.081500; 0.995200;, +0.069300; 0.069300; 0.995200;, +0.069300; 0.069300; 0.995200;, +0.054500; 0.081500; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.054500; 0.081500; 0.995200;, +0.037500; 0.090600; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.108400; 0.162200; 0.980800;, +0.074700; 0.180200; 0.980800;, +0.037500; 0.090600; 0.995200;, +0.054500; 0.081500; 0.995200;, +0.161300; 0.241400; 0.956900;, +0.111100; 0.268200; 0.956900;, +0.074700; 0.180200; 0.980800;, +0.108400; 0.162200; 0.980800;, +0.212600; 0.318200; 0.923900;, +0.146400; 0.353600; 0.923900;, +0.111100; 0.268200; 0.956900;, +0.161300; 0.241400; 0.956900;, +0.261900; 0.392000; 0.881900;, +0.180400; 0.435500; 0.881900;, +0.146400; 0.353600; 0.923900;, +0.212600; 0.318200; 0.923900;, +0.308700; 0.461900; 0.831500;, +0.212600; 0.513300; 0.831500;, +0.180400; 0.435500; 0.881900;, +0.261900; 0.392000; 0.881900;, +0.352400; 0.527500; 0.773000;, +0.242800; 0.586100; 0.773000;, +0.212600; 0.513300; 0.831500;, +0.308700; 0.461900; 0.831500;, +0.392800; 0.587900; 0.707100;, +0.270600; 0.653300; 0.707100;, +0.242800; 0.586100; 0.773000;, +0.352400; 0.527500; 0.773000;, +0.429500; 0.642700; 0.634400;, +0.295800; 0.714200; 0.634400;, +0.270600; 0.653300; 0.707100;, +0.392800; 0.587900; 0.707100;, +0.461900; 0.691300; 0.555600;, +0.318200; 0.768200; 0.555600;, +0.295800; 0.714200; 0.634400;, +0.429500; 0.642700; 0.634400;, +0.490000; 0.733300; 0.471400;, +0.337500; 0.814800; 0.471400;, +0.318200; 0.768200; 0.555600;, +0.461900; 0.691300; 0.555600;, +0.513300; 0.768200; 0.382700;, +0.353600; 0.853600; 0.382700;, +0.337500; 0.814800; 0.471400;, +0.490000; 0.733300; 0.471400;, +0.531600; 0.795700; 0.290300;, +0.366200; 0.884100; 0.290300;, +0.353600; 0.853600; 0.382700;, +0.513300; 0.768200; 0.382700;, +0.544900; 0.815500; 0.195100;, +0.375300; 0.906100; 0.195100;, +0.366200; 0.884100; 0.290300;, +0.531600; 0.795700; 0.290300;, +0.552900; 0.827500; 0.098000;, +0.380800; 0.919400; 0.098000;, +0.375300; 0.906100; 0.195100;, +0.544900; 0.815500; 0.195100;, +0.555600; 0.831500; -0.000000;, +0.382700; 0.923900; -0.000000;, +0.380800; 0.919400; 0.098000;, +0.552900; 0.827500; 0.098000;, +0.552900; 0.827500; -0.098000;, +0.380800; 0.919400; -0.098000;, +0.382700; 0.923900; -0.000000;, +0.555600; 0.831500; -0.000000;, +0.544900; 0.815500; -0.195100;, +0.375300; 0.906100; -0.195100;, +0.380800; 0.919400; -0.098000;, +0.552900; 0.827500; -0.098000;, +0.531600; 0.795700; -0.290300;, +0.366200; 0.884100; -0.290300;, +0.375300; 0.906100; -0.195100;, +0.544900; 0.815500; -0.195100;, +0.513300; 0.768200; -0.382700;, +0.353600; 0.853600; -0.382700;, +0.366200; 0.884100; -0.290300;, +0.531600; 0.795700; -0.290300;, +0.490000; 0.733300; -0.471400;, +0.337500; 0.814800; -0.471400;, +0.353600; 0.853600; -0.382700;, +0.513300; 0.768200; -0.382700;, +0.461900; 0.691300; -0.555600;, +0.318200; 0.768200; -0.555600;, +0.337500; 0.814800; -0.471400;, +0.490000; 0.733300; -0.471400;, +0.429500; 0.642700; -0.634400;, +0.295800; 0.714200; -0.634400;, +0.318200; 0.768200; -0.555600;, +0.461900; 0.691300; -0.555600;, +0.392800; 0.587900; -0.707100;, +0.270600; 0.653300; -0.707100;, +0.295800; 0.714200; -0.634400;, +0.429500; 0.642700; -0.634400;, +0.352400; 0.527500; -0.773000;, +0.242800; 0.586100; -0.773000;, +0.270600; 0.653300; -0.707100;, +0.392800; 0.587900; -0.707100;, +0.308700; 0.461900; -0.831500;, +0.212600; 0.513300; -0.831500;, +0.242800; 0.586100; -0.773000;, +0.352400; 0.527500; -0.773000;, +0.261900; 0.392000; -0.881900;, +0.180400; 0.435500; -0.881900;, +0.212600; 0.513300; -0.831500;, +0.308700; 0.461900; -0.831500;, +0.212600; 0.318200; -0.923900;, +0.146400; 0.353600; -0.923900;, +0.180400; 0.435500; -0.881900;, +0.261900; 0.392000; -0.881900;, +0.161300; 0.241400; -0.956900;, +0.111100; 0.268200; -0.956900;, +0.146400; 0.353600; -0.923900;, +0.212600; 0.318200; -0.923900;, +0.108400; 0.162200; -0.980800;, +0.074700; 0.180200; -0.980800;, +0.111100; 0.268200; -0.956900;, +0.161300; 0.241400; -0.956900;, +0.054500; 0.081500; -0.995200;, +0.037500; 0.090600; -0.995200;, +0.074700; 0.180200; -0.980800;, +0.108400; 0.162200; -0.980800;, +-0.000000; -0.000000; -1.000000;, +0.037500; 0.090600; -0.995200;, +0.054500; 0.081500; -0.995200;, +-0.000000; -0.000000; -1.000000;, +0.019100; 0.096100; -0.995200;, +0.037500; 0.090600; -0.995200;, +0.037500; 0.090600; -0.995200;, +0.019100; 0.096100; -0.995200;, +0.038100; 0.191300; -0.980800;, +0.074700; 0.180200; -0.980800;, +0.074700; 0.180200; -0.980800;, +0.038100; 0.191300; -0.980800;, +0.056600; 0.284700; -0.956900;, +0.111100; 0.268200; -0.956900;, +0.111100; 0.268200; -0.956900;, +0.056600; 0.284700; -0.956900;, +0.074700; 0.375300; -0.923900;, +0.146400; 0.353600; -0.923900;, +0.146400; 0.353600; -0.923900;, +0.074700; 0.375300; -0.923900;, +0.092000; 0.462300; -0.881900;, +0.180400; 0.435500; -0.881900;, +0.180400; 0.435500; -0.881900;, +0.092000; 0.462300; -0.881900;, +0.108400; 0.544900; -0.831500;, +0.212600; 0.513300; -0.831500;, +0.212600; 0.513300; -0.831500;, +0.108400; 0.544900; -0.831500;, +0.123800; 0.622200; -0.773000;, +0.242800; 0.586100; -0.773000;, +0.242800; 0.586100; -0.773000;, +0.123800; 0.622200; -0.773000;, +0.137900; 0.693500; -0.707100;, +0.270600; 0.653300; -0.707100;, +0.270600; 0.653300; -0.707100;, +0.137900; 0.693500; -0.707100;, +0.150800; 0.758200; -0.634400;, +0.295800; 0.714200; -0.634400;, +0.295800; 0.714200; -0.634400;, +0.150800; 0.758200; -0.634400;, +0.162200; 0.815500; -0.555600;, +0.318200; 0.768200; -0.555600;, +0.318200; 0.768200; -0.555600;, +0.162200; 0.815500; -0.555600;, +0.172100; 0.865000; -0.471400;, +0.337500; 0.814800; -0.471400;, +0.337500; 0.814800; -0.471400;, +0.172100; 0.865000; -0.471400;, +0.180200; 0.906100; -0.382700;, +0.353600; 0.853600; -0.382700;, +0.353600; 0.853600; -0.382700;, +0.180200; 0.906100; -0.382700;, +0.186700; 0.938600; -0.290300;, +0.366200; 0.884100; -0.290300;, +0.366200; 0.884100; -0.290300;, +0.186700; 0.938600; -0.290300;, +0.191300; 0.961900; -0.195100;, +0.375300; 0.906100; -0.195100;, +0.375300; 0.906100; -0.195100;, +0.191300; 0.961900; -0.195100;, +0.194200; 0.976100; -0.098000;, +0.380800; 0.919400; -0.098000;, +0.380800; 0.919400; -0.098000;, +0.194200; 0.976100; -0.098000;, +0.195100; 0.980800; -0.000000;, +0.382700; 0.923900; -0.000000;, +0.382700; 0.923900; -0.000000;, +0.195100; 0.980800; -0.000000;, +0.194200; 0.976100; 0.098000;, +0.380800; 0.919400; 0.098000;, +0.380800; 0.919400; 0.098000;, +0.194200; 0.976100; 0.098000;, +0.191300; 0.961900; 0.195100;, +0.375300; 0.906100; 0.195100;, +0.375300; 0.906100; 0.195100;, +0.191300; 0.961900; 0.195100;, +0.186700; 0.938600; 0.290300;, +0.366200; 0.884100; 0.290300;, +0.366200; 0.884100; 0.290300;, +0.186700; 0.938600; 0.290300;, +0.180200; 0.906100; 0.382700;, +0.353600; 0.853600; 0.382700;, +0.353600; 0.853600; 0.382700;, +0.180200; 0.906100; 0.382700;, +0.172100; 0.865000; 0.471400;, +0.337500; 0.814800; 0.471400;, +0.337500; 0.814800; 0.471400;, +0.172100; 0.865000; 0.471400;, +0.162200; 0.815500; 0.555600;, +0.318200; 0.768200; 0.555600;, +0.318200; 0.768200; 0.555600;, +0.162200; 0.815500; 0.555600;, +0.150800; 0.758200; 0.634400;, +0.295800; 0.714200; 0.634400;, +0.295800; 0.714200; 0.634400;, +0.150800; 0.758200; 0.634400;, +0.137900; 0.693500; 0.707100;, +0.270600; 0.653300; 0.707100;, +0.270600; 0.653300; 0.707100;, +0.137900; 0.693500; 0.707100;, +0.123800; 0.622200; 0.773000;, +0.242800; 0.586100; 0.773000;, +0.242800; 0.586100; 0.773000;, +0.123800; 0.622200; 0.773000;, +0.108400; 0.544900; 0.831500;, +0.212600; 0.513300; 0.831500;, +0.212600; 0.513300; 0.831500;, +0.108400; 0.544900; 0.831500;, +0.092000; 0.462300; 0.881900;, +0.180400; 0.435500; 0.881900;, +0.180400; 0.435500; 0.881900;, +0.092000; 0.462300; 0.881900;, +0.074700; 0.375300; 0.923900;, +0.146400; 0.353600; 0.923900;, +0.146400; 0.353600; 0.923900;, +0.074700; 0.375300; 0.923900;, +0.056600; 0.284700; 0.956900;, +0.111100; 0.268200; 0.956900;, +0.111100; 0.268200; 0.956900;, +0.056600; 0.284700; 0.956900;, +0.038100; 0.191300; 0.980800;, +0.074700; 0.180200; 0.980800;, +0.074700; 0.180200; 0.980800;, +0.038100; 0.191300; 0.980800;, +0.019100; 0.096100; 0.995200;, +0.037500; 0.090600; 0.995200;, +0.037500; 0.090600; 0.995200;, +0.019100; 0.096100; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.019100; 0.096100; 0.995200;, +-0.000000; 0.098000; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.038100; 0.191300; 0.980800;, +-0.000000; 0.195100; 0.980800;, +-0.000000; 0.098000; 0.995200;, +0.019100; 0.096100; 0.995200;, +0.056600; 0.284700; 0.956900;, +-0.000000; 0.290300; 0.956900;, +-0.000000; 0.195100; 0.980800;, +0.038100; 0.191300; 0.980800;, +0.074700; 0.375300; 0.923900;, +-0.000000; 0.382700; 0.923900;, +-0.000000; 0.290300; 0.956900;, +0.056600; 0.284700; 0.956900;, +0.092000; 0.462300; 0.881900;, +-0.000000; 0.471400; 0.881900;, +-0.000000; 0.382700; 0.923900;, +0.074700; 0.375300; 0.923900;, +0.108400; 0.544900; 0.831500;, +-0.000000; 0.555600; 0.831500;, +-0.000000; 0.471400; 0.881900;, +0.092000; 0.462300; 0.881900;, +0.123800; 0.622200; 0.773000;, +-0.000000; 0.634400; 0.773000;, +-0.000000; 0.555600; 0.831500;, +0.108400; 0.544900; 0.831500;, +0.137900; 0.693500; 0.707100;, +-0.000000; 0.707100; 0.707100;, +-0.000000; 0.634400; 0.773000;, +0.123800; 0.622200; 0.773000;, +0.150800; 0.758200; 0.634400;, +-0.000000; 0.773000; 0.634400;, +-0.000000; 0.707100; 0.707100;, +0.137900; 0.693500; 0.707100;, +0.162200; 0.815500; 0.555600;, +0.000000; 0.831500; 0.555600;, +-0.000000; 0.773000; 0.634400;, +0.150800; 0.758200; 0.634400;, +0.172100; 0.865000; 0.471400;, +-0.000000; 0.881900; 0.471400;, +0.000000; 0.831500; 0.555600;, +0.162200; 0.815500; 0.555600;, +0.180200; 0.906100; 0.382700;, +-0.000000; 0.923900; 0.382700;, +-0.000000; 0.881900; 0.471400;, +0.172100; 0.865000; 0.471400;, +0.186700; 0.938600; 0.290300;, +-0.000000; 0.956900; 0.290300;, +-0.000000; 0.923900; 0.382700;, +0.180200; 0.906100; 0.382700;, +0.191300; 0.961900; 0.195100;, +-0.000000; 0.980800; 0.195100;, +-0.000000; 0.956900; 0.290300;, +0.186700; 0.938600; 0.290300;, +0.194200; 0.976100; 0.098000;, +-0.000000; 0.995200; 0.098000;, +-0.000000; 0.980800; 0.195100;, +0.191300; 0.961900; 0.195100;, +0.195100; 0.980800; -0.000000;, +-0.000000; 1.000000; -0.000000;, +-0.000000; 0.995200; 0.098000;, +0.194200; 0.976100; 0.098000;, +0.194200; 0.976100; -0.098000;, +-0.000000; 0.995200; -0.098000;, +-0.000000; 1.000000; -0.000000;, +0.195100; 0.980800; -0.000000;, +0.191300; 0.961900; -0.195100;, +-0.000000; 0.980800; -0.195100;, +-0.000000; 0.995200; -0.098000;, +0.194200; 0.976100; -0.098000;, +0.186700; 0.938600; -0.290300;, +-0.000000; 0.956900; -0.290300;, +-0.000000; 0.980800; -0.195100;, +0.191300; 0.961900; -0.195100;, +0.180200; 0.906100; -0.382700;, +-0.000000; 0.923900; -0.382700;, +-0.000000; 0.956900; -0.290300;, +0.186700; 0.938600; -0.290300;, +0.172100; 0.865000; -0.471400;, +-0.000000; 0.881900; -0.471400;, +-0.000000; 0.923900; -0.382700;, +0.180200; 0.906100; -0.382700;, +0.162200; 0.815500; -0.555600;, +-0.000000; 0.831500; -0.555600;, +-0.000000; 0.881900; -0.471400;, +0.172100; 0.865000; -0.471400;, +0.150800; 0.758200; -0.634400;, +-0.000000; 0.773000; -0.634400;, +-0.000000; 0.831500; -0.555600;, +0.162200; 0.815500; -0.555600;, +0.137900; 0.693500; -0.707100;, +-0.000000; 0.707100; -0.707100;, +-0.000000; 0.773000; -0.634400;, +0.150800; 0.758200; -0.634400;, +0.123800; 0.622200; -0.773000;, +-0.000000; 0.634400; -0.773000;, +-0.000000; 0.707100; -0.707100;, +0.137900; 0.693500; -0.707100;, +0.108400; 0.544900; -0.831500;, +-0.000000; 0.555600; -0.831500;, +-0.000000; 0.634400; -0.773000;, +0.123800; 0.622200; -0.773000;, +0.092000; 0.462300; -0.881900;, +-0.000000; 0.471400; -0.881900;, +-0.000000; 0.555600; -0.831500;, +0.108400; 0.544900; -0.831500;, +0.074700; 0.375300; -0.923900;, +-0.000000; 0.382700; -0.923900;, +-0.000000; 0.471400; -0.881900;, +0.092000; 0.462300; -0.881900;, +0.056600; 0.284700; -0.956900;, +-0.000000; 0.290300; -0.956900;, +-0.000000; 0.382700; -0.923900;, +0.074700; 0.375300; -0.923900;, +0.038100; 0.191300; -0.980800;, +-0.000000; 0.195100; -0.980800;, +-0.000000; 0.290300; -0.956900;, +0.056600; 0.284700; -0.956900;, +0.019100; 0.096100; -0.995200;, +-0.000000; 0.098000; -0.995200;, +-0.000000; 0.195100; -0.980800;, +0.038100; 0.191300; -0.980800;, +-0.000000; -0.000000; -1.000000;, +-0.000000; 0.098000; -0.995200;, +0.019100; 0.096100; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.019100; 0.096100; -0.995200;, +-0.000000; 0.098000; -0.995200;, +-0.000000; 0.098000; -0.995200;, +-0.019100; 0.096100; -0.995200;, +-0.038100; 0.191300; -0.980800;, +-0.000000; 0.195100; -0.980800;, +-0.000000; 0.195100; -0.980800;, +-0.038100; 0.191300; -0.980800;, +-0.056600; 0.284700; -0.956900;, +-0.000000; 0.290300; -0.956900;, +-0.000000; 0.290300; -0.956900;, +-0.056600; 0.284700; -0.956900;, +-0.074700; 0.375300; -0.923900;, +-0.000000; 0.382700; -0.923900;, +-0.000000; 0.382700; -0.923900;, +-0.074700; 0.375300; -0.923900;, +-0.092000; 0.462300; -0.881900;, +-0.000000; 0.471400; -0.881900;, +-0.000000; 0.471400; -0.881900;, +-0.092000; 0.462300; -0.881900;, +-0.108400; 0.544900; -0.831500;, +-0.000000; 0.555600; -0.831500;, +-0.000000; 0.555600; -0.831500;, +-0.108400; 0.544900; -0.831500;, +-0.123800; 0.622200; -0.773000;, +-0.000000; 0.634400; -0.773000;, +-0.000000; 0.634400; -0.773000;, +-0.123800; 0.622200; -0.773000;, +-0.137900; 0.693500; -0.707100;, +-0.000000; 0.707100; -0.707100;, +-0.000000; 0.707100; -0.707100;, +-0.137900; 0.693500; -0.707100;, +-0.150800; 0.758200; -0.634400;, +-0.000000; 0.773000; -0.634400;, +-0.000000; 0.773000; -0.634400;, +-0.150800; 0.758200; -0.634400;, +-0.162200; 0.815500; -0.555600;, +-0.000000; 0.831500; -0.555600;, +-0.000000; 0.831500; -0.555600;, +-0.162200; 0.815500; -0.555600;, +-0.172100; 0.865000; -0.471400;, +-0.000000; 0.881900; -0.471400;, +-0.000000; 0.881900; -0.471400;, +-0.172100; 0.865000; -0.471400;, +-0.180200; 0.906100; -0.382700;, +-0.000000; 0.923900; -0.382700;, +-0.000000; 0.923900; -0.382700;, +-0.180200; 0.906100; -0.382700;, +-0.186700; 0.938600; -0.290300;, +-0.000000; 0.956900; -0.290300;, +-0.000000; 0.956900; -0.290300;, +-0.186700; 0.938600; -0.290300;, +-0.191300; 0.961900; -0.195100;, +-0.000000; 0.980800; -0.195100;, +-0.000000; 0.980800; -0.195100;, +-0.191300; 0.961900; -0.195100;, +-0.194200; 0.976100; -0.098000;, +-0.000000; 0.995200; -0.098000;, +-0.000000; 0.995200; -0.098000;, +-0.194200; 0.976100; -0.098000;, +-0.195100; 0.980800; -0.000000;, +-0.000000; 1.000000; -0.000000;, +-0.000000; 1.000000; -0.000000;, +-0.195100; 0.980800; -0.000000;, +-0.194200; 0.976100; 0.098000;, +-0.000000; 0.995200; 0.098000;, +-0.000000; 0.995200; 0.098000;, +-0.194200; 0.976100; 0.098000;, +-0.191300; 0.961900; 0.195100;, +-0.000000; 0.980800; 0.195100;, +-0.000000; 0.980800; 0.195100;, +-0.191300; 0.961900; 0.195100;, +-0.186700; 0.938600; 0.290300;, +-0.000000; 0.956900; 0.290300;, +-0.000000; 0.956900; 0.290300;, +-0.186700; 0.938600; 0.290300;, +-0.180200; 0.906100; 0.382700;, +-0.000000; 0.923900; 0.382700;, +-0.000000; 0.923900; 0.382700;, +-0.180200; 0.906100; 0.382700;, +-0.172100; 0.865000; 0.471400;, +-0.000000; 0.881900; 0.471400;, +-0.000000; 0.881900; 0.471400;, +-0.172100; 0.865000; 0.471400;, +-0.162200; 0.815500; 0.555600;, +0.000000; 0.831500; 0.555600;, +0.000000; 0.831500; 0.555600;, +-0.162200; 0.815500; 0.555600;, +-0.150800; 0.758200; 0.634400;, +-0.000000; 0.773000; 0.634400;, +-0.000000; 0.773000; 0.634400;, +-0.150800; 0.758200; 0.634400;, +-0.137900; 0.693500; 0.707100;, +-0.000000; 0.707100; 0.707100;, +-0.000000; 0.707100; 0.707100;, +-0.137900; 0.693500; 0.707100;, +-0.123800; 0.622200; 0.773000;, +-0.000000; 0.634400; 0.773000;, +-0.000000; 0.634400; 0.773000;, +-0.123800; 0.622200; 0.773000;, +-0.108400; 0.544900; 0.831500;, +-0.000000; 0.555600; 0.831500;, +-0.000000; 0.555600; 0.831500;, +-0.108400; 0.544900; 0.831500;, +-0.092000; 0.462300; 0.881900;, +-0.000000; 0.471400; 0.881900;, +-0.000000; 0.471400; 0.881900;, +-0.092000; 0.462300; 0.881900;, +-0.074700; 0.375300; 0.923900;, +-0.000000; 0.382700; 0.923900;, +-0.000000; 0.382700; 0.923900;, +-0.074700; 0.375300; 0.923900;, +-0.056600; 0.284700; 0.956900;, +-0.000000; 0.290300; 0.956900;, +-0.000000; 0.290300; 0.956900;, +-0.056600; 0.284700; 0.956900;, +-0.038100; 0.191300; 0.980800;, +-0.000000; 0.195100; 0.980800;, +-0.000000; 0.195100; 0.980800;, +-0.038100; 0.191300; 0.980800;, +-0.019100; 0.096100; 0.995200;, +-0.000000; 0.098000; 0.995200;, +-0.000000; 0.098000; 0.995200;, +-0.019100; 0.096100; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.019100; 0.096100; 0.995200;, +-0.037500; 0.090600; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.038100; 0.191300; 0.980800;, +-0.074700; 0.180200; 0.980800;, +-0.037500; 0.090600; 0.995200;, +-0.019100; 0.096100; 0.995200;, +-0.056600; 0.284700; 0.956900;, +-0.111100; 0.268200; 0.956900;, +-0.074700; 0.180200; 0.980800;, +-0.038100; 0.191300; 0.980800;, +-0.074700; 0.375300; 0.923900;, +-0.146400; 0.353600; 0.923900;, +-0.111100; 0.268200; 0.956900;, +-0.056600; 0.284700; 0.956900;, +-0.092000; 0.462300; 0.881900;, +-0.180400; 0.435500; 0.881900;, +-0.146400; 0.353600; 0.923900;, +-0.074700; 0.375300; 0.923900;, +-0.108400; 0.544900; 0.831500;, +-0.212600; 0.513300; 0.831500;, +-0.180400; 0.435500; 0.881900;, +-0.092000; 0.462300; 0.881900;, +-0.123800; 0.622200; 0.773000;, +-0.242800; 0.586100; 0.773000;, +-0.212600; 0.513300; 0.831500;, +-0.108400; 0.544900; 0.831500;, +-0.137900; 0.693500; 0.707100;, +-0.270600; 0.653300; 0.707100;, +-0.242800; 0.586100; 0.773000;, +-0.123800; 0.622200; 0.773000;, +-0.150800; 0.758200; 0.634400;, +-0.295800; 0.714200; 0.634400;, +-0.270600; 0.653300; 0.707100;, +-0.137900; 0.693500; 0.707100;, +-0.162200; 0.815500; 0.555600;, +-0.318200; 0.768200; 0.555600;, +-0.295800; 0.714200; 0.634400;, +-0.150800; 0.758200; 0.634400;, +-0.172100; 0.865000; 0.471400;, +-0.337500; 0.814800; 0.471400;, +-0.318200; 0.768200; 0.555600;, +-0.162200; 0.815500; 0.555600;, +-0.180200; 0.906100; 0.382700;, +-0.353600; 0.853600; 0.382700;, +-0.337500; 0.814800; 0.471400;, +-0.172100; 0.865000; 0.471400;, +-0.186700; 0.938600; 0.290300;, +-0.366200; 0.884100; 0.290300;, +-0.353600; 0.853600; 0.382700;, +-0.180200; 0.906100; 0.382700;, +-0.191300; 0.961900; 0.195100;, +-0.375300; 0.906100; 0.195100;, +-0.366200; 0.884100; 0.290300;, +-0.186700; 0.938600; 0.290300;, +-0.194200; 0.976100; 0.098000;, +-0.380800; 0.919400; 0.098000;, +-0.375300; 0.906100; 0.195100;, +-0.191300; 0.961900; 0.195100;, +-0.195100; 0.980800; -0.000000;, +-0.382700; 0.923900; -0.000000;, +-0.380800; 0.919400; 0.098000;, +-0.194200; 0.976100; 0.098000;, +-0.194200; 0.976100; -0.098000;, +-0.380800; 0.919400; -0.098000;, +-0.382700; 0.923900; -0.000000;, +-0.195100; 0.980800; -0.000000;, +-0.191300; 0.961900; -0.195100;, +-0.375300; 0.906100; -0.195100;, +-0.380800; 0.919400; -0.098000;, +-0.194200; 0.976100; -0.098000;, +-0.186700; 0.938600; -0.290300;, +-0.366200; 0.884100; -0.290300;, +-0.375300; 0.906100; -0.195100;, +-0.191300; 0.961900; -0.195100;, +-0.180200; 0.906100; -0.382700;, +-0.353600; 0.853600; -0.382700;, +-0.366200; 0.884100; -0.290300;, +-0.186700; 0.938600; -0.290300;, +-0.172100; 0.865000; -0.471400;, +-0.337500; 0.814800; -0.471400;, +-0.353600; 0.853600; -0.382700;, +-0.180200; 0.906100; -0.382700;, +-0.162200; 0.815500; -0.555600;, +-0.318200; 0.768200; -0.555600;, +-0.337500; 0.814800; -0.471400;, +-0.172100; 0.865000; -0.471400;, +-0.150800; 0.758200; -0.634400;, +-0.295800; 0.714200; -0.634400;, +-0.318200; 0.768200; -0.555600;, +-0.162200; 0.815500; -0.555600;, +-0.137900; 0.693500; -0.707100;, +-0.270600; 0.653300; -0.707100;, +-0.295800; 0.714200; -0.634400;, +-0.150800; 0.758200; -0.634400;, +-0.123800; 0.622200; -0.773000;, +-0.242800; 0.586100; -0.773000;, +-0.270600; 0.653300; -0.707100;, +-0.137900; 0.693500; -0.707100;, +-0.108400; 0.544900; -0.831500;, +-0.212600; 0.513300; -0.831500;, +-0.242800; 0.586100; -0.773000;, +-0.123800; 0.622200; -0.773000;, +-0.092000; 0.462300; -0.881900;, +-0.180400; 0.435500; -0.881900;, +-0.212600; 0.513300; -0.831500;, +-0.108400; 0.544900; -0.831500;, +-0.074700; 0.375300; -0.923900;, +-0.146400; 0.353600; -0.923900;, +-0.180400; 0.435500; -0.881900;, +-0.092000; 0.462300; -0.881900;, +-0.056600; 0.284700; -0.956900;, +-0.111100; 0.268200; -0.956900;, +-0.146400; 0.353600; -0.923900;, +-0.074700; 0.375300; -0.923900;, +-0.038100; 0.191300; -0.980800;, +-0.074700; 0.180200; -0.980800;, +-0.111100; 0.268200; -0.956900;, +-0.056600; 0.284700; -0.956900;, +-0.019100; 0.096100; -0.995200;, +-0.037500; 0.090600; -0.995200;, +-0.074700; 0.180200; -0.980800;, +-0.038100; 0.191300; -0.980800;, +-0.000000; -0.000000; -1.000000;, +-0.037500; 0.090600; -0.995200;, +-0.019100; 0.096100; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.054500; 0.081500; -0.995200;, +-0.037500; 0.090600; -0.995200;, +-0.037500; 0.090600; -0.995200;, +-0.054500; 0.081500; -0.995200;, +-0.108400; 0.162200; -0.980800;, +-0.074700; 0.180200; -0.980800;, +-0.074700; 0.180200; -0.980800;, +-0.108400; 0.162200; -0.980800;, +-0.161300; 0.241400; -0.956900;, +-0.111100; 0.268200; -0.956900;, +-0.111100; 0.268200; -0.956900;, +-0.161300; 0.241400; -0.956900;, +-0.212600; 0.318200; -0.923900;, +-0.146400; 0.353600; -0.923900;, +-0.146400; 0.353600; -0.923900;, +-0.212600; 0.318200; -0.923900;, +-0.261900; 0.392000; -0.881900;, +-0.180400; 0.435500; -0.881900;, +-0.180400; 0.435500; -0.881900;, +-0.261900; 0.392000; -0.881900;, +-0.308700; 0.461900; -0.831500;, +-0.212600; 0.513300; -0.831500;, +-0.212600; 0.513300; -0.831500;, +-0.308700; 0.461900; -0.831500;, +-0.352400; 0.527500; -0.773000;, +-0.242800; 0.586100; -0.773000;, +-0.242800; 0.586100; -0.773000;, +-0.352400; 0.527500; -0.773000;, +-0.392800; 0.587900; -0.707100;, +-0.270600; 0.653300; -0.707100;, +-0.270600; 0.653300; -0.707100;, +-0.392800; 0.587900; -0.707100;, +-0.429500; 0.642700; -0.634400;, +-0.295800; 0.714200; -0.634400;, +-0.295800; 0.714200; -0.634400;, +-0.429500; 0.642700; -0.634400;, +-0.461900; 0.691300; -0.555600;, +-0.318200; 0.768200; -0.555600;, +-0.318200; 0.768200; -0.555600;, +-0.461900; 0.691300; -0.555600;, +-0.490000; 0.733300; -0.471400;, +-0.337500; 0.814800; -0.471400;, +-0.337500; 0.814800; -0.471400;, +-0.490000; 0.733300; -0.471400;, +-0.513300; 0.768200; -0.382700;, +-0.353600; 0.853600; -0.382700;, +-0.353600; 0.853600; -0.382700;, +-0.513300; 0.768200; -0.382700;, +-0.531600; 0.795700; -0.290300;, +-0.366200; 0.884100; -0.290300;, +-0.366200; 0.884100; -0.290300;, +-0.531600; 0.795700; -0.290300;, +-0.544900; 0.815500; -0.195100;, +-0.375300; 0.906100; -0.195100;, +-0.375300; 0.906100; -0.195100;, +-0.544900; 0.815500; -0.195100;, +-0.552900; 0.827500; -0.098000;, +-0.380800; 0.919400; -0.098000;, +-0.380800; 0.919400; -0.098000;, +-0.552900; 0.827500; -0.098000;, +-0.555600; 0.831500; -0.000000;, +-0.382700; 0.923900; -0.000000;, +-0.382700; 0.923900; -0.000000;, +-0.555600; 0.831500; -0.000000;, +-0.552900; 0.827500; 0.098000;, +-0.380800; 0.919400; 0.098000;, +-0.380800; 0.919400; 0.098000;, +-0.552900; 0.827500; 0.098000;, +-0.544900; 0.815500; 0.195100;, +-0.375300; 0.906100; 0.195100;, +-0.375300; 0.906100; 0.195100;, +-0.544900; 0.815500; 0.195100;, +-0.531600; 0.795700; 0.290300;, +-0.366200; 0.884100; 0.290300;, +-0.366200; 0.884100; 0.290300;, +-0.531600; 0.795700; 0.290300;, +-0.513300; 0.768200; 0.382700;, +-0.353600; 0.853600; 0.382700;, +-0.353600; 0.853600; 0.382700;, +-0.513300; 0.768200; 0.382700;, +-0.490000; 0.733300; 0.471400;, +-0.337500; 0.814800; 0.471400;, +-0.337500; 0.814800; 0.471400;, +-0.490000; 0.733300; 0.471400;, +-0.461900; 0.691300; 0.555600;, +-0.318200; 0.768200; 0.555600;, +-0.318200; 0.768200; 0.555600;, +-0.461900; 0.691300; 0.555600;, +-0.429500; 0.642700; 0.634400;, +-0.295800; 0.714200; 0.634400;, +-0.295800; 0.714200; 0.634400;, +-0.429500; 0.642700; 0.634400;, +-0.392800; 0.587900; 0.707100;, +-0.270600; 0.653300; 0.707100;, +-0.270600; 0.653300; 0.707100;, +-0.392800; 0.587900; 0.707100;, +-0.352400; 0.527500; 0.773000;, +-0.242800; 0.586100; 0.773000;, +-0.242800; 0.586100; 0.773000;, +-0.352400; 0.527500; 0.773000;, +-0.308700; 0.461900; 0.831500;, +-0.212600; 0.513300; 0.831500;, +-0.212600; 0.513300; 0.831500;, +-0.308700; 0.461900; 0.831500;, +-0.261900; 0.392000; 0.881900;, +-0.180400; 0.435500; 0.881900;, +-0.180400; 0.435500; 0.881900;, +-0.261900; 0.392000; 0.881900;, +-0.212600; 0.318200; 0.923900;, +-0.146400; 0.353600; 0.923900;, +-0.146400; 0.353600; 0.923900;, +-0.212600; 0.318200; 0.923900;, +-0.161300; 0.241400; 0.956900;, +-0.111100; 0.268200; 0.956900;, +-0.111100; 0.268200; 0.956900;, +-0.161300; 0.241400; 0.956900;, +-0.108400; 0.162200; 0.980800;, +-0.074700; 0.180200; 0.980800;, +-0.074700; 0.180200; 0.980800;, +-0.108400; 0.162200; 0.980800;, +-0.054500; 0.081500; 0.995200;, +-0.037500; 0.090600; 0.995200;, +-0.037500; 0.090600; 0.995200;, +-0.054500; 0.081500; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.054500; 0.081500; 0.995200;, +-0.069300; 0.069300; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.108400; 0.162200; 0.980800;, +-0.137900; 0.137900; 0.980800;, +-0.069300; 0.069300; 0.995200;, +-0.054500; 0.081500; 0.995200;, +-0.161300; 0.241400; 0.956900;, +-0.205300; 0.205300; 0.956900;, +-0.137900; 0.137900; 0.980800;, +-0.108400; 0.162200; 0.980800;, +-0.212600; 0.318200; 0.923900;, +-0.270600; 0.270600; 0.923900;, +-0.205300; 0.205300; 0.956900;, +-0.161300; 0.241400; 0.956900;, +-0.261900; 0.392000; 0.881900;, +-0.333300; 0.333300; 0.881900;, +-0.270600; 0.270600; 0.923900;, +-0.212600; 0.318200; 0.923900;, +-0.308700; 0.461900; 0.831500;, +-0.392800; 0.392800; 0.831500;, +-0.333300; 0.333300; 0.881900;, +-0.261900; 0.392000; 0.881900;, +-0.352400; 0.527500; 0.773000;, +-0.448600; 0.448600; 0.773000;, +-0.392800; 0.392800; 0.831500;, +-0.308700; 0.461900; 0.831500;, +-0.392800; 0.587900; 0.707100;, +-0.500000; 0.500000; 0.707100;, +-0.448600; 0.448600; 0.773000;, +-0.352400; 0.527500; 0.773000;, +-0.429500; 0.642700; 0.634400;, +-0.546600; 0.546600; 0.634400;, +-0.500000; 0.500000; 0.707100;, +-0.392800; 0.587900; 0.707100;, +-0.461900; 0.691300; 0.555600;, +-0.587900; 0.587900; 0.555600;, +-0.546600; 0.546600; 0.634400;, +-0.429500; 0.642700; 0.634400;, +-0.490000; 0.733300; 0.471400;, +-0.623600; 0.623600; 0.471400;, +-0.587900; 0.587900; 0.555600;, +-0.461900; 0.691300; 0.555600;, +-0.513300; 0.768200; 0.382700;, +-0.653300; 0.653300; 0.382700;, +-0.623600; 0.623600; 0.471400;, +-0.490000; 0.733300; 0.471400;, +-0.531600; 0.795700; 0.290300;, +-0.676700; 0.676700; 0.290300;, +-0.653300; 0.653300; 0.382700;, +-0.513300; 0.768200; 0.382700;, +-0.544900; 0.815500; 0.195100;, +-0.693500; 0.693500; 0.195100;, +-0.676700; 0.676700; 0.290300;, +-0.531600; 0.795700; 0.290300;, +-0.552900; 0.827500; 0.098000;, +-0.703700; 0.703700; 0.098000;, +-0.693500; 0.693500; 0.195100;, +-0.544900; 0.815500; 0.195100;, +-0.555600; 0.831500; -0.000000;, +-0.707100; 0.707100; -0.000000;, +-0.703700; 0.703700; 0.098000;, +-0.552900; 0.827500; 0.098000;, +-0.552900; 0.827500; -0.098000;, +-0.703700; 0.703700; -0.098000;, +-0.707100; 0.707100; -0.000000;, +-0.555600; 0.831500; -0.000000;, +-0.544900; 0.815500; -0.195100;, +-0.693500; 0.693500; -0.195100;, +-0.703700; 0.703700; -0.098000;, +-0.552900; 0.827500; -0.098000;, +-0.531600; 0.795700; -0.290300;, +-0.676700; 0.676700; -0.290300;, +-0.693500; 0.693500; -0.195100;, +-0.544900; 0.815500; -0.195100;, +-0.513300; 0.768200; -0.382700;, +-0.653300; 0.653300; -0.382700;, +-0.676700; 0.676700; -0.290300;, +-0.531600; 0.795700; -0.290300;, +-0.490000; 0.733300; -0.471400;, +-0.623600; 0.623600; -0.471400;, +-0.653300; 0.653300; -0.382700;, +-0.513300; 0.768200; -0.382700;, +-0.461900; 0.691300; -0.555600;, +-0.587900; 0.587900; -0.555600;, +-0.623600; 0.623600; -0.471400;, +-0.490000; 0.733300; -0.471400;, +-0.429500; 0.642700; -0.634400;, +-0.546600; 0.546600; -0.634400;, +-0.587900; 0.587900; -0.555600;, +-0.461900; 0.691300; -0.555600;, +-0.392800; 0.587900; -0.707100;, +-0.500000; 0.500000; -0.707100;, +-0.546600; 0.546600; -0.634400;, +-0.429500; 0.642700; -0.634400;, +-0.352400; 0.527500; -0.773000;, +-0.448600; 0.448600; -0.773000;, +-0.500000; 0.500000; -0.707100;, +-0.392800; 0.587900; -0.707100;, +-0.308700; 0.461900; -0.831500;, +-0.392800; 0.392800; -0.831500;, +-0.448600; 0.448600; -0.773000;, +-0.352400; 0.527500; -0.773000;, +-0.261900; 0.392000; -0.881900;, +-0.333300; 0.333300; -0.881900;, +-0.392800; 0.392800; -0.831500;, +-0.308700; 0.461900; -0.831500;, +-0.212600; 0.318200; -0.923900;, +-0.270600; 0.270600; -0.923900;, +-0.333300; 0.333300; -0.881900;, +-0.261900; 0.392000; -0.881900;, +-0.161300; 0.241400; -0.956900;, +-0.205300; 0.205300; -0.956900;, +-0.270600; 0.270600; -0.923900;, +-0.212600; 0.318200; -0.923900;, +-0.108400; 0.162200; -0.980800;, +-0.137900; 0.137900; -0.980800;, +-0.205300; 0.205300; -0.956900;, +-0.161300; 0.241400; -0.956900;, +-0.054500; 0.081500; -0.995200;, +-0.069300; 0.069300; -0.995200;, +-0.137900; 0.137900; -0.980800;, +-0.108400; 0.162200; -0.980800;, +-0.000000; -0.000000; -1.000000;, +-0.069300; 0.069300; -0.995200;, +-0.054500; 0.081500; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.081500; 0.054500; -0.995200;, +-0.069300; 0.069300; -0.995200;, +-0.069300; 0.069300; -0.995200;, +-0.081500; 0.054500; -0.995200;, +-0.162200; 0.108400; -0.980800;, +-0.137900; 0.137900; -0.980800;, +-0.137900; 0.137900; -0.980800;, +-0.162200; 0.108400; -0.980800;, +-0.241400; 0.161300; -0.956900;, +-0.205300; 0.205300; -0.956900;, +-0.205300; 0.205300; -0.956900;, +-0.241400; 0.161300; -0.956900;, +-0.318200; 0.212600; -0.923900;, +-0.270600; 0.270600; -0.923900;, +-0.270600; 0.270600; -0.923900;, +-0.318200; 0.212600; -0.923900;, +-0.392000; 0.261900; -0.881900;, +-0.333300; 0.333300; -0.881900;, +-0.333300; 0.333300; -0.881900;, +-0.392000; 0.261900; -0.881900;, +-0.461900; 0.308700; -0.831500;, +-0.392800; 0.392800; -0.831500;, +-0.392800; 0.392800; -0.831500;, +-0.461900; 0.308700; -0.831500;, +-0.527500; 0.352400; -0.773000;, +-0.448600; 0.448600; -0.773000;, +-0.448600; 0.448600; -0.773000;, +-0.527500; 0.352400; -0.773000;, +-0.587900; 0.392800; -0.707100;, +-0.500000; 0.500000; -0.707100;, +-0.500000; 0.500000; -0.707100;, +-0.587900; 0.392800; -0.707100;, +-0.642700; 0.429500; -0.634400;, +-0.546600; 0.546600; -0.634400;, +-0.546600; 0.546600; -0.634400;, +-0.642700; 0.429500; -0.634400;, +-0.691300; 0.461900; -0.555600;, +-0.587900; 0.587900; -0.555600;, +-0.587900; 0.587900; -0.555600;, +-0.691300; 0.461900; -0.555600;, +-0.733300; 0.490000; -0.471400;, +-0.623600; 0.623600; -0.471400;, +-0.623600; 0.623600; -0.471400;, +-0.733300; 0.490000; -0.471400;, +-0.768200; 0.513300; -0.382700;, +-0.653300; 0.653300; -0.382700;, +-0.653300; 0.653300; -0.382700;, +-0.768200; 0.513300; -0.382700;, +-0.795700; 0.531600; -0.290300;, +-0.676700; 0.676700; -0.290300;, +-0.676700; 0.676700; -0.290300;, +-0.795700; 0.531600; -0.290300;, +-0.815500; 0.544900; -0.195100;, +-0.693500; 0.693500; -0.195100;, +-0.693500; 0.693500; -0.195100;, +-0.815500; 0.544900; -0.195100;, +-0.827500; 0.552900; -0.098000;, +-0.703700; 0.703700; -0.098000;, +-0.703700; 0.703700; -0.098000;, +-0.827500; 0.552900; -0.098000;, +-0.831500; 0.555600; -0.000000;, +-0.707100; 0.707100; -0.000000;, +-0.707100; 0.707100; -0.000000;, +-0.831500; 0.555600; -0.000000;, +-0.827500; 0.552900; 0.098000;, +-0.703700; 0.703700; 0.098000;, +-0.703700; 0.703700; 0.098000;, +-0.827500; 0.552900; 0.098000;, +-0.815500; 0.544900; 0.195100;, +-0.693500; 0.693500; 0.195100;, +-0.693500; 0.693500; 0.195100;, +-0.815500; 0.544900; 0.195100;, +-0.795700; 0.531600; 0.290300;, +-0.676700; 0.676700; 0.290300;, +-0.676700; 0.676700; 0.290300;, +-0.795700; 0.531600; 0.290300;, +-0.768200; 0.513300; 0.382700;, +-0.653300; 0.653300; 0.382700;, +-0.653300; 0.653300; 0.382700;, +-0.768200; 0.513300; 0.382700;, +-0.733300; 0.490000; 0.471400;, +-0.623600; 0.623600; 0.471400;, +-0.623600; 0.623600; 0.471400;, +-0.733300; 0.490000; 0.471400;, +-0.691300; 0.461900; 0.555600;, +-0.587900; 0.587900; 0.555600;, +-0.587900; 0.587900; 0.555600;, +-0.691300; 0.461900; 0.555600;, +-0.642700; 0.429500; 0.634400;, +-0.546600; 0.546600; 0.634400;, +-0.546600; 0.546600; 0.634400;, +-0.642700; 0.429500; 0.634400;, +-0.587900; 0.392800; 0.707100;, +-0.500000; 0.500000; 0.707100;, +-0.500000; 0.500000; 0.707100;, +-0.587900; 0.392800; 0.707100;, +-0.527500; 0.352400; 0.773000;, +-0.448600; 0.448600; 0.773000;, +-0.448600; 0.448600; 0.773000;, +-0.527500; 0.352400; 0.773000;, +-0.461900; 0.308700; 0.831500;, +-0.392800; 0.392800; 0.831500;, +-0.392800; 0.392800; 0.831500;, +-0.461900; 0.308700; 0.831500;, +-0.392000; 0.261900; 0.881900;, +-0.333300; 0.333300; 0.881900;, +-0.333300; 0.333300; 0.881900;, +-0.392000; 0.261900; 0.881900;, +-0.318200; 0.212600; 0.923900;, +-0.270600; 0.270600; 0.923900;, +-0.270600; 0.270600; 0.923900;, +-0.318200; 0.212600; 0.923900;, +-0.241400; 0.161300; 0.956900;, +-0.205300; 0.205300; 0.956900;, +-0.205300; 0.205300; 0.956900;, +-0.241400; 0.161300; 0.956900;, +-0.162200; 0.108400; 0.980800;, +-0.137900; 0.137900; 0.980800;, +-0.137900; 0.137900; 0.980800;, +-0.162200; 0.108400; 0.980800;, +-0.081500; 0.054500; 0.995200;, +-0.069300; 0.069300; 0.995200;, +-0.069300; 0.069300; 0.995200;, +-0.081500; 0.054500; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.081500; 0.054500; 0.995200;, +-0.090600; 0.037500; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.162200; 0.108400; 0.980800;, +-0.180200; 0.074700; 0.980800;, +-0.090600; 0.037500; 0.995200;, +-0.081500; 0.054500; 0.995200;, +-0.241400; 0.161300; 0.956900;, +-0.268200; 0.111100; 0.956900;, +-0.180200; 0.074700; 0.980800;, +-0.162200; 0.108400; 0.980800;, +-0.318200; 0.212600; 0.923900;, +-0.353600; 0.146400; 0.923900;, +-0.268200; 0.111100; 0.956900;, +-0.241400; 0.161300; 0.956900;, +-0.392000; 0.261900; 0.881900;, +-0.435500; 0.180400; 0.881900;, +-0.353600; 0.146400; 0.923900;, +-0.318200; 0.212600; 0.923900;, +-0.461900; 0.308700; 0.831500;, +-0.513300; 0.212600; 0.831500;, +-0.435500; 0.180400; 0.881900;, +-0.392000; 0.261900; 0.881900;, +-0.527500; 0.352400; 0.773000;, +-0.586100; 0.242800; 0.773000;, +-0.513300; 0.212600; 0.831500;, +-0.461900; 0.308700; 0.831500;, +-0.587900; 0.392800; 0.707100;, +-0.653300; 0.270600; 0.707100;, +-0.586100; 0.242800; 0.773000;, +-0.527500; 0.352400; 0.773000;, +-0.642700; 0.429500; 0.634400;, +-0.714200; 0.295800; 0.634400;, +-0.653300; 0.270600; 0.707100;, +-0.587900; 0.392800; 0.707100;, +-0.691300; 0.461900; 0.555600;, +-0.768200; 0.318200; 0.555600;, +-0.714200; 0.295800; 0.634400;, +-0.642700; 0.429500; 0.634400;, +-0.733300; 0.490000; 0.471400;, +-0.814800; 0.337500; 0.471400;, +-0.768200; 0.318200; 0.555600;, +-0.691300; 0.461900; 0.555600;, +-0.768200; 0.513300; 0.382700;, +-0.853600; 0.353600; 0.382700;, +-0.814800; 0.337500; 0.471400;, +-0.733300; 0.490000; 0.471400;, +-0.795700; 0.531600; 0.290300;, +-0.884100; 0.366200; 0.290300;, +-0.853600; 0.353600; 0.382700;, +-0.768200; 0.513300; 0.382700;, +-0.815500; 0.544900; 0.195100;, +-0.906100; 0.375300; 0.195100;, +-0.884100; 0.366200; 0.290300;, +-0.795700; 0.531600; 0.290300;, +-0.827500; 0.552900; 0.098000;, +-0.919400; 0.380800; 0.098000;, +-0.906100; 0.375300; 0.195100;, +-0.815500; 0.544900; 0.195100;, +-0.831500; 0.555600; -0.000000;, +-0.923900; 0.382700; -0.000000;, +-0.919400; 0.380800; 0.098000;, +-0.827500; 0.552900; 0.098000;, +-0.827500; 0.552900; -0.098000;, +-0.919400; 0.380800; -0.098000;, +-0.923900; 0.382700; -0.000000;, +-0.831500; 0.555600; -0.000000;, +-0.815500; 0.544900; -0.195100;, +-0.906100; 0.375300; -0.195100;, +-0.919400; 0.380800; -0.098000;, +-0.827500; 0.552900; -0.098000;, +-0.795700; 0.531600; -0.290300;, +-0.884100; 0.366200; -0.290300;, +-0.906100; 0.375300; -0.195100;, +-0.815500; 0.544900; -0.195100;, +-0.768200; 0.513300; -0.382700;, +-0.853600; 0.353600; -0.382700;, +-0.884100; 0.366200; -0.290300;, +-0.795700; 0.531600; -0.290300;, +-0.733300; 0.490000; -0.471400;, +-0.814800; 0.337500; -0.471400;, +-0.853600; 0.353600; -0.382700;, +-0.768200; 0.513300; -0.382700;, +-0.691300; 0.461900; -0.555600;, +-0.768200; 0.318200; -0.555600;, +-0.814800; 0.337500; -0.471400;, +-0.733300; 0.490000; -0.471400;, +-0.642700; 0.429500; -0.634400;, +-0.714200; 0.295800; -0.634400;, +-0.768200; 0.318200; -0.555600;, +-0.691300; 0.461900; -0.555600;, +-0.587900; 0.392800; -0.707100;, +-0.653300; 0.270600; -0.707100;, +-0.714200; 0.295800; -0.634400;, +-0.642700; 0.429500; -0.634400;, +-0.527500; 0.352400; -0.773000;, +-0.586100; 0.242800; -0.773000;, +-0.653300; 0.270600; -0.707100;, +-0.587900; 0.392800; -0.707100;, +-0.461900; 0.308700; -0.831500;, +-0.513300; 0.212600; -0.831500;, +-0.586100; 0.242800; -0.773000;, +-0.527500; 0.352400; -0.773000;, +-0.392000; 0.261900; -0.881900;, +-0.435500; 0.180400; -0.881900;, +-0.513300; 0.212600; -0.831500;, +-0.461900; 0.308700; -0.831500;, +-0.318200; 0.212600; -0.923900;, +-0.353600; 0.146400; -0.923900;, +-0.435500; 0.180400; -0.881900;, +-0.392000; 0.261900; -0.881900;, +-0.241400; 0.161300; -0.956900;, +-0.268200; 0.111100; -0.956900;, +-0.353600; 0.146400; -0.923900;, +-0.318200; 0.212600; -0.923900;, +-0.162200; 0.108400; -0.980800;, +-0.180200; 0.074700; -0.980800;, +-0.268200; 0.111100; -0.956900;, +-0.241400; 0.161300; -0.956900;, +-0.081500; 0.054500; -0.995200;, +-0.090600; 0.037500; -0.995200;, +-0.180200; 0.074700; -0.980800;, +-0.162200; 0.108400; -0.980800;, +-0.000000; -0.000000; -1.000000;, +-0.090600; 0.037500; -0.995200;, +-0.081500; 0.054500; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.096100; 0.019100; -0.995200;, +-0.090600; 0.037500; -0.995200;, +-0.090600; 0.037500; -0.995200;, +-0.096100; 0.019100; -0.995200;, +-0.191300; 0.038100; -0.980800;, +-0.180200; 0.074700; -0.980800;, +-0.180200; 0.074700; -0.980800;, +-0.191300; 0.038100; -0.980800;, +-0.284700; 0.056600; -0.956900;, +-0.268200; 0.111100; -0.956900;, +-0.268200; 0.111100; -0.956900;, +-0.284700; 0.056600; -0.956900;, +-0.375300; 0.074700; -0.923900;, +-0.353600; 0.146400; -0.923900;, +-0.353600; 0.146400; -0.923900;, +-0.375300; 0.074700; -0.923900;, +-0.462300; 0.092000; -0.881900;, +-0.435500; 0.180400; -0.881900;, +-0.435500; 0.180400; -0.881900;, +-0.462300; 0.092000; -0.881900;, +-0.544900; 0.108400; -0.831500;, +-0.513300; 0.212600; -0.831500;, +-0.513300; 0.212600; -0.831500;, +-0.544900; 0.108400; -0.831500;, +-0.622200; 0.123800; -0.773000;, +-0.586100; 0.242800; -0.773000;, +-0.586100; 0.242800; -0.773000;, +-0.622200; 0.123800; -0.773000;, +-0.693500; 0.137900; -0.707100;, +-0.653300; 0.270600; -0.707100;, +-0.653300; 0.270600; -0.707100;, +-0.693500; 0.137900; -0.707100;, +-0.758200; 0.150800; -0.634400;, +-0.714200; 0.295800; -0.634400;, +-0.714200; 0.295800; -0.634400;, +-0.758200; 0.150800; -0.634400;, +-0.815500; 0.162200; -0.555600;, +-0.768200; 0.318200; -0.555600;, +-0.768200; 0.318200; -0.555600;, +-0.815500; 0.162200; -0.555600;, +-0.865000; 0.172100; -0.471400;, +-0.814800; 0.337500; -0.471400;, +-0.814800; 0.337500; -0.471400;, +-0.865000; 0.172100; -0.471400;, +-0.906100; 0.180200; -0.382700;, +-0.853600; 0.353600; -0.382700;, +-0.853600; 0.353600; -0.382700;, +-0.906100; 0.180200; -0.382700;, +-0.938600; 0.186700; -0.290300;, +-0.884100; 0.366200; -0.290300;, +-0.884100; 0.366200; -0.290300;, +-0.938600; 0.186700; -0.290300;, +-0.961900; 0.191300; -0.195100;, +-0.906100; 0.375300; -0.195100;, +-0.906100; 0.375300; -0.195100;, +-0.961900; 0.191300; -0.195100;, +-0.976100; 0.194200; -0.098000;, +-0.919400; 0.380800; -0.098000;, +-0.919400; 0.380800; -0.098000;, +-0.976100; 0.194200; -0.098000;, +-0.980800; 0.195100; -0.000000;, +-0.923900; 0.382700; -0.000000;, +-0.923900; 0.382700; -0.000000;, +-0.980800; 0.195100; -0.000000;, +-0.976100; 0.194200; 0.098000;, +-0.919400; 0.380800; 0.098000;, +-0.919400; 0.380800; 0.098000;, +-0.976100; 0.194200; 0.098000;, +-0.961900; 0.191300; 0.195100;, +-0.906100; 0.375300; 0.195100;, +-0.906100; 0.375300; 0.195100;, +-0.961900; 0.191300; 0.195100;, +-0.938600; 0.186700; 0.290300;, +-0.884100; 0.366200; 0.290300;, +-0.884100; 0.366200; 0.290300;, +-0.938600; 0.186700; 0.290300;, +-0.906100; 0.180200; 0.382700;, +-0.853600; 0.353600; 0.382700;, +-0.853600; 0.353600; 0.382700;, +-0.906100; 0.180200; 0.382700;, +-0.865000; 0.172100; 0.471400;, +-0.814800; 0.337500; 0.471400;, +-0.814800; 0.337500; 0.471400;, +-0.865000; 0.172100; 0.471400;, +-0.815500; 0.162200; 0.555600;, +-0.768200; 0.318200; 0.555600;, +-0.768200; 0.318200; 0.555600;, +-0.815500; 0.162200; 0.555600;, +-0.758200; 0.150800; 0.634400;, +-0.714200; 0.295800; 0.634400;, +-0.714200; 0.295800; 0.634400;, +-0.758200; 0.150800; 0.634400;, +-0.693500; 0.137900; 0.707100;, +-0.653300; 0.270600; 0.707100;, +-0.653300; 0.270600; 0.707100;, +-0.693500; 0.137900; 0.707100;, +-0.622200; 0.123800; 0.773000;, +-0.586100; 0.242800; 0.773000;, +-0.586100; 0.242800; 0.773000;, +-0.622200; 0.123800; 0.773000;, +-0.544900; 0.108400; 0.831500;, +-0.513300; 0.212600; 0.831500;, +-0.513300; 0.212600; 0.831500;, +-0.544900; 0.108400; 0.831500;, +-0.462300; 0.092000; 0.881900;, +-0.435500; 0.180400; 0.881900;, +-0.435500; 0.180400; 0.881900;, +-0.462300; 0.092000; 0.881900;, +-0.375300; 0.074700; 0.923900;, +-0.353600; 0.146400; 0.923900;, +-0.353600; 0.146400; 0.923900;, +-0.375300; 0.074700; 0.923900;, +-0.284700; 0.056600; 0.956900;, +-0.268200; 0.111100; 0.956900;, +-0.268200; 0.111100; 0.956900;, +-0.284700; 0.056600; 0.956900;, +-0.191300; 0.038100; 0.980800;, +-0.180200; 0.074700; 0.980800;, +-0.180200; 0.074700; 0.980800;, +-0.191300; 0.038100; 0.980800;, +-0.096100; 0.019100; 0.995200;, +-0.090600; 0.037500; 0.995200;, +-0.090600; 0.037500; 0.995200;, +-0.096100; 0.019100; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.096100; 0.019100; 0.995200;, +-0.098000; -0.000000; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.191300; 0.038100; 0.980800;, +-0.195100; -0.000000; 0.980800;, +-0.098000; -0.000000; 0.995200;, +-0.096100; 0.019100; 0.995200;, +-0.284700; 0.056600; 0.956900;, +-0.290300; -0.000000; 0.956900;, +-0.195100; -0.000000; 0.980800;, +-0.191300; 0.038100; 0.980800;, +-0.375300; 0.074700; 0.923900;, +-0.382700; -0.000000; 0.923900;, +-0.290300; -0.000000; 0.956900;, +-0.284700; 0.056600; 0.956900;, +-0.462300; 0.092000; 0.881900;, +-0.471400; -0.000000; 0.881900;, +-0.382700; -0.000000; 0.923900;, +-0.375300; 0.074700; 0.923900;, +-0.544900; 0.108400; 0.831500;, +-0.555600; -0.000000; 0.831500;, +-0.471400; -0.000000; 0.881900;, +-0.462300; 0.092000; 0.881900;, +-0.622200; 0.123800; 0.773000;, +-0.634400; -0.000000; 0.773000;, +-0.555600; -0.000000; 0.831500;, +-0.544900; 0.108400; 0.831500;, +-0.693500; 0.137900; 0.707100;, +-0.707100; -0.000000; 0.707100;, +-0.634400; -0.000000; 0.773000;, +-0.622200; 0.123800; 0.773000;, +-0.758200; 0.150800; 0.634400;, +-0.773000; -0.000000; 0.634400;, +-0.707100; -0.000000; 0.707100;, +-0.693500; 0.137900; 0.707100;, +-0.815500; 0.162200; 0.555600;, +-0.831500; -0.000000; 0.555600;, +-0.773000; -0.000000; 0.634400;, +-0.758200; 0.150800; 0.634400;, +-0.865000; 0.172100; 0.471400;, +-0.881900; -0.000000; 0.471400;, +-0.831500; -0.000000; 0.555600;, +-0.815500; 0.162200; 0.555600;, +-0.906100; 0.180200; 0.382700;, +-0.923900; -0.000000; 0.382700;, +-0.881900; -0.000000; 0.471400;, +-0.865000; 0.172100; 0.471400;, +-0.938600; 0.186700; 0.290300;, +-0.956900; -0.000000; 0.290300;, +-0.923900; -0.000000; 0.382700;, +-0.906100; 0.180200; 0.382700;, +-0.961900; 0.191300; 0.195100;, +-0.980800; -0.000000; 0.195100;, +-0.956900; -0.000000; 0.290300;, +-0.938600; 0.186700; 0.290300;, +-0.976100; 0.194200; 0.098000;, +-0.995200; -0.000000; 0.098000;, +-0.980800; -0.000000; 0.195100;, +-0.961900; 0.191300; 0.195100;, +-0.980800; 0.195100; -0.000000;, +-1.000000; -0.000000; -0.000000;, +-0.995200; -0.000000; 0.098000;, +-0.976100; 0.194200; 0.098000;, +-0.976100; 0.194200; -0.098000;, +-0.995200; -0.000000; -0.098000;, +-1.000000; -0.000000; -0.000000;, +-0.980800; 0.195100; -0.000000;, +-0.961900; 0.191300; -0.195100;, +-0.980800; -0.000000; -0.195100;, +-0.995200; -0.000000; -0.098000;, +-0.976100; 0.194200; -0.098000;, +-0.938600; 0.186700; -0.290300;, +-0.956900; -0.000000; -0.290300;, +-0.980800; -0.000000; -0.195100;, +-0.961900; 0.191300; -0.195100;, +-0.906100; 0.180200; -0.382700;, +-0.923900; -0.000000; -0.382700;, +-0.956900; -0.000000; -0.290300;, +-0.938600; 0.186700; -0.290300;, +-0.865000; 0.172100; -0.471400;, +-0.881900; -0.000000; -0.471400;, +-0.923900; -0.000000; -0.382700;, +-0.906100; 0.180200; -0.382700;, +-0.815500; 0.162200; -0.555600;, +-0.831500; -0.000000; -0.555600;, +-0.881900; -0.000000; -0.471400;, +-0.865000; 0.172100; -0.471400;, +-0.758200; 0.150800; -0.634400;, +-0.773000; -0.000000; -0.634400;, +-0.831500; -0.000000; -0.555600;, +-0.815500; 0.162200; -0.555600;, +-0.693500; 0.137900; -0.707100;, +-0.707100; -0.000000; -0.707100;, +-0.773000; -0.000000; -0.634400;, +-0.758200; 0.150800; -0.634400;, +-0.622200; 0.123800; -0.773000;, +-0.634400; -0.000000; -0.773000;, +-0.707100; -0.000000; -0.707100;, +-0.693500; 0.137900; -0.707100;, +-0.544900; 0.108400; -0.831500;, +-0.555600; -0.000000; -0.831500;, +-0.634400; -0.000000; -0.773000;, +-0.622200; 0.123800; -0.773000;, +-0.462300; 0.092000; -0.881900;, +-0.471400; -0.000000; -0.881900;, +-0.555600; -0.000000; -0.831500;, +-0.544900; 0.108400; -0.831500;, +-0.375300; 0.074700; -0.923900;, +-0.382700; -0.000000; -0.923900;, +-0.471400; -0.000000; -0.881900;, +-0.462300; 0.092000; -0.881900;, +-0.284700; 0.056600; -0.956900;, +-0.290300; -0.000000; -0.956900;, +-0.382700; -0.000000; -0.923900;, +-0.375300; 0.074700; -0.923900;, +-0.191300; 0.038100; -0.980800;, +-0.195100; -0.000000; -0.980800;, +-0.290300; -0.000000; -0.956900;, +-0.284700; 0.056600; -0.956900;, +-0.096100; 0.019100; -0.995200;, +-0.098000; -0.000000; -0.995200;, +-0.195100; -0.000000; -0.980800;, +-0.191300; 0.038100; -0.980800;, +-0.000000; -0.000000; -1.000000;, +-0.098000; -0.000000; -0.995200;, +-0.096100; 0.019100; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.096100; -0.019100; -0.995200;, +-0.098000; -0.000000; -0.995200;, +-0.098000; -0.000000; -0.995200;, +-0.096100; -0.019100; -0.995200;, +-0.191300; -0.038100; -0.980800;, +-0.195100; -0.000000; -0.980800;, +-0.195100; -0.000000; -0.980800;, +-0.191300; -0.038100; -0.980800;, +-0.284700; -0.056600; -0.956900;, +-0.290300; -0.000000; -0.956900;, +-0.290300; -0.000000; -0.956900;, +-0.284700; -0.056600; -0.956900;, +-0.375300; -0.074700; -0.923900;, +-0.382700; -0.000000; -0.923900;, +-0.382700; -0.000000; -0.923900;, +-0.375300; -0.074700; -0.923900;, +-0.462300; -0.092000; -0.881900;, +-0.471400; -0.000000; -0.881900;, +-0.471400; -0.000000; -0.881900;, +-0.462300; -0.092000; -0.881900;, +-0.544900; -0.108400; -0.831500;, +-0.555600; -0.000000; -0.831500;, +-0.555600; -0.000000; -0.831500;, +-0.544900; -0.108400; -0.831500;, +-0.622200; -0.123800; -0.773000;, +-0.634400; -0.000000; -0.773000;, +-0.634400; -0.000000; -0.773000;, +-0.622200; -0.123800; -0.773000;, +-0.693500; -0.137900; -0.707100;, +-0.707100; -0.000000; -0.707100;, +-0.707100; -0.000000; -0.707100;, +-0.693500; -0.137900; -0.707100;, +-0.758200; -0.150800; -0.634400;, +-0.773000; -0.000000; -0.634400;, +-0.773000; -0.000000; -0.634400;, +-0.758200; -0.150800; -0.634400;, +-0.815500; -0.162200; -0.555600;, +-0.831500; -0.000000; -0.555600;, +-0.831500; -0.000000; -0.555600;, +-0.815500; -0.162200; -0.555600;, +-0.865000; -0.172100; -0.471400;, +-0.881900; -0.000000; -0.471400;, +-0.881900; -0.000000; -0.471400;, +-0.865000; -0.172100; -0.471400;, +-0.906100; -0.180200; -0.382700;, +-0.923900; -0.000000; -0.382700;, +-0.923900; -0.000000; -0.382700;, +-0.906100; -0.180200; -0.382700;, +-0.938600; -0.186700; -0.290300;, +-0.956900; -0.000000; -0.290300;, +-0.956900; -0.000000; -0.290300;, +-0.938600; -0.186700; -0.290300;, +-0.961900; -0.191300; -0.195100;, +-0.980800; -0.000000; -0.195100;, +-0.980800; -0.000000; -0.195100;, +-0.961900; -0.191300; -0.195100;, +-0.976100; -0.194200; -0.098000;, +-0.995200; -0.000000; -0.098000;, +-0.995200; -0.000000; -0.098000;, +-0.976100; -0.194200; -0.098000;, +-0.980800; -0.195100; -0.000000;, +-1.000000; -0.000000; -0.000000;, +-1.000000; -0.000000; -0.000000;, +-0.980800; -0.195100; -0.000000;, +-0.976100; -0.194200; 0.098000;, +-0.995200; -0.000000; 0.098000;, +-0.995200; -0.000000; 0.098000;, +-0.976100; -0.194200; 0.098000;, +-0.961900; -0.191300; 0.195100;, +-0.980800; -0.000000; 0.195100;, +-0.980800; -0.000000; 0.195100;, +-0.961900; -0.191300; 0.195100;, +-0.938600; -0.186700; 0.290300;, +-0.956900; -0.000000; 0.290300;, +-0.956900; -0.000000; 0.290300;, +-0.938600; -0.186700; 0.290300;, +-0.906100; -0.180200; 0.382700;, +-0.923900; -0.000000; 0.382700;, +-0.923900; -0.000000; 0.382700;, +-0.906100; -0.180200; 0.382700;, +-0.865000; -0.172100; 0.471400;, +-0.881900; -0.000000; 0.471400;, +-0.881900; -0.000000; 0.471400;, +-0.865000; -0.172100; 0.471400;, +-0.815500; -0.162200; 0.555600;, +-0.831500; -0.000000; 0.555600;, +-0.831500; -0.000000; 0.555600;, +-0.815500; -0.162200; 0.555600;, +-0.758200; -0.150800; 0.634400;, +-0.773000; -0.000000; 0.634400;, +-0.773000; -0.000000; 0.634400;, +-0.758200; -0.150800; 0.634400;, +-0.693500; -0.137900; 0.707100;, +-0.707100; -0.000000; 0.707100;, +-0.707100; -0.000000; 0.707100;, +-0.693500; -0.137900; 0.707100;, +-0.622200; -0.123800; 0.773000;, +-0.634400; -0.000000; 0.773000;, +-0.634400; -0.000000; 0.773000;, +-0.622200; -0.123800; 0.773000;, +-0.544900; -0.108400; 0.831500;, +-0.555600; -0.000000; 0.831500;, +-0.555600; -0.000000; 0.831500;, +-0.544900; -0.108400; 0.831500;, +-0.462300; -0.092000; 0.881900;, +-0.471400; -0.000000; 0.881900;, +-0.471400; -0.000000; 0.881900;, +-0.462300; -0.092000; 0.881900;, +-0.375300; -0.074700; 0.923900;, +-0.382700; -0.000000; 0.923900;, +-0.382700; -0.000000; 0.923900;, +-0.375300; -0.074700; 0.923900;, +-0.284700; -0.056600; 0.956900;, +-0.290300; -0.000000; 0.956900;, +-0.290300; -0.000000; 0.956900;, +-0.284700; -0.056600; 0.956900;, +-0.191300; -0.038100; 0.980800;, +-0.195100; -0.000000; 0.980800;, +-0.195100; -0.000000; 0.980800;, +-0.191300; -0.038100; 0.980800;, +-0.096100; -0.019100; 0.995200;, +-0.098000; -0.000000; 0.995200;, +-0.098000; -0.000000; 0.995200;, +-0.096100; -0.019100; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.096100; -0.019100; 0.995200;, +-0.090600; -0.037500; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.191300; -0.038100; 0.980800;, +-0.180200; -0.074700; 0.980800;, +-0.090600; -0.037500; 0.995200;, +-0.096100; -0.019100; 0.995200;, +-0.284700; -0.056600; 0.956900;, +-0.268200; -0.111100; 0.956900;, +-0.180200; -0.074700; 0.980800;, +-0.191300; -0.038100; 0.980800;, +-0.375300; -0.074700; 0.923900;, +-0.353600; -0.146400; 0.923900;, +-0.268200; -0.111100; 0.956900;, +-0.284700; -0.056600; 0.956900;, +-0.462300; -0.092000; 0.881900;, +-0.435500; -0.180400; 0.881900;, +-0.353600; -0.146400; 0.923900;, +-0.375300; -0.074700; 0.923900;, +-0.544900; -0.108400; 0.831500;, +-0.513300; -0.212600; 0.831500;, +-0.435500; -0.180400; 0.881900;, +-0.462300; -0.092000; 0.881900;, +-0.622200; -0.123800; 0.773000;, +-0.586100; -0.242800; 0.773000;, +-0.513300; -0.212600; 0.831500;, +-0.544900; -0.108400; 0.831500;, +-0.693500; -0.137900; 0.707100;, +-0.653300; -0.270600; 0.707100;, +-0.586100; -0.242800; 0.773000;, +-0.622200; -0.123800; 0.773000;, +-0.758200; -0.150800; 0.634400;, +-0.714200; -0.295800; 0.634400;, +-0.653300; -0.270600; 0.707100;, +-0.693500; -0.137900; 0.707100;, +-0.815500; -0.162200; 0.555600;, +-0.768200; -0.318200; 0.555600;, +-0.714200; -0.295800; 0.634400;, +-0.758200; -0.150800; 0.634400;, +-0.865000; -0.172100; 0.471400;, +-0.814800; -0.337500; 0.471400;, +-0.768200; -0.318200; 0.555600;, +-0.815500; -0.162200; 0.555600;, +-0.906100; -0.180200; 0.382700;, +-0.853600; -0.353600; 0.382700;, +-0.814800; -0.337500; 0.471400;, +-0.865000; -0.172100; 0.471400;, +-0.938600; -0.186700; 0.290300;, +-0.884100; -0.366200; 0.290300;, +-0.853600; -0.353600; 0.382700;, +-0.906100; -0.180200; 0.382700;, +-0.961900; -0.191300; 0.195100;, +-0.906100; -0.375300; 0.195100;, +-0.884100; -0.366200; 0.290300;, +-0.938600; -0.186700; 0.290300;, +-0.976100; -0.194200; 0.098000;, +-0.919400; -0.380800; 0.098000;, +-0.906100; -0.375300; 0.195100;, +-0.961900; -0.191300; 0.195100;, +-0.980800; -0.195100; -0.000000;, +-0.923900; -0.382700; -0.000000;, +-0.919400; -0.380800; 0.098000;, +-0.976100; -0.194200; 0.098000;, +-0.976100; -0.194200; -0.098000;, +-0.919400; -0.380800; -0.098000;, +-0.923900; -0.382700; -0.000000;, +-0.980800; -0.195100; -0.000000;, +-0.961900; -0.191300; -0.195100;, +-0.906100; -0.375300; -0.195100;, +-0.919400; -0.380800; -0.098000;, +-0.976100; -0.194200; -0.098000;, +-0.938600; -0.186700; -0.290300;, +-0.884100; -0.366200; -0.290300;, +-0.906100; -0.375300; -0.195100;, +-0.961900; -0.191300; -0.195100;, +-0.906100; -0.180200; -0.382700;, +-0.853600; -0.353600; -0.382700;, +-0.884100; -0.366200; -0.290300;, +-0.938600; -0.186700; -0.290300;, +-0.865000; -0.172100; -0.471400;, +-0.814800; -0.337500; -0.471400;, +-0.853600; -0.353600; -0.382700;, +-0.906100; -0.180200; -0.382700;, +-0.815500; -0.162200; -0.555600;, +-0.768200; -0.318200; -0.555600;, +-0.814800; -0.337500; -0.471400;, +-0.865000; -0.172100; -0.471400;, +-0.758200; -0.150800; -0.634400;, +-0.714200; -0.295800; -0.634400;, +-0.768200; -0.318200; -0.555600;, +-0.815500; -0.162200; -0.555600;, +-0.693500; -0.137900; -0.707100;, +-0.653300; -0.270600; -0.707100;, +-0.714200; -0.295800; -0.634400;, +-0.758200; -0.150800; -0.634400;, +-0.622200; -0.123800; -0.773000;, +-0.586100; -0.242800; -0.773000;, +-0.653300; -0.270600; -0.707100;, +-0.693500; -0.137900; -0.707100;, +-0.544900; -0.108400; -0.831500;, +-0.513300; -0.212600; -0.831500;, +-0.586100; -0.242800; -0.773000;, +-0.622200; -0.123800; -0.773000;, +-0.462300; -0.092000; -0.881900;, +-0.435500; -0.180400; -0.881900;, +-0.513300; -0.212600; -0.831500;, +-0.544900; -0.108400; -0.831500;, +-0.375300; -0.074700; -0.923900;, +-0.353600; -0.146400; -0.923900;, +-0.435500; -0.180400; -0.881900;, +-0.462300; -0.092000; -0.881900;, +-0.284700; -0.056600; -0.956900;, +-0.268200; -0.111100; -0.956900;, +-0.353600; -0.146400; -0.923900;, +-0.375300; -0.074700; -0.923900;, +-0.191300; -0.038100; -0.980800;, +-0.180200; -0.074700; -0.980800;, +-0.268200; -0.111100; -0.956900;, +-0.284700; -0.056600; -0.956900;, +-0.096100; -0.019100; -0.995200;, +-0.090600; -0.037500; -0.995200;, +-0.180200; -0.074700; -0.980800;, +-0.191300; -0.038100; -0.980800;, +-0.000000; -0.000000; -1.000000;, +-0.090600; -0.037500; -0.995200;, +-0.096100; -0.019100; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.081500; -0.054500; -0.995200;, +-0.090600; -0.037500; -0.995200;, +-0.090600; -0.037500; -0.995200;, +-0.081500; -0.054500; -0.995200;, +-0.162200; -0.108400; -0.980800;, +-0.180200; -0.074700; -0.980800;, +-0.180200; -0.074700; -0.980800;, +-0.162200; -0.108400; -0.980800;, +-0.241400; -0.161300; -0.956900;, +-0.268200; -0.111100; -0.956900;, +-0.268200; -0.111100; -0.956900;, +-0.241400; -0.161300; -0.956900;, +-0.318200; -0.212600; -0.923900;, +-0.353600; -0.146400; -0.923900;, +-0.353600; -0.146400; -0.923900;, +-0.318200; -0.212600; -0.923900;, +-0.392000; -0.261900; -0.881900;, +-0.435500; -0.180400; -0.881900;, +-0.435500; -0.180400; -0.881900;, +-0.392000; -0.261900; -0.881900;, +-0.461900; -0.308700; -0.831500;, +-0.513300; -0.212600; -0.831500;, +-0.513300; -0.212600; -0.831500;, +-0.461900; -0.308700; -0.831500;, +-0.527500; -0.352400; -0.773000;, +-0.586100; -0.242800; -0.773000;, +-0.586100; -0.242800; -0.773000;, +-0.527500; -0.352400; -0.773000;, +-0.587900; -0.392800; -0.707100;, +-0.653300; -0.270600; -0.707100;, +-0.653300; -0.270600; -0.707100;, +-0.587900; -0.392800; -0.707100;, +-0.642700; -0.429500; -0.634400;, +-0.714200; -0.295800; -0.634400;, +-0.714200; -0.295800; -0.634400;, +-0.642700; -0.429500; -0.634400;, +-0.691300; -0.461900; -0.555600;, +-0.768200; -0.318200; -0.555600;, +-0.768200; -0.318200; -0.555600;, +-0.691300; -0.461900; -0.555600;, +-0.733300; -0.490000; -0.471400;, +-0.814800; -0.337500; -0.471400;, +-0.814800; -0.337500; -0.471400;, +-0.733300; -0.490000; -0.471400;, +-0.768200; -0.513300; -0.382700;, +-0.853600; -0.353600; -0.382700;, +-0.853600; -0.353600; -0.382700;, +-0.768200; -0.513300; -0.382700;, +-0.795700; -0.531600; -0.290300;, +-0.884100; -0.366200; -0.290300;, +-0.884100; -0.366200; -0.290300;, +-0.795700; -0.531600; -0.290300;, +-0.815500; -0.544900; -0.195100;, +-0.906100; -0.375300; -0.195100;, +-0.906100; -0.375300; -0.195100;, +-0.815500; -0.544900; -0.195100;, +-0.827500; -0.552900; -0.098000;, +-0.919400; -0.380800; -0.098000;, +-0.919400; -0.380800; -0.098000;, +-0.827500; -0.552900; -0.098000;, +-0.831500; -0.555600; -0.000000;, +-0.923900; -0.382700; -0.000000;, +-0.923900; -0.382700; -0.000000;, +-0.831500; -0.555600; -0.000000;, +-0.827500; -0.552900; 0.098000;, +-0.919400; -0.380800; 0.098000;, +-0.919400; -0.380800; 0.098000;, +-0.827500; -0.552900; 0.098000;, +-0.815500; -0.544900; 0.195100;, +-0.906100; -0.375300; 0.195100;, +-0.906100; -0.375300; 0.195100;, +-0.815500; -0.544900; 0.195100;, +-0.795700; -0.531600; 0.290300;, +-0.884100; -0.366200; 0.290300;, +-0.884100; -0.366200; 0.290300;, +-0.795700; -0.531600; 0.290300;, +-0.768200; -0.513300; 0.382700;, +-0.853600; -0.353600; 0.382700;, +-0.853600; -0.353600; 0.382700;, +-0.768200; -0.513300; 0.382700;, +-0.733300; -0.490000; 0.471400;, +-0.814800; -0.337500; 0.471400;, +-0.814800; -0.337500; 0.471400;, +-0.733300; -0.490000; 0.471400;, +-0.691300; -0.461900; 0.555600;, +-0.768200; -0.318200; 0.555600;, +-0.768200; -0.318200; 0.555600;, +-0.691300; -0.461900; 0.555600;, +-0.642700; -0.429500; 0.634400;, +-0.714200; -0.295800; 0.634400;, +-0.714200; -0.295800; 0.634400;, +-0.642700; -0.429500; 0.634400;, +-0.587900; -0.392800; 0.707100;, +-0.653300; -0.270600; 0.707100;, +-0.653300; -0.270600; 0.707100;, +-0.587900; -0.392800; 0.707100;, +-0.527500; -0.352400; 0.773000;, +-0.586100; -0.242800; 0.773000;, +-0.586100; -0.242800; 0.773000;, +-0.527500; -0.352400; 0.773000;, +-0.461900; -0.308700; 0.831500;, +-0.513300; -0.212600; 0.831500;, +-0.513300; -0.212600; 0.831500;, +-0.461900; -0.308700; 0.831500;, +-0.392000; -0.261900; 0.881900;, +-0.435500; -0.180400; 0.881900;, +-0.435500; -0.180400; 0.881900;, +-0.392000; -0.261900; 0.881900;, +-0.318200; -0.212600; 0.923900;, +-0.353600; -0.146400; 0.923900;, +-0.353600; -0.146400; 0.923900;, +-0.318200; -0.212600; 0.923900;, +-0.241400; -0.161300; 0.956900;, +-0.268200; -0.111100; 0.956900;, +-0.268200; -0.111100; 0.956900;, +-0.241400; -0.161300; 0.956900;, +-0.162200; -0.108400; 0.980800;, +-0.180200; -0.074700; 0.980800;, +-0.180200; -0.074700; 0.980800;, +-0.162200; -0.108400; 0.980800;, +-0.081500; -0.054500; 0.995200;, +-0.090600; -0.037500; 0.995200;, +-0.090600; -0.037500; 0.995200;, +-0.081500; -0.054500; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.081500; -0.054500; 0.995200;, +-0.069300; -0.069300; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.162200; -0.108400; 0.980800;, +-0.137900; -0.137900; 0.980800;, +-0.069300; -0.069300; 0.995200;, +-0.081500; -0.054500; 0.995200;, +-0.241400; -0.161300; 0.956900;, +-0.205300; -0.205300; 0.956900;, +-0.137900; -0.137900; 0.980800;, +-0.162200; -0.108400; 0.980800;, +-0.318200; -0.212600; 0.923900;, +-0.270600; -0.270600; 0.923900;, +-0.205300; -0.205300; 0.956900;, +-0.241400; -0.161300; 0.956900;, +-0.392000; -0.261900; 0.881900;, +-0.333300; -0.333300; 0.881900;, +-0.270600; -0.270600; 0.923900;, +-0.318200; -0.212600; 0.923900;, +-0.461900; -0.308700; 0.831500;, +-0.392800; -0.392800; 0.831500;, +-0.333300; -0.333300; 0.881900;, +-0.392000; -0.261900; 0.881900;, +-0.527500; -0.352400; 0.773000;, +-0.448600; -0.448600; 0.773000;, +-0.392800; -0.392800; 0.831500;, +-0.461900; -0.308700; 0.831500;, +-0.587900; -0.392800; 0.707100;, +-0.500000; -0.500000; 0.707100;, +-0.448600; -0.448600; 0.773000;, +-0.527500; -0.352400; 0.773000;, +-0.642700; -0.429500; 0.634400;, +-0.546600; -0.546600; 0.634400;, +-0.500000; -0.500000; 0.707100;, +-0.587900; -0.392800; 0.707100;, +-0.691300; -0.461900; 0.555600;, +-0.587900; -0.587900; 0.555600;, +-0.546600; -0.546600; 0.634400;, +-0.642700; -0.429500; 0.634400;, +-0.733300; -0.490000; 0.471400;, +-0.623600; -0.623600; 0.471400;, +-0.587900; -0.587900; 0.555600;, +-0.691300; -0.461900; 0.555600;, +-0.768200; -0.513300; 0.382700;, +-0.653300; -0.653300; 0.382700;, +-0.623600; -0.623600; 0.471400;, +-0.733300; -0.490000; 0.471400;, +-0.795700; -0.531600; 0.290300;, +-0.676700; -0.676700; 0.290300;, +-0.653300; -0.653300; 0.382700;, +-0.768200; -0.513300; 0.382700;, +-0.815500; -0.544900; 0.195100;, +-0.693500; -0.693500; 0.195100;, +-0.676700; -0.676700; 0.290300;, +-0.795700; -0.531600; 0.290300;, +-0.827500; -0.552900; 0.098000;, +-0.703700; -0.703700; 0.098000;, +-0.693500; -0.693500; 0.195100;, +-0.815500; -0.544900; 0.195100;, +-0.831500; -0.555600; -0.000000;, +-0.707100; -0.707100; -0.000000;, +-0.703700; -0.703700; 0.098000;, +-0.827500; -0.552900; 0.098000;, +-0.827500; -0.552900; -0.098000;, +-0.703700; -0.703700; -0.098000;, +-0.707100; -0.707100; -0.000000;, +-0.831500; -0.555600; -0.000000;, +-0.815500; -0.544900; -0.195100;, +-0.693500; -0.693500; -0.195100;, +-0.703700; -0.703700; -0.098000;, +-0.827500; -0.552900; -0.098000;, +-0.795700; -0.531600; -0.290300;, +-0.676700; -0.676700; -0.290300;, +-0.693500; -0.693500; -0.195100;, +-0.815500; -0.544900; -0.195100;, +-0.768200; -0.513300; -0.382700;, +-0.653300; -0.653300; -0.382700;, +-0.676700; -0.676700; -0.290300;, +-0.795700; -0.531600; -0.290300;, +-0.733300; -0.490000; -0.471400;, +-0.623600; -0.623600; -0.471400;, +-0.653300; -0.653300; -0.382700;, +-0.768200; -0.513300; -0.382700;, +-0.691300; -0.461900; -0.555600;, +-0.587900; -0.587900; -0.555600;, +-0.623600; -0.623600; -0.471400;, +-0.733300; -0.490000; -0.471400;, +-0.642700; -0.429500; -0.634400;, +-0.546600; -0.546600; -0.634400;, +-0.587900; -0.587900; -0.555600;, +-0.691300; -0.461900; -0.555600;, +-0.587900; -0.392800; -0.707100;, +-0.500000; -0.500000; -0.707100;, +-0.546600; -0.546600; -0.634400;, +-0.642700; -0.429500; -0.634400;, +-0.527500; -0.352400; -0.773000;, +-0.448600; -0.448600; -0.773000;, +-0.500000; -0.500000; -0.707100;, +-0.587900; -0.392800; -0.707100;, +-0.461900; -0.308700; -0.831500;, +-0.392800; -0.392800; -0.831500;, +-0.448600; -0.448600; -0.773000;, +-0.527500; -0.352400; -0.773000;, +-0.392000; -0.261900; -0.881900;, +-0.333300; -0.333300; -0.881900;, +-0.392800; -0.392800; -0.831500;, +-0.461900; -0.308700; -0.831500;, +-0.318200; -0.212600; -0.923900;, +-0.270600; -0.270600; -0.923900;, +-0.333300; -0.333300; -0.881900;, +-0.392000; -0.261900; -0.881900;, +-0.241400; -0.161300; -0.956900;, +-0.205300; -0.205300; -0.956900;, +-0.270600; -0.270600; -0.923900;, +-0.318200; -0.212600; -0.923900;, +-0.162200; -0.108400; -0.980800;, +-0.137900; -0.137900; -0.980800;, +-0.205300; -0.205300; -0.956900;, +-0.241400; -0.161300; -0.956900;, +-0.081500; -0.054500; -0.995200;, +-0.069300; -0.069300; -0.995200;, +-0.137900; -0.137900; -0.980800;, +-0.162200; -0.108400; -0.980800;, +-0.000000; -0.000000; -1.000000;, +-0.069300; -0.069300; -0.995200;, +-0.081500; -0.054500; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.054500; -0.081500; -0.995200;, +-0.069300; -0.069300; -0.995200;, +-0.069300; -0.069300; -0.995200;, +-0.054500; -0.081500; -0.995200;, +-0.108400; -0.162200; -0.980800;, +-0.137900; -0.137900; -0.980800;, +-0.137900; -0.137900; -0.980800;, +-0.108400; -0.162200; -0.980800;, +-0.161300; -0.241400; -0.956900;, +-0.205300; -0.205300; -0.956900;, +-0.205300; -0.205300; -0.956900;, +-0.161300; -0.241400; -0.956900;, +-0.212600; -0.318200; -0.923900;, +-0.270600; -0.270600; -0.923900;, +-0.270600; -0.270600; -0.923900;, +-0.212600; -0.318200; -0.923900;, +-0.261900; -0.392000; -0.881900;, +-0.333300; -0.333300; -0.881900;, +-0.333300; -0.333300; -0.881900;, +-0.261900; -0.392000; -0.881900;, +-0.308700; -0.461900; -0.831500;, +-0.392800; -0.392800; -0.831500;, +-0.392800; -0.392800; -0.831500;, +-0.308700; -0.461900; -0.831500;, +-0.352400; -0.527500; -0.773000;, +-0.448600; -0.448600; -0.773000;, +-0.448600; -0.448600; -0.773000;, +-0.352400; -0.527500; -0.773000;, +-0.392800; -0.587900; -0.707100;, +-0.500000; -0.500000; -0.707100;, +-0.500000; -0.500000; -0.707100;, +-0.392800; -0.587900; -0.707100;, +-0.429500; -0.642700; -0.634400;, +-0.546600; -0.546600; -0.634400;, +-0.546600; -0.546600; -0.634400;, +-0.429500; -0.642700; -0.634400;, +-0.461900; -0.691300; -0.555600;, +-0.587900; -0.587900; -0.555600;, +-0.587900; -0.587900; -0.555600;, +-0.461900; -0.691300; -0.555600;, +-0.490000; -0.733300; -0.471400;, +-0.623600; -0.623600; -0.471400;, +-0.623600; -0.623600; -0.471400;, +-0.490000; -0.733300; -0.471400;, +-0.513300; -0.768200; -0.382700;, +-0.653300; -0.653300; -0.382700;, +-0.653300; -0.653300; -0.382700;, +-0.513300; -0.768200; -0.382700;, +-0.531600; -0.795700; -0.290300;, +-0.676700; -0.676700; -0.290300;, +-0.676700; -0.676700; -0.290300;, +-0.531600; -0.795700; -0.290300;, +-0.544900; -0.815500; -0.195100;, +-0.693500; -0.693500; -0.195100;, +-0.693500; -0.693500; -0.195100;, +-0.544900; -0.815500; -0.195100;, +-0.552900; -0.827500; -0.098000;, +-0.703700; -0.703700; -0.098000;, +-0.703700; -0.703700; -0.098000;, +-0.552900; -0.827500; -0.098000;, +-0.555600; -0.831500; -0.000000;, +-0.707100; -0.707100; -0.000000;, +-0.707100; -0.707100; -0.000000;, +-0.555600; -0.831500; -0.000000;, +-0.552900; -0.827500; 0.098000;, +-0.703700; -0.703700; 0.098000;, +-0.703700; -0.703700; 0.098000;, +-0.552900; -0.827500; 0.098000;, +-0.544900; -0.815500; 0.195100;, +-0.693500; -0.693500; 0.195100;, +-0.693500; -0.693500; 0.195100;, +-0.544900; -0.815500; 0.195100;, +-0.531600; -0.795700; 0.290300;, +-0.676700; -0.676700; 0.290300;, +-0.676700; -0.676700; 0.290300;, +-0.531600; -0.795700; 0.290300;, +-0.513300; -0.768200; 0.382700;, +-0.653300; -0.653300; 0.382700;, +-0.653300; -0.653300; 0.382700;, +-0.513300; -0.768200; 0.382700;, +-0.490000; -0.733300; 0.471400;, +-0.623600; -0.623600; 0.471400;, +-0.623600; -0.623600; 0.471400;, +-0.490000; -0.733300; 0.471400;, +-0.461900; -0.691300; 0.555600;, +-0.587900; -0.587900; 0.555600;, +-0.587900; -0.587900; 0.555600;, +-0.461900; -0.691300; 0.555600;, +-0.429500; -0.642700; 0.634400;, +-0.546600; -0.546600; 0.634400;, +-0.546600; -0.546600; 0.634400;, +-0.429500; -0.642700; 0.634400;, +-0.392800; -0.587900; 0.707100;, +-0.500000; -0.500000; 0.707100;, +-0.500000; -0.500000; 0.707100;, +-0.392800; -0.587900; 0.707100;, +-0.352400; -0.527500; 0.773000;, +-0.448600; -0.448600; 0.773000;, +-0.448600; -0.448600; 0.773000;, +-0.352400; -0.527500; 0.773000;, +-0.308700; -0.461900; 0.831500;, +-0.392800; -0.392800; 0.831500;, +-0.392800; -0.392800; 0.831500;, +-0.308700; -0.461900; 0.831500;, +-0.261900; -0.392000; 0.881900;, +-0.333300; -0.333300; 0.881900;, +-0.333300; -0.333300; 0.881900;, +-0.261900; -0.392000; 0.881900;, +-0.212600; -0.318200; 0.923900;, +-0.270600; -0.270600; 0.923900;, +-0.270600; -0.270600; 0.923900;, +-0.212600; -0.318200; 0.923900;, +-0.161300; -0.241400; 0.956900;, +-0.205300; -0.205300; 0.956900;, +-0.205300; -0.205300; 0.956900;, +-0.161300; -0.241400; 0.956900;, +-0.108400; -0.162200; 0.980800;, +-0.137900; -0.137900; 0.980800;, +-0.137900; -0.137900; 0.980800;, +-0.108400; -0.162200; 0.980800;, +-0.054500; -0.081500; 0.995200;, +-0.069300; -0.069300; 0.995200;, +-0.069300; -0.069300; 0.995200;, +-0.054500; -0.081500; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.054500; -0.081500; 0.995200;, +-0.037500; -0.090600; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.108400; -0.162200; 0.980800;, +-0.074700; -0.180200; 0.980800;, +-0.037500; -0.090600; 0.995200;, +-0.054500; -0.081500; 0.995200;, +-0.161300; -0.241400; 0.956900;, +-0.111100; -0.268200; 0.956900;, +-0.074700; -0.180200; 0.980800;, +-0.108400; -0.162200; 0.980800;, +-0.212600; -0.318200; 0.923900;, +-0.146400; -0.353600; 0.923900;, +-0.111100; -0.268200; 0.956900;, +-0.161300; -0.241400; 0.956900;, +-0.261900; -0.392000; 0.881900;, +-0.180400; -0.435500; 0.881900;, +-0.146400; -0.353600; 0.923900;, +-0.212600; -0.318200; 0.923900;, +-0.308700; -0.461900; 0.831500;, +-0.212600; -0.513300; 0.831500;, +-0.180400; -0.435500; 0.881900;, +-0.261900; -0.392000; 0.881900;, +-0.352400; -0.527500; 0.773000;, +-0.242800; -0.586100; 0.773000;, +-0.212600; -0.513300; 0.831500;, +-0.308700; -0.461900; 0.831500;, +-0.392800; -0.587900; 0.707100;, +-0.270600; -0.653300; 0.707100;, +-0.242800; -0.586100; 0.773000;, +-0.352400; -0.527500; 0.773000;, +-0.429500; -0.642700; 0.634400;, +-0.295800; -0.714200; 0.634400;, +-0.270600; -0.653300; 0.707100;, +-0.392800; -0.587900; 0.707100;, +-0.461900; -0.691300; 0.555600;, +-0.318200; -0.768200; 0.555600;, +-0.295800; -0.714200; 0.634400;, +-0.429500; -0.642700; 0.634400;, +-0.490000; -0.733300; 0.471400;, +-0.337500; -0.814800; 0.471400;, +-0.318200; -0.768200; 0.555600;, +-0.461900; -0.691300; 0.555600;, +-0.513300; -0.768200; 0.382700;, +-0.353600; -0.853600; 0.382700;, +-0.337500; -0.814800; 0.471400;, +-0.490000; -0.733300; 0.471400;, +-0.531600; -0.795700; 0.290300;, +-0.366200; -0.884100; 0.290300;, +-0.353600; -0.853600; 0.382700;, +-0.513300; -0.768200; 0.382700;, +-0.544900; -0.815500; 0.195100;, +-0.375300; -0.906100; 0.195100;, +-0.366200; -0.884100; 0.290300;, +-0.531600; -0.795700; 0.290300;, +-0.552900; -0.827500; 0.098000;, +-0.380800; -0.919400; 0.098000;, +-0.375300; -0.906100; 0.195100;, +-0.544900; -0.815500; 0.195100;, +-0.555600; -0.831500; -0.000000;, +-0.382700; -0.923900; -0.000000;, +-0.380800; -0.919400; 0.098000;, +-0.552900; -0.827500; 0.098000;, +-0.552900; -0.827500; -0.098000;, +-0.380800; -0.919400; -0.098000;, +-0.382700; -0.923900; -0.000000;, +-0.555600; -0.831500; -0.000000;, +-0.544900; -0.815500; -0.195100;, +-0.375300; -0.906100; -0.195100;, +-0.380800; -0.919400; -0.098000;, +-0.552900; -0.827500; -0.098000;, +-0.531600; -0.795700; -0.290300;, +-0.366200; -0.884100; -0.290300;, +-0.375300; -0.906100; -0.195100;, +-0.544900; -0.815500; -0.195100;, +-0.513300; -0.768200; -0.382700;, +-0.353600; -0.853600; -0.382700;, +-0.366200; -0.884100; -0.290300;, +-0.531600; -0.795700; -0.290300;, +-0.490000; -0.733300; -0.471400;, +-0.337500; -0.814800; -0.471400;, +-0.353600; -0.853600; -0.382700;, +-0.513300; -0.768200; -0.382700;, +-0.461900; -0.691300; -0.555600;, +-0.318200; -0.768200; -0.555600;, +-0.337500; -0.814800; -0.471400;, +-0.490000; -0.733300; -0.471400;, +-0.429500; -0.642700; -0.634400;, +-0.295800; -0.714200; -0.634400;, +-0.318200; -0.768200; -0.555600;, +-0.461900; -0.691300; -0.555600;, +-0.392800; -0.587900; -0.707100;, +-0.270600; -0.653300; -0.707100;, +-0.295800; -0.714200; -0.634400;, +-0.429500; -0.642700; -0.634400;, +-0.352400; -0.527500; -0.773000;, +-0.242800; -0.586100; -0.773000;, +-0.270600; -0.653300; -0.707100;, +-0.392800; -0.587900; -0.707100;, +-0.308700; -0.461900; -0.831500;, +-0.212600; -0.513300; -0.831500;, +-0.242800; -0.586100; -0.773000;, +-0.352400; -0.527500; -0.773000;, +-0.261900; -0.392000; -0.881900;, +-0.180400; -0.435500; -0.881900;, +-0.212600; -0.513300; -0.831500;, +-0.308700; -0.461900; -0.831500;, +-0.212600; -0.318200; -0.923900;, +-0.146400; -0.353600; -0.923900;, +-0.180400; -0.435500; -0.881900;, +-0.261900; -0.392000; -0.881900;, +-0.161300; -0.241400; -0.956900;, +-0.111100; -0.268200; -0.956900;, +-0.146400; -0.353600; -0.923900;, +-0.212600; -0.318200; -0.923900;, +-0.108400; -0.162200; -0.980800;, +-0.074700; -0.180200; -0.980800;, +-0.111100; -0.268200; -0.956900;, +-0.161300; -0.241400; -0.956900;, +-0.054500; -0.081500; -0.995200;, +-0.037500; -0.090600; -0.995200;, +-0.074700; -0.180200; -0.980800;, +-0.108400; -0.162200; -0.980800;, +-0.000000; -0.000000; -1.000000;, +-0.037500; -0.090600; -0.995200;, +-0.054500; -0.081500; -0.995200;, +-0.000000; -0.000000; -1.000000;, +-0.019100; -0.096100; -0.995200;, +-0.037500; -0.090600; -0.995200;, +-0.037500; -0.090600; -0.995200;, +-0.019100; -0.096100; -0.995200;, +-0.038100; -0.191300; -0.980800;, +-0.074700; -0.180200; -0.980800;, +-0.074700; -0.180200; -0.980800;, +-0.038100; -0.191300; -0.980800;, +-0.056600; -0.284700; -0.956900;, +-0.111100; -0.268200; -0.956900;, +-0.111100; -0.268200; -0.956900;, +-0.056600; -0.284700; -0.956900;, +-0.074700; -0.375300; -0.923900;, +-0.146400; -0.353600; -0.923900;, +-0.146400; -0.353600; -0.923900;, +-0.074700; -0.375300; -0.923900;, +-0.092000; -0.462300; -0.881900;, +-0.180400; -0.435500; -0.881900;, +-0.180400; -0.435500; -0.881900;, +-0.092000; -0.462300; -0.881900;, +-0.108400; -0.544900; -0.831500;, +-0.212600; -0.513300; -0.831500;, +-0.212600; -0.513300; -0.831500;, +-0.108400; -0.544900; -0.831500;, +-0.123800; -0.622200; -0.773000;, +-0.242800; -0.586100; -0.773000;, +-0.242800; -0.586100; -0.773000;, +-0.123800; -0.622200; -0.773000;, +-0.137900; -0.693500; -0.707100;, +-0.270600; -0.653300; -0.707100;, +-0.270600; -0.653300; -0.707100;, +-0.137900; -0.693500; -0.707100;, +-0.150800; -0.758200; -0.634400;, +-0.295800; -0.714200; -0.634400;, +-0.295800; -0.714200; -0.634400;, +-0.150800; -0.758200; -0.634400;, +-0.162200; -0.815500; -0.555600;, +-0.318200; -0.768200; -0.555600;, +-0.318200; -0.768200; -0.555600;, +-0.162200; -0.815500; -0.555600;, +-0.172100; -0.865000; -0.471400;, +-0.337500; -0.814800; -0.471400;, +-0.337500; -0.814800; -0.471400;, +-0.172100; -0.865000; -0.471400;, +-0.180200; -0.906100; -0.382700;, +-0.353600; -0.853600; -0.382700;, +-0.353600; -0.853600; -0.382700;, +-0.180200; -0.906100; -0.382700;, +-0.186700; -0.938600; -0.290300;, +-0.366200; -0.884100; -0.290300;, +-0.366200; -0.884100; -0.290300;, +-0.186700; -0.938600; -0.290300;, +-0.191300; -0.961900; -0.195100;, +-0.375300; -0.906100; -0.195100;, +-0.375300; -0.906100; -0.195100;, +-0.191300; -0.961900; -0.195100;, +-0.194200; -0.976100; -0.098000;, +-0.380800; -0.919400; -0.098000;, +-0.380800; -0.919400; -0.098000;, +-0.194200; -0.976100; -0.098000;, +-0.195100; -0.980800; -0.000000;, +-0.382700; -0.923900; -0.000000;, +-0.382700; -0.923900; -0.000000;, +-0.195100; -0.980800; -0.000000;, +-0.194200; -0.976100; 0.098000;, +-0.380800; -0.919400; 0.098000;, +-0.380800; -0.919400; 0.098000;, +-0.194200; -0.976100; 0.098000;, +-0.191300; -0.961900; 0.195100;, +-0.375300; -0.906100; 0.195100;, +-0.375300; -0.906100; 0.195100;, +-0.191300; -0.961900; 0.195100;, +-0.186700; -0.938600; 0.290300;, +-0.366200; -0.884100; 0.290300;, +-0.366200; -0.884100; 0.290300;, +-0.186700; -0.938600; 0.290300;, +-0.180200; -0.906100; 0.382700;, +-0.353600; -0.853600; 0.382700;, +-0.353600; -0.853600; 0.382700;, +-0.180200; -0.906100; 0.382700;, +-0.172100; -0.865000; 0.471400;, +-0.337500; -0.814800; 0.471400;, +-0.337500; -0.814800; 0.471400;, +-0.172100; -0.865000; 0.471400;, +-0.162200; -0.815500; 0.555600;, +-0.318200; -0.768200; 0.555600;, +-0.318200; -0.768200; 0.555600;, +-0.162200; -0.815500; 0.555600;, +-0.150800; -0.758200; 0.634400;, +-0.295800; -0.714200; 0.634400;, +-0.295800; -0.714200; 0.634400;, +-0.150800; -0.758200; 0.634400;, +-0.137900; -0.693500; 0.707100;, +-0.270600; -0.653300; 0.707100;, +-0.270600; -0.653300; 0.707100;, +-0.137900; -0.693500; 0.707100;, +-0.123800; -0.622200; 0.773000;, +-0.242800; -0.586100; 0.773000;, +-0.242800; -0.586100; 0.773000;, +-0.123800; -0.622200; 0.773000;, +-0.108400; -0.544900; 0.831500;, +-0.212600; -0.513300; 0.831500;, +-0.212600; -0.513300; 0.831500;, +-0.108400; -0.544900; 0.831500;, +-0.092000; -0.462300; 0.881900;, +-0.180400; -0.435500; 0.881900;, +-0.180400; -0.435500; 0.881900;, +-0.092000; -0.462300; 0.881900;, +-0.074700; -0.375300; 0.923900;, +-0.146400; -0.353600; 0.923900;, +-0.146400; -0.353600; 0.923900;, +-0.074700; -0.375300; 0.923900;, +-0.056600; -0.284700; 0.956900;, +-0.111100; -0.268200; 0.956900;, +-0.111100; -0.268200; 0.956900;, +-0.056600; -0.284700; 0.956900;, +-0.038100; -0.191300; 0.980800;, +-0.074700; -0.180200; 0.980800;, +-0.074700; -0.180200; 0.980800;, +-0.038100; -0.191300; 0.980800;, +-0.019100; -0.096100; 0.995200;, +-0.037500; -0.090600; 0.995200;, +-0.037500; -0.090600; 0.995200;, +-0.019100; -0.096100; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.019100; -0.096100; 0.995200;, +0.000000; -0.098000; 0.995200;, +0.000000; 0.000000; 1.000000;, +-0.038100; -0.191300; 0.980800;, +0.000000; -0.195100; 0.980800;, +0.000000; -0.098000; 0.995200;, +-0.019100; -0.096100; 0.995200;, +-0.056600; -0.284700; 0.956900;, +0.000000; -0.290300; 0.956900;, +0.000000; -0.195100; 0.980800;, +-0.038100; -0.191300; 0.980800;, +-0.074700; -0.375300; 0.923900;, +0.000000; -0.382700; 0.923900;, +0.000000; -0.290300; 0.956900;, +-0.056600; -0.284700; 0.956900;, +-0.092000; -0.462300; 0.881900;, +0.000000; -0.471400; 0.881900;, +0.000000; -0.382700; 0.923900;, +-0.074700; -0.375300; 0.923900;, +-0.108400; -0.544900; 0.831500;, +0.000000; -0.555600; 0.831500;, +0.000000; -0.471400; 0.881900;, +-0.092000; -0.462300; 0.881900;, +-0.123800; -0.622200; 0.773000;, +0.000000; -0.634400; 0.773000;, +0.000000; -0.555600; 0.831500;, +-0.108400; -0.544900; 0.831500;, +-0.137900; -0.693500; 0.707100;, +0.000000; -0.707100; 0.707100;, +0.000000; -0.634400; 0.773000;, +-0.123800; -0.622200; 0.773000;, +-0.150800; -0.758200; 0.634400;, +0.000000; -0.773000; 0.634400;, +0.000000; -0.707100; 0.707100;, +-0.137900; -0.693500; 0.707100;, +-0.162200; -0.815500; 0.555600;, +0.000000; -0.831500; 0.555600;, +0.000000; -0.773000; 0.634400;, +-0.150800; -0.758200; 0.634400;, +-0.172100; -0.865000; 0.471400;, +0.000000; -0.881900; 0.471400;, +0.000000; -0.831500; 0.555600;, +-0.162200; -0.815500; 0.555600;, +-0.180200; -0.906100; 0.382700;, +0.000000; -0.923900; 0.382700;, +0.000000; -0.881900; 0.471400;, +-0.172100; -0.865000; 0.471400;, +-0.186700; -0.938600; 0.290300;, +0.000000; -0.956900; 0.290300;, +0.000000; -0.923900; 0.382700;, +-0.180200; -0.906100; 0.382700;, +-0.191300; -0.961900; 0.195100;, +0.000000; -0.980800; 0.195100;, +0.000000; -0.956900; 0.290300;, +-0.186700; -0.938600; 0.290300;, +-0.194200; -0.976100; 0.098000;, +0.000000; -0.995200; 0.098000;, +0.000000; -0.980800; 0.195100;, +-0.191300; -0.961900; 0.195100;, +-0.195100; -0.980800; -0.000000;, +0.000000; -1.000000; -0.000000;, +0.000000; -0.995200; 0.098000;, +-0.194200; -0.976100; 0.098000;, +-0.194200; -0.976100; -0.098000;, +0.000000; -0.995200; -0.098000;, +0.000000; -1.000000; -0.000000;, +-0.195100; -0.980800; -0.000000;, +-0.191300; -0.961900; -0.195100;, +0.000000; -0.980800; -0.195100;, +0.000000; -0.995200; -0.098000;, +-0.194200; -0.976100; -0.098000;, +-0.186700; -0.938600; -0.290300;, +0.000000; -0.956900; -0.290300;, +0.000000; -0.980800; -0.195100;, +-0.191300; -0.961900; -0.195100;, +-0.180200; -0.906100; -0.382700;, +0.000000; -0.923900; -0.382700;, +0.000000; -0.956900; -0.290300;, +-0.186700; -0.938600; -0.290300;, +-0.172100; -0.865000; -0.471400;, +0.000000; -0.881900; -0.471400;, +0.000000; -0.923900; -0.382700;, +-0.180200; -0.906100; -0.382700;, +-0.162200; -0.815500; -0.555600;, +0.000000; -0.831500; -0.555600;, +0.000000; -0.881900; -0.471400;, +-0.172100; -0.865000; -0.471400;, +-0.150800; -0.758200; -0.634400;, +0.000000; -0.773000; -0.634400;, +0.000000; -0.831500; -0.555600;, +-0.162200; -0.815500; -0.555600;, +-0.137900; -0.693500; -0.707100;, +0.000000; -0.707100; -0.707100;, +0.000000; -0.773000; -0.634400;, +-0.150800; -0.758200; -0.634400;, +-0.123800; -0.622200; -0.773000;, +0.000000; -0.634400; -0.773000;, +0.000000; -0.707100; -0.707100;, +-0.137900; -0.693500; -0.707100;, +-0.108400; -0.544900; -0.831500;, +0.000000; -0.555600; -0.831500;, +0.000000; -0.634400; -0.773000;, +-0.123800; -0.622200; -0.773000;, +-0.092000; -0.462300; -0.881900;, +0.000000; -0.471400; -0.881900;, +0.000000; -0.555600; -0.831500;, +-0.108400; -0.544900; -0.831500;, +-0.074700; -0.375300; -0.923900;, +0.000000; -0.382700; -0.923900;, +0.000000; -0.471400; -0.881900;, +-0.092000; -0.462300; -0.881900;, +-0.056600; -0.284700; -0.956900;, +0.000000; -0.290300; -0.956900;, +0.000000; -0.382700; -0.923900;, +-0.074700; -0.375300; -0.923900;, +-0.038100; -0.191300; -0.980800;, +0.000000; -0.195100; -0.980800;, +0.000000; -0.290300; -0.956900;, +-0.056600; -0.284700; -0.956900;, +-0.019100; -0.096100; -0.995200;, +0.000000; -0.098000; -0.995200;, +0.000000; -0.195100; -0.980800;, +-0.038100; -0.191300; -0.980800;, +-0.000000; -0.000000; -1.000000;, +0.000000; -0.098000; -0.995200;, +-0.019100; -0.096100; -0.995200;, +-0.000000; -0.000000; -1.000000;, +0.019100; -0.096100; -0.995200;, +0.000000; -0.098000; -0.995200;, +0.000000; -0.098000; -0.995200;, +0.019100; -0.096100; -0.995200;, +0.038100; -0.191300; -0.980800;, +0.000000; -0.195100; -0.980800;, +0.000000; -0.195100; -0.980800;, +0.038100; -0.191300; -0.980800;, +0.056600; -0.284700; -0.956900;, +0.000000; -0.290300; -0.956900;, +0.000000; -0.290300; -0.956900;, +0.056600; -0.284700; -0.956900;, +0.074700; -0.375300; -0.923900;, +0.000000; -0.382700; -0.923900;, +0.000000; -0.382700; -0.923900;, +0.074700; -0.375300; -0.923900;, +0.092000; -0.462300; -0.881900;, +0.000000; -0.471400; -0.881900;, +0.000000; -0.471400; -0.881900;, +0.092000; -0.462300; -0.881900;, +0.108400; -0.544900; -0.831500;, +0.000000; -0.555600; -0.831500;, +0.000000; -0.555600; -0.831500;, +0.108400; -0.544900; -0.831500;, +0.123800; -0.622200; -0.773000;, +0.000000; -0.634400; -0.773000;, +0.000000; -0.634400; -0.773000;, +0.123800; -0.622200; -0.773000;, +0.137900; -0.693500; -0.707100;, +0.000000; -0.707100; -0.707100;, +0.000000; -0.707100; -0.707100;, +0.137900; -0.693500; -0.707100;, +0.150800; -0.758200; -0.634400;, +0.000000; -0.773000; -0.634400;, +0.000000; -0.773000; -0.634400;, +0.150800; -0.758200; -0.634400;, +0.162200; -0.815500; -0.555600;, +0.000000; -0.831500; -0.555600;, +0.000000; -0.831500; -0.555600;, +0.162200; -0.815500; -0.555600;, +0.172100; -0.865000; -0.471400;, +0.000000; -0.881900; -0.471400;, +0.000000; -0.881900; -0.471400;, +0.172100; -0.865000; -0.471400;, +0.180200; -0.906100; -0.382700;, +0.000000; -0.923900; -0.382700;, +0.000000; -0.923900; -0.382700;, +0.180200; -0.906100; -0.382700;, +0.186700; -0.938600; -0.290300;, +0.000000; -0.956900; -0.290300;, +0.000000; -0.956900; -0.290300;, +0.186700; -0.938600; -0.290300;, +0.191300; -0.961900; -0.195100;, +0.000000; -0.980800; -0.195100;, +0.000000; -0.980800; -0.195100;, +0.191300; -0.961900; -0.195100;, +0.194200; -0.976100; -0.098000;, +0.000000; -0.995200; -0.098000;, +0.000000; -0.995200; -0.098000;, +0.194200; -0.976100; -0.098000;, +0.195100; -0.980800; -0.000000;, +0.000000; -1.000000; -0.000000;, +0.000000; -1.000000; -0.000000;, +0.195100; -0.980800; -0.000000;, +0.194200; -0.976100; 0.098000;, +0.000000; -0.995200; 0.098000;, +0.000000; -0.995200; 0.098000;, +0.194200; -0.976100; 0.098000;, +0.191300; -0.961900; 0.195100;, +0.000000; -0.980800; 0.195100;, +0.000000; -0.980800; 0.195100;, +0.191300; -0.961900; 0.195100;, +0.186700; -0.938600; 0.290300;, +0.000000; -0.956900; 0.290300;, +0.000000; -0.956900; 0.290300;, +0.186700; -0.938600; 0.290300;, +0.180200; -0.906100; 0.382700;, +0.000000; -0.923900; 0.382700;, +0.000000; -0.923900; 0.382700;, +0.180200; -0.906100; 0.382700;, +0.172100; -0.865000; 0.471400;, +0.000000; -0.881900; 0.471400;, +0.000000; -0.881900; 0.471400;, +0.172100; -0.865000; 0.471400;, +0.162200; -0.815500; 0.555600;, +0.000000; -0.831500; 0.555600;, +0.000000; -0.831500; 0.555600;, +0.162200; -0.815500; 0.555600;, +0.150800; -0.758200; 0.634400;, +0.000000; -0.773000; 0.634400;, +0.000000; -0.773000; 0.634400;, +0.150800; -0.758200; 0.634400;, +0.137900; -0.693500; 0.707100;, +0.000000; -0.707100; 0.707100;, +0.000000; -0.707100; 0.707100;, +0.137900; -0.693500; 0.707100;, +0.123800; -0.622200; 0.773000;, +0.000000; -0.634400; 0.773000;, +0.000000; -0.634400; 0.773000;, +0.123800; -0.622200; 0.773000;, +0.108400; -0.544900; 0.831500;, +0.000000; -0.555600; 0.831500;, +0.000000; -0.555600; 0.831500;, +0.108400; -0.544900; 0.831500;, +0.092000; -0.462300; 0.881900;, +0.000000; -0.471400; 0.881900;, +0.000000; -0.471400; 0.881900;, +0.092000; -0.462300; 0.881900;, +0.074700; -0.375300; 0.923900;, +0.000000; -0.382700; 0.923900;, +0.000000; -0.382700; 0.923900;, +0.074700; -0.375300; 0.923900;, +0.056600; -0.284700; 0.956900;, +0.000000; -0.290300; 0.956900;, +0.000000; -0.290300; 0.956900;, +0.056600; -0.284700; 0.956900;, +0.038100; -0.191300; 0.980800;, +0.000000; -0.195100; 0.980800;, +0.000000; -0.195100; 0.980800;, +0.038100; -0.191300; 0.980800;, +0.019100; -0.096100; 0.995200;, +0.000000; -0.098000; 0.995200;, +0.000000; -0.098000; 0.995200;, +0.019100; -0.096100; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.019100; -0.096100; 0.995200;, +0.037500; -0.090600; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.038100; -0.191300; 0.980800;, +0.074700; -0.180200; 0.980800;, +0.037500; -0.090600; 0.995200;, +0.019100; -0.096100; 0.995200;, +0.056600; -0.284700; 0.956900;, +0.111100; -0.268200; 0.956900;, +0.074700; -0.180200; 0.980800;, +0.038100; -0.191300; 0.980800;, +0.074700; -0.375300; 0.923900;, +0.146400; -0.353600; 0.923900;, +0.111100; -0.268200; 0.956900;, +0.056600; -0.284700; 0.956900;, +0.092000; -0.462300; 0.881900;, +0.180400; -0.435500; 0.881900;, +0.146400; -0.353600; 0.923900;, +0.074700; -0.375300; 0.923900;, +0.108400; -0.544900; 0.831500;, +0.212600; -0.513300; 0.831500;, +0.180400; -0.435500; 0.881900;, +0.092000; -0.462300; 0.881900;, +0.123800; -0.622200; 0.773000;, +0.242800; -0.586100; 0.773000;, +0.212600; -0.513300; 0.831500;, +0.108400; -0.544900; 0.831500;, +0.137900; -0.693500; 0.707100;, +0.270600; -0.653300; 0.707100;, +0.242800; -0.586100; 0.773000;, +0.123800; -0.622200; 0.773000;, +0.150800; -0.758200; 0.634400;, +0.295800; -0.714200; 0.634400;, +0.270600; -0.653300; 0.707100;, +0.137900; -0.693500; 0.707100;, +0.162200; -0.815500; 0.555600;, +0.318200; -0.768200; 0.555600;, +0.295800; -0.714200; 0.634400;, +0.150800; -0.758200; 0.634400;, +0.172100; -0.865000; 0.471400;, +0.337500; -0.814800; 0.471400;, +0.318200; -0.768200; 0.555600;, +0.162200; -0.815500; 0.555600;, +0.180200; -0.906100; 0.382700;, +0.353600; -0.853600; 0.382700;, +0.337500; -0.814800; 0.471400;, +0.172100; -0.865000; 0.471400;, +0.186700; -0.938600; 0.290300;, +0.366200; -0.884100; 0.290300;, +0.353600; -0.853600; 0.382700;, +0.180200; -0.906100; 0.382700;, +0.191300; -0.961900; 0.195100;, +0.375300; -0.906100; 0.195100;, +0.366200; -0.884100; 0.290300;, +0.186700; -0.938600; 0.290300;, +0.194200; -0.976100; 0.098000;, +0.380800; -0.919400; 0.098000;, +0.375300; -0.906100; 0.195100;, +0.191300; -0.961900; 0.195100;, +0.195100; -0.980800; -0.000000;, +0.382700; -0.923900; -0.000000;, +0.380800; -0.919400; 0.098000;, +0.194200; -0.976100; 0.098000;, +0.194200; -0.976100; -0.098000;, +0.380800; -0.919400; -0.098000;, +0.382700; -0.923900; -0.000000;, +0.195100; -0.980800; -0.000000;, +0.191300; -0.961900; -0.195100;, +0.375300; -0.906100; -0.195100;, +0.380800; -0.919400; -0.098000;, +0.194200; -0.976100; -0.098000;, +0.186700; -0.938600; -0.290300;, +0.366200; -0.884100; -0.290300;, +0.375300; -0.906100; -0.195100;, +0.191300; -0.961900; -0.195100;, +0.180200; -0.906100; -0.382700;, +0.353600; -0.853600; -0.382700;, +0.366200; -0.884100; -0.290300;, +0.186700; -0.938600; -0.290300;, +0.172100; -0.865000; -0.471400;, +0.337500; -0.814800; -0.471400;, +0.353600; -0.853600; -0.382700;, +0.180200; -0.906100; -0.382700;, +0.162200; -0.815500; -0.555600;, +0.318200; -0.768200; -0.555600;, +0.337500; -0.814800; -0.471400;, +0.172100; -0.865000; -0.471400;, +0.150800; -0.758200; -0.634400;, +0.295800; -0.714200; -0.634400;, +0.318200; -0.768200; -0.555600;, +0.162200; -0.815500; -0.555600;, +0.137900; -0.693500; -0.707100;, +0.270600; -0.653300; -0.707100;, +0.295800; -0.714200; -0.634400;, +0.150800; -0.758200; -0.634400;, +0.123800; -0.622200; -0.773000;, +0.242800; -0.586100; -0.773000;, +0.270600; -0.653300; -0.707100;, +0.137900; -0.693500; -0.707100;, +0.108400; -0.544900; -0.831500;, +0.212600; -0.513300; -0.831500;, +0.242800; -0.586100; -0.773000;, +0.123800; -0.622200; -0.773000;, +0.092000; -0.462300; -0.881900;, +0.180400; -0.435500; -0.881900;, +0.212600; -0.513300; -0.831500;, +0.108400; -0.544900; -0.831500;, +0.074700; -0.375300; -0.923900;, +0.146400; -0.353600; -0.923900;, +0.180400; -0.435500; -0.881900;, +0.092000; -0.462300; -0.881900;, +0.056600; -0.284700; -0.956900;, +0.111100; -0.268200; -0.956900;, +0.146400; -0.353600; -0.923900;, +0.074700; -0.375300; -0.923900;, +0.038100; -0.191300; -0.980800;, +0.074700; -0.180200; -0.980800;, +0.111100; -0.268200; -0.956900;, +0.056600; -0.284700; -0.956900;, +0.019100; -0.096100; -0.995200;, +0.037500; -0.090600; -0.995200;, +0.074700; -0.180200; -0.980800;, +0.038100; -0.191300; -0.980800;, +-0.000000; -0.000000; -1.000000;, +0.037500; -0.090600; -0.995200;, +0.019100; -0.096100; -0.995200;, +-0.000000; -0.000000; -1.000000;, +0.054500; -0.081500; -0.995200;, +0.037500; -0.090600; -0.995200;, +0.037500; -0.090600; -0.995200;, +0.054500; -0.081500; -0.995200;, +0.108400; -0.162200; -0.980800;, +0.074700; -0.180200; -0.980800;, +0.074700; -0.180200; -0.980800;, +0.108400; -0.162200; -0.980800;, +0.161300; -0.241400; -0.956900;, +0.111100; -0.268200; -0.956900;, +0.111100; -0.268200; -0.956900;, +0.161300; -0.241400; -0.956900;, +0.212600; -0.318200; -0.923900;, +0.146400; -0.353600; -0.923900;, +0.146400; -0.353600; -0.923900;, +0.212600; -0.318200; -0.923900;, +0.261900; -0.392000; -0.881900;, +0.180400; -0.435500; -0.881900;, +0.180400; -0.435500; -0.881900;, +0.261900; -0.392000; -0.881900;, +0.308700; -0.461900; -0.831500;, +0.212600; -0.513300; -0.831500;, +0.212600; -0.513300; -0.831500;, +0.308700; -0.461900; -0.831500;, +0.352400; -0.527500; -0.773000;, +0.242800; -0.586100; -0.773000;, +0.242800; -0.586100; -0.773000;, +0.352400; -0.527500; -0.773000;, +0.392800; -0.587900; -0.707100;, +0.270600; -0.653300; -0.707100;, +0.270600; -0.653300; -0.707100;, +0.392800; -0.587900; -0.707100;, +0.429500; -0.642700; -0.634400;, +0.295800; -0.714200; -0.634400;, +0.295800; -0.714200; -0.634400;, +0.429500; -0.642700; -0.634400;, +0.461900; -0.691300; -0.555600;, +0.318200; -0.768200; -0.555600;, +0.318200; -0.768200; -0.555600;, +0.461900; -0.691300; -0.555600;, +0.490000; -0.733300; -0.471400;, +0.337500; -0.814800; -0.471400;, +0.337500; -0.814800; -0.471400;, +0.490000; -0.733300; -0.471400;, +0.513300; -0.768200; -0.382700;, +0.353600; -0.853600; -0.382700;, +0.353600; -0.853600; -0.382700;, +0.513300; -0.768200; -0.382700;, +0.531600; -0.795700; -0.290300;, +0.366200; -0.884100; -0.290300;, +0.366200; -0.884100; -0.290300;, +0.531600; -0.795700; -0.290300;, +0.544900; -0.815500; -0.195100;, +0.375300; -0.906100; -0.195100;, +0.375300; -0.906100; -0.195100;, +0.544900; -0.815500; -0.195100;, +0.552900; -0.827500; -0.098000;, +0.380800; -0.919400; -0.098000;, +0.380800; -0.919400; -0.098000;, +0.552900; -0.827500; -0.098000;, +0.555600; -0.831500; -0.000000;, +0.382700; -0.923900; -0.000000;, +0.382700; -0.923900; -0.000000;, +0.555600; -0.831500; -0.000000;, +0.552900; -0.827500; 0.098000;, +0.380800; -0.919400; 0.098000;, +0.380800; -0.919400; 0.098000;, +0.552900; -0.827500; 0.098000;, +0.544900; -0.815500; 0.195100;, +0.375300; -0.906100; 0.195100;, +0.375300; -0.906100; 0.195100;, +0.544900; -0.815500; 0.195100;, +0.531600; -0.795700; 0.290300;, +0.366200; -0.884100; 0.290300;, +0.366200; -0.884100; 0.290300;, +0.531600; -0.795700; 0.290300;, +0.513300; -0.768200; 0.382700;, +0.353600; -0.853600; 0.382700;, +0.353600; -0.853600; 0.382700;, +0.513300; -0.768200; 0.382700;, +0.490000; -0.733300; 0.471400;, +0.337500; -0.814800; 0.471400;, +0.337500; -0.814800; 0.471400;, +0.490000; -0.733300; 0.471400;, +0.461900; -0.691300; 0.555600;, +0.318200; -0.768200; 0.555600;, +0.318200; -0.768200; 0.555600;, +0.461900; -0.691300; 0.555600;, +0.429500; -0.642700; 0.634400;, +0.295800; -0.714200; 0.634400;, +0.295800; -0.714200; 0.634400;, +0.429500; -0.642700; 0.634400;, +0.392800; -0.587900; 0.707100;, +0.270600; -0.653300; 0.707100;, +0.270600; -0.653300; 0.707100;, +0.392800; -0.587900; 0.707100;, +0.352400; -0.527500; 0.773000;, +0.242800; -0.586100; 0.773000;, +0.242800; -0.586100; 0.773000;, +0.352400; -0.527500; 0.773000;, +0.308700; -0.461900; 0.831500;, +0.212600; -0.513300; 0.831500;, +0.212600; -0.513300; 0.831500;, +0.308700; -0.461900; 0.831500;, +0.261900; -0.392000; 0.881900;, +0.180400; -0.435500; 0.881900;, +0.180400; -0.435500; 0.881900;, +0.261900; -0.392000; 0.881900;, +0.212600; -0.318200; 0.923900;, +0.146400; -0.353600; 0.923900;, +0.146400; -0.353600; 0.923900;, +0.212600; -0.318200; 0.923900;, +0.161300; -0.241400; 0.956900;, +0.111100; -0.268200; 0.956900;, +0.111100; -0.268200; 0.956900;, +0.161300; -0.241400; 0.956900;, +0.108400; -0.162200; 0.980800;, +0.074700; -0.180200; 0.980800;, +0.074700; -0.180200; 0.980800;, +0.108400; -0.162200; 0.980800;, +0.054500; -0.081500; 0.995200;, +0.037500; -0.090600; 0.995200;, +0.037500; -0.090600; 0.995200;, +0.054500; -0.081500; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.054500; -0.081500; 0.995200;, +0.069300; -0.069300; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.108400; -0.162200; 0.980800;, +0.137900; -0.137900; 0.980800;, +0.069300; -0.069300; 0.995200;, +0.054500; -0.081500; 0.995200;, +0.161300; -0.241400; 0.956900;, +0.205300; -0.205300; 0.956900;, +0.137900; -0.137900; 0.980800;, +0.108400; -0.162200; 0.980800;, +0.212600; -0.318200; 0.923900;, +0.270600; -0.270600; 0.923900;, +0.205300; -0.205300; 0.956900;, +0.161300; -0.241400; 0.956900;, +0.261900; -0.392000; 0.881900;, +0.333300; -0.333300; 0.881900;, +0.270600; -0.270600; 0.923900;, +0.212600; -0.318200; 0.923900;, +0.308700; -0.461900; 0.831500;, +0.392800; -0.392800; 0.831500;, +0.333300; -0.333300; 0.881900;, +0.261900; -0.392000; 0.881900;, +0.352400; -0.527500; 0.773000;, +0.448600; -0.448600; 0.773000;, +0.392800; -0.392800; 0.831500;, +0.308700; -0.461900; 0.831500;, +0.392800; -0.587900; 0.707100;, +0.500000; -0.500000; 0.707100;, +0.448600; -0.448600; 0.773000;, +0.352400; -0.527500; 0.773000;, +0.429500; -0.642700; 0.634400;, +0.546600; -0.546600; 0.634400;, +0.500000; -0.500000; 0.707100;, +0.392800; -0.587900; 0.707100;, +0.461900; -0.691300; 0.555600;, +0.587900; -0.587900; 0.555600;, +0.546600; -0.546600; 0.634400;, +0.429500; -0.642700; 0.634400;, +0.490000; -0.733300; 0.471400;, +0.623600; -0.623600; 0.471400;, +0.587900; -0.587900; 0.555600;, +0.461900; -0.691300; 0.555600;, +0.513300; -0.768200; 0.382700;, +0.653300; -0.653300; 0.382700;, +0.623600; -0.623600; 0.471400;, +0.490000; -0.733300; 0.471400;, +0.531600; -0.795700; 0.290300;, +0.676700; -0.676700; 0.290300;, +0.653300; -0.653300; 0.382700;, +0.513300; -0.768200; 0.382700;, +0.544900; -0.815500; 0.195100;, +0.693500; -0.693500; 0.195100;, +0.676700; -0.676700; 0.290300;, +0.531600; -0.795700; 0.290300;, +0.552900; -0.827500; 0.098000;, +0.703700; -0.703700; 0.098000;, +0.693500; -0.693500; 0.195100;, +0.544900; -0.815500; 0.195100;, +0.555600; -0.831500; -0.000000;, +0.707100; -0.707100; -0.000000;, +0.703700; -0.703700; 0.098000;, +0.552900; -0.827500; 0.098000;, +0.552900; -0.827500; -0.098000;, +0.703700; -0.703700; -0.098000;, +0.707100; -0.707100; -0.000000;, +0.555600; -0.831500; -0.000000;, +0.544900; -0.815500; -0.195100;, +0.693500; -0.693500; -0.195100;, +0.703700; -0.703700; -0.098000;, +0.552900; -0.827500; -0.098000;, +0.531600; -0.795700; -0.290300;, +0.676700; -0.676700; -0.290300;, +0.693500; -0.693500; -0.195100;, +0.544900; -0.815500; -0.195100;, +0.513300; -0.768200; -0.382700;, +0.653300; -0.653300; -0.382700;, +0.676700; -0.676700; -0.290300;, +0.531600; -0.795700; -0.290300;, +0.490000; -0.733300; -0.471400;, +0.623600; -0.623600; -0.471400;, +0.653300; -0.653300; -0.382700;, +0.513300; -0.768200; -0.382700;, +0.461900; -0.691300; -0.555600;, +0.587900; -0.587900; -0.555600;, +0.623600; -0.623600; -0.471400;, +0.490000; -0.733300; -0.471400;, +0.429500; -0.642700; -0.634400;, +0.546600; -0.546600; -0.634400;, +0.587900; -0.587900; -0.555600;, +0.461900; -0.691300; -0.555600;, +0.392800; -0.587900; -0.707100;, +0.500000; -0.500000; -0.707100;, +0.546600; -0.546600; -0.634400;, +0.429500; -0.642700; -0.634400;, +0.352400; -0.527500; -0.773000;, +0.448600; -0.448600; -0.773000;, +0.500000; -0.500000; -0.707100;, +0.392800; -0.587900; -0.707100;, +0.308700; -0.461900; -0.831500;, +0.392800; -0.392800; -0.831500;, +0.448600; -0.448600; -0.773000;, +0.352400; -0.527500; -0.773000;, +0.261900; -0.392000; -0.881900;, +0.333300; -0.333300; -0.881900;, +0.392800; -0.392800; -0.831500;, +0.308700; -0.461900; -0.831500;, +0.212600; -0.318200; -0.923900;, +0.270600; -0.270600; -0.923900;, +0.333300; -0.333300; -0.881900;, +0.261900; -0.392000; -0.881900;, +0.161300; -0.241400; -0.956900;, +0.205300; -0.205300; -0.956900;, +0.270600; -0.270600; -0.923900;, +0.212600; -0.318200; -0.923900;, +0.108400; -0.162200; -0.980800;, +0.137900; -0.137900; -0.980800;, +0.205300; -0.205300; -0.956900;, +0.161300; -0.241400; -0.956900;, +0.054500; -0.081500; -0.995200;, +0.069300; -0.069300; -0.995200;, +0.137900; -0.137900; -0.980800;, +0.108400; -0.162200; -0.980800;, +-0.000000; -0.000000; -1.000000;, +0.069300; -0.069300; -0.995200;, +0.054500; -0.081500; -0.995200;, +-0.000000; -0.000000; -1.000000;, +0.081500; -0.054500; -0.995200;, +0.069300; -0.069300; -0.995200;, +0.069300; -0.069300; -0.995200;, +0.081500; -0.054500; -0.995200;, +0.162200; -0.108400; -0.980800;, +0.137900; -0.137900; -0.980800;, +0.137900; -0.137900; -0.980800;, +0.162200; -0.108400; -0.980800;, +0.241400; -0.161300; -0.956900;, +0.205300; -0.205300; -0.956900;, +0.205300; -0.205300; -0.956900;, +0.241400; -0.161300; -0.956900;, +0.318200; -0.212600; -0.923900;, +0.270600; -0.270600; -0.923900;, +0.270600; -0.270600; -0.923900;, +0.318200; -0.212600; -0.923900;, +0.392000; -0.261900; -0.881900;, +0.333300; -0.333300; -0.881900;, +0.333300; -0.333300; -0.881900;, +0.392000; -0.261900; -0.881900;, +0.461900; -0.308700; -0.831500;, +0.392800; -0.392800; -0.831500;, +0.392800; -0.392800; -0.831500;, +0.461900; -0.308700; -0.831500;, +0.527500; -0.352400; -0.773000;, +0.448600; -0.448600; -0.773000;, +0.448600; -0.448600; -0.773000;, +0.527500; -0.352400; -0.773000;, +0.587900; -0.392800; -0.707100;, +0.500000; -0.500000; -0.707100;, +0.500000; -0.500000; -0.707100;, +0.587900; -0.392800; -0.707100;, +0.642700; -0.429500; -0.634400;, +0.546600; -0.546600; -0.634400;, +0.546600; -0.546600; -0.634400;, +0.642700; -0.429500; -0.634400;, +0.691300; -0.461900; -0.555600;, +0.587900; -0.587900; -0.555600;, +0.587900; -0.587900; -0.555600;, +0.691300; -0.461900; -0.555600;, +0.733300; -0.490000; -0.471400;, +0.623600; -0.623600; -0.471400;, +0.623600; -0.623600; -0.471400;, +0.733300; -0.490000; -0.471400;, +0.768200; -0.513300; -0.382700;, +0.653300; -0.653300; -0.382700;, +0.653300; -0.653300; -0.382700;, +0.768200; -0.513300; -0.382700;, +0.795700; -0.531600; -0.290300;, +0.676700; -0.676700; -0.290300;, +0.676700; -0.676700; -0.290300;, +0.795700; -0.531600; -0.290300;, +0.815500; -0.544900; -0.195100;, +0.693500; -0.693500; -0.195100;, +0.693500; -0.693500; -0.195100;, +0.815500; -0.544900; -0.195100;, +0.827500; -0.552900; -0.098000;, +0.703700; -0.703700; -0.098000;, +0.703700; -0.703700; -0.098000;, +0.827500; -0.552900; -0.098000;, +0.831500; -0.555600; -0.000000;, +0.707100; -0.707100; -0.000000;, +0.707100; -0.707100; -0.000000;, +0.831500; -0.555600; -0.000000;, +0.827500; -0.552900; 0.098000;, +0.703700; -0.703700; 0.098000;, +0.703700; -0.703700; 0.098000;, +0.827500; -0.552900; 0.098000;, +0.815500; -0.544900; 0.195100;, +0.693500; -0.693500; 0.195100;, +0.693500; -0.693500; 0.195100;, +0.815500; -0.544900; 0.195100;, +0.795700; -0.531600; 0.290300;, +0.676700; -0.676700; 0.290300;, +0.676700; -0.676700; 0.290300;, +0.795700; -0.531600; 0.290300;, +0.768200; -0.513300; 0.382700;, +0.653300; -0.653300; 0.382700;, +0.653300; -0.653300; 0.382700;, +0.768200; -0.513300; 0.382700;, +0.733300; -0.490000; 0.471400;, +0.623600; -0.623600; 0.471400;, +0.623600; -0.623600; 0.471400;, +0.733300; -0.490000; 0.471400;, +0.691300; -0.461900; 0.555600;, +0.587900; -0.587900; 0.555600;, +0.587900; -0.587900; 0.555600;, +0.691300; -0.461900; 0.555600;, +0.642700; -0.429500; 0.634400;, +0.546600; -0.546600; 0.634400;, +0.546600; -0.546600; 0.634400;, +0.642700; -0.429500; 0.634400;, +0.587900; -0.392800; 0.707100;, +0.500000; -0.500000; 0.707100;, +0.500000; -0.500000; 0.707100;, +0.587900; -0.392800; 0.707100;, +0.527500; -0.352400; 0.773000;, +0.448600; -0.448600; 0.773000;, +0.448600; -0.448600; 0.773000;, +0.527500; -0.352400; 0.773000;, +0.461900; -0.308700; 0.831500;, +0.392800; -0.392800; 0.831500;, +0.392800; -0.392800; 0.831500;, +0.461900; -0.308700; 0.831500;, +0.392000; -0.261900; 0.881900;, +0.333300; -0.333300; 0.881900;, +0.333300; -0.333300; 0.881900;, +0.392000; -0.261900; 0.881900;, +0.318200; -0.212600; 0.923900;, +0.270600; -0.270600; 0.923900;, +0.270600; -0.270600; 0.923900;, +0.318200; -0.212600; 0.923900;, +0.241400; -0.161300; 0.956900;, +0.205300; -0.205300; 0.956900;, +0.205300; -0.205300; 0.956900;, +0.241400; -0.161300; 0.956900;, +0.162200; -0.108400; 0.980800;, +0.137900; -0.137900; 0.980800;, +0.137900; -0.137900; 0.980800;, +0.162200; -0.108400; 0.980800;, +0.081500; -0.054500; 0.995200;, +0.069300; -0.069300; 0.995200;, +0.069300; -0.069300; 0.995200;, +0.081500; -0.054500; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.081500; -0.054500; 0.995200;, +0.090600; -0.037500; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.162200; -0.108400; 0.980800;, +0.180200; -0.074700; 0.980800;, +0.090600; -0.037500; 0.995200;, +0.081500; -0.054500; 0.995200;, +0.241400; -0.161300; 0.956900;, +0.268200; -0.111100; 0.956900;, +0.180200; -0.074700; 0.980800;, +0.162200; -0.108400; 0.980800;, +0.318200; -0.212600; 0.923900;, +0.353600; -0.146400; 0.923900;, +0.268200; -0.111100; 0.956900;, +0.241400; -0.161300; 0.956900;, +0.392000; -0.261900; 0.881900;, +0.435500; -0.180400; 0.881900;, +0.353600; -0.146400; 0.923900;, +0.318200; -0.212600; 0.923900;, +0.461900; -0.308700; 0.831500;, +0.513300; -0.212600; 0.831500;, +0.435500; -0.180400; 0.881900;, +0.392000; -0.261900; 0.881900;, +0.527500; -0.352400; 0.773000;, +0.586100; -0.242800; 0.773000;, +0.513300; -0.212600; 0.831500;, +0.461900; -0.308700; 0.831500;, +0.587900; -0.392800; 0.707100;, +0.653300; -0.270600; 0.707100;, +0.586100; -0.242800; 0.773000;, +0.527500; -0.352400; 0.773000;, +0.642700; -0.429500; 0.634400;, +0.714200; -0.295800; 0.634400;, +0.653300; -0.270600; 0.707100;, +0.587900; -0.392800; 0.707100;, +0.691300; -0.461900; 0.555600;, +0.768200; -0.318200; 0.555600;, +0.714200; -0.295800; 0.634400;, +0.642700; -0.429500; 0.634400;, +0.733300; -0.490000; 0.471400;, +0.814800; -0.337500; 0.471400;, +0.768200; -0.318200; 0.555600;, +0.691300; -0.461900; 0.555600;, +0.768200; -0.513300; 0.382700;, +0.853600; -0.353600; 0.382700;, +0.814800; -0.337500; 0.471400;, +0.733300; -0.490000; 0.471400;, +0.795700; -0.531600; 0.290300;, +0.884100; -0.366200; 0.290300;, +0.853600; -0.353600; 0.382700;, +0.768200; -0.513300; 0.382700;, +0.815500; -0.544900; 0.195100;, +0.906100; -0.375300; 0.195100;, +0.884100; -0.366200; 0.290300;, +0.795700; -0.531600; 0.290300;, +0.827500; -0.552900; 0.098000;, +0.919400; -0.380800; 0.098000;, +0.906100; -0.375300; 0.195100;, +0.815500; -0.544900; 0.195100;, +0.831500; -0.555600; -0.000000;, +0.923900; -0.382700; -0.000000;, +0.919400; -0.380800; 0.098000;, +0.827500; -0.552900; 0.098000;, +0.827500; -0.552900; -0.098000;, +0.919400; -0.380800; -0.098000;, +0.923900; -0.382700; -0.000000;, +0.831500; -0.555600; -0.000000;, +0.815500; -0.544900; -0.195100;, +0.906100; -0.375300; -0.195100;, +0.919400; -0.380800; -0.098000;, +0.827500; -0.552900; -0.098000;, +0.795700; -0.531600; -0.290300;, +0.884100; -0.366200; -0.290300;, +0.906100; -0.375300; -0.195100;, +0.815500; -0.544900; -0.195100;, +0.768200; -0.513300; -0.382700;, +0.853600; -0.353600; -0.382700;, +0.884100; -0.366200; -0.290300;, +0.795700; -0.531600; -0.290300;, +0.733300; -0.490000; -0.471400;, +0.814800; -0.337500; -0.471400;, +0.853600; -0.353600; -0.382700;, +0.768200; -0.513300; -0.382700;, +0.691300; -0.461900; -0.555600;, +0.768200; -0.318200; -0.555600;, +0.814800; -0.337500; -0.471400;, +0.733300; -0.490000; -0.471400;, +0.642700; -0.429500; -0.634400;, +0.714200; -0.295800; -0.634400;, +0.768200; -0.318200; -0.555600;, +0.691300; -0.461900; -0.555600;, +0.587900; -0.392800; -0.707100;, +0.653300; -0.270600; -0.707100;, +0.714200; -0.295800; -0.634400;, +0.642700; -0.429500; -0.634400;, +0.527500; -0.352400; -0.773000;, +0.586100; -0.242800; -0.773000;, +0.653300; -0.270600; -0.707100;, +0.587900; -0.392800; -0.707100;, +0.461900; -0.308700; -0.831500;, +0.513300; -0.212600; -0.831500;, +0.586100; -0.242800; -0.773000;, +0.527500; -0.352400; -0.773000;, +0.392000; -0.261900; -0.881900;, +0.435500; -0.180400; -0.881900;, +0.513300; -0.212600; -0.831500;, +0.461900; -0.308700; -0.831500;, +0.318200; -0.212600; -0.923900;, +0.353600; -0.146400; -0.923900;, +0.435500; -0.180400; -0.881900;, +0.392000; -0.261900; -0.881900;, +0.241400; -0.161300; -0.956900;, +0.268200; -0.111100; -0.956900;, +0.353600; -0.146400; -0.923900;, +0.318200; -0.212600; -0.923900;, +0.162200; -0.108400; -0.980800;, +0.180200; -0.074700; -0.980800;, +0.268200; -0.111100; -0.956900;, +0.241400; -0.161300; -0.956900;, +0.081500; -0.054500; -0.995200;, +0.090600; -0.037500; -0.995200;, +0.180200; -0.074700; -0.980800;, +0.162200; -0.108400; -0.980800;, +-0.000000; -0.000000; -1.000000;, +0.090600; -0.037500; -0.995200;, +0.081500; -0.054500; -0.995200;, +-0.000000; -0.000000; -1.000000;, +0.096100; -0.019100; -0.995200;, +0.090600; -0.037500; -0.995200;, +0.090600; -0.037500; -0.995200;, +0.096100; -0.019100; -0.995200;, +0.191300; -0.038100; -0.980800;, +0.180200; -0.074700; -0.980800;, +0.180200; -0.074700; -0.980800;, +0.191300; -0.038100; -0.980800;, +0.284700; -0.056600; -0.956900;, +0.268200; -0.111100; -0.956900;, +0.268200; -0.111100; -0.956900;, +0.284700; -0.056600; -0.956900;, +0.375300; -0.074700; -0.923900;, +0.353600; -0.146400; -0.923900;, +0.353600; -0.146400; -0.923900;, +0.375300; -0.074700; -0.923900;, +0.462300; -0.092000; -0.881900;, +0.435500; -0.180400; -0.881900;, +0.435500; -0.180400; -0.881900;, +0.462300; -0.092000; -0.881900;, +0.544900; -0.108400; -0.831500;, +0.513300; -0.212600; -0.831500;, +0.513300; -0.212600; -0.831500;, +0.544900; -0.108400; -0.831500;, +0.622200; -0.123800; -0.773000;, +0.586100; -0.242800; -0.773000;, +0.586100; -0.242800; -0.773000;, +0.622200; -0.123800; -0.773000;, +0.693500; -0.137900; -0.707100;, +0.653300; -0.270600; -0.707100;, +0.653300; -0.270600; -0.707100;, +0.693500; -0.137900; -0.707100;, +0.758200; -0.150800; -0.634400;, +0.714200; -0.295800; -0.634400;, +0.714200; -0.295800; -0.634400;, +0.758200; -0.150800; -0.634400;, +0.815500; -0.162200; -0.555600;, +0.768200; -0.318200; -0.555600;, +0.768200; -0.318200; -0.555600;, +0.815500; -0.162200; -0.555600;, +0.865000; -0.172100; -0.471400;, +0.814800; -0.337500; -0.471400;, +0.814800; -0.337500; -0.471400;, +0.865000; -0.172100; -0.471400;, +0.906100; -0.180200; -0.382700;, +0.853600; -0.353600; -0.382700;, +0.853600; -0.353600; -0.382700;, +0.906100; -0.180200; -0.382700;, +0.938600; -0.186700; -0.290300;, +0.884100; -0.366200; -0.290300;, +0.884100; -0.366200; -0.290300;, +0.938600; -0.186700; -0.290300;, +0.961900; -0.191300; -0.195100;, +0.906100; -0.375300; -0.195100;, +0.906100; -0.375300; -0.195100;, +0.961900; -0.191300; -0.195100;, +0.976100; -0.194200; -0.098000;, +0.919400; -0.380800; -0.098000;, +0.919400; -0.380800; -0.098000;, +0.976100; -0.194200; -0.098000;, +0.980800; -0.195100; -0.000000;, +0.923900; -0.382700; -0.000000;, +0.923900; -0.382700; -0.000000;, +0.980800; -0.195100; -0.000000;, +0.976100; -0.194200; 0.098000;, +0.919400; -0.380800; 0.098000;, +0.919400; -0.380800; 0.098000;, +0.976100; -0.194200; 0.098000;, +0.961900; -0.191300; 0.195100;, +0.906100; -0.375300; 0.195100;, +0.906100; -0.375300; 0.195100;, +0.961900; -0.191300; 0.195100;, +0.938600; -0.186700; 0.290300;, +0.884100; -0.366200; 0.290300;, +0.884100; -0.366200; 0.290300;, +0.938600; -0.186700; 0.290300;, +0.906100; -0.180200; 0.382700;, +0.853600; -0.353600; 0.382700;, +0.853600; -0.353600; 0.382700;, +0.906100; -0.180200; 0.382700;, +0.865000; -0.172100; 0.471400;, +0.814800; -0.337500; 0.471400;, +0.814800; -0.337500; 0.471400;, +0.865000; -0.172100; 0.471400;, +0.815500; -0.162200; 0.555600;, +0.768200; -0.318200; 0.555600;, +0.768200; -0.318200; 0.555600;, +0.815500; -0.162200; 0.555600;, +0.758200; -0.150800; 0.634400;, +0.714200; -0.295800; 0.634400;, +0.714200; -0.295800; 0.634400;, +0.758200; -0.150800; 0.634400;, +0.693500; -0.137900; 0.707100;, +0.653300; -0.270600; 0.707100;, +0.653300; -0.270600; 0.707100;, +0.693500; -0.137900; 0.707100;, +0.622200; -0.123800; 0.773000;, +0.586100; -0.242800; 0.773000;, +0.586100; -0.242800; 0.773000;, +0.622200; -0.123800; 0.773000;, +0.544900; -0.108400; 0.831500;, +0.513300; -0.212600; 0.831500;, +0.513300; -0.212600; 0.831500;, +0.544900; -0.108400; 0.831500;, +0.462300; -0.092000; 0.881900;, +0.435500; -0.180400; 0.881900;, +0.435500; -0.180400; 0.881900;, +0.462300; -0.092000; 0.881900;, +0.375300; -0.074700; 0.923900;, +0.353600; -0.146400; 0.923900;, +0.353600; -0.146400; 0.923900;, +0.375300; -0.074700; 0.923900;, +0.284700; -0.056600; 0.956900;, +0.268200; -0.111100; 0.956900;, +0.268200; -0.111100; 0.956900;, +0.284700; -0.056600; 0.956900;, +0.191300; -0.038100; 0.980800;, +0.180200; -0.074700; 0.980800;, +0.180200; -0.074700; 0.980800;, +0.191300; -0.038100; 0.980800;, +0.096100; -0.019100; 0.995200;, +0.090600; -0.037500; 0.995200;, +0.090600; -0.037500; 0.995200;, +0.096100; -0.019100; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.096100; -0.019100; 0.995200;, +0.098000; 0.000000; 0.995200;, +0.000000; 0.000000; 1.000000;, +0.191300; -0.038100; 0.980800;, +0.195100; 0.000000; 0.980800;, +0.098000; 0.000000; 0.995200;, +0.096100; -0.019100; 0.995200;, +0.284700; -0.056600; 0.956900;, +0.290300; 0.000000; 0.956900;, +0.195100; 0.000000; 0.980800;, +0.191300; -0.038100; 0.980800;, +0.375300; -0.074700; 0.923900;, +0.382700; 0.000000; 0.923900;, +0.290300; 0.000000; 0.956900;, +0.284700; -0.056600; 0.956900;, +0.462300; -0.092000; 0.881900;, +0.471400; 0.000000; 0.881900;, +0.382700; 0.000000; 0.923900;, +0.375300; -0.074700; 0.923900;, +0.544900; -0.108400; 0.831500;, +0.555600; 0.000000; 0.831500;, +0.471400; 0.000000; 0.881900;, +0.462300; -0.092000; 0.881900;, +0.622200; -0.123800; 0.773000;, +0.634400; 0.000000; 0.773000;, +0.555600; 0.000000; 0.831500;, +0.544900; -0.108400; 0.831500;, +0.693500; -0.137900; 0.707100;, +0.707100; 0.000000; 0.707100;, +0.634400; 0.000000; 0.773000;, +0.622200; -0.123800; 0.773000;, +0.758200; -0.150800; 0.634400;, +0.773000; 0.000000; 0.634400;, +0.707100; 0.000000; 0.707100;, +0.693500; -0.137900; 0.707100;, +0.815500; -0.162200; 0.555600;, +0.831500; 0.000000; 0.555600;, +0.773000; 0.000000; 0.634400;, +0.758200; -0.150800; 0.634400;, +0.865000; -0.172100; 0.471400;, +0.881900; 0.000000; 0.471400;, +0.831500; 0.000000; 0.555600;, +0.815500; -0.162200; 0.555600;, +0.906100; -0.180200; 0.382700;, +0.923900; 0.000000; 0.382700;, +0.881900; 0.000000; 0.471400;, +0.865000; -0.172100; 0.471400;, +0.938600; -0.186700; 0.290300;, +0.956900; 0.000000; 0.290300;, +0.923900; 0.000000; 0.382700;, +0.906100; -0.180200; 0.382700;, +0.961900; -0.191300; 0.195100;, +0.980800; 0.000000; 0.195100;, +0.956900; 0.000000; 0.290300;, +0.938600; -0.186700; 0.290300;, +0.976100; -0.194200; 0.098000;, +0.995200; 0.000000; 0.098000;, +0.980800; 0.000000; 0.195100;, +0.961900; -0.191300; 0.195100;, +0.980800; -0.195100; -0.000000;, +1.000000; 0.000000; -0.000000;, +0.995200; 0.000000; 0.098000;, +0.976100; -0.194200; 0.098000;, +0.976100; -0.194200; -0.098000;, +0.995200; 0.000000; -0.098000;, +1.000000; 0.000000; -0.000000;, +0.980800; -0.195100; -0.000000;, +0.961900; -0.191300; -0.195100;, +0.980800; 0.000000; -0.195100;, +0.995200; 0.000000; -0.098000;, +0.976100; -0.194200; -0.098000;, +0.938600; -0.186700; -0.290300;, +0.956900; 0.000000; -0.290300;, +0.980800; 0.000000; -0.195100;, +0.961900; -0.191300; -0.195100;, +0.906100; -0.180200; -0.382700;, +0.923900; 0.000000; -0.382700;, +0.956900; 0.000000; -0.290300;, +0.938600; -0.186700; -0.290300;, +0.865000; -0.172100; -0.471400;, +0.881900; 0.000000; -0.471400;, +0.923900; 0.000000; -0.382700;, +0.906100; -0.180200; -0.382700;, +0.815500; -0.162200; -0.555600;, +0.831500; 0.000000; -0.555600;, +0.881900; 0.000000; -0.471400;, +0.865000; -0.172100; -0.471400;, +0.758200; -0.150800; -0.634400;, +0.773000; 0.000000; -0.634400;, +0.831500; 0.000000; -0.555600;, +0.815500; -0.162200; -0.555600;, +0.693500; -0.137900; -0.707100;, +0.707100; 0.000000; -0.707100;, +0.773000; 0.000000; -0.634400;, +0.758200; -0.150800; -0.634400;, +0.622200; -0.123800; -0.773000;, +0.634400; 0.000000; -0.773000;, +0.707100; 0.000000; -0.707100;, +0.693500; -0.137900; -0.707100;, +0.544900; -0.108400; -0.831500;, +0.555600; 0.000000; -0.831500;, +0.634400; 0.000000; -0.773000;, +0.622200; -0.123800; -0.773000;, +0.462300; -0.092000; -0.881900;, +0.471400; 0.000000; -0.881900;, +0.555600; 0.000000; -0.831500;, +0.544900; -0.108400; -0.831500;, +0.375300; -0.074700; -0.923900;, +0.382700; 0.000000; -0.923900;, +0.471400; 0.000000; -0.881900;, +0.462300; -0.092000; -0.881900;, +0.284700; -0.056600; -0.956900;, +0.290300; 0.000000; -0.956900;, +0.382700; 0.000000; -0.923900;, +0.375300; -0.074700; -0.923900;, +0.191300; -0.038100; -0.980800;, +0.195100; 0.000000; -0.980800;, +0.290300; 0.000000; -0.956900;, +0.284700; -0.056600; -0.956900;, +0.096100; -0.019100; -0.995200;, +0.098000; 0.000000; -0.995200;, +0.195100; 0.000000; -0.980800;, +0.191300; -0.038100; -0.980800;, +-0.000000; -0.000000; -1.000000;, +0.098000; 0.000000; -0.995200;, +0.096100; -0.019100; -0.995200;; +1024; +3; 0, 1, 2;, +4; 3, 4, 5, 6;, +4; 7, 8, 9, 10;, +4; 11, 12, 13, 14;, +4; 15, 16, 17, 18;, +4; 19, 20, 21, 22;, +4; 23, 24, 25, 26;, +4; 27, 28, 29, 30;, +4; 31, 32, 33, 34;, +4; 35, 36, 37, 38;, +4; 39, 40, 41, 42;, +4; 43, 44, 45, 46;, +4; 47, 48, 49, 50;, +4; 51, 52, 53, 54;, +4; 55, 56, 57, 58;, +4; 59, 60, 61, 62;, +4; 63, 64, 65, 66;, +4; 67, 68, 69, 70;, +4; 71, 72, 73, 74;, +4; 75, 76, 77, 78;, +4; 79, 80, 81, 82;, +4; 83, 84, 85, 86;, +4; 87, 88, 89, 90;, +4; 91, 92, 93, 94;, +4; 95, 96, 97, 98;, +4; 99, 100, 101, 102;, +4; 103, 104, 105, 106;, +4; 107, 108, 109, 110;, +4; 111, 112, 113, 114;, +4; 115, 116, 117, 118;, +4; 119, 120, 121, 122;, +3; 123, 124, 125;, +3; 126, 127, 128;, +4; 129, 130, 131, 132;, +4; 133, 134, 135, 136;, +4; 137, 138, 139, 140;, +4; 141, 142, 143, 144;, +4; 145, 146, 147, 148;, +4; 149, 150, 151, 152;, +4; 153, 154, 155, 156;, +4; 157, 158, 159, 160;, +4; 161, 162, 163, 164;, +4; 165, 166, 167, 168;, +4; 169, 170, 171, 172;, +4; 173, 174, 175, 176;, +4; 177, 178, 179, 180;, +4; 181, 182, 183, 184;, +4; 185, 186, 187, 188;, +4; 189, 190, 191, 192;, +4; 193, 194, 195, 196;, +4; 197, 198, 199, 200;, +4; 201, 202, 203, 204;, +4; 205, 206, 207, 208;, +4; 209, 210, 211, 212;, +4; 213, 214, 215, 216;, +4; 217, 218, 219, 220;, +4; 221, 222, 223, 224;, +4; 225, 226, 227, 228;, +4; 229, 230, 231, 232;, +4; 233, 234, 235, 236;, +4; 237, 238, 239, 240;, +4; 241, 242, 243, 244;, +4; 245, 246, 247, 248;, +3; 249, 250, 251;, +3; 252, 253, 254;, +4; 255, 256, 257, 258;, +4; 259, 260, 261, 262;, +4; 263, 264, 265, 266;, +4; 267, 268, 269, 270;, +4; 271, 272, 273, 274;, +4; 275, 276, 277, 278;, +4; 279, 280, 281, 282;, +4; 283, 284, 285, 286;, +4; 287, 288, 289, 290;, +4; 291, 292, 293, 294;, +4; 295, 296, 297, 298;, +4; 299, 300, 301, 302;, +4; 303, 304, 305, 306;, +4; 307, 308, 309, 310;, +4; 311, 312, 313, 314;, +4; 315, 316, 317, 318;, +4; 319, 320, 321, 322;, +4; 323, 324, 325, 326;, +4; 327, 328, 329, 330;, +4; 331, 332, 333, 334;, +4; 335, 336, 337, 338;, +4; 339, 340, 341, 342;, +4; 343, 344, 345, 346;, +4; 347, 348, 349, 350;, +4; 351, 352, 353, 354;, +4; 355, 356, 357, 358;, +4; 359, 360, 361, 362;, +4; 363, 364, 365, 366;, +4; 367, 368, 369, 370;, +4; 371, 372, 373, 374;, +3; 375, 376, 377;, +3; 378, 379, 380;, +4; 381, 382, 383, 384;, +4; 385, 386, 387, 388;, +4; 389, 390, 391, 392;, +4; 393, 394, 395, 396;, +4; 397, 398, 399, 400;, +4; 401, 402, 403, 404;, +4; 405, 406, 407, 408;, +4; 409, 410, 411, 412;, +4; 413, 414, 415, 416;, +4; 417, 418, 419, 420;, +4; 421, 422, 423, 424;, +4; 425, 426, 427, 428;, +4; 429, 430, 431, 432;, +4; 433, 434, 435, 436;, +4; 437, 438, 439, 440;, +4; 441, 442, 443, 444;, +4; 445, 446, 447, 448;, +4; 449, 450, 451, 452;, +4; 453, 454, 455, 456;, +4; 457, 458, 459, 460;, +4; 461, 462, 463, 464;, +4; 465, 466, 467, 468;, +4; 469, 470, 471, 472;, +4; 473, 474, 475, 476;, +4; 477, 478, 479, 480;, +4; 481, 482, 483, 484;, +4; 485, 486, 487, 488;, +4; 489, 490, 491, 492;, +4; 493, 494, 495, 496;, +4; 497, 498, 499, 500;, +3; 501, 502, 503;, +3; 504, 505, 506;, +4; 507, 508, 509, 510;, +4; 511, 512, 513, 514;, +4; 515, 516, 517, 518;, +4; 519, 520, 521, 522;, +4; 523, 524, 525, 526;, +4; 527, 528, 529, 530;, +4; 531, 532, 533, 534;, +4; 535, 536, 537, 538;, +4; 539, 540, 541, 542;, +4; 543, 544, 545, 546;, +4; 547, 548, 549, 550;, +4; 551, 552, 553, 554;, +4; 555, 556, 557, 558;, +4; 559, 560, 561, 562;, +4; 563, 564, 565, 566;, +4; 567, 568, 569, 570;, +4; 571, 572, 573, 574;, +4; 575, 576, 577, 578;, +4; 579, 580, 581, 582;, +4; 583, 584, 585, 586;, +4; 587, 588, 589, 590;, +4; 591, 592, 593, 594;, +4; 595, 596, 597, 598;, +4; 599, 600, 601, 602;, +4; 603, 604, 605, 606;, +4; 607, 608, 609, 610;, +4; 611, 612, 613, 614;, +4; 615, 616, 617, 618;, +4; 619, 620, 621, 622;, +4; 623, 624, 625, 626;, +3; 627, 628, 629;, +3; 630, 631, 632;, +4; 633, 634, 635, 636;, +4; 637, 638, 639, 640;, +4; 641, 642, 643, 644;, +4; 645, 646, 647, 648;, +4; 649, 650, 651, 652;, +4; 653, 654, 655, 656;, +4; 657, 658, 659, 660;, +4; 661, 662, 663, 664;, +4; 665, 666, 667, 668;, +4; 669, 670, 671, 672;, +4; 673, 674, 675, 676;, +4; 677, 678, 679, 680;, +4; 681, 682, 683, 684;, +4; 685, 686, 687, 688;, +4; 689, 690, 691, 692;, +4; 693, 694, 695, 696;, +4; 697, 698, 699, 700;, +4; 701, 702, 703, 704;, +4; 705, 706, 707, 708;, +4; 709, 710, 711, 712;, +4; 713, 714, 715, 716;, +4; 717, 718, 719, 720;, +4; 721, 722, 723, 724;, +4; 725, 726, 727, 728;, +4; 729, 730, 731, 732;, +4; 733, 734, 735, 736;, +4; 737, 738, 739, 740;, +4; 741, 742, 743, 744;, +4; 745, 746, 747, 748;, +4; 749, 750, 751, 752;, +3; 753, 754, 755;, +3; 756, 757, 758;, +4; 759, 760, 761, 762;, +4; 763, 764, 765, 766;, +4; 767, 768, 769, 770;, +4; 771, 772, 773, 774;, +4; 775, 776, 777, 778;, +4; 779, 780, 781, 782;, +4; 783, 784, 785, 786;, +4; 787, 788, 789, 790;, +4; 791, 792, 793, 794;, +4; 795, 796, 797, 798;, +4; 799, 800, 801, 802;, +4; 803, 804, 805, 806;, +4; 807, 808, 809, 810;, +4; 811, 812, 813, 814;, +4; 815, 816, 817, 818;, +4; 819, 820, 821, 822;, +4; 823, 824, 825, 826;, +4; 827, 828, 829, 830;, +4; 831, 832, 833, 834;, +4; 835, 836, 837, 838;, +4; 839, 840, 841, 842;, +4; 843, 844, 845, 846;, +4; 847, 848, 849, 850;, +4; 851, 852, 853, 854;, +4; 855, 856, 857, 858;, +4; 859, 860, 861, 862;, +4; 863, 864, 865, 866;, +4; 867, 868, 869, 870;, +4; 871, 872, 873, 874;, +4; 875, 876, 877, 878;, +3; 879, 880, 881;, +3; 882, 883, 884;, +4; 885, 886, 887, 888;, +4; 889, 890, 891, 892;, +4; 893, 894, 895, 896;, +4; 897, 898, 899, 900;, +4; 901, 902, 903, 904;, +4; 905, 906, 907, 908;, +4; 909, 910, 911, 912;, +4; 913, 914, 915, 916;, +4; 917, 918, 919, 920;, +4; 921, 922, 923, 924;, +4; 925, 926, 927, 928;, +4; 929, 930, 931, 932;, +4; 933, 934, 935, 936;, +4; 937, 938, 939, 940;, +4; 941, 942, 943, 944;, +4; 945, 946, 947, 948;, +4; 949, 950, 951, 952;, +4; 953, 954, 955, 956;, +4; 957, 958, 959, 960;, +4; 961, 962, 963, 964;, +4; 965, 966, 967, 968;, +4; 969, 970, 971, 972;, +4; 973, 974, 975, 976;, +4; 977, 978, 979, 980;, +4; 981, 982, 983, 984;, +4; 985, 986, 987, 988;, +4; 989, 990, 991, 992;, +4; 993, 994, 995, 996;, +4; 997, 998, 999, 1000;, +4; 1001, 1002, 1003, 1004;, +3; 1005, 1006, 1007;, +3; 1008, 1009, 1010;, +4; 1011, 1012, 1013, 1014;, +4; 1015, 1016, 1017, 1018;, +4; 1019, 1020, 1021, 1022;, +4; 1023, 1024, 1025, 1026;, +4; 1027, 1028, 1029, 1030;, +4; 1031, 1032, 1033, 1034;, +4; 1035, 1036, 1037, 1038;, +4; 1039, 1040, 1041, 1042;, +4; 1043, 1044, 1045, 1046;, +4; 1047, 1048, 1049, 1050;, +4; 1051, 1052, 1053, 1054;, +4; 1055, 1056, 1057, 1058;, +4; 1059, 1060, 1061, 1062;, +4; 1063, 1064, 1065, 1066;, +4; 1067, 1068, 1069, 1070;, +4; 1071, 1072, 1073, 1074;, +4; 1075, 1076, 1077, 1078;, +4; 1079, 1080, 1081, 1082;, +4; 1083, 1084, 1085, 1086;, +4; 1087, 1088, 1089, 1090;, +4; 1091, 1092, 1093, 1094;, +4; 1095, 1096, 1097, 1098;, +4; 1099, 1100, 1101, 1102;, +4; 1103, 1104, 1105, 1106;, +4; 1107, 1108, 1109, 1110;, +4; 1111, 1112, 1113, 1114;, +4; 1115, 1116, 1117, 1118;, +4; 1119, 1120, 1121, 1122;, +4; 1123, 1124, 1125, 1126;, +4; 1127, 1128, 1129, 1130;, +3; 1131, 1132, 1133;, +3; 1134, 1135, 1136;, +4; 1137, 1138, 1139, 1140;, +4; 1141, 1142, 1143, 1144;, +4; 1145, 1146, 1147, 1148;, +4; 1149, 1150, 1151, 1152;, +4; 1153, 1154, 1155, 1156;, +4; 1157, 1158, 1159, 1160;, +4; 1161, 1162, 1163, 1164;, +4; 1165, 1166, 1167, 1168;, +4; 1169, 1170, 1171, 1172;, +4; 1173, 1174, 1175, 1176;, +4; 1177, 1178, 1179, 1180;, +4; 1181, 1182, 1183, 1184;, +4; 1185, 1186, 1187, 1188;, +4; 1189, 1190, 1191, 1192;, +4; 1193, 1194, 1195, 1196;, +4; 1197, 1198, 1199, 1200;, +4; 1201, 1202, 1203, 1204;, +4; 1205, 1206, 1207, 1208;, +4; 1209, 1210, 1211, 1212;, +4; 1213, 1214, 1215, 1216;, +4; 1217, 1218, 1219, 1220;, +4; 1221, 1222, 1223, 1224;, +4; 1225, 1226, 1227, 1228;, +4; 1229, 1230, 1231, 1232;, +4; 1233, 1234, 1235, 1236;, +4; 1237, 1238, 1239, 1240;, +4; 1241, 1242, 1243, 1244;, +4; 1245, 1246, 1247, 1248;, +4; 1249, 1250, 1251, 1252;, +4; 1253, 1254, 1255, 1256;, +3; 1257, 1258, 1259;, +3; 1260, 1261, 1262;, +4; 1263, 1264, 1265, 1266;, +4; 1267, 1268, 1269, 1270;, +4; 1271, 1272, 1273, 1274;, +4; 1275, 1276, 1277, 1278;, +4; 1279, 1280, 1281, 1282;, +4; 1283, 1284, 1285, 1286;, +4; 1287, 1288, 1289, 1290;, +4; 1291, 1292, 1293, 1294;, +4; 1295, 1296, 1297, 1298;, +4; 1299, 1300, 1301, 1302;, +4; 1303, 1304, 1305, 1306;, +4; 1307, 1308, 1309, 1310;, +4; 1311, 1312, 1313, 1314;, +4; 1315, 1316, 1317, 1318;, +4; 1319, 1320, 1321, 1322;, +4; 1323, 1324, 1325, 1326;, +4; 1327, 1328, 1329, 1330;, +4; 1331, 1332, 1333, 1334;, +4; 1335, 1336, 1337, 1338;, +4; 1339, 1340, 1341, 1342;, +4; 1343, 1344, 1345, 1346;, +4; 1347, 1348, 1349, 1350;, +4; 1351, 1352, 1353, 1354;, +4; 1355, 1356, 1357, 1358;, +4; 1359, 1360, 1361, 1362;, +4; 1363, 1364, 1365, 1366;, +4; 1367, 1368, 1369, 1370;, +4; 1371, 1372, 1373, 1374;, +4; 1375, 1376, 1377, 1378;, +4; 1379, 1380, 1381, 1382;, +3; 1383, 1384, 1385;, +3; 1386, 1387, 1388;, +4; 1389, 1390, 1391, 1392;, +4; 1393, 1394, 1395, 1396;, +4; 1397, 1398, 1399, 1400;, +4; 1401, 1402, 1403, 1404;, +4; 1405, 1406, 1407, 1408;, +4; 1409, 1410, 1411, 1412;, +4; 1413, 1414, 1415, 1416;, +4; 1417, 1418, 1419, 1420;, +4; 1421, 1422, 1423, 1424;, +4; 1425, 1426, 1427, 1428;, +4; 1429, 1430, 1431, 1432;, +4; 1433, 1434, 1435, 1436;, +4; 1437, 1438, 1439, 1440;, +4; 1441, 1442, 1443, 1444;, +4; 1445, 1446, 1447, 1448;, +4; 1449, 1450, 1451, 1452;, +4; 1453, 1454, 1455, 1456;, +4; 1457, 1458, 1459, 1460;, +4; 1461, 1462, 1463, 1464;, +4; 1465, 1466, 1467, 1468;, +4; 1469, 1470, 1471, 1472;, +4; 1473, 1474, 1475, 1476;, +4; 1477, 1478, 1479, 1480;, +4; 1481, 1482, 1483, 1484;, +4; 1485, 1486, 1487, 1488;, +4; 1489, 1490, 1491, 1492;, +4; 1493, 1494, 1495, 1496;, +4; 1497, 1498, 1499, 1500;, +4; 1501, 1502, 1503, 1504;, +4; 1505, 1506, 1507, 1508;, +3; 1509, 1510, 1511;, +3; 1512, 1513, 1514;, +4; 1515, 1516, 1517, 1518;, +4; 1519, 1520, 1521, 1522;, +4; 1523, 1524, 1525, 1526;, +4; 1527, 1528, 1529, 1530;, +4; 1531, 1532, 1533, 1534;, +4; 1535, 1536, 1537, 1538;, +4; 1539, 1540, 1541, 1542;, +4; 1543, 1544, 1545, 1546;, +4; 1547, 1548, 1549, 1550;, +4; 1551, 1552, 1553, 1554;, +4; 1555, 1556, 1557, 1558;, +4; 1559, 1560, 1561, 1562;, +4; 1563, 1564, 1565, 1566;, +4; 1567, 1568, 1569, 1570;, +4; 1571, 1572, 1573, 1574;, +4; 1575, 1576, 1577, 1578;, +4; 1579, 1580, 1581, 1582;, +4; 1583, 1584, 1585, 1586;, +4; 1587, 1588, 1589, 1590;, +4; 1591, 1592, 1593, 1594;, +4; 1595, 1596, 1597, 1598;, +4; 1599, 1600, 1601, 1602;, +4; 1603, 1604, 1605, 1606;, +4; 1607, 1608, 1609, 1610;, +4; 1611, 1612, 1613, 1614;, +4; 1615, 1616, 1617, 1618;, +4; 1619, 1620, 1621, 1622;, +4; 1623, 1624, 1625, 1626;, +4; 1627, 1628, 1629, 1630;, +4; 1631, 1632, 1633, 1634;, +3; 1635, 1636, 1637;, +3; 1638, 1639, 1640;, +4; 1641, 1642, 1643, 1644;, +4; 1645, 1646, 1647, 1648;, +4; 1649, 1650, 1651, 1652;, +4; 1653, 1654, 1655, 1656;, +4; 1657, 1658, 1659, 1660;, +4; 1661, 1662, 1663, 1664;, +4; 1665, 1666, 1667, 1668;, +4; 1669, 1670, 1671, 1672;, +4; 1673, 1674, 1675, 1676;, +4; 1677, 1678, 1679, 1680;, +4; 1681, 1682, 1683, 1684;, +4; 1685, 1686, 1687, 1688;, +4; 1689, 1690, 1691, 1692;, +4; 1693, 1694, 1695, 1696;, +4; 1697, 1698, 1699, 1700;, +4; 1701, 1702, 1703, 1704;, +4; 1705, 1706, 1707, 1708;, +4; 1709, 1710, 1711, 1712;, +4; 1713, 1714, 1715, 1716;, +4; 1717, 1718, 1719, 1720;, +4; 1721, 1722, 1723, 1724;, +4; 1725, 1726, 1727, 1728;, +4; 1729, 1730, 1731, 1732;, +4; 1733, 1734, 1735, 1736;, +4; 1737, 1738, 1739, 1740;, +4; 1741, 1742, 1743, 1744;, +4; 1745, 1746, 1747, 1748;, +4; 1749, 1750, 1751, 1752;, +4; 1753, 1754, 1755, 1756;, +4; 1757, 1758, 1759, 1760;, +3; 1761, 1762, 1763;, +3; 1764, 1765, 1766;, +4; 1767, 1768, 1769, 1770;, +4; 1771, 1772, 1773, 1774;, +4; 1775, 1776, 1777, 1778;, +4; 1779, 1780, 1781, 1782;, +4; 1783, 1784, 1785, 1786;, +4; 1787, 1788, 1789, 1790;, +4; 1791, 1792, 1793, 1794;, +4; 1795, 1796, 1797, 1798;, +4; 1799, 1800, 1801, 1802;, +4; 1803, 1804, 1805, 1806;, +4; 1807, 1808, 1809, 1810;, +4; 1811, 1812, 1813, 1814;, +4; 1815, 1816, 1817, 1818;, +4; 1819, 1820, 1821, 1822;, +4; 1823, 1824, 1825, 1826;, +4; 1827, 1828, 1829, 1830;, +4; 1831, 1832, 1833, 1834;, +4; 1835, 1836, 1837, 1838;, +4; 1839, 1840, 1841, 1842;, +4; 1843, 1844, 1845, 1846;, +4; 1847, 1848, 1849, 1850;, +4; 1851, 1852, 1853, 1854;, +4; 1855, 1856, 1857, 1858;, +4; 1859, 1860, 1861, 1862;, +4; 1863, 1864, 1865, 1866;, +4; 1867, 1868, 1869, 1870;, +4; 1871, 1872, 1873, 1874;, +4; 1875, 1876, 1877, 1878;, +4; 1879, 1880, 1881, 1882;, +4; 1883, 1884, 1885, 1886;, +3; 1887, 1888, 1889;, +3; 1890, 1891, 1892;, +4; 1893, 1894, 1895, 1896;, +4; 1897, 1898, 1899, 1900;, +4; 1901, 1902, 1903, 1904;, +4; 1905, 1906, 1907, 1908;, +4; 1909, 1910, 1911, 1912;, +4; 1913, 1914, 1915, 1916;, +4; 1917, 1918, 1919, 1920;, +4; 1921, 1922, 1923, 1924;, +4; 1925, 1926, 1927, 1928;, +4; 1929, 1930, 1931, 1932;, +4; 1933, 1934, 1935, 1936;, +4; 1937, 1938, 1939, 1940;, +4; 1941, 1942, 1943, 1944;, +4; 1945, 1946, 1947, 1948;, +4; 1949, 1950, 1951, 1952;, +4; 1953, 1954, 1955, 1956;, +4; 1957, 1958, 1959, 1960;, +4; 1961, 1962, 1963, 1964;, +4; 1965, 1966, 1967, 1968;, +4; 1969, 1970, 1971, 1972;, +4; 1973, 1974, 1975, 1976;, +4; 1977, 1978, 1979, 1980;, +4; 1981, 1982, 1983, 1984;, +4; 1985, 1986, 1987, 1988;, +4; 1989, 1990, 1991, 1992;, +4; 1993, 1994, 1995, 1996;, +4; 1997, 1998, 1999, 2000;, +4; 2001, 2002, 2003, 2004;, +4; 2005, 2006, 2007, 2008;, +4; 2009, 2010, 2011, 2012;, +3; 2013, 2014, 2015;, +3; 2016, 2017, 2018;, +4; 2019, 2020, 2021, 2022;, +4; 2023, 2024, 2025, 2026;, +4; 2027, 2028, 2029, 2030;, +4; 2031, 2032, 2033, 2034;, +4; 2035, 2036, 2037, 2038;, +4; 2039, 2040, 2041, 2042;, +4; 2043, 2044, 2045, 2046;, +4; 2047, 2048, 2049, 2050;, +4; 2051, 2052, 2053, 2054;, +4; 2055, 2056, 2057, 2058;, +4; 2059, 2060, 2061, 2062;, +4; 2063, 2064, 2065, 2066;, +4; 2067, 2068, 2069, 2070;, +4; 2071, 2072, 2073, 2074;, +4; 2075, 2076, 2077, 2078;, +4; 2079, 2080, 2081, 2082;, +4; 2083, 2084, 2085, 2086;, +4; 2087, 2088, 2089, 2090;, +4; 2091, 2092, 2093, 2094;, +4; 2095, 2096, 2097, 2098;, +4; 2099, 2100, 2101, 2102;, +4; 2103, 2104, 2105, 2106;, +4; 2107, 2108, 2109, 2110;, +4; 2111, 2112, 2113, 2114;, +4; 2115, 2116, 2117, 2118;, +4; 2119, 2120, 2121, 2122;, +4; 2123, 2124, 2125, 2126;, +4; 2127, 2128, 2129, 2130;, +4; 2131, 2132, 2133, 2134;, +4; 2135, 2136, 2137, 2138;, +3; 2139, 2140, 2141;, +3; 2142, 2143, 2144;, +4; 2145, 2146, 2147, 2148;, +4; 2149, 2150, 2151, 2152;, +4; 2153, 2154, 2155, 2156;, +4; 2157, 2158, 2159, 2160;, +4; 2161, 2162, 2163, 2164;, +4; 2165, 2166, 2167, 2168;, +4; 2169, 2170, 2171, 2172;, +4; 2173, 2174, 2175, 2176;, +4; 2177, 2178, 2179, 2180;, +4; 2181, 2182, 2183, 2184;, +4; 2185, 2186, 2187, 2188;, +4; 2189, 2190, 2191, 2192;, +4; 2193, 2194, 2195, 2196;, +4; 2197, 2198, 2199, 2200;, +4; 2201, 2202, 2203, 2204;, +4; 2205, 2206, 2207, 2208;, +4; 2209, 2210, 2211, 2212;, +4; 2213, 2214, 2215, 2216;, +4; 2217, 2218, 2219, 2220;, +4; 2221, 2222, 2223, 2224;, +4; 2225, 2226, 2227, 2228;, +4; 2229, 2230, 2231, 2232;, +4; 2233, 2234, 2235, 2236;, +4; 2237, 2238, 2239, 2240;, +4; 2241, 2242, 2243, 2244;, +4; 2245, 2246, 2247, 2248;, +4; 2249, 2250, 2251, 2252;, +4; 2253, 2254, 2255, 2256;, +4; 2257, 2258, 2259, 2260;, +4; 2261, 2262, 2263, 2264;, +3; 2265, 2266, 2267;, +3; 2268, 2269, 2270;, +4; 2271, 2272, 2273, 2274;, +4; 2275, 2276, 2277, 2278;, +4; 2279, 2280, 2281, 2282;, +4; 2283, 2284, 2285, 2286;, +4; 2287, 2288, 2289, 2290;, +4; 2291, 2292, 2293, 2294;, +4; 2295, 2296, 2297, 2298;, +4; 2299, 2300, 2301, 2302;, +4; 2303, 2304, 2305, 2306;, +4; 2307, 2308, 2309, 2310;, +4; 2311, 2312, 2313, 2314;, +4; 2315, 2316, 2317, 2318;, +4; 2319, 2320, 2321, 2322;, +4; 2323, 2324, 2325, 2326;, +4; 2327, 2328, 2329, 2330;, +4; 2331, 2332, 2333, 2334;, +4; 2335, 2336, 2337, 2338;, +4; 2339, 2340, 2341, 2342;, +4; 2343, 2344, 2345, 2346;, +4; 2347, 2348, 2349, 2350;, +4; 2351, 2352, 2353, 2354;, +4; 2355, 2356, 2357, 2358;, +4; 2359, 2360, 2361, 2362;, +4; 2363, 2364, 2365, 2366;, +4; 2367, 2368, 2369, 2370;, +4; 2371, 2372, 2373, 2374;, +4; 2375, 2376, 2377, 2378;, +4; 2379, 2380, 2381, 2382;, +4; 2383, 2384, 2385, 2386;, +4; 2387, 2388, 2389, 2390;, +3; 2391, 2392, 2393;, +3; 2394, 2395, 2396;, +4; 2397, 2398, 2399, 2400;, +4; 2401, 2402, 2403, 2404;, +4; 2405, 2406, 2407, 2408;, +4; 2409, 2410, 2411, 2412;, +4; 2413, 2414, 2415, 2416;, +4; 2417, 2418, 2419, 2420;, +4; 2421, 2422, 2423, 2424;, +4; 2425, 2426, 2427, 2428;, +4; 2429, 2430, 2431, 2432;, +4; 2433, 2434, 2435, 2436;, +4; 2437, 2438, 2439, 2440;, +4; 2441, 2442, 2443, 2444;, +4; 2445, 2446, 2447, 2448;, +4; 2449, 2450, 2451, 2452;, +4; 2453, 2454, 2455, 2456;, +4; 2457, 2458, 2459, 2460;, +4; 2461, 2462, 2463, 2464;, +4; 2465, 2466, 2467, 2468;, +4; 2469, 2470, 2471, 2472;, +4; 2473, 2474, 2475, 2476;, +4; 2477, 2478, 2479, 2480;, +4; 2481, 2482, 2483, 2484;, +4; 2485, 2486, 2487, 2488;, +4; 2489, 2490, 2491, 2492;, +4; 2493, 2494, 2495, 2496;, +4; 2497, 2498, 2499, 2500;, +4; 2501, 2502, 2503, 2504;, +4; 2505, 2506, 2507, 2508;, +4; 2509, 2510, 2511, 2512;, +4; 2513, 2514, 2515, 2516;, +3; 2517, 2518, 2519;, +3; 2520, 2521, 2522;, +4; 2523, 2524, 2525, 2526;, +4; 2527, 2528, 2529, 2530;, +4; 2531, 2532, 2533, 2534;, +4; 2535, 2536, 2537, 2538;, +4; 2539, 2540, 2541, 2542;, +4; 2543, 2544, 2545, 2546;, +4; 2547, 2548, 2549, 2550;, +4; 2551, 2552, 2553, 2554;, +4; 2555, 2556, 2557, 2558;, +4; 2559, 2560, 2561, 2562;, +4; 2563, 2564, 2565, 2566;, +4; 2567, 2568, 2569, 2570;, +4; 2571, 2572, 2573, 2574;, +4; 2575, 2576, 2577, 2578;, +4; 2579, 2580, 2581, 2582;, +4; 2583, 2584, 2585, 2586;, +4; 2587, 2588, 2589, 2590;, +4; 2591, 2592, 2593, 2594;, +4; 2595, 2596, 2597, 2598;, +4; 2599, 2600, 2601, 2602;, +4; 2603, 2604, 2605, 2606;, +4; 2607, 2608, 2609, 2610;, +4; 2611, 2612, 2613, 2614;, +4; 2615, 2616, 2617, 2618;, +4; 2619, 2620, 2621, 2622;, +4; 2623, 2624, 2625, 2626;, +4; 2627, 2628, 2629, 2630;, +4; 2631, 2632, 2633, 2634;, +4; 2635, 2636, 2637, 2638;, +4; 2639, 2640, 2641, 2642;, +3; 2643, 2644, 2645;, +3; 2646, 2647, 2648;, +4; 2649, 2650, 2651, 2652;, +4; 2653, 2654, 2655, 2656;, +4; 2657, 2658, 2659, 2660;, +4; 2661, 2662, 2663, 2664;, +4; 2665, 2666, 2667, 2668;, +4; 2669, 2670, 2671, 2672;, +4; 2673, 2674, 2675, 2676;, +4; 2677, 2678, 2679, 2680;, +4; 2681, 2682, 2683, 2684;, +4; 2685, 2686, 2687, 2688;, +4; 2689, 2690, 2691, 2692;, +4; 2693, 2694, 2695, 2696;, +4; 2697, 2698, 2699, 2700;, +4; 2701, 2702, 2703, 2704;, +4; 2705, 2706, 2707, 2708;, +4; 2709, 2710, 2711, 2712;, +4; 2713, 2714, 2715, 2716;, +4; 2717, 2718, 2719, 2720;, +4; 2721, 2722, 2723, 2724;, +4; 2725, 2726, 2727, 2728;, +4; 2729, 2730, 2731, 2732;, +4; 2733, 2734, 2735, 2736;, +4; 2737, 2738, 2739, 2740;, +4; 2741, 2742, 2743, 2744;, +4; 2745, 2746, 2747, 2748;, +4; 2749, 2750, 2751, 2752;, +4; 2753, 2754, 2755, 2756;, +4; 2757, 2758, 2759, 2760;, +4; 2761, 2762, 2763, 2764;, +4; 2765, 2766, 2767, 2768;, +3; 2769, 2770, 2771;, +3; 2772, 2773, 2774;, +4; 2775, 2776, 2777, 2778;, +4; 2779, 2780, 2781, 2782;, +4; 2783, 2784, 2785, 2786;, +4; 2787, 2788, 2789, 2790;, +4; 2791, 2792, 2793, 2794;, +4; 2795, 2796, 2797, 2798;, +4; 2799, 2800, 2801, 2802;, +4; 2803, 2804, 2805, 2806;, +4; 2807, 2808, 2809, 2810;, +4; 2811, 2812, 2813, 2814;, +4; 2815, 2816, 2817, 2818;, +4; 2819, 2820, 2821, 2822;, +4; 2823, 2824, 2825, 2826;, +4; 2827, 2828, 2829, 2830;, +4; 2831, 2832, 2833, 2834;, +4; 2835, 2836, 2837, 2838;, +4; 2839, 2840, 2841, 2842;, +4; 2843, 2844, 2845, 2846;, +4; 2847, 2848, 2849, 2850;, +4; 2851, 2852, 2853, 2854;, +4; 2855, 2856, 2857, 2858;, +4; 2859, 2860, 2861, 2862;, +4; 2863, 2864, 2865, 2866;, +4; 2867, 2868, 2869, 2870;, +4; 2871, 2872, 2873, 2874;, +4; 2875, 2876, 2877, 2878;, +4; 2879, 2880, 2881, 2882;, +4; 2883, 2884, 2885, 2886;, +4; 2887, 2888, 2889, 2890;, +4; 2891, 2892, 2893, 2894;, +3; 2895, 2896, 2897;, +3; 2898, 2899, 2900;, +4; 2901, 2902, 2903, 2904;, +4; 2905, 2906, 2907, 2908;, +4; 2909, 2910, 2911, 2912;, +4; 2913, 2914, 2915, 2916;, +4; 2917, 2918, 2919, 2920;, +4; 2921, 2922, 2923, 2924;, +4; 2925, 2926, 2927, 2928;, +4; 2929, 2930, 2931, 2932;, +4; 2933, 2934, 2935, 2936;, +4; 2937, 2938, 2939, 2940;, +4; 2941, 2942, 2943, 2944;, +4; 2945, 2946, 2947, 2948;, +4; 2949, 2950, 2951, 2952;, +4; 2953, 2954, 2955, 2956;, +4; 2957, 2958, 2959, 2960;, +4; 2961, 2962, 2963, 2964;, +4; 2965, 2966, 2967, 2968;, +4; 2969, 2970, 2971, 2972;, +4; 2973, 2974, 2975, 2976;, +4; 2977, 2978, 2979, 2980;, +4; 2981, 2982, 2983, 2984;, +4; 2985, 2986, 2987, 2988;, +4; 2989, 2990, 2991, 2992;, +4; 2993, 2994, 2995, 2996;, +4; 2997, 2998, 2999, 3000;, +4; 3001, 3002, 3003, 3004;, +4; 3005, 3006, 3007, 3008;, +4; 3009, 3010, 3011, 3012;, +4; 3013, 3014, 3015, 3016;, +4; 3017, 3018, 3019, 3020;, +3; 3021, 3022, 3023;, +3; 3024, 3025, 3026;, +4; 3027, 3028, 3029, 3030;, +4; 3031, 3032, 3033, 3034;, +4; 3035, 3036, 3037, 3038;, +4; 3039, 3040, 3041, 3042;, +4; 3043, 3044, 3045, 3046;, +4; 3047, 3048, 3049, 3050;, +4; 3051, 3052, 3053, 3054;, +4; 3055, 3056, 3057, 3058;, +4; 3059, 3060, 3061, 3062;, +4; 3063, 3064, 3065, 3066;, +4; 3067, 3068, 3069, 3070;, +4; 3071, 3072, 3073, 3074;, +4; 3075, 3076, 3077, 3078;, +4; 3079, 3080, 3081, 3082;, +4; 3083, 3084, 3085, 3086;, +4; 3087, 3088, 3089, 3090;, +4; 3091, 3092, 3093, 3094;, +4; 3095, 3096, 3097, 3098;, +4; 3099, 3100, 3101, 3102;, +4; 3103, 3104, 3105, 3106;, +4; 3107, 3108, 3109, 3110;, +4; 3111, 3112, 3113, 3114;, +4; 3115, 3116, 3117, 3118;, +4; 3119, 3120, 3121, 3122;, +4; 3123, 3124, 3125, 3126;, +4; 3127, 3128, 3129, 3130;, +4; 3131, 3132, 3133, 3134;, +4; 3135, 3136, 3137, 3138;, +4; 3139, 3140, 3141, 3142;, +4; 3143, 3144, 3145, 3146;, +3; 3147, 3148, 3149;, +3; 3150, 3151, 3152;, +4; 3153, 3154, 3155, 3156;, +4; 3157, 3158, 3159, 3160;, +4; 3161, 3162, 3163, 3164;, +4; 3165, 3166, 3167, 3168;, +4; 3169, 3170, 3171, 3172;, +4; 3173, 3174, 3175, 3176;, +4; 3177, 3178, 3179, 3180;, +4; 3181, 3182, 3183, 3184;, +4; 3185, 3186, 3187, 3188;, +4; 3189, 3190, 3191, 3192;, +4; 3193, 3194, 3195, 3196;, +4; 3197, 3198, 3199, 3200;, +4; 3201, 3202, 3203, 3204;, +4; 3205, 3206, 3207, 3208;, +4; 3209, 3210, 3211, 3212;, +4; 3213, 3214, 3215, 3216;, +4; 3217, 3218, 3219, 3220;, +4; 3221, 3222, 3223, 3224;, +4; 3225, 3226, 3227, 3228;, +4; 3229, 3230, 3231, 3232;, +4; 3233, 3234, 3235, 3236;, +4; 3237, 3238, 3239, 3240;, +4; 3241, 3242, 3243, 3244;, +4; 3245, 3246, 3247, 3248;, +4; 3249, 3250, 3251, 3252;, +4; 3253, 3254, 3255, 3256;, +4; 3257, 3258, 3259, 3260;, +4; 3261, 3262, 3263, 3264;, +4; 3265, 3266, 3267, 3268;, +4; 3269, 3270, 3271, 3272;, +3; 3273, 3274, 3275;, +3; 3276, 3277, 3278;, +4; 3279, 3280, 3281, 3282;, +4; 3283, 3284, 3285, 3286;, +4; 3287, 3288, 3289, 3290;, +4; 3291, 3292, 3293, 3294;, +4; 3295, 3296, 3297, 3298;, +4; 3299, 3300, 3301, 3302;, +4; 3303, 3304, 3305, 3306;, +4; 3307, 3308, 3309, 3310;, +4; 3311, 3312, 3313, 3314;, +4; 3315, 3316, 3317, 3318;, +4; 3319, 3320, 3321, 3322;, +4; 3323, 3324, 3325, 3326;, +4; 3327, 3328, 3329, 3330;, +4; 3331, 3332, 3333, 3334;, +4; 3335, 3336, 3337, 3338;, +4; 3339, 3340, 3341, 3342;, +4; 3343, 3344, 3345, 3346;, +4; 3347, 3348, 3349, 3350;, +4; 3351, 3352, 3353, 3354;, +4; 3355, 3356, 3357, 3358;, +4; 3359, 3360, 3361, 3362;, +4; 3363, 3364, 3365, 3366;, +4; 3367, 3368, 3369, 3370;, +4; 3371, 3372, 3373, 3374;, +4; 3375, 3376, 3377, 3378;, +4; 3379, 3380, 3381, 3382;, +4; 3383, 3384, 3385, 3386;, +4; 3387, 3388, 3389, 3390;, +4; 3391, 3392, 3393, 3394;, +4; 3395, 3396, 3397, 3398;, +3; 3399, 3400, 3401;, +3; 3402, 3403, 3404;, +4; 3405, 3406, 3407, 3408;, +4; 3409, 3410, 3411, 3412;, +4; 3413, 3414, 3415, 3416;, +4; 3417, 3418, 3419, 3420;, +4; 3421, 3422, 3423, 3424;, +4; 3425, 3426, 3427, 3428;, +4; 3429, 3430, 3431, 3432;, +4; 3433, 3434, 3435, 3436;, +4; 3437, 3438, 3439, 3440;, +4; 3441, 3442, 3443, 3444;, +4; 3445, 3446, 3447, 3448;, +4; 3449, 3450, 3451, 3452;, +4; 3453, 3454, 3455, 3456;, +4; 3457, 3458, 3459, 3460;, +4; 3461, 3462, 3463, 3464;, +4; 3465, 3466, 3467, 3468;, +4; 3469, 3470, 3471, 3472;, +4; 3473, 3474, 3475, 3476;, +4; 3477, 3478, 3479, 3480;, +4; 3481, 3482, 3483, 3484;, +4; 3485, 3486, 3487, 3488;, +4; 3489, 3490, 3491, 3492;, +4; 3493, 3494, 3495, 3496;, +4; 3497, 3498, 3499, 3500;, +4; 3501, 3502, 3503, 3504;, +4; 3505, 3506, 3507, 3508;, +4; 3509, 3510, 3511, 3512;, +4; 3513, 3514, 3515, 3516;, +4; 3517, 3518, 3519, 3520;, +4; 3521, 3522, 3523, 3524;, +3; 3525, 3526, 3527;, +3; 3528, 3529, 3530;, +4; 3531, 3532, 3533, 3534;, +4; 3535, 3536, 3537, 3538;, +4; 3539, 3540, 3541, 3542;, +4; 3543, 3544, 3545, 3546;, +4; 3547, 3548, 3549, 3550;, +4; 3551, 3552, 3553, 3554;, +4; 3555, 3556, 3557, 3558;, +4; 3559, 3560, 3561, 3562;, +4; 3563, 3564, 3565, 3566;, +4; 3567, 3568, 3569, 3570;, +4; 3571, 3572, 3573, 3574;, +4; 3575, 3576, 3577, 3578;, +4; 3579, 3580, 3581, 3582;, +4; 3583, 3584, 3585, 3586;, +4; 3587, 3588, 3589, 3590;, +4; 3591, 3592, 3593, 3594;, +4; 3595, 3596, 3597, 3598;, +4; 3599, 3600, 3601, 3602;, +4; 3603, 3604, 3605, 3606;, +4; 3607, 3608, 3609, 3610;, +4; 3611, 3612, 3613, 3614;, +4; 3615, 3616, 3617, 3618;, +4; 3619, 3620, 3621, 3622;, +4; 3623, 3624, 3625, 3626;, +4; 3627, 3628, 3629, 3630;, +4; 3631, 3632, 3633, 3634;, +4; 3635, 3636, 3637, 3638;, +4; 3639, 3640, 3641, 3642;, +4; 3643, 3644, 3645, 3646;, +4; 3647, 3648, 3649, 3650;, +3; 3651, 3652, 3653;, +3; 3654, 3655, 3656;, +4; 3657, 3658, 3659, 3660;, +4; 3661, 3662, 3663, 3664;, +4; 3665, 3666, 3667, 3668;, +4; 3669, 3670, 3671, 3672;, +4; 3673, 3674, 3675, 3676;, +4; 3677, 3678, 3679, 3680;, +4; 3681, 3682, 3683, 3684;, +4; 3685, 3686, 3687, 3688;, +4; 3689, 3690, 3691, 3692;, +4; 3693, 3694, 3695, 3696;, +4; 3697, 3698, 3699, 3700;, +4; 3701, 3702, 3703, 3704;, +4; 3705, 3706, 3707, 3708;, +4; 3709, 3710, 3711, 3712;, +4; 3713, 3714, 3715, 3716;, +4; 3717, 3718, 3719, 3720;, +4; 3721, 3722, 3723, 3724;, +4; 3725, 3726, 3727, 3728;, +4; 3729, 3730, 3731, 3732;, +4; 3733, 3734, 3735, 3736;, +4; 3737, 3738, 3739, 3740;, +4; 3741, 3742, 3743, 3744;, +4; 3745, 3746, 3747, 3748;, +4; 3749, 3750, 3751, 3752;, +4; 3753, 3754, 3755, 3756;, +4; 3757, 3758, 3759, 3760;, +4; 3761, 3762, 3763, 3764;, +4; 3765, 3766, 3767, 3768;, +4; 3769, 3770, 3771, 3772;, +4; 3773, 3774, 3775, 3776;, +3; 3777, 3778, 3779;, +3; 3780, 3781, 3782;, +4; 3783, 3784, 3785, 3786;, +4; 3787, 3788, 3789, 3790;, +4; 3791, 3792, 3793, 3794;, +4; 3795, 3796, 3797, 3798;, +4; 3799, 3800, 3801, 3802;, +4; 3803, 3804, 3805, 3806;, +4; 3807, 3808, 3809, 3810;, +4; 3811, 3812, 3813, 3814;, +4; 3815, 3816, 3817, 3818;, +4; 3819, 3820, 3821, 3822;, +4; 3823, 3824, 3825, 3826;, +4; 3827, 3828, 3829, 3830;, +4; 3831, 3832, 3833, 3834;, +4; 3835, 3836, 3837, 3838;, +4; 3839, 3840, 3841, 3842;, +4; 3843, 3844, 3845, 3846;, +4; 3847, 3848, 3849, 3850;, +4; 3851, 3852, 3853, 3854;, +4; 3855, 3856, 3857, 3858;, +4; 3859, 3860, 3861, 3862;, +4; 3863, 3864, 3865, 3866;, +4; 3867, 3868, 3869, 3870;, +4; 3871, 3872, 3873, 3874;, +4; 3875, 3876, 3877, 3878;, +4; 3879, 3880, 3881, 3882;, +4; 3883, 3884, 3885, 3886;, +4; 3887, 3888, 3889, 3890;, +4; 3891, 3892, 3893, 3894;, +4; 3895, 3896, 3897, 3898;, +4; 3899, 3900, 3901, 3902;, +3; 3903, 3904, 3905;, +3; 3906, 3907, 3908;, +4; 3909, 3910, 3911, 3912;, +4; 3913, 3914, 3915, 3916;, +4; 3917, 3918, 3919, 3920;, +4; 3921, 3922, 3923, 3924;, +4; 3925, 3926, 3927, 3928;, +4; 3929, 3930, 3931, 3932;, +4; 3933, 3934, 3935, 3936;, +4; 3937, 3938, 3939, 3940;, +4; 3941, 3942, 3943, 3944;, +4; 3945, 3946, 3947, 3948;, +4; 3949, 3950, 3951, 3952;, +4; 3953, 3954, 3955, 3956;, +4; 3957, 3958, 3959, 3960;, +4; 3961, 3962, 3963, 3964;, +4; 3965, 3966, 3967, 3968;, +4; 3969, 3970, 3971, 3972;, +4; 3973, 3974, 3975, 3976;, +4; 3977, 3978, 3979, 3980;, +4; 3981, 3982, 3983, 3984;, +4; 3985, 3986, 3987, 3988;, +4; 3989, 3990, 3991, 3992;, +4; 3993, 3994, 3995, 3996;, +4; 3997, 3998, 3999, 4000;, +4; 4001, 4002, 4003, 4004;, +4; 4005, 4006, 4007, 4008;, +4; 4009, 4010, 4011, 4012;, +4; 4013, 4014, 4015, 4016;, +4; 4017, 4018, 4019, 4020;, +4; 4021, 4022, 4023, 4024;, +4; 4025, 4026, 4027, 4028;, +3; 4029, 4030, 4031;; + MeshMaterialList { + 0; + 1024; + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0;; + } //End of MeshMaterialList + MeshNormals { +4032; + -0.000000; -0.000000; -1.000000;, + 0.096131; 0.019121; -0.995185;, + 0.098015; -0.000000; -0.995185;, + 0.098015; -0.000000; -0.995185;, + 0.096131; 0.019121; -0.995185;, + 0.191337; 0.038059; -0.980786;, + 0.195085; -0.000000; -0.980786;, + 0.195085; -0.000000; -0.980786;, + 0.191337; 0.038059; -0.980786;, + 0.284700; 0.056630; -0.956943;, + 0.290277; -0.000001; -0.956943;, + 0.290277; -0.000001; -0.956943;, + 0.284700; 0.056630; -0.956943;, + 0.375322; 0.074656; -0.923883;, + 0.382675; -0.000001; -0.923883;, + 0.382675; -0.000001; -0.923883;, + 0.375322; 0.074656; -0.923883;, + 0.462330; 0.091962; -0.881926;, + 0.471388; -0.000001; -0.881926;, + 0.471388; -0.000001; -0.881926;, + 0.462330; 0.091962; -0.881926;, + 0.544886; 0.108383; -0.831476;, + 0.555562; -0.000001; -0.831475;, + 0.555562; -0.000001; -0.831475;, + 0.544886; 0.108383; -0.831476;, + 0.622195; 0.123761; -0.773017;, + 0.634385; -0.000001; -0.773017;, + 0.634385; -0.000001; -0.773017;, + 0.622195; 0.123761; -0.773017;, + 0.693511; 0.137946; -0.707116;, + 0.707098; -0.000002; -0.707115;, + 0.707098; -0.000002; -0.707115;, + 0.693511; 0.137946; -0.707116;, + 0.758150; 0.150804; -0.634403;, + 0.773003; -0.000002; -0.634402;, + 0.773003; -0.000002; -0.634402;, + 0.758150; 0.150804; -0.634403;, + 0.815487; 0.162209; -0.555579;, + 0.831463; -0.000002; -0.555580;, + 0.831463; -0.000002; -0.555580;, + 0.815487; 0.162209; -0.555579;, + 0.864971; 0.172052; -0.471405;, + 0.881917; -0.000002; -0.471405;, + 0.881917; -0.000002; -0.471405;, + 0.864971; 0.172052; -0.471405;, + 0.906125; 0.180238; -0.382691;, + 0.923877; -0.000002; -0.382691;, + 0.923877; -0.000002; -0.382691;, + 0.906125; 0.180238; -0.382691;, + 0.938551; 0.186688; -0.290291;, + 0.956939; -0.000002; -0.290291;, + 0.956939; -0.000002; -0.290291;, + 0.938551; 0.186688; -0.290291;, + 0.961939; 0.191340; -0.195095;, + 0.980784; -0.000002; -0.195094;, + 0.980784; -0.000002; -0.195094;, + 0.961939; 0.191340; -0.195095;, + 0.976063; 0.194149; -0.098019;, + 0.995185; -0.000002; -0.098019;, + 0.995185; -0.000002; -0.098019;, + 0.976063; 0.194149; -0.098019;, + 0.980786; 0.195088; 0.000000;, + 1.000000; -0.000002; 0.000000;, + 1.000000; -0.000002; 0.000000;, + 0.980786; 0.195088; 0.000000;, + 0.976063; 0.194149; 0.098019;, + 0.995185; -0.000002; 0.098020;, + 0.995185; -0.000002; 0.098020;, + 0.976063; 0.194149; 0.098019;, + 0.961939; 0.191339; 0.195094;, + 0.980785; -0.000002; 0.195094;, + 0.980785; -0.000002; 0.195094;, + 0.961939; 0.191339; 0.195094;, + 0.938552; 0.186687; 0.290291;, + 0.956939; -0.000002; 0.290290;, + 0.956939; -0.000002; 0.290290;, + 0.938552; 0.186687; 0.290291;, + 0.906125; 0.180238; 0.382691;, + 0.923877; -0.000002; 0.382691;, + 0.923877; -0.000002; 0.382691;, + 0.906125; 0.180238; 0.382691;, + 0.864971; 0.172052; 0.471405;, + 0.881917; -0.000002; 0.471405;, + 0.881917; -0.000002; 0.471405;, + 0.864971; 0.172052; 0.471405;, + 0.815488; 0.162209; 0.555579;, + 0.831464; -0.000002; 0.555579;, + 0.831464; -0.000002; 0.555579;, + 0.815488; 0.162209; 0.555579;, + 0.758151; 0.150804; 0.634402;, + 0.773004; -0.000002; 0.634401;, + 0.773004; -0.000002; 0.634401;, + 0.758151; 0.150804; 0.634402;, + 0.693512; 0.137947; 0.707115;, + 0.707099; -0.000001; 0.707114;, + 0.707099; -0.000001; 0.707114;, + 0.693512; 0.137947; 0.707115;, + 0.622195; 0.123761; 0.773018;, + 0.634384; -0.000001; 0.773018;, + 0.634384; -0.000001; 0.773018;, + 0.622195; 0.123761; 0.773018;, + 0.544886; 0.108383; 0.831476;, + 0.555561; -0.000001; 0.831476;, + 0.555561; -0.000001; 0.831476;, + 0.544886; 0.108383; 0.831476;, + 0.462331; 0.091962; 0.881926;, + 0.471389; -0.000001; 0.881926;, + 0.471389; -0.000001; 0.881926;, + 0.462331; 0.091962; 0.881926;, + 0.375323; 0.074656; 0.923883;, + 0.382676; -0.000001; 0.923882;, + 0.382676; -0.000001; 0.923882;, + 0.375323; 0.074656; 0.923883;, + 0.284701; 0.056630; 0.956942;, + 0.290279; -0.000001; 0.956942;, + 0.290279; -0.000001; 0.956942;, + 0.284701; 0.056630; 0.956942;, + 0.191337; 0.038059; 0.980786;, + 0.195086; -0.000000; 0.980786;, + 0.195086; -0.000000; 0.980786;, + 0.191337; 0.038059; 0.980786;, + 0.096132; 0.019122; 0.995185;, + 0.098015; -0.000000; 0.995185;, + 0.098015; -0.000000; 0.995185;, + 0.096132; 0.019122; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.096132; 0.019122; 0.995185;, + 0.090554; 0.037509; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.191337; 0.038059; 0.980786;, + 0.180236; 0.074656; 0.980786;, + 0.090554; 0.037509; 0.995185;, + 0.096132; 0.019122; 0.995185;, + 0.284701; 0.056630; 0.956942;, + 0.268182; 0.111085; 0.956942;, + 0.180236; 0.074656; 0.980786;, + 0.191337; 0.038059; 0.980786;, + 0.375323; 0.074656; 0.923883;, + 0.353547; 0.146444; 0.923883;, + 0.268182; 0.111085; 0.956942;, + 0.284701; 0.056630; 0.956942;, + 0.462331; 0.091962; 0.881926;, + 0.435506; 0.180392; 0.881926;, + 0.353547; 0.146444; 0.923883;, + 0.375323; 0.074656; 0.923883;, + 0.544886; 0.108383; 0.831476;, + 0.513271; 0.212604; 0.831476;, + 0.435506; 0.180392; 0.881926;, + 0.462331; 0.091962; 0.881926;, + 0.622195; 0.123761; 0.773018;, + 0.586095; 0.242768; 0.773018;, + 0.513271; 0.212604; 0.831476;, + 0.544886; 0.108383; 0.831476;, + 0.693512; 0.137947; 0.707115;, + 0.653274; 0.270595; 0.707115;, + 0.586095; 0.242768; 0.773018;, + 0.622195; 0.123761; 0.773018;, + 0.758151; 0.150804; 0.634402;, + 0.714162; 0.295816; 0.634402;, + 0.653274; 0.270595; 0.707115;, + 0.693512; 0.137947; 0.707115;, + 0.815488; 0.162209; 0.555579;, + 0.768172; 0.318187; 0.555579;, + 0.714162; 0.295816; 0.634402;, + 0.758151; 0.150804; 0.634402;, + 0.864971; 0.172052; 0.471405;, + 0.814785; 0.337495; 0.471405;, + 0.768172; 0.318187; 0.555579;, + 0.815488; 0.162209; 0.555579;, + 0.906125; 0.180238; 0.382691;, + 0.853551; 0.353552; 0.382691;, + 0.814785; 0.337495; 0.471405;, + 0.864971; 0.172052; 0.471405;, + 0.938552; 0.186687; 0.290291;, + 0.884096; 0.366205; 0.290291;, + 0.853551; 0.353552; 0.382691;, + 0.906125; 0.180238; 0.382691;, + 0.961939; 0.191339; 0.195094;, + 0.906127; 0.375330; 0.195095;, + 0.884096; 0.366205; 0.290291;, + 0.938552; 0.186687; 0.290291;, + 0.976063; 0.194149; 0.098019;, + 0.919431; 0.380841; 0.098019;, + 0.906127; 0.375330; 0.195095;, + 0.961939; 0.191339; 0.195094;, + 0.980786; 0.195088; 0.000000;, + 0.923879; 0.382684; 0.000000;, + 0.919431; 0.380841; 0.098019;, + 0.976063; 0.194149; 0.098019;, + 0.976063; 0.194149; -0.098019;, + 0.919431; 0.380841; -0.098019;, + 0.923879; 0.382684; 0.000000;, + 0.980786; 0.195088; 0.000000;, + 0.961939; 0.191340; -0.195095;, + 0.906127; 0.375330; -0.195095;, + 0.919431; 0.380841; -0.098019;, + 0.976063; 0.194149; -0.098019;, + 0.938551; 0.186688; -0.290291;, + 0.884096; 0.366205; -0.290291;, + 0.906127; 0.375330; -0.195095;, + 0.961939; 0.191340; -0.195095;, + 0.906125; 0.180238; -0.382691;, + 0.853550; 0.353552; -0.382691;, + 0.884096; 0.366205; -0.290291;, + 0.938551; 0.186688; -0.290291;, + 0.864971; 0.172052; -0.471405;, + 0.814785; 0.337495; -0.471405;, + 0.853550; 0.353552; -0.382691;, + 0.906125; 0.180238; -0.382691;, + 0.815487; 0.162209; -0.555579;, + 0.768172; 0.318187; -0.555579;, + 0.814785; 0.337495; -0.471405;, + 0.864971; 0.172052; -0.471405;, + 0.758150; 0.150804; -0.634403;, + 0.714161; 0.295815; -0.634403;, + 0.768172; 0.318187; -0.555579;, + 0.815487; 0.162209; -0.555579;, + 0.693511; 0.137946; -0.707116;, + 0.653273; 0.270595; -0.707116;, + 0.714161; 0.295815; -0.634403;, + 0.758150; 0.150804; -0.634403;, + 0.622195; 0.123761; -0.773017;, + 0.586095; 0.242769; -0.773018;, + 0.653273; 0.270595; -0.707116;, + 0.693511; 0.137946; -0.707116;, + 0.544886; 0.108383; -0.831476;, + 0.513271; 0.212604; -0.831476;, + 0.586095; 0.242769; -0.773018;, + 0.622195; 0.123761; -0.773017;, + 0.462330; 0.091962; -0.881926;, + 0.435505; 0.180392; -0.881926;, + 0.513271; 0.212604; -0.831476;, + 0.544886; 0.108383; -0.831476;, + 0.375322; 0.074656; -0.923883;, + 0.353546; 0.146444; -0.923883;, + 0.435505; 0.180392; -0.881926;, + 0.462330; 0.091962; -0.881926;, + 0.284700; 0.056630; -0.956943;, + 0.268181; 0.111084; -0.956943;, + 0.353546; 0.146444; -0.923883;, + 0.375322; 0.074656; -0.923883;, + 0.191337; 0.038059; -0.980786;, + 0.180235; 0.074656; -0.980786;, + 0.268181; 0.111084; -0.956943;, + 0.284700; 0.056630; -0.956943;, + 0.096131; 0.019121; -0.995185;, + 0.090553; 0.037508; -0.995185;, + 0.180235; 0.074656; -0.980786;, + 0.191337; 0.038059; -0.980786;, + 0.090553; 0.037508; -0.995185;, + 0.096131; 0.019121; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.000000; -0.000000; -1.000000;, + 0.081496; 0.054454; -0.995185;, + 0.090553; 0.037508; -0.995185;, + 0.090553; 0.037508; -0.995185;, + 0.081496; 0.054454; -0.995185;, + 0.162207; 0.108384; -0.980786;, + 0.180235; 0.074656; -0.980786;, + 0.180235; 0.074656; -0.980786;, + 0.162207; 0.108384; -0.980786;, + 0.241357; 0.161269; -0.956943;, + 0.268181; 0.111084; -0.956943;, + 0.268181; 0.111084; -0.956943;, + 0.241357; 0.161269; -0.956943;, + 0.318183; 0.212603; -0.923883;, + 0.353546; 0.146444; -0.923883;, + 0.353546; 0.146444; -0.923883;, + 0.318183; 0.212603; -0.923883;, + 0.391944; 0.261889; -0.881926;, + 0.435505; 0.180392; -0.881926;, + 0.435505; 0.180392; -0.881926;, + 0.391944; 0.261889; -0.881926;, + 0.461932; 0.308653; -0.831476;, + 0.513271; 0.212604; -0.831476;, + 0.513271; 0.212604; -0.831476;, + 0.461932; 0.308653; -0.831476;, + 0.527472; 0.352445; -0.773018;, + 0.586095; 0.242769; -0.773018;, + 0.586095; 0.242769; -0.773018;, + 0.527472; 0.352445; -0.773018;, + 0.587930; 0.392843; -0.707116;, + 0.653273; 0.270595; -0.707116;, + 0.653273; 0.270595; -0.707116;, + 0.587930; 0.392843; -0.707116;, + 0.642728; 0.429457; -0.634403;, + 0.714161; 0.295815; -0.634403;, + 0.714161; 0.295815; -0.634403;, + 0.642728; 0.429457; -0.634403;, + 0.691337; 0.461937; -0.555579;, + 0.768172; 0.318187; -0.555579;, + 0.768172; 0.318187; -0.555579;, + 0.691337; 0.461937; -0.555579;, + 0.733287; 0.489967; -0.471405;, + 0.814785; 0.337495; -0.471405;, + 0.814785; 0.337495; -0.471405;, + 0.733287; 0.489967; -0.471405;, + 0.768175; 0.513278; -0.382691;, + 0.853550; 0.353552; -0.382691;, + 0.853550; 0.353552; -0.382691;, + 0.768175; 0.513278; -0.382691;, + 0.795665; 0.531647; -0.290291;, + 0.884096; 0.366205; -0.290291;, + 0.884096; 0.366205; -0.290291;, + 0.795665; 0.531647; -0.290291;, + 0.815492; 0.544895; -0.195095;, + 0.906127; 0.375330; -0.195095;, + 0.906127; 0.375330; -0.195095;, + 0.815492; 0.544895; -0.195095;, + 0.827466; 0.552895; -0.098019;, + 0.919431; 0.380841; -0.098019;, + 0.919431; 0.380841; -0.098019;, + 0.827466; 0.552895; -0.098019;, + 0.831470; 0.555570; 0.000000;, + 0.923879; 0.382684; 0.000000;, + 0.923879; 0.382684; 0.000000;, + 0.831470; 0.555570; 0.000000;, + 0.827466; 0.552895; 0.098019;, + 0.919431; 0.380841; 0.098019;, + 0.919431; 0.380841; 0.098019;, + 0.827466; 0.552895; 0.098019;, + 0.815492; 0.544895; 0.195095;, + 0.906127; 0.375330; 0.195095;, + 0.906127; 0.375330; 0.195095;, + 0.815492; 0.544895; 0.195095;, + 0.795665; 0.531647; 0.290291;, + 0.884096; 0.366205; 0.290291;, + 0.884096; 0.366205; 0.290291;, + 0.795665; 0.531647; 0.290291;, + 0.768175; 0.513278; 0.382691;, + 0.853551; 0.353552; 0.382691;, + 0.853551; 0.353552; 0.382691;, + 0.768175; 0.513278; 0.382691;, + 0.733287; 0.489967; 0.471405;, + 0.814785; 0.337495; 0.471405;, + 0.814785; 0.337495; 0.471405;, + 0.733287; 0.489967; 0.471405;, + 0.691337; 0.461937; 0.555579;, + 0.768172; 0.318187; 0.555579;, + 0.768172; 0.318187; 0.555579;, + 0.691337; 0.461937; 0.555579;, + 0.642729; 0.429458; 0.634402;, + 0.714162; 0.295816; 0.634402;, + 0.714162; 0.295816; 0.634402;, + 0.642729; 0.429458; 0.634402;, + 0.587931; 0.392843; 0.707115;, + 0.653274; 0.270595; 0.707115;, + 0.653274; 0.270595; 0.707115;, + 0.587931; 0.392843; 0.707115;, + 0.527471; 0.352445; 0.773018;, + 0.586095; 0.242768; 0.773018;, + 0.586095; 0.242768; 0.773018;, + 0.527471; 0.352445; 0.773018;, + 0.461932; 0.308653; 0.831476;, + 0.513271; 0.212604; 0.831476;, + 0.513271; 0.212604; 0.831476;, + 0.461932; 0.308653; 0.831476;, + 0.391945; 0.261889; 0.881926;, + 0.435506; 0.180392; 0.881926;, + 0.435506; 0.180392; 0.881926;, + 0.391945; 0.261889; 0.881926;, + 0.318183; 0.212603; 0.923883;, + 0.353547; 0.146444; 0.923883;, + 0.353547; 0.146444; 0.923883;, + 0.318183; 0.212603; 0.923883;, + 0.241358; 0.161270; 0.956942;, + 0.268182; 0.111085; 0.956942;, + 0.268182; 0.111085; 0.956942;, + 0.241358; 0.161270; 0.956942;, + 0.162208; 0.108384; 0.980786;, + 0.180236; 0.074656; 0.980786;, + 0.180236; 0.074656; 0.980786;, + 0.162208; 0.108384; 0.980786;, + 0.081496; 0.054454; 0.995185;, + 0.090554; 0.037509; 0.995185;, + 0.090554; 0.037509; 0.995185;, + 0.081496; 0.054454; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.081496; 0.054454; 0.995185;, + 0.069307; 0.069307; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.162208; 0.108384; 0.980786;, + 0.137946; 0.137947; 0.980786;, + 0.069307; 0.069307; 0.995185;, + 0.081496; 0.054454; 0.995185;, + 0.241358; 0.161270; 0.956942;, + 0.205258; 0.205258; 0.956942;, + 0.137946; 0.137947; 0.980786;, + 0.162208; 0.108384; 0.980786;, + 0.318183; 0.212603; 0.923883;, + 0.270593; 0.270593; 0.923883;, + 0.205258; 0.205258; 0.956942;, + 0.241358; 0.161270; 0.956942;, + 0.391945; 0.261889; 0.881926;, + 0.333322; 0.333322; 0.881926;, + 0.270593; 0.270593; 0.923883;, + 0.318183; 0.212603; 0.923883;, + 0.461932; 0.308653; 0.831476;, + 0.392841; 0.392841; 0.831476;, + 0.333322; 0.333322; 0.881926;, + 0.391945; 0.261889; 0.881926;, + 0.527471; 0.352445; 0.773018;, + 0.448577; 0.448578; 0.773018;, + 0.392841; 0.392841; 0.831476;, + 0.461932; 0.308653; 0.831476;, + 0.587931; 0.392843; 0.707115;, + 0.499994; 0.499994; 0.707115;, + 0.448577; 0.448578; 0.773018;, + 0.527471; 0.352445; 0.773018;, + 0.642729; 0.429458; 0.634402;, + 0.546596; 0.546596; 0.634402;, + 0.499994; 0.499994; 0.707115;, + 0.587931; 0.392843; 0.707115;, + 0.691337; 0.461937; 0.555579;, + 0.587934; 0.587934; 0.555579;, + 0.546596; 0.546596; 0.634402;, + 0.642729; 0.429458; 0.634402;, + 0.733287; 0.489967; 0.471405;, + 0.623609; 0.623610; 0.471405;, + 0.587934; 0.587934; 0.555579;, + 0.691337; 0.461937; 0.555579;, + 0.768175; 0.513278; 0.382691;, + 0.653279; 0.653279; 0.382691;, + 0.623609; 0.623610; 0.471405;, + 0.733287; 0.489967; 0.471405;, + 0.795665; 0.531647; 0.290291;, + 0.676657; 0.676658; 0.290291;, + 0.653279; 0.653279; 0.382691;, + 0.768175; 0.513278; 0.382691;, + 0.815492; 0.544895; 0.195095;, + 0.693519; 0.693519; 0.195095;, + 0.676657; 0.676658; 0.290291;, + 0.795665; 0.531647; 0.290291;, + 0.827466; 0.552895; 0.098019;, + 0.703702; 0.703702; 0.098019;, + 0.693519; 0.693519; 0.195095;, + 0.815492; 0.544895; 0.195095;, + 0.831470; 0.555570; 0.000000;, + 0.707107; 0.707107; 0.000000;, + 0.703702; 0.703702; 0.098019;, + 0.827466; 0.552895; 0.098019;, + 0.827466; 0.552895; -0.098019;, + 0.703702; 0.703702; -0.098019;, + 0.707107; 0.707107; 0.000000;, + 0.831470; 0.555570; 0.000000;, + 0.815492; 0.544895; -0.195095;, + 0.693519; 0.693519; -0.195095;, + 0.703702; 0.703702; -0.098019;, + 0.827466; 0.552895; -0.098019;, + 0.795665; 0.531647; -0.290291;, + 0.676657; 0.676658; -0.290291;, + 0.693519; 0.693519; -0.195095;, + 0.815492; 0.544895; -0.195095;, + 0.768175; 0.513278; -0.382691;, + 0.653279; 0.653279; -0.382691;, + 0.676657; 0.676658; -0.290291;, + 0.795665; 0.531647; -0.290291;, + 0.733287; 0.489967; -0.471405;, + 0.623609; 0.623609; -0.471405;, + 0.653279; 0.653279; -0.382691;, + 0.768175; 0.513278; -0.382691;, + 0.691337; 0.461937; -0.555579;, + 0.587933; 0.587934; -0.555579;, + 0.623609; 0.623609; -0.471405;, + 0.733287; 0.489967; -0.471405;, + 0.642728; 0.429457; -0.634403;, + 0.546595; 0.546596; -0.634403;, + 0.587933; 0.587934; -0.555579;, + 0.691337; 0.461937; -0.555579;, + 0.587930; 0.392843; -0.707116;, + 0.499994; 0.499994; -0.707116;, + 0.546595; 0.546596; -0.634403;, + 0.642728; 0.429457; -0.634403;, + 0.527472; 0.352445; -0.773018;, + 0.448578; 0.448578; -0.773018;, + 0.499994; 0.499994; -0.707116;, + 0.587930; 0.392843; -0.707116;, + 0.461932; 0.308653; -0.831476;, + 0.392841; 0.392841; -0.831476;, + 0.448578; 0.448578; -0.773018;, + 0.527472; 0.352445; -0.773018;, + 0.391944; 0.261889; -0.881926;, + 0.333321; 0.333321; -0.881926;, + 0.392841; 0.392841; -0.831476;, + 0.461932; 0.308653; -0.831476;, + 0.318183; 0.212603; -0.923883;, + 0.270592; 0.270592; -0.923883;, + 0.333321; 0.333321; -0.881926;, + 0.391944; 0.261889; -0.881926;, + 0.241357; 0.161269; -0.956943;, + 0.205257; 0.205257; -0.956943;, + 0.270592; 0.270592; -0.923883;, + 0.318183; 0.212603; -0.923883;, + 0.162207; 0.108384; -0.980786;, + 0.137946; 0.137946; -0.980786;, + 0.205257; 0.205257; -0.956943;, + 0.241357; 0.161269; -0.956943;, + 0.081496; 0.054454; -0.995185;, + 0.069307; 0.069307; -0.995185;, + 0.137946; 0.137946; -0.980786;, + 0.162207; 0.108384; -0.980786;, + -0.000000; -0.000000; -1.000000;, + 0.069307; 0.069307; -0.995185;, + 0.081496; 0.054454; -0.995185;, + -0.000000; -0.000000; -1.000000;, + 0.054454; 0.081496; -0.995185;, + 0.069307; 0.069307; -0.995185;, + 0.069307; 0.069307; -0.995185;, + 0.054454; 0.081496; -0.995185;, + 0.108383; 0.162207; -0.980786;, + 0.137946; 0.137946; -0.980786;, + 0.137946; 0.137946; -0.980786;, + 0.108383; 0.162207; -0.980786;, + 0.161269; 0.241357; -0.956943;, + 0.205257; 0.205257; -0.956943;, + 0.205257; 0.205257; -0.956943;, + 0.161269; 0.241357; -0.956943;, + 0.212603; 0.318183; -0.923883;, + 0.270592; 0.270592; -0.923883;, + 0.270592; 0.270592; -0.923883;, + 0.212603; 0.318183; -0.923883;, + 0.261889; 0.391945; -0.881926;, + 0.333321; 0.333321; -0.881926;, + 0.333321; 0.333321; -0.881926;, + 0.261889; 0.391945; -0.881926;, + 0.308653; 0.461932; -0.831476;, + 0.392841; 0.392841; -0.831476;, + 0.392841; 0.392841; -0.831476;, + 0.308653; 0.461932; -0.831476;, + 0.352445; 0.527472; -0.773017;, + 0.448578; 0.448578; -0.773018;, + 0.448578; 0.448578; -0.773018;, + 0.352445; 0.527472; -0.773017;, + 0.392843; 0.587931; -0.707116;, + 0.499994; 0.499994; -0.707116;, + 0.499994; 0.499994; -0.707116;, + 0.392843; 0.587931; -0.707116;, + 0.429457; 0.642728; -0.634403;, + 0.546595; 0.546596; -0.634403;, + 0.546595; 0.546596; -0.634403;, + 0.429457; 0.642728; -0.634403;, + 0.461936; 0.691337; -0.555579;, + 0.587933; 0.587934; -0.555579;, + 0.587933; 0.587934; -0.555579;, + 0.461936; 0.691337; -0.555579;, + 0.489967; 0.733287; -0.471405;, + 0.623609; 0.623609; -0.471405;, + 0.623609; 0.623609; -0.471405;, + 0.489967; 0.733287; -0.471405;, + 0.513278; 0.768175; -0.382691;, + 0.653279; 0.653279; -0.382691;, + 0.653279; 0.653279; -0.382691;, + 0.513278; 0.768175; -0.382691;, + 0.531646; 0.795665; -0.290291;, + 0.676657; 0.676658; -0.290291;, + 0.676657; 0.676658; -0.290291;, + 0.531646; 0.795665; -0.290291;, + 0.544894; 0.815492; -0.195095;, + 0.693519; 0.693519; -0.195095;, + 0.693519; 0.693519; -0.195095;, + 0.544894; 0.815492; -0.195095;, + 0.552895; 0.827466; -0.098019;, + 0.703702; 0.703702; -0.098019;, + 0.703702; 0.703702; -0.098019;, + 0.552895; 0.827466; -0.098019;, + 0.555570; 0.831470; 0.000000;, + 0.707107; 0.707107; 0.000000;, + 0.707107; 0.707107; 0.000000;, + 0.555570; 0.831470; 0.000000;, + 0.552895; 0.827466; 0.098019;, + 0.703702; 0.703702; 0.098019;, + 0.703702; 0.703702; 0.098019;, + 0.552895; 0.827466; 0.098019;, + 0.544895; 0.815493; 0.195095;, + 0.693519; 0.693519; 0.195095;, + 0.693519; 0.693519; 0.195095;, + 0.544895; 0.815493; 0.195095;, + 0.531646; 0.795665; 0.290291;, + 0.676657; 0.676658; 0.290291;, + 0.676657; 0.676658; 0.290291;, + 0.531646; 0.795665; 0.290291;, + 0.513278; 0.768175; 0.382691;, + 0.653279; 0.653279; 0.382691;, + 0.653279; 0.653279; 0.382691;, + 0.513278; 0.768175; 0.382691;, + 0.489967; 0.733287; 0.471405;, + 0.623609; 0.623610; 0.471405;, + 0.623609; 0.623610; 0.471405;, + 0.489967; 0.733287; 0.471405;, + 0.461936; 0.691337; 0.555579;, + 0.587934; 0.587934; 0.555579;, + 0.587934; 0.587934; 0.555579;, + 0.461936; 0.691337; 0.555579;, + 0.429458; 0.642729; 0.634402;, + 0.546596; 0.546596; 0.634402;, + 0.546596; 0.546596; 0.634402;, + 0.429458; 0.642729; 0.634402;, + 0.392843; 0.587931; 0.707115;, + 0.499994; 0.499994; 0.707115;, + 0.499994; 0.499994; 0.707115;, + 0.392843; 0.587931; 0.707115;, + 0.352445; 0.527471; 0.773018;, + 0.448577; 0.448578; 0.773018;, + 0.448577; 0.448578; 0.773018;, + 0.352445; 0.527471; 0.773018;, + 0.308653; 0.461932; 0.831476;, + 0.392841; 0.392841; 0.831476;, + 0.392841; 0.392841; 0.831476;, + 0.308653; 0.461932; 0.831476;, + 0.261889; 0.391945; 0.881926;, + 0.333322; 0.333322; 0.881926;, + 0.333322; 0.333322; 0.881926;, + 0.261889; 0.391945; 0.881926;, + 0.212603; 0.318184; 0.923883;, + 0.270593; 0.270593; 0.923883;, + 0.270593; 0.270593; 0.923883;, + 0.212603; 0.318184; 0.923883;, + 0.161270; 0.241358; 0.956942;, + 0.205258; 0.205258; 0.956942;, + 0.205258; 0.205258; 0.956942;, + 0.161270; 0.241358; 0.956942;, + 0.108384; 0.162208; 0.980786;, + 0.137946; 0.137947; 0.980786;, + 0.137946; 0.137947; 0.980786;, + 0.108384; 0.162208; 0.980786;, + 0.054454; 0.081497; 0.995185;, + 0.069307; 0.069307; 0.995185;, + 0.069307; 0.069307; 0.995185;, + 0.054454; 0.081497; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.054454; 0.081497; 0.995185;, + 0.037509; 0.090554; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.108384; 0.162208; 0.980786;, + 0.074656; 0.180236; 0.980786;, + 0.037509; 0.090554; 0.995185;, + 0.054454; 0.081497; 0.995185;, + 0.161270; 0.241358; 0.956942;, + 0.111085; 0.268182; 0.956942;, + 0.074656; 0.180236; 0.980786;, + 0.108384; 0.162208; 0.980786;, + 0.212603; 0.318184; 0.923883;, + 0.146444; 0.353547; 0.923883;, + 0.111085; 0.268182; 0.956942;, + 0.161270; 0.241358; 0.956942;, + 0.261889; 0.391945; 0.881926;, + 0.180392; 0.435506; 0.881926;, + 0.146444; 0.353547; 0.923883;, + 0.212603; 0.318184; 0.923883;, + 0.308653; 0.461932; 0.831476;, + 0.212604; 0.513272; 0.831476;, + 0.180392; 0.435506; 0.881926;, + 0.261889; 0.391945; 0.881926;, + 0.352445; 0.527471; 0.773018;, + 0.242768; 0.586095; 0.773018;, + 0.212604; 0.513272; 0.831476;, + 0.308653; 0.461932; 0.831476;, + 0.392843; 0.587931; 0.707115;, + 0.270595; 0.653274; 0.707115;, + 0.242768; 0.586095; 0.773018;, + 0.352445; 0.527471; 0.773018;, + 0.429458; 0.642729; 0.634402;, + 0.295815; 0.714162; 0.634402;, + 0.270595; 0.653274; 0.707115;, + 0.392843; 0.587931; 0.707115;, + 0.461936; 0.691337; 0.555579;, + 0.318187; 0.768173; 0.555579;, + 0.295815; 0.714162; 0.634402;, + 0.429458; 0.642729; 0.634402;, + 0.489967; 0.733287; 0.471405;, + 0.337495; 0.814785; 0.471405;, + 0.318187; 0.768173; 0.555579;, + 0.461936; 0.691337; 0.555579;, + 0.513278; 0.768175; 0.382691;, + 0.353552; 0.853551; 0.382691;, + 0.337495; 0.814785; 0.471405;, + 0.489967; 0.733287; 0.471405;, + 0.531646; 0.795665; 0.290291;, + 0.366204; 0.884096; 0.290291;, + 0.353552; 0.853551; 0.382691;, + 0.513278; 0.768175; 0.382691;, + 0.544895; 0.815493; 0.195095;, + 0.375330; 0.906127; 0.195095;, + 0.366204; 0.884096; 0.290291;, + 0.531646; 0.795665; 0.290291;, + 0.552895; 0.827466; 0.098019;, + 0.380840; 0.919431; 0.098019;, + 0.375330; 0.906127; 0.195095;, + 0.544895; 0.815493; 0.195095;, + 0.555570; 0.831470; 0.000000;, + 0.382683; 0.923880; 0.000000;, + 0.380840; 0.919431; 0.098019;, + 0.552895; 0.827466; 0.098019;, + 0.552895; 0.827466; -0.098019;, + 0.380840; 0.919431; -0.098019;, + 0.382683; 0.923880; 0.000000;, + 0.555570; 0.831470; 0.000000;, + 0.544894; 0.815492; -0.195095;, + 0.375330; 0.906127; -0.195095;, + 0.380840; 0.919431; -0.098019;, + 0.552895; 0.827466; -0.098019;, + 0.531646; 0.795665; -0.290291;, + 0.366204; 0.884096; -0.290291;, + 0.375330; 0.906127; -0.195095;, + 0.544894; 0.815492; -0.195095;, + 0.513278; 0.768175; -0.382691;, + 0.353552; 0.853551; -0.382691;, + 0.366204; 0.884096; -0.290291;, + 0.531646; 0.795665; -0.290291;, + 0.489967; 0.733287; -0.471405;, + 0.337495; 0.814785; -0.471405;, + 0.353552; 0.853551; -0.382691;, + 0.513278; 0.768175; -0.382691;, + 0.461936; 0.691337; -0.555579;, + 0.318187; 0.768172; -0.555579;, + 0.337495; 0.814785; -0.471405;, + 0.489967; 0.733287; -0.471405;, + 0.429457; 0.642728; -0.634403;, + 0.295815; 0.714161; -0.634403;, + 0.318187; 0.768172; -0.555579;, + 0.461936; 0.691337; -0.555579;, + 0.392843; 0.587931; -0.707116;, + 0.270595; 0.653273; -0.707116;, + 0.295815; 0.714161; -0.634403;, + 0.429457; 0.642728; -0.634403;, + 0.352445; 0.527472; -0.773017;, + 0.242768; 0.586095; -0.773017;, + 0.270595; 0.653273; -0.707116;, + 0.392843; 0.587931; -0.707116;, + 0.308653; 0.461932; -0.831476;, + 0.212604; 0.513272; -0.831476;, + 0.242768; 0.586095; -0.773017;, + 0.352445; 0.527472; -0.773017;, + 0.261889; 0.391945; -0.881926;, + 0.180392; 0.435505; -0.881926;, + 0.212604; 0.513272; -0.831476;, + 0.308653; 0.461932; -0.831476;, + 0.212603; 0.318183; -0.923883;, + 0.146443; 0.353546; -0.923883;, + 0.180392; 0.435505; -0.881926;, + 0.261889; 0.391945; -0.881926;, + 0.161269; 0.241357; -0.956943;, + 0.111084; 0.268181; -0.956943;, + 0.146443; 0.353546; -0.923883;, + 0.212603; 0.318183; -0.923883;, + 0.108383; 0.162207; -0.980786;, + 0.074656; 0.180235; -0.980786;, + 0.111084; 0.268181; -0.956943;, + 0.161269; 0.241357; -0.956943;, + 0.054454; 0.081496; -0.995185;, + 0.037508; 0.090554; -0.995185;, + 0.074656; 0.180235; -0.980786;, + 0.108383; 0.162207; -0.980786;, + -0.000000; -0.000000; -1.000000;, + 0.037508; 0.090554; -0.995185;, + 0.054454; 0.081496; -0.995185;, + -0.000000; -0.000000; -1.000000;, + 0.019122; 0.096131; -0.995185;, + 0.037508; 0.090554; -0.995185;, + 0.037508; 0.090554; -0.995185;, + 0.019122; 0.096131; -0.995185;, + 0.038059; 0.191337; -0.980786;, + 0.074656; 0.180235; -0.980786;, + 0.074656; 0.180235; -0.980786;, + 0.038059; 0.191337; -0.980786;, + 0.056630; 0.284700; -0.956943;, + 0.111084; 0.268181; -0.956943;, + 0.111084; 0.268181; -0.956943;, + 0.056630; 0.284700; -0.956943;, + 0.074656; 0.375322; -0.923883;, + 0.146443; 0.353546; -0.923883;, + 0.146443; 0.353546; -0.923883;, + 0.074656; 0.375322; -0.923883;, + 0.091963; 0.462330; -0.881926;, + 0.180392; 0.435505; -0.881926;, + 0.180392; 0.435505; -0.881926;, + 0.091963; 0.462330; -0.881926;, + 0.108384; 0.544886; -0.831476;, + 0.212604; 0.513272; -0.831476;, + 0.212604; 0.513272; -0.831476;, + 0.108384; 0.544886; -0.831476;, + 0.123762; 0.622195; -0.773017;, + 0.242768; 0.586095; -0.773017;, + 0.242768; 0.586095; -0.773017;, + 0.123762; 0.622195; -0.773017;, + 0.137948; 0.693511; -0.707116;, + 0.270595; 0.653273; -0.707116;, + 0.270595; 0.653273; -0.707116;, + 0.137948; 0.693511; -0.707116;, + 0.150805; 0.758150; -0.634403;, + 0.295815; 0.714161; -0.634403;, + 0.295815; 0.714161; -0.634403;, + 0.150805; 0.758150; -0.634403;, + 0.162210; 0.815487; -0.555579;, + 0.318187; 0.768172; -0.555579;, + 0.318187; 0.768172; -0.555579;, + 0.162210; 0.815487; -0.555579;, + 0.172053; 0.864971; -0.471405;, + 0.337495; 0.814785; -0.471405;, + 0.337495; 0.814785; -0.471405;, + 0.172053; 0.864971; -0.471405;, + 0.180239; 0.906124; -0.382691;, + 0.353552; 0.853551; -0.382691;, + 0.353552; 0.853551; -0.382691;, + 0.180239; 0.906124; -0.382691;, + 0.186689; 0.938551; -0.290291;, + 0.366204; 0.884096; -0.290291;, + 0.366204; 0.884096; -0.290291;, + 0.186689; 0.938551; -0.290291;, + 0.191341; 0.961939; -0.195095;, + 0.375330; 0.906127; -0.195095;, + 0.375330; 0.906127; -0.195095;, + 0.191341; 0.961939; -0.195095;, + 0.194151; 0.976062; -0.098019;, + 0.380840; 0.919431; -0.098019;, + 0.380840; 0.919431; -0.098019;, + 0.194151; 0.976062; -0.098019;, + 0.195090; 0.980785; 0.000000;, + 0.382683; 0.923880; 0.000000;, + 0.382683; 0.923880; 0.000000;, + 0.195090; 0.980785; 0.000000;, + 0.194151; 0.976062; 0.098019;, + 0.380840; 0.919431; 0.098019;, + 0.380840; 0.919431; 0.098019;, + 0.194151; 0.976062; 0.098019;, + 0.191341; 0.961939; 0.195094;, + 0.375330; 0.906127; 0.195095;, + 0.375330; 0.906127; 0.195095;, + 0.191341; 0.961939; 0.195094;, + 0.186689; 0.938551; 0.290291;, + 0.366204; 0.884096; 0.290291;, + 0.366204; 0.884096; 0.290291;, + 0.186689; 0.938551; 0.290291;, + 0.180239; 0.906124; 0.382691;, + 0.353552; 0.853551; 0.382691;, + 0.353552; 0.853551; 0.382691;, + 0.180239; 0.906124; 0.382691;, + 0.172053; 0.864971; 0.471405;, + 0.337495; 0.814785; 0.471405;, + 0.337495; 0.814785; 0.471405;, + 0.172053; 0.864971; 0.471405;, + 0.162210; 0.815488; 0.555579;, + 0.318187; 0.768173; 0.555579;, + 0.318187; 0.768173; 0.555579;, + 0.162210; 0.815488; 0.555579;, + 0.150805; 0.758151; 0.634402;, + 0.295815; 0.714162; 0.634402;, + 0.295815; 0.714162; 0.634402;, + 0.150805; 0.758151; 0.634402;, + 0.137948; 0.693512; 0.707115;, + 0.270595; 0.653274; 0.707115;, + 0.270595; 0.653274; 0.707115;, + 0.137948; 0.693512; 0.707115;, + 0.123762; 0.622195; 0.773018;, + 0.242768; 0.586095; 0.773018;, + 0.242768; 0.586095; 0.773018;, + 0.123762; 0.622195; 0.773018;, + 0.108384; 0.544886; 0.831476;, + 0.212604; 0.513272; 0.831476;, + 0.212604; 0.513272; 0.831476;, + 0.108384; 0.544886; 0.831476;, + 0.091963; 0.462331; 0.881926;, + 0.180392; 0.435506; 0.881926;, + 0.180392; 0.435506; 0.881926;, + 0.091963; 0.462331; 0.881926;, + 0.074656; 0.375323; 0.923883;, + 0.146444; 0.353547; 0.923883;, + 0.146444; 0.353547; 0.923883;, + 0.074656; 0.375323; 0.923883;, + 0.056630; 0.284701; 0.956942;, + 0.111085; 0.268182; 0.956942;, + 0.111085; 0.268182; 0.956942;, + 0.056630; 0.284701; 0.956942;, + 0.038059; 0.191337; 0.980786;, + 0.074656; 0.180236; 0.980786;, + 0.074656; 0.180236; 0.980786;, + 0.038059; 0.191337; 0.980786;, + 0.019122; 0.096132; 0.995185;, + 0.037509; 0.090554; 0.995185;, + 0.037509; 0.090554; 0.995185;, + 0.019122; 0.096132; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.019122; 0.096132; 0.995185;, + -0.000000; 0.098015; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.038059; 0.191337; 0.980786;, + -0.000000; 0.195086; 0.980786;, + -0.000000; 0.098015; 0.995185;, + 0.019122; 0.096132; 0.995185;, + 0.056630; 0.284701; 0.956942;, + -0.000000; 0.290279; 0.956942;, + -0.000000; 0.195086; 0.980786;, + 0.038059; 0.191337; 0.980786;, + 0.074656; 0.375323; 0.923883;, + -0.000000; 0.382676; 0.923883;, + -0.000000; 0.290279; 0.956942;, + 0.056630; 0.284701; 0.956942;, + 0.091963; 0.462331; 0.881926;, + -0.000000; 0.471388; 0.881926;, + -0.000000; 0.382676; 0.923883;, + 0.074656; 0.375323; 0.923883;, + 0.108384; 0.544886; 0.831476;, + -0.000000; 0.555561; 0.831476;, + -0.000000; 0.471388; 0.881926;, + 0.091963; 0.462331; 0.881926;, + 0.123762; 0.622195; 0.773018;, + -0.000000; 0.634384; 0.773018;, + -0.000000; 0.555561; 0.831476;, + 0.108384; 0.544886; 0.831476;, + 0.137948; 0.693512; 0.707115;, + -0.000000; 0.707099; 0.707115;, + -0.000000; 0.634384; 0.773018;, + 0.123762; 0.622195; 0.773018;, + 0.150805; 0.758151; 0.634402;, + -0.000000; 0.773004; 0.634402;, + -0.000000; 0.707099; 0.707115;, + 0.137948; 0.693512; 0.707115;, + 0.162210; 0.815488; 0.555579;, + -0.000000; 0.831464; 0.555579;, + -0.000000; 0.773004; 0.634402;, + 0.150805; 0.758151; 0.634402;, + 0.172053; 0.864971; 0.471405;, + -0.000000; 0.881917; 0.471405;, + -0.000000; 0.831464; 0.555579;, + 0.162210; 0.815488; 0.555579;, + 0.180239; 0.906124; 0.382691;, + -0.000000; 0.923876; 0.382691;, + -0.000000; 0.881917; 0.471405;, + 0.172053; 0.864971; 0.471405;, + 0.186689; 0.938551; 0.290291;, + -0.000000; 0.956938; 0.290291;, + -0.000000; 0.923876; 0.382691;, + 0.180239; 0.906124; 0.382691;, + 0.191341; 0.961939; 0.195094;, + -0.000000; 0.980784; 0.195094;, + -0.000000; 0.956938; 0.290291;, + 0.186689; 0.938551; 0.290291;, + 0.194151; 0.976062; 0.098019;, + -0.000000; 0.995185; 0.098019;, + -0.000000; 0.980784; 0.195094;, + 0.191341; 0.961939; 0.195094;, + 0.195090; 0.980785; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 0.995185; 0.098019;, + 0.194151; 0.976062; 0.098019;, + 0.194151; 0.976062; -0.098019;, + -0.000000; 0.995184; -0.098019;, + -0.000000; 1.000000; 0.000000;, + 0.195090; 0.980785; 0.000000;, + 0.191341; 0.961939; -0.195095;, + -0.000000; 0.980784; -0.195095;, + -0.000000; 0.995184; -0.098019;, + 0.194151; 0.976062; -0.098019;, + 0.186689; 0.938551; -0.290291;, + -0.000000; 0.956938; -0.290291;, + -0.000000; 0.980784; -0.195095;, + 0.191341; 0.961939; -0.195095;, + 0.180239; 0.906124; -0.382691;, + -0.000000; 0.923876; -0.382691;, + -0.000000; 0.956938; -0.290291;, + 0.186689; 0.938551; -0.290291;, + 0.172053; 0.864971; -0.471405;, + -0.000000; 0.881917; -0.471405;, + -0.000000; 0.923876; -0.382691;, + 0.180239; 0.906124; -0.382691;, + 0.162210; 0.815487; -0.555579;, + -0.000000; 0.831464; -0.555579;, + -0.000000; 0.881917; -0.471405;, + 0.172053; 0.864971; -0.471405;, + 0.150805; 0.758150; -0.634403;, + -0.000000; 0.773003; -0.634403;, + -0.000000; 0.831464; -0.555579;, + 0.162210; 0.815487; -0.555579;, + 0.137948; 0.693511; -0.707116;, + -0.000000; 0.707098; -0.707116;, + -0.000000; 0.773003; -0.634403;, + 0.150805; 0.758150; -0.634403;, + 0.123762; 0.622195; -0.773017;, + -0.000000; 0.634385; -0.773017;, + -0.000000; 0.707098; -0.707116;, + 0.137948; 0.693511; -0.707116;, + 0.108384; 0.544886; -0.831476;, + -0.000000; 0.555561; -0.831476;, + -0.000000; 0.634385; -0.773017;, + 0.123762; 0.622195; -0.773017;, + 0.091963; 0.462330; -0.881926;, + -0.000000; 0.471388; -0.881926;, + -0.000000; 0.555561; -0.831476;, + 0.108384; 0.544886; -0.831476;, + 0.074656; 0.375322; -0.923883;, + -0.000000; 0.382675; -0.923883;, + -0.000000; 0.471388; -0.881926;, + 0.091963; 0.462330; -0.881926;, + 0.056630; 0.284700; -0.956943;, + -0.000000; 0.290277; -0.956943;, + -0.000000; 0.382675; -0.923883;, + 0.074656; 0.375322; -0.923883;, + 0.038059; 0.191337; -0.980786;, + -0.000000; 0.195085; -0.980786;, + -0.000000; 0.290277; -0.956943;, + 0.056630; 0.284700; -0.956943;, + 0.019122; 0.096131; -0.995185;, + -0.000000; 0.098014; -0.995185;, + -0.000000; 0.195085; -0.980786;, + 0.038059; 0.191337; -0.980786;, + -0.000000; -0.000000; -1.000000;, + -0.000000; 0.098014; -0.995185;, + 0.019122; 0.096131; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.019122; 0.096131; -0.995185;, + -0.000000; 0.098014; -0.995185;, + -0.000000; 0.098014; -0.995185;, + -0.019122; 0.096131; -0.995185;, + -0.038059; 0.191337; -0.980786;, + -0.000000; 0.195085; -0.980786;, + -0.000000; 0.195085; -0.980786;, + -0.038059; 0.191337; -0.980786;, + -0.056630; 0.284700; -0.956943;, + -0.000000; 0.290277; -0.956943;, + -0.000000; 0.290277; -0.956943;, + -0.056630; 0.284700; -0.956943;, + -0.074656; 0.375322; -0.923883;, + -0.000000; 0.382675; -0.923883;, + -0.000000; 0.382675; -0.923883;, + -0.074656; 0.375322; -0.923883;, + -0.091963; 0.462330; -0.881926;, + -0.000000; 0.471388; -0.881926;, + -0.000000; 0.471388; -0.881926;, + -0.091963; 0.462330; -0.881926;, + -0.108385; 0.544886; -0.831476;, + -0.000000; 0.555561; -0.831476;, + -0.000000; 0.555561; -0.831476;, + -0.108385; 0.544886; -0.831476;, + -0.123762; 0.622195; -0.773017;, + -0.000000; 0.634385; -0.773017;, + -0.000000; 0.634385; -0.773017;, + -0.123762; 0.622195; -0.773017;, + -0.137948; 0.693511; -0.707116;, + -0.000000; 0.707098; -0.707116;, + -0.000000; 0.707098; -0.707116;, + -0.137948; 0.693511; -0.707116;, + -0.150806; 0.758150; -0.634403;, + -0.000000; 0.773003; -0.634403;, + -0.000000; 0.773003; -0.634403;, + -0.150806; 0.758150; -0.634403;, + -0.162211; 0.815487; -0.555579;, + -0.000000; 0.831464; -0.555579;, + -0.000000; 0.831464; -0.555579;, + -0.162211; 0.815487; -0.555579;, + -0.172054; 0.864971; -0.471405;, + -0.000000; 0.881917; -0.471405;, + -0.000000; 0.881917; -0.471405;, + -0.172054; 0.864971; -0.471405;, + -0.180239; 0.906124; -0.382691;, + -0.000000; 0.923876; -0.382691;, + -0.000000; 0.923876; -0.382691;, + -0.180239; 0.906124; -0.382691;, + -0.186690; 0.938551; -0.290291;, + -0.000000; 0.956938; -0.290291;, + -0.000000; 0.956938; -0.290291;, + -0.186690; 0.938551; -0.290291;, + -0.191342; 0.961939; -0.195095;, + -0.000000; 0.980784; -0.195095;, + -0.000000; 0.980784; -0.195095;, + -0.191342; 0.961939; -0.195095;, + -0.194151; 0.976062; -0.098020;, + -0.000000; 0.995184; -0.098019;, + -0.000000; 0.995184; -0.098019;, + -0.194151; 0.976062; -0.098020;, + -0.195090; 0.980785; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.000000; 1.000000; 0.000000;, + -0.195090; 0.980785; 0.000000;, + -0.194151; 0.976062; 0.098019;, + -0.000000; 0.995185; 0.098019;, + -0.000000; 0.995185; 0.098019;, + -0.194151; 0.976062; 0.098019;, + -0.191342; 0.961939; 0.195094;, + -0.000000; 0.980784; 0.195094;, + -0.000000; 0.980784; 0.195094;, + -0.191342; 0.961939; 0.195094;, + -0.186690; 0.938551; 0.290291;, + -0.000000; 0.956938; 0.290291;, + -0.000000; 0.956938; 0.290291;, + -0.186690; 0.938551; 0.290291;, + -0.180240; 0.906124; 0.382691;, + -0.000000; 0.923876; 0.382691;, + -0.000000; 0.923876; 0.382691;, + -0.180240; 0.906124; 0.382691;, + -0.172054; 0.864971; 0.471405;, + -0.000000; 0.881917; 0.471405;, + -0.000000; 0.881917; 0.471405;, + -0.172054; 0.864971; 0.471405;, + -0.162211; 0.815487; 0.555579;, + -0.000000; 0.831464; 0.555579;, + -0.000000; 0.831464; 0.555579;, + -0.162211; 0.815487; 0.555579;, + -0.150806; 0.758151; 0.634401;, + -0.000000; 0.773004; 0.634402;, + -0.000000; 0.773004; 0.634402;, + -0.150806; 0.758151; 0.634401;, + -0.137948; 0.693512; 0.707115;, + -0.000000; 0.707099; 0.707115;, + -0.000000; 0.707099; 0.707115;, + -0.137948; 0.693512; 0.707115;, + -0.123762; 0.622195; 0.773018;, + -0.000000; 0.634384; 0.773018;, + -0.000000; 0.634384; 0.773018;, + -0.123762; 0.622195; 0.773018;, + -0.108385; 0.544886; 0.831476;, + -0.000000; 0.555561; 0.831476;, + -0.000000; 0.555561; 0.831476;, + -0.108385; 0.544886; 0.831476;, + -0.091963; 0.462331; 0.881926;, + -0.000000; 0.471388; 0.881926;, + -0.000000; 0.471388; 0.881926;, + -0.091963; 0.462331; 0.881926;, + -0.074656; 0.375323; 0.923882;, + -0.000000; 0.382676; 0.923883;, + -0.000000; 0.382676; 0.923883;, + -0.074656; 0.375323; 0.923882;, + -0.056631; 0.284701; 0.956942;, + -0.000000; 0.290279; 0.956942;, + -0.000000; 0.290279; 0.956942;, + -0.056631; 0.284701; 0.956942;, + -0.038059; 0.191337; 0.980786;, + -0.000000; 0.195086; 0.980786;, + -0.000000; 0.195086; 0.980786;, + -0.038059; 0.191337; 0.980786;, + -0.019122; 0.096132; 0.995185;, + -0.000000; 0.098015; 0.995185;, + -0.000000; 0.098015; 0.995185;, + -0.019122; 0.096132; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.019122; 0.096132; 0.995185;, + -0.037509; 0.090554; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.038059; 0.191337; 0.980786;, + -0.074656; 0.180236; 0.980786;, + -0.037509; 0.090554; 0.995185;, + -0.019122; 0.096132; 0.995185;, + -0.056631; 0.284701; 0.956942;, + -0.111085; 0.268182; 0.956942;, + -0.074656; 0.180236; 0.980786;, + -0.038059; 0.191337; 0.980786;, + -0.074656; 0.375323; 0.923882;, + -0.146444; 0.353547; 0.923882;, + -0.111085; 0.268182; 0.956942;, + -0.056631; 0.284701; 0.956942;, + -0.091963; 0.462331; 0.881926;, + -0.180393; 0.435506; 0.881926;, + -0.146444; 0.353547; 0.923882;, + -0.074656; 0.375323; 0.923882;, + -0.108385; 0.544886; 0.831476;, + -0.212604; 0.513271; 0.831476;, + -0.180393; 0.435506; 0.881926;, + -0.091963; 0.462331; 0.881926;, + -0.123762; 0.622195; 0.773018;, + -0.242768; 0.586095; 0.773018;, + -0.212604; 0.513271; 0.831476;, + -0.108385; 0.544886; 0.831476;, + -0.137948; 0.693512; 0.707115;, + -0.270595; 0.653274; 0.707115;, + -0.242768; 0.586095; 0.773018;, + -0.123762; 0.622195; 0.773018;, + -0.150806; 0.758151; 0.634401;, + -0.295816; 0.714162; 0.634401;, + -0.270595; 0.653274; 0.707115;, + -0.137948; 0.693512; 0.707115;, + -0.162211; 0.815487; 0.555579;, + -0.318188; 0.768172; 0.555579;, + -0.295816; 0.714162; 0.634401;, + -0.150806; 0.758151; 0.634401;, + -0.172054; 0.864971; 0.471405;, + -0.337495; 0.814785; 0.471405;, + -0.318188; 0.768172; 0.555579;, + -0.162211; 0.815487; 0.555579;, + -0.180240; 0.906124; 0.382691;, + -0.353552; 0.853550; 0.382691;, + -0.337495; 0.814785; 0.471405;, + -0.172054; 0.864971; 0.471405;, + -0.186690; 0.938551; 0.290291;, + -0.366205; 0.884096; 0.290291;, + -0.353552; 0.853550; 0.382691;, + -0.180240; 0.906124; 0.382691;, + -0.191342; 0.961939; 0.195094;, + -0.375330; 0.906127; 0.195094;, + -0.366205; 0.884096; 0.290291;, + -0.186690; 0.938551; 0.290291;, + -0.194151; 0.976062; 0.098019;, + -0.380841; 0.919431; 0.098019;, + -0.375330; 0.906127; 0.195094;, + -0.191342; 0.961939; 0.195094;, + -0.195090; 0.980785; 0.000000;, + -0.382684; 0.923879; 0.000000;, + -0.380841; 0.919431; 0.098019;, + -0.194151; 0.976062; 0.098019;, + -0.194151; 0.976062; -0.098020;, + -0.380841; 0.919431; -0.098020;, + -0.382684; 0.923879; 0.000000;, + -0.195090; 0.980785; 0.000000;, + -0.191342; 0.961939; -0.195095;, + -0.375330; 0.906126; -0.195095;, + -0.380841; 0.919431; -0.098020;, + -0.194151; 0.976062; -0.098020;, + -0.186690; 0.938551; -0.290291;, + -0.366205; 0.884096; -0.290291;, + -0.375330; 0.906126; -0.195095;, + -0.191342; 0.961939; -0.195095;, + -0.180239; 0.906124; -0.382691;, + -0.353552; 0.853550; -0.382691;, + -0.366205; 0.884096; -0.290291;, + -0.186690; 0.938551; -0.290291;, + -0.172054; 0.864971; -0.471405;, + -0.337495; 0.814785; -0.471405;, + -0.353552; 0.853550; -0.382691;, + -0.180239; 0.906124; -0.382691;, + -0.162211; 0.815487; -0.555579;, + -0.318188; 0.768172; -0.555579;, + -0.337495; 0.814785; -0.471405;, + -0.172054; 0.864971; -0.471405;, + -0.150806; 0.758150; -0.634403;, + -0.295816; 0.714161; -0.634403;, + -0.318188; 0.768172; -0.555579;, + -0.162211; 0.815487; -0.555579;, + -0.137948; 0.693511; -0.707116;, + -0.270595; 0.653273; -0.707116;, + -0.295816; 0.714161; -0.634403;, + -0.150806; 0.758150; -0.634403;, + -0.123762; 0.622195; -0.773017;, + -0.242769; 0.586095; -0.773017;, + -0.270595; 0.653273; -0.707116;, + -0.137948; 0.693511; -0.707116;, + -0.108385; 0.544886; -0.831476;, + -0.212604; 0.513272; -0.831476;, + -0.242769; 0.586095; -0.773017;, + -0.123762; 0.622195; -0.773017;, + -0.091963; 0.462330; -0.881926;, + -0.180392; 0.435506; -0.881926;, + -0.212604; 0.513272; -0.831476;, + -0.108385; 0.544886; -0.831476;, + -0.074656; 0.375322; -0.923883;, + -0.146444; 0.353546; -0.923883;, + -0.180392; 0.435506; -0.881926;, + -0.091963; 0.462330; -0.881926;, + -0.056630; 0.284700; -0.956943;, + -0.111084; 0.268181; -0.956943;, + -0.146444; 0.353546; -0.923883;, + -0.074656; 0.375322; -0.923883;, + -0.038059; 0.191337; -0.980786;, + -0.074656; 0.180235; -0.980786;, + -0.111084; 0.268181; -0.956943;, + -0.056630; 0.284700; -0.956943;, + -0.019122; 0.096131; -0.995185;, + -0.037509; 0.090554; -0.995185;, + -0.074656; 0.180235; -0.980786;, + -0.038059; 0.191337; -0.980786;, + -0.000000; -0.000000; -1.000000;, + -0.037509; 0.090554; -0.995185;, + -0.019122; 0.096131; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.054454; 0.081496; -0.995185;, + -0.037509; 0.090554; -0.995185;, + -0.037509; 0.090554; -0.995185;, + -0.054454; 0.081496; -0.995185;, + -0.108384; 0.162207; -0.980786;, + -0.074656; 0.180235; -0.980786;, + -0.074656; 0.180235; -0.980786;, + -0.108384; 0.162207; -0.980786;, + -0.161269; 0.241357; -0.956943;, + -0.111084; 0.268181; -0.956943;, + -0.111084; 0.268181; -0.956943;, + -0.161269; 0.241357; -0.956943;, + -0.212603; 0.318183; -0.923883;, + -0.146444; 0.353546; -0.923883;, + -0.146444; 0.353546; -0.923883;, + -0.212603; 0.318183; -0.923883;, + -0.261889; 0.391945; -0.881926;, + -0.180392; 0.435506; -0.881926;, + -0.180392; 0.435506; -0.881926;, + -0.261889; 0.391945; -0.881926;, + -0.308653; 0.461932; -0.831476;, + -0.212604; 0.513272; -0.831476;, + -0.212604; 0.513272; -0.831476;, + -0.308653; 0.461932; -0.831476;, + -0.352445; 0.527472; -0.773017;, + -0.242769; 0.586095; -0.773017;, + -0.242769; 0.586095; -0.773017;, + -0.352445; 0.527472; -0.773017;, + -0.392843; 0.587930; -0.707116;, + -0.270595; 0.653273; -0.707116;, + -0.270595; 0.653273; -0.707116;, + -0.392843; 0.587930; -0.707116;, + -0.429457; 0.642728; -0.634403;, + -0.295816; 0.714161; -0.634403;, + -0.295816; 0.714161; -0.634403;, + -0.429457; 0.642728; -0.634403;, + -0.461937; 0.691336; -0.555579;, + -0.318188; 0.768172; -0.555579;, + -0.318188; 0.768172; -0.555579;, + -0.461937; 0.691336; -0.555579;, + -0.489967; 0.733287; -0.471405;, + -0.337495; 0.814785; -0.471405;, + -0.337495; 0.814785; -0.471405;, + -0.489967; 0.733287; -0.471405;, + -0.513278; 0.768175; -0.382691;, + -0.353552; 0.853550; -0.382691;, + -0.353552; 0.853550; -0.382691;, + -0.513278; 0.768175; -0.382691;, + -0.531647; 0.795665; -0.290291;, + -0.366205; 0.884096; -0.290291;, + -0.366205; 0.884096; -0.290291;, + -0.531647; 0.795665; -0.290291;, + -0.544895; 0.815492; -0.195095;, + -0.375330; 0.906126; -0.195095;, + -0.375330; 0.906126; -0.195095;, + -0.544895; 0.815492; -0.195095;, + -0.552895; 0.827466; -0.098020;, + -0.380841; 0.919431; -0.098020;, + -0.380841; 0.919431; -0.098020;, + -0.552895; 0.827466; -0.098020;, + -0.555570; 0.831469; 0.000000;, + -0.382684; 0.923879; 0.000000;, + -0.382684; 0.923879; 0.000000;, + -0.555570; 0.831469; 0.000000;, + -0.552895; 0.827466; 0.098019;, + -0.380841; 0.919431; 0.098019;, + -0.380841; 0.919431; 0.098019;, + -0.552895; 0.827466; 0.098019;, + -0.544895; 0.815492; 0.195095;, + -0.375330; 0.906127; 0.195094;, + -0.375330; 0.906127; 0.195094;, + -0.544895; 0.815492; 0.195095;, + -0.531647; 0.795665; 0.290291;, + -0.366205; 0.884096; 0.290291;, + -0.366205; 0.884096; 0.290291;, + -0.531647; 0.795665; 0.290291;, + -0.513279; 0.768175; 0.382691;, + -0.353552; 0.853550; 0.382691;, + -0.353552; 0.853550; 0.382691;, + -0.513279; 0.768175; 0.382691;, + -0.489967; 0.733287; 0.471405;, + -0.337495; 0.814785; 0.471405;, + -0.337495; 0.814785; 0.471405;, + -0.489967; 0.733287; 0.471405;, + -0.461937; 0.691337; 0.555579;, + -0.318188; 0.768172; 0.555579;, + -0.318188; 0.768172; 0.555579;, + -0.461937; 0.691337; 0.555579;, + -0.429458; 0.642729; 0.634401;, + -0.295816; 0.714162; 0.634401;, + -0.295816; 0.714162; 0.634401;, + -0.429458; 0.642729; 0.634401;, + -0.392843; 0.587931; 0.707115;, + -0.270595; 0.653274; 0.707115;, + -0.270595; 0.653274; 0.707115;, + -0.392843; 0.587931; 0.707115;, + -0.352445; 0.527471; 0.773018;, + -0.242768; 0.586095; 0.773018;, + -0.242768; 0.586095; 0.773018;, + -0.352445; 0.527471; 0.773018;, + -0.308653; 0.461932; 0.831476;, + -0.212604; 0.513271; 0.831476;, + -0.212604; 0.513271; 0.831476;, + -0.308653; 0.461932; 0.831476;, + -0.261889; 0.391945; 0.881926;, + -0.180393; 0.435506; 0.881926;, + -0.180393; 0.435506; 0.881926;, + -0.261889; 0.391945; 0.881926;, + -0.212604; 0.318184; 0.923883;, + -0.146444; 0.353547; 0.923882;, + -0.146444; 0.353547; 0.923882;, + -0.212604; 0.318184; 0.923883;, + -0.161270; 0.241358; 0.956942;, + -0.111085; 0.268182; 0.956942;, + -0.111085; 0.268182; 0.956942;, + -0.161270; 0.241358; 0.956942;, + -0.108384; 0.162208; 0.980786;, + -0.074656; 0.180236; 0.980786;, + -0.074656; 0.180236; 0.980786;, + -0.108384; 0.162208; 0.980786;, + -0.054454; 0.081497; 0.995185;, + -0.037509; 0.090554; 0.995185;, + -0.037509; 0.090554; 0.995185;, + -0.054454; 0.081497; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.054454; 0.081497; 0.995185;, + -0.069307; 0.069307; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.108384; 0.162208; 0.980786;, + -0.137947; 0.137946; 0.980786;, + -0.069307; 0.069307; 0.995185;, + -0.054454; 0.081497; 0.995185;, + -0.161270; 0.241358; 0.956942;, + -0.205258; 0.205258; 0.956942;, + -0.137947; 0.137946; 0.980786;, + -0.108384; 0.162208; 0.980786;, + -0.212604; 0.318184; 0.923883;, + -0.270593; 0.270593; 0.923882;, + -0.205258; 0.205258; 0.956942;, + -0.161270; 0.241358; 0.956942;, + -0.261889; 0.391945; 0.881926;, + -0.333322; 0.333322; 0.881926;, + -0.270593; 0.270593; 0.923882;, + -0.212604; 0.318184; 0.923883;, + -0.308653; 0.461932; 0.831476;, + -0.392841; 0.392841; 0.831476;, + -0.333322; 0.333322; 0.881926;, + -0.261889; 0.391945; 0.881926;, + -0.352445; 0.527471; 0.773018;, + -0.448577; 0.448577; 0.773018;, + -0.392841; 0.392841; 0.831476;, + -0.308653; 0.461932; 0.831476;, + -0.392843; 0.587931; 0.707115;, + -0.499994; 0.499994; 0.707115;, + -0.448577; 0.448577; 0.773018;, + -0.352445; 0.527471; 0.773018;, + -0.429458; 0.642729; 0.634401;, + -0.546596; 0.546596; 0.634401;, + -0.499994; 0.499994; 0.707115;, + -0.392843; 0.587931; 0.707115;, + -0.461937; 0.691337; 0.555579;, + -0.587934; 0.587934; 0.555579;, + -0.546596; 0.546596; 0.634401;, + -0.429458; 0.642729; 0.634401;, + -0.489967; 0.733287; 0.471405;, + -0.623610; 0.623609; 0.471405;, + -0.587934; 0.587934; 0.555579;, + -0.461937; 0.691337; 0.555579;, + -0.513279; 0.768175; 0.382691;, + -0.653280; 0.653279; 0.382691;, + -0.623610; 0.623609; 0.471405;, + -0.489967; 0.733287; 0.471405;, + -0.531647; 0.795665; 0.290291;, + -0.676658; 0.676657; 0.290291;, + -0.653280; 0.653279; 0.382691;, + -0.513279; 0.768175; 0.382691;, + -0.544895; 0.815492; 0.195095;, + -0.693519; 0.693519; 0.195095;, + -0.676658; 0.676657; 0.290291;, + -0.531647; 0.795665; 0.290291;, + -0.552895; 0.827466; 0.098019;, + -0.703702; 0.703702; 0.098019;, + -0.693519; 0.693519; 0.195095;, + -0.544895; 0.815492; 0.195095;, + -0.555570; 0.831469; 0.000000;, + -0.707107; 0.707107; 0.000000;, + -0.703702; 0.703702; 0.098019;, + -0.552895; 0.827466; 0.098019;, + -0.552895; 0.827466; -0.098020;, + -0.703702; 0.703702; -0.098019;, + -0.707107; 0.707107; 0.000000;, + -0.555570; 0.831469; 0.000000;, + -0.544895; 0.815492; -0.195095;, + -0.693519; 0.693519; -0.195095;, + -0.703702; 0.703702; -0.098019;, + -0.552895; 0.827466; -0.098020;, + -0.531647; 0.795665; -0.290291;, + -0.676658; 0.676657; -0.290291;, + -0.693519; 0.693519; -0.195095;, + -0.544895; 0.815492; -0.195095;, + -0.513278; 0.768175; -0.382691;, + -0.653279; 0.653279; -0.382691;, + -0.676658; 0.676657; -0.290291;, + -0.531647; 0.795665; -0.290291;, + -0.489967; 0.733287; -0.471405;, + -0.623609; 0.623609; -0.471405;, + -0.653279; 0.653279; -0.382691;, + -0.513278; 0.768175; -0.382691;, + -0.461937; 0.691336; -0.555579;, + -0.587934; 0.587933; -0.555579;, + -0.623609; 0.623609; -0.471405;, + -0.489967; 0.733287; -0.471405;, + -0.429457; 0.642728; -0.634403;, + -0.546596; 0.546595; -0.634403;, + -0.587934; 0.587933; -0.555579;, + -0.461937; 0.691336; -0.555579;, + -0.392843; 0.587930; -0.707116;, + -0.499994; 0.499994; -0.707116;, + -0.546596; 0.546595; -0.634403;, + -0.429457; 0.642728; -0.634403;, + -0.352445; 0.527472; -0.773017;, + -0.448578; 0.448578; -0.773017;, + -0.499994; 0.499994; -0.707116;, + -0.392843; 0.587930; -0.707116;, + -0.308653; 0.461932; -0.831476;, + -0.392841; 0.392841; -0.831476;, + -0.448578; 0.448578; -0.773017;, + -0.352445; 0.527472; -0.773017;, + -0.261889; 0.391945; -0.881926;, + -0.333322; 0.333321; -0.881926;, + -0.392841; 0.392841; -0.831476;, + -0.308653; 0.461932; -0.831476;, + -0.212603; 0.318183; -0.923883;, + -0.270592; 0.270592; -0.923883;, + -0.333322; 0.333321; -0.881926;, + -0.261889; 0.391945; -0.881926;, + -0.161269; 0.241357; -0.956943;, + -0.205257; 0.205257; -0.956943;, + -0.270592; 0.270592; -0.923883;, + -0.212603; 0.318183; -0.923883;, + -0.108384; 0.162207; -0.980786;, + -0.137946; 0.137946; -0.980786;, + -0.205257; 0.205257; -0.956943;, + -0.161269; 0.241357; -0.956943;, + -0.054454; 0.081496; -0.995185;, + -0.069307; 0.069307; -0.995185;, + -0.137946; 0.137946; -0.980786;, + -0.108384; 0.162207; -0.980786;, + -0.000000; -0.000000; -1.000000;, + -0.069307; 0.069307; -0.995185;, + -0.054454; 0.081496; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.081496; 0.054454; -0.995185;, + -0.069307; 0.069307; -0.995185;, + -0.069307; 0.069307; -0.995185;, + -0.081496; 0.054454; -0.995185;, + -0.162207; 0.108383; -0.980786;, + -0.137946; 0.137946; -0.980786;, + -0.137946; 0.137946; -0.980786;, + -0.162207; 0.108383; -0.980786;, + -0.241357; 0.161269; -0.956943;, + -0.205257; 0.205257; -0.956943;, + -0.205257; 0.205257; -0.956943;, + -0.241357; 0.161269; -0.956943;, + -0.318183; 0.212603; -0.923883;, + -0.270592; 0.270592; -0.923883;, + -0.270592; 0.270592; -0.923883;, + -0.318183; 0.212603; -0.923883;, + -0.391945; 0.261889; -0.881926;, + -0.333322; 0.333321; -0.881926;, + -0.333322; 0.333321; -0.881926;, + -0.391945; 0.261889; -0.881926;, + -0.461932; 0.308653; -0.831476;, + -0.392841; 0.392841; -0.831476;, + -0.392841; 0.392841; -0.831476;, + -0.461932; 0.308653; -0.831476;, + -0.527472; 0.352445; -0.773017;, + -0.448578; 0.448578; -0.773017;, + -0.448578; 0.448578; -0.773017;, + -0.527472; 0.352445; -0.773017;, + -0.587931; 0.392843; -0.707115;, + -0.499994; 0.499994; -0.707116;, + -0.499994; 0.499994; -0.707116;, + -0.587931; 0.392843; -0.707115;, + -0.642728; 0.429457; -0.634403;, + -0.546596; 0.546595; -0.634403;, + -0.546596; 0.546595; -0.634403;, + -0.642728; 0.429457; -0.634403;, + -0.691337; 0.461936; -0.555580;, + -0.587934; 0.587933; -0.555579;, + -0.587934; 0.587933; -0.555579;, + -0.691337; 0.461936; -0.555580;, + -0.733287; 0.489967; -0.471405;, + -0.623609; 0.623609; -0.471405;, + -0.623609; 0.623609; -0.471405;, + -0.733287; 0.489967; -0.471405;, + -0.768175; 0.513278; -0.382691;, + -0.653279; 0.653279; -0.382691;, + -0.653279; 0.653279; -0.382691;, + -0.768175; 0.513278; -0.382691;, + -0.795665; 0.531646; -0.290291;, + -0.676658; 0.676657; -0.290291;, + -0.676658; 0.676657; -0.290291;, + -0.795665; 0.531646; -0.290291;, + -0.815493; 0.544894; -0.195095;, + -0.693519; 0.693519; -0.195095;, + -0.693519; 0.693519; -0.195095;, + -0.815493; 0.544894; -0.195095;, + -0.827466; 0.552895; -0.098019;, + -0.703702; 0.703702; -0.098019;, + -0.703702; 0.703702; -0.098019;, + -0.827466; 0.552895; -0.098019;, + -0.831470; 0.555570; 0.000000;, + -0.707107; 0.707107; 0.000000;, + -0.707107; 0.707107; 0.000000;, + -0.831470; 0.555570; 0.000000;, + -0.827466; 0.552895; 0.098019;, + -0.703702; 0.703702; 0.098019;, + -0.703702; 0.703702; 0.098019;, + -0.827466; 0.552895; 0.098019;, + -0.815493; 0.544894; 0.195095;, + -0.693519; 0.693519; 0.195095;, + -0.693519; 0.693519; 0.195095;, + -0.815493; 0.544894; 0.195095;, + -0.795665; 0.531646; 0.290291;, + -0.676658; 0.676657; 0.290291;, + -0.676658; 0.676657; 0.290291;, + -0.795665; 0.531646; 0.290291;, + -0.768175; 0.513278; 0.382691;, + -0.653280; 0.653279; 0.382691;, + -0.653280; 0.653279; 0.382691;, + -0.768175; 0.513278; 0.382691;, + -0.733287; 0.489967; 0.471405;, + -0.623610; 0.623609; 0.471405;, + -0.623610; 0.623609; 0.471405;, + -0.733287; 0.489967; 0.471405;, + -0.691337; 0.461936; 0.555579;, + -0.587934; 0.587934; 0.555579;, + -0.587934; 0.587934; 0.555579;, + -0.691337; 0.461936; 0.555579;, + -0.642729; 0.429458; 0.634401;, + -0.546596; 0.546596; 0.634401;, + -0.546596; 0.546596; 0.634401;, + -0.642729; 0.429458; 0.634401;, + -0.587931; 0.392843; 0.707115;, + -0.499994; 0.499994; 0.707115;, + -0.499994; 0.499994; 0.707115;, + -0.587931; 0.392843; 0.707115;, + -0.527471; 0.352445; 0.773018;, + -0.448577; 0.448577; 0.773018;, + -0.448577; 0.448577; 0.773018;, + -0.527471; 0.352445; 0.773018;, + -0.461932; 0.308653; 0.831476;, + -0.392841; 0.392841; 0.831476;, + -0.392841; 0.392841; 0.831476;, + -0.461932; 0.308653; 0.831476;, + -0.391945; 0.261889; 0.881926;, + -0.333322; 0.333322; 0.881926;, + -0.333322; 0.333322; 0.881926;, + -0.391945; 0.261889; 0.881926;, + -0.318184; 0.212603; 0.923882;, + -0.270593; 0.270593; 0.923882;, + -0.270593; 0.270593; 0.923882;, + -0.318184; 0.212603; 0.923882;, + -0.241358; 0.161270; 0.956942;, + -0.205258; 0.205258; 0.956942;, + -0.205258; 0.205258; 0.956942;, + -0.241358; 0.161270; 0.956942;, + -0.162208; 0.108384; 0.980786;, + -0.137947; 0.137946; 0.980786;, + -0.137947; 0.137946; 0.980786;, + -0.162208; 0.108384; 0.980786;, + -0.081497; 0.054454; 0.995185;, + -0.069307; 0.069307; 0.995185;, + -0.069307; 0.069307; 0.995185;, + -0.081497; 0.054454; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.081497; 0.054454; 0.995185;, + -0.090554; 0.037509; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.162208; 0.108384; 0.980786;, + -0.180236; 0.074656; 0.980786;, + -0.090554; 0.037509; 0.995185;, + -0.081497; 0.054454; 0.995185;, + -0.241358; 0.161270; 0.956942;, + -0.268182; 0.111085; 0.956942;, + -0.180236; 0.074656; 0.980786;, + -0.162208; 0.108384; 0.980786;, + -0.318184; 0.212603; 0.923882;, + -0.353547; 0.146444; 0.923882;, + -0.268182; 0.111085; 0.956942;, + -0.241358; 0.161270; 0.956942;, + -0.391945; 0.261889; 0.881926;, + -0.435506; 0.180392; 0.881926;, + -0.353547; 0.146444; 0.923882;, + -0.318184; 0.212603; 0.923882;, + -0.461932; 0.308653; 0.831476;, + -0.513272; 0.212604; 0.831476;, + -0.435506; 0.180392; 0.881926;, + -0.391945; 0.261889; 0.881926;, + -0.527471; 0.352445; 0.773018;, + -0.586095; 0.242768; 0.773018;, + -0.513272; 0.212604; 0.831476;, + -0.461932; 0.308653; 0.831476;, + -0.587931; 0.392843; 0.707115;, + -0.653274; 0.270595; 0.707115;, + -0.586095; 0.242768; 0.773018;, + -0.527471; 0.352445; 0.773018;, + -0.642729; 0.429458; 0.634401;, + -0.714162; 0.295816; 0.634401;, + -0.653274; 0.270595; 0.707115;, + -0.587931; 0.392843; 0.707115;, + -0.691337; 0.461936; 0.555579;, + -0.768172; 0.318187; 0.555579;, + -0.714162; 0.295816; 0.634401;, + -0.642729; 0.429458; 0.634401;, + -0.733287; 0.489967; 0.471405;, + -0.814785; 0.337495; 0.471405;, + -0.768172; 0.318187; 0.555579;, + -0.691337; 0.461936; 0.555579;, + -0.768175; 0.513278; 0.382691;, + -0.853551; 0.353552; 0.382691;, + -0.814785; 0.337495; 0.471405;, + -0.733287; 0.489967; 0.471405;, + -0.795665; 0.531646; 0.290291;, + -0.884096; 0.366204; 0.290291;, + -0.853551; 0.353552; 0.382691;, + -0.768175; 0.513278; 0.382691;, + -0.815493; 0.544894; 0.195095;, + -0.906127; 0.375330; 0.195095;, + -0.884096; 0.366204; 0.290291;, + -0.795665; 0.531646; 0.290291;, + -0.827466; 0.552895; 0.098019;, + -0.919431; 0.380840; 0.098019;, + -0.906127; 0.375330; 0.195095;, + -0.815493; 0.544894; 0.195095;, + -0.831470; 0.555570; 0.000000;, + -0.923880; 0.382683; 0.000000;, + -0.919431; 0.380840; 0.098019;, + -0.827466; 0.552895; 0.098019;, + -0.827466; 0.552895; -0.098019;, + -0.919431; 0.380840; -0.098019;, + -0.923880; 0.382683; 0.000000;, + -0.831470; 0.555570; 0.000000;, + -0.815493; 0.544894; -0.195095;, + -0.906127; 0.375330; -0.195095;, + -0.919431; 0.380840; -0.098019;, + -0.827466; 0.552895; -0.098019;, + -0.795665; 0.531646; -0.290291;, + -0.884096; 0.366204; -0.290291;, + -0.906127; 0.375330; -0.195095;, + -0.815493; 0.544894; -0.195095;, + -0.768175; 0.513278; -0.382691;, + -0.853551; 0.353552; -0.382691;, + -0.884096; 0.366204; -0.290291;, + -0.795665; 0.531646; -0.290291;, + -0.733287; 0.489967; -0.471405;, + -0.814785; 0.337495; -0.471405;, + -0.853551; 0.353552; -0.382691;, + -0.768175; 0.513278; -0.382691;, + -0.691337; 0.461936; -0.555580;, + -0.768172; 0.318187; -0.555580;, + -0.814785; 0.337495; -0.471405;, + -0.733287; 0.489967; -0.471405;, + -0.642728; 0.429457; -0.634403;, + -0.714162; 0.295815; -0.634403;, + -0.768172; 0.318187; -0.555580;, + -0.691337; 0.461936; -0.555580;, + -0.587931; 0.392843; -0.707115;, + -0.653274; 0.270595; -0.707115;, + -0.714162; 0.295815; -0.634403;, + -0.642728; 0.429457; -0.634403;, + -0.527472; 0.352445; -0.773017;, + -0.586095; 0.242768; -0.773018;, + -0.653274; 0.270595; -0.707115;, + -0.587931; 0.392843; -0.707115;, + -0.461932; 0.308653; -0.831476;, + -0.513272; 0.212604; -0.831476;, + -0.586095; 0.242768; -0.773018;, + -0.527472; 0.352445; -0.773017;, + -0.391945; 0.261889; -0.881926;, + -0.435506; 0.180392; -0.881926;, + -0.513272; 0.212604; -0.831476;, + -0.461932; 0.308653; -0.831476;, + -0.318183; 0.212603; -0.923883;, + -0.353546; 0.146443; -0.923883;, + -0.435506; 0.180392; -0.881926;, + -0.391945; 0.261889; -0.881926;, + -0.241357; 0.161269; -0.956943;, + -0.268181; 0.111084; -0.956943;, + -0.353546; 0.146443; -0.923883;, + -0.318183; 0.212603; -0.923883;, + -0.162207; 0.108383; -0.980786;, + -0.180235; 0.074656; -0.980786;, + -0.268181; 0.111084; -0.956943;, + -0.241357; 0.161269; -0.956943;, + -0.081496; 0.054454; -0.995185;, + -0.090554; 0.037509; -0.995185;, + -0.180235; 0.074656; -0.980786;, + -0.162207; 0.108383; -0.980786;, + -0.000000; -0.000000; -1.000000;, + -0.090554; 0.037509; -0.995185;, + -0.081496; 0.054454; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.096131; 0.019122; -0.995185;, + -0.090554; 0.037509; -0.995185;, + -0.090554; 0.037509; -0.995185;, + -0.096131; 0.019122; -0.995185;, + -0.191337; 0.038059; -0.980786;, + -0.180235; 0.074656; -0.980786;, + -0.180235; 0.074656; -0.980786;, + -0.191337; 0.038059; -0.980786;, + -0.284700; 0.056630; -0.956943;, + -0.268181; 0.111084; -0.956943;, + -0.268181; 0.111084; -0.956943;, + -0.284700; 0.056630; -0.956943;, + -0.375322; 0.074656; -0.923883;, + -0.353546; 0.146443; -0.923883;, + -0.353546; 0.146443; -0.923883;, + -0.375322; 0.074656; -0.923883;, + -0.462330; 0.091963; -0.881926;, + -0.435506; 0.180392; -0.881926;, + -0.435506; 0.180392; -0.881926;, + -0.462330; 0.091963; -0.881926;, + -0.544886; 0.108384; -0.831476;, + -0.513272; 0.212604; -0.831476;, + -0.513272; 0.212604; -0.831476;, + -0.544886; 0.108384; -0.831476;, + -0.622195; 0.123762; -0.773017;, + -0.586095; 0.242768; -0.773018;, + -0.586095; 0.242768; -0.773018;, + -0.622195; 0.123762; -0.773017;, + -0.693511; 0.137948; -0.707115;, + -0.653274; 0.270595; -0.707115;, + -0.653274; 0.270595; -0.707115;, + -0.693511; 0.137948; -0.707115;, + -0.758150; 0.150805; -0.634402;, + -0.714162; 0.295815; -0.634403;, + -0.714162; 0.295815; -0.634403;, + -0.758150; 0.150805; -0.634402;, + -0.815487; 0.162210; -0.555580;, + -0.768172; 0.318187; -0.555580;, + -0.768172; 0.318187; -0.555580;, + -0.815487; 0.162210; -0.555580;, + -0.864971; 0.172053; -0.471405;, + -0.814785; 0.337495; -0.471405;, + -0.814785; 0.337495; -0.471405;, + -0.864971; 0.172053; -0.471405;, + -0.906125; 0.180239; -0.382691;, + -0.853551; 0.353552; -0.382691;, + -0.853551; 0.353552; -0.382691;, + -0.906125; 0.180239; -0.382691;, + -0.938551; 0.186689; -0.290291;, + -0.884096; 0.366204; -0.290291;, + -0.884096; 0.366204; -0.290291;, + -0.938551; 0.186689; -0.290291;, + -0.961939; 0.191341; -0.195095;, + -0.906127; 0.375330; -0.195095;, + -0.906127; 0.375330; -0.195095;, + -0.961939; 0.191341; -0.195095;, + -0.976062; 0.194151; -0.098019;, + -0.919431; 0.380840; -0.098019;, + -0.919431; 0.380840; -0.098019;, + -0.976062; 0.194151; -0.098019;, + -0.980785; 0.195090; 0.000000;, + -0.923880; 0.382683; 0.000000;, + -0.923880; 0.382683; 0.000000;, + -0.980785; 0.195090; 0.000000;, + -0.976062; 0.194151; 0.098019;, + -0.919431; 0.380840; 0.098019;, + -0.919431; 0.380840; 0.098019;, + -0.976062; 0.194151; 0.098019;, + -0.961939; 0.191341; 0.195095;, + -0.906127; 0.375330; 0.195095;, + -0.906127; 0.375330; 0.195095;, + -0.961939; 0.191341; 0.195095;, + -0.938551; 0.186689; 0.290291;, + -0.884096; 0.366204; 0.290291;, + -0.884096; 0.366204; 0.290291;, + -0.938551; 0.186689; 0.290291;, + -0.906125; 0.180239; 0.382691;, + -0.853551; 0.353552; 0.382691;, + -0.853551; 0.353552; 0.382691;, + -0.906125; 0.180239; 0.382691;, + -0.864971; 0.172053; 0.471405;, + -0.814785; 0.337495; 0.471405;, + -0.814785; 0.337495; 0.471405;, + -0.864971; 0.172053; 0.471405;, + -0.815488; 0.162210; 0.555579;, + -0.768172; 0.318187; 0.555579;, + -0.768172; 0.318187; 0.555579;, + -0.815488; 0.162210; 0.555579;, + -0.758151; 0.150805; 0.634402;, + -0.714162; 0.295816; 0.634401;, + -0.714162; 0.295816; 0.634401;, + -0.758151; 0.150805; 0.634402;, + -0.693512; 0.137948; 0.707115;, + -0.653274; 0.270595; 0.707115;, + -0.653274; 0.270595; 0.707115;, + -0.693512; 0.137948; 0.707115;, + -0.622195; 0.123762; 0.773018;, + -0.586095; 0.242768; 0.773018;, + -0.586095; 0.242768; 0.773018;, + -0.622195; 0.123762; 0.773018;, + -0.544886; 0.108384; 0.831476;, + -0.513272; 0.212604; 0.831476;, + -0.513272; 0.212604; 0.831476;, + -0.544886; 0.108384; 0.831476;, + -0.462331; 0.091963; 0.881926;, + -0.435506; 0.180392; 0.881926;, + -0.435506; 0.180392; 0.881926;, + -0.462331; 0.091963; 0.881926;, + -0.375323; 0.074656; 0.923882;, + -0.353547; 0.146444; 0.923882;, + -0.353547; 0.146444; 0.923882;, + -0.375323; 0.074656; 0.923882;, + -0.284701; 0.056630; 0.956942;, + -0.268182; 0.111085; 0.956942;, + -0.268182; 0.111085; 0.956942;, + -0.284701; 0.056630; 0.956942;, + -0.191337; 0.038059; 0.980786;, + -0.180236; 0.074656; 0.980786;, + -0.180236; 0.074656; 0.980786;, + -0.191337; 0.038059; 0.980786;, + -0.096132; 0.019122; 0.995185;, + -0.090554; 0.037509; 0.995185;, + -0.090554; 0.037509; 0.995185;, + -0.096132; 0.019122; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.096132; 0.019122; 0.995185;, + -0.098015; -0.000000; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.191337; 0.038059; 0.980786;, + -0.195086; -0.000000; 0.980786;, + -0.098015; -0.000000; 0.995185;, + -0.096132; 0.019122; 0.995185;, + -0.284701; 0.056630; 0.956942;, + -0.290279; -0.000000; 0.956942;, + -0.195086; -0.000000; 0.980786;, + -0.191337; 0.038059; 0.980786;, + -0.375323; 0.074656; 0.923882;, + -0.382676; -0.000000; 0.923882;, + -0.290279; -0.000000; 0.956942;, + -0.284701; 0.056630; 0.956942;, + -0.462331; 0.091963; 0.881926;, + -0.471388; -0.000000; 0.881926;, + -0.382676; -0.000000; 0.923882;, + -0.375323; 0.074656; 0.923882;, + -0.544886; 0.108384; 0.831476;, + -0.555561; -0.000000; 0.831476;, + -0.471388; -0.000000; 0.881926;, + -0.462331; 0.091963; 0.881926;, + -0.622195; 0.123762; 0.773018;, + -0.634384; -0.000000; 0.773018;, + -0.555561; -0.000000; 0.831476;, + -0.544886; 0.108384; 0.831476;, + -0.693512; 0.137948; 0.707115;, + -0.707099; -0.000000; 0.707115;, + -0.634384; -0.000000; 0.773018;, + -0.622195; 0.123762; 0.773018;, + -0.758151; 0.150805; 0.634402;, + -0.773004; -0.000000; 0.634402;, + -0.707099; -0.000000; 0.707115;, + -0.693512; 0.137948; 0.707115;, + -0.815488; 0.162210; 0.555579;, + -0.831464; -0.000000; 0.555579;, + -0.773004; -0.000000; 0.634402;, + -0.758151; 0.150805; 0.634402;, + -0.864971; 0.172053; 0.471405;, + -0.881917; -0.000000; 0.471405;, + -0.831464; -0.000000; 0.555579;, + -0.815488; 0.162210; 0.555579;, + -0.906125; 0.180239; 0.382691;, + -0.923877; -0.000000; 0.382691;, + -0.881917; -0.000000; 0.471405;, + -0.864971; 0.172053; 0.471405;, + -0.938551; 0.186689; 0.290291;, + -0.956938; -0.000000; 0.290291;, + -0.923877; -0.000000; 0.382691;, + -0.906125; 0.180239; 0.382691;, + -0.961939; 0.191341; 0.195095;, + -0.980784; -0.000000; 0.195095;, + -0.956938; -0.000000; 0.290291;, + -0.938551; 0.186689; 0.290291;, + -0.976062; 0.194151; 0.098019;, + -0.995185; -0.000000; 0.098019;, + -0.980784; -0.000000; 0.195095;, + -0.961939; 0.191341; 0.195095;, + -0.980785; 0.195090; 0.000000;, + -1.000000; -0.000000; 0.000000;, + -0.995185; -0.000000; 0.098019;, + -0.976062; 0.194151; 0.098019;, + -0.976062; 0.194151; -0.098019;, + -0.995184; -0.000000; -0.098019;, + -1.000000; -0.000000; 0.000000;, + -0.980785; 0.195090; 0.000000;, + -0.961939; 0.191341; -0.195095;, + -0.980784; -0.000000; -0.195095;, + -0.995184; -0.000000; -0.098019;, + -0.976062; 0.194151; -0.098019;, + -0.938551; 0.186689; -0.290291;, + -0.956938; -0.000000; -0.290291;, + -0.980784; -0.000000; -0.195095;, + -0.961939; 0.191341; -0.195095;, + -0.906125; 0.180239; -0.382691;, + -0.923877; -0.000000; -0.382691;, + -0.956938; -0.000000; -0.290291;, + -0.938551; 0.186689; -0.290291;, + -0.864971; 0.172053; -0.471405;, + -0.881917; -0.000000; -0.471405;, + -0.923877; -0.000000; -0.382691;, + -0.906125; 0.180239; -0.382691;, + -0.815487; 0.162210; -0.555580;, + -0.831463; -0.000000; -0.555580;, + -0.881917; -0.000000; -0.471405;, + -0.864971; 0.172053; -0.471405;, + -0.758150; 0.150805; -0.634402;, + -0.773003; -0.000000; -0.634402;, + -0.831463; -0.000000; -0.555580;, + -0.815487; 0.162210; -0.555580;, + -0.693511; 0.137948; -0.707115;, + -0.707098; -0.000000; -0.707115;, + -0.773003; -0.000000; -0.634402;, + -0.758150; 0.150805; -0.634402;, + -0.622195; 0.123762; -0.773017;, + -0.634385; -0.000000; -0.773017;, + -0.707098; -0.000000; -0.707115;, + -0.693511; 0.137948; -0.707115;, + -0.544886; 0.108384; -0.831476;, + -0.555561; -0.000000; -0.831476;, + -0.634385; -0.000000; -0.773017;, + -0.622195; 0.123762; -0.773017;, + -0.462330; 0.091963; -0.881926;, + -0.471388; -0.000000; -0.881926;, + -0.555561; -0.000000; -0.831476;, + -0.544886; 0.108384; -0.831476;, + -0.375322; 0.074656; -0.923883;, + -0.382675; -0.000000; -0.923883;, + -0.471388; -0.000000; -0.881926;, + -0.462330; 0.091963; -0.881926;, + -0.284700; 0.056630; -0.956943;, + -0.290277; -0.000000; -0.956943;, + -0.382675; -0.000000; -0.923883;, + -0.375322; 0.074656; -0.923883;, + -0.191337; 0.038059; -0.980786;, + -0.195085; -0.000000; -0.980786;, + -0.290277; -0.000000; -0.956943;, + -0.284700; 0.056630; -0.956943;, + -0.096131; 0.019122; -0.995185;, + -0.098015; -0.000000; -0.995185;, + -0.195085; -0.000000; -0.980786;, + -0.191337; 0.038059; -0.980786;, + -0.000000; -0.000000; -1.000000;, + -0.098015; -0.000000; -0.995185;, + -0.096131; 0.019122; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.096131; -0.019122; -0.995185;, + -0.098015; -0.000000; -0.995185;, + -0.098015; -0.000000; -0.995185;, + -0.096131; -0.019122; -0.995185;, + -0.191337; -0.038059; -0.980786;, + -0.195085; -0.000000; -0.980786;, + -0.195085; -0.000000; -0.980786;, + -0.191337; -0.038059; -0.980786;, + -0.284700; -0.056630; -0.956943;, + -0.290277; -0.000000; -0.956943;, + -0.290277; -0.000000; -0.956943;, + -0.284700; -0.056630; -0.956943;, + -0.375322; -0.074656; -0.923883;, + -0.382675; -0.000000; -0.923883;, + -0.382675; -0.000000; -0.923883;, + -0.375322; -0.074656; -0.923883;, + -0.462330; -0.091963; -0.881926;, + -0.471388; -0.000000; -0.881926;, + -0.471388; -0.000000; -0.881926;, + -0.462330; -0.091963; -0.881926;, + -0.544886; -0.108385; -0.831476;, + -0.555561; -0.000000; -0.831476;, + -0.555561; -0.000000; -0.831476;, + -0.544886; -0.108385; -0.831476;, + -0.622195; -0.123762; -0.773017;, + -0.634385; -0.000000; -0.773017;, + -0.634385; -0.000000; -0.773017;, + -0.622195; -0.123762; -0.773017;, + -0.693511; -0.137948; -0.707115;, + -0.707098; -0.000000; -0.707115;, + -0.707098; -0.000000; -0.707115;, + -0.693511; -0.137948; -0.707115;, + -0.758150; -0.150806; -0.634402;, + -0.773003; -0.000000; -0.634402;, + -0.773003; -0.000000; -0.634402;, + -0.758150; -0.150806; -0.634402;, + -0.815487; -0.162211; -0.555580;, + -0.831463; -0.000000; -0.555580;, + -0.831463; -0.000000; -0.555580;, + -0.815487; -0.162211; -0.555580;, + -0.864971; -0.172054; -0.471405;, + -0.881917; -0.000000; -0.471405;, + -0.881917; -0.000000; -0.471405;, + -0.864971; -0.172054; -0.471405;, + -0.906124; -0.180240; -0.382691;, + -0.923877; -0.000000; -0.382691;, + -0.923877; -0.000000; -0.382691;, + -0.906124; -0.180240; -0.382691;, + -0.938551; -0.186690; -0.290291;, + -0.956938; -0.000000; -0.290291;, + -0.956938; -0.000000; -0.290291;, + -0.938551; -0.186690; -0.290291;, + -0.961939; -0.191342; -0.195095;, + -0.980784; -0.000000; -0.195095;, + -0.980784; -0.000000; -0.195095;, + -0.961939; -0.191342; -0.195095;, + -0.976062; -0.194151; -0.098020;, + -0.995184; -0.000000; -0.098019;, + -0.995184; -0.000000; -0.098019;, + -0.976062; -0.194151; -0.098020;, + -0.980785; -0.195091; 0.000000;, + -1.000000; -0.000000; 0.000000;, + -1.000000; -0.000000; 0.000000;, + -0.980785; -0.195091; 0.000000;, + -0.976062; -0.194151; 0.098019;, + -0.995185; -0.000000; 0.098019;, + -0.995185; -0.000000; 0.098019;, + -0.976062; -0.194151; 0.098019;, + -0.961939; -0.191342; 0.195095;, + -0.980784; -0.000000; 0.195095;, + -0.980784; -0.000000; 0.195095;, + -0.961939; -0.191342; 0.195095;, + -0.938551; -0.186690; 0.290291;, + -0.956938; -0.000000; 0.290291;, + -0.956938; -0.000000; 0.290291;, + -0.938551; -0.186690; 0.290291;, + -0.906125; -0.180240; 0.382690;, + -0.923877; -0.000000; 0.382691;, + -0.923877; -0.000000; 0.382691;, + -0.906125; -0.180240; 0.382690;, + -0.864971; -0.172054; 0.471405;, + -0.881917; -0.000000; 0.471405;, + -0.881917; -0.000000; 0.471405;, + -0.864971; -0.172054; 0.471405;, + -0.815487; -0.162211; 0.555579;, + -0.831464; -0.000000; 0.555579;, + -0.831464; -0.000000; 0.555579;, + -0.815487; -0.162211; 0.555579;, + -0.758151; -0.150806; 0.634402;, + -0.773004; -0.000000; 0.634402;, + -0.773004; -0.000000; 0.634402;, + -0.758151; -0.150806; 0.634402;, + -0.693512; -0.137948; 0.707115;, + -0.707099; -0.000000; 0.707115;, + -0.707099; -0.000000; 0.707115;, + -0.693512; -0.137948; 0.707115;, + -0.622195; -0.123762; 0.773018;, + -0.634384; -0.000000; 0.773018;, + -0.634384; -0.000000; 0.773018;, + -0.622195; -0.123762; 0.773018;, + -0.544886; -0.108385; 0.831476;, + -0.555561; -0.000000; 0.831476;, + -0.555561; -0.000000; 0.831476;, + -0.544886; -0.108385; 0.831476;, + -0.462331; -0.091963; 0.881926;, + -0.471388; -0.000000; 0.881926;, + -0.471388; -0.000000; 0.881926;, + -0.462331; -0.091963; 0.881926;, + -0.375323; -0.074656; 0.923882;, + -0.382676; -0.000000; 0.923882;, + -0.382676; -0.000000; 0.923882;, + -0.375323; -0.074656; 0.923882;, + -0.284701; -0.056631; 0.956942;, + -0.290279; -0.000000; 0.956942;, + -0.290279; -0.000000; 0.956942;, + -0.284701; -0.056631; 0.956942;, + -0.191337; -0.038059; 0.980786;, + -0.195086; -0.000000; 0.980786;, + -0.195086; -0.000000; 0.980786;, + -0.191337; -0.038059; 0.980786;, + -0.096132; -0.019122; 0.995185;, + -0.098015; -0.000000; 0.995185;, + -0.098015; -0.000000; 0.995185;, + -0.096132; -0.019122; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.096132; -0.019122; 0.995185;, + -0.090554; -0.037509; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.191337; -0.038059; 0.980786;, + -0.180236; -0.074656; 0.980786;, + -0.090554; -0.037509; 0.995185;, + -0.096132; -0.019122; 0.995185;, + -0.284701; -0.056631; 0.956942;, + -0.268182; -0.111085; 0.956942;, + -0.180236; -0.074656; 0.980786;, + -0.191337; -0.038059; 0.980786;, + -0.375323; -0.074656; 0.923882;, + -0.353547; -0.146444; 0.923882;, + -0.268182; -0.111085; 0.956942;, + -0.284701; -0.056631; 0.956942;, + -0.462331; -0.091963; 0.881926;, + -0.435506; -0.180393; 0.881926;, + -0.353547; -0.146444; 0.923882;, + -0.375323; -0.074656; 0.923882;, + -0.544886; -0.108385; 0.831476;, + -0.513272; -0.212604; 0.831476;, + -0.435506; -0.180393; 0.881926;, + -0.462331; -0.091963; 0.881926;, + -0.622195; -0.123762; 0.773018;, + -0.586095; -0.242768; 0.773018;, + -0.513272; -0.212604; 0.831476;, + -0.544886; -0.108385; 0.831476;, + -0.693512; -0.137948; 0.707115;, + -0.653274; -0.270595; 0.707115;, + -0.586095; -0.242768; 0.773018;, + -0.622195; -0.123762; 0.773018;, + -0.758151; -0.150806; 0.634402;, + -0.714162; -0.295816; 0.634401;, + -0.653274; -0.270595; 0.707115;, + -0.693512; -0.137948; 0.707115;, + -0.815487; -0.162211; 0.555579;, + -0.768172; -0.318188; 0.555579;, + -0.714162; -0.295816; 0.634401;, + -0.758151; -0.150806; 0.634402;, + -0.864971; -0.172054; 0.471405;, + -0.814785; -0.337495; 0.471405;, + -0.768172; -0.318188; 0.555579;, + -0.815487; -0.162211; 0.555579;, + -0.906125; -0.180240; 0.382690;, + -0.853551; -0.353553; 0.382690;, + -0.814785; -0.337495; 0.471405;, + -0.864971; -0.172054; 0.471405;, + -0.938551; -0.186690; 0.290291;, + -0.884096; -0.366205; 0.290291;, + -0.853551; -0.353553; 0.382690;, + -0.906125; -0.180240; 0.382690;, + -0.961939; -0.191342; 0.195095;, + -0.906126; -0.375330; 0.195095;, + -0.884096; -0.366205; 0.290291;, + -0.938551; -0.186690; 0.290291;, + -0.976062; -0.194151; 0.098019;, + -0.919430; -0.380841; 0.098020;, + -0.906126; -0.375330; 0.195095;, + -0.961939; -0.191342; 0.195095;, + -0.980785; -0.195091; 0.000000;, + -0.923879; -0.382684; 0.000000;, + -0.919430; -0.380841; 0.098020;, + -0.976062; -0.194151; 0.098019;, + -0.976062; -0.194151; -0.098020;, + -0.919430; -0.380841; -0.098020;, + -0.923879; -0.382684; 0.000000;, + -0.980785; -0.195091; 0.000000;, + -0.961939; -0.191342; -0.195095;, + -0.906126; -0.375330; -0.195095;, + -0.919430; -0.380841; -0.098020;, + -0.976062; -0.194151; -0.098020;, + -0.938551; -0.186690; -0.290291;, + -0.884096; -0.366205; -0.290291;, + -0.906126; -0.375330; -0.195095;, + -0.961939; -0.191342; -0.195095;, + -0.906124; -0.180240; -0.382691;, + -0.853551; -0.353552; -0.382691;, + -0.884096; -0.366205; -0.290291;, + -0.938551; -0.186690; -0.290291;, + -0.864971; -0.172054; -0.471405;, + -0.814785; -0.337495; -0.471405;, + -0.853551; -0.353552; -0.382691;, + -0.906124; -0.180240; -0.382691;, + -0.815487; -0.162211; -0.555580;, + -0.768172; -0.318187; -0.555580;, + -0.814785; -0.337495; -0.471405;, + -0.864971; -0.172054; -0.471405;, + -0.758150; -0.150806; -0.634402;, + -0.714162; -0.295816; -0.634402;, + -0.768172; -0.318187; -0.555580;, + -0.815487; -0.162211; -0.555580;, + -0.693511; -0.137948; -0.707115;, + -0.653273; -0.270595; -0.707115;, + -0.714162; -0.295816; -0.634402;, + -0.758150; -0.150806; -0.634402;, + -0.622195; -0.123762; -0.773017;, + -0.586095; -0.242769; -0.773017;, + -0.653273; -0.270595; -0.707115;, + -0.693511; -0.137948; -0.707115;, + -0.544886; -0.108385; -0.831476;, + -0.513272; -0.212604; -0.831476;, + -0.586095; -0.242769; -0.773017;, + -0.622195; -0.123762; -0.773017;, + -0.462330; -0.091963; -0.881926;, + -0.435506; -0.180392; -0.881926;, + -0.513272; -0.212604; -0.831476;, + -0.544886; -0.108385; -0.831476;, + -0.375322; -0.074656; -0.923883;, + -0.353546; -0.146444; -0.923883;, + -0.435506; -0.180392; -0.881926;, + -0.462330; -0.091963; -0.881926;, + -0.284700; -0.056630; -0.956943;, + -0.268181; -0.111084; -0.956943;, + -0.353546; -0.146444; -0.923883;, + -0.375322; -0.074656; -0.923883;, + -0.191337; -0.038059; -0.980786;, + -0.180235; -0.074656; -0.980786;, + -0.268181; -0.111084; -0.956943;, + -0.284700; -0.056630; -0.956943;, + -0.096131; -0.019122; -0.995185;, + -0.090554; -0.037509; -0.995185;, + -0.180235; -0.074656; -0.980786;, + -0.191337; -0.038059; -0.980786;, + -0.000000; -0.000000; -1.000000;, + -0.090554; -0.037509; -0.995185;, + -0.096131; -0.019122; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.081496; -0.054454; -0.995185;, + -0.090554; -0.037509; -0.995185;, + -0.090554; -0.037509; -0.995185;, + -0.081496; -0.054454; -0.995185;, + -0.162207; -0.108384; -0.980786;, + -0.180235; -0.074656; -0.980786;, + -0.180235; -0.074656; -0.980786;, + -0.162207; -0.108384; -0.980786;, + -0.241357; -0.161269; -0.956943;, + -0.268181; -0.111084; -0.956943;, + -0.268181; -0.111084; -0.956943;, + -0.241357; -0.161269; -0.956943;, + -0.318183; -0.212603; -0.923883;, + -0.353546; -0.146444; -0.923883;, + -0.353546; -0.146444; -0.923883;, + -0.318183; -0.212603; -0.923883;, + -0.391945; -0.261889; -0.881926;, + -0.435506; -0.180392; -0.881926;, + -0.435506; -0.180392; -0.881926;, + -0.391945; -0.261889; -0.881926;, + -0.461932; -0.308653; -0.831476;, + -0.513272; -0.212604; -0.831476;, + -0.513272; -0.212604; -0.831476;, + -0.461932; -0.308653; -0.831476;, + -0.527472; -0.352446; -0.773017;, + -0.586095; -0.242769; -0.773017;, + -0.586095; -0.242769; -0.773017;, + -0.527472; -0.352446; -0.773017;, + -0.587931; -0.392843; -0.707115;, + -0.653273; -0.270595; -0.707115;, + -0.653273; -0.270595; -0.707115;, + -0.587931; -0.392843; -0.707115;, + -0.642728; -0.429458; -0.634402;, + -0.714162; -0.295816; -0.634402;, + -0.714162; -0.295816; -0.634402;, + -0.642728; -0.429458; -0.634402;, + -0.691336; -0.461936; -0.555580;, + -0.768172; -0.318187; -0.555580;, + -0.768172; -0.318187; -0.555580;, + -0.691336; -0.461936; -0.555580;, + -0.733287; -0.489967; -0.471405;, + -0.814785; -0.337495; -0.471405;, + -0.814785; -0.337495; -0.471405;, + -0.733287; -0.489967; -0.471405;, + -0.768175; -0.513278; -0.382691;, + -0.853551; -0.353552; -0.382691;, + -0.853551; -0.353552; -0.382691;, + -0.768175; -0.513278; -0.382691;, + -0.795665; -0.531647; -0.290291;, + -0.884096; -0.366205; -0.290291;, + -0.884096; -0.366205; -0.290291;, + -0.795665; -0.531647; -0.290291;, + -0.815492; -0.544895; -0.195095;, + -0.906126; -0.375330; -0.195095;, + -0.906126; -0.375330; -0.195095;, + -0.815492; -0.544895; -0.195095;, + -0.827465; -0.552895; -0.098020;, + -0.919430; -0.380841; -0.098020;, + -0.919430; -0.380841; -0.098020;, + -0.827465; -0.552895; -0.098020;, + -0.831469; -0.555570; 0.000000;, + -0.923879; -0.382684; 0.000000;, + -0.923879; -0.382684; 0.000000;, + -0.831469; -0.555570; 0.000000;, + -0.827465; -0.552895; 0.098020;, + -0.919430; -0.380841; 0.098020;, + -0.919430; -0.380841; 0.098020;, + -0.827465; -0.552895; 0.098020;, + -0.815492; -0.544895; 0.195095;, + -0.906126; -0.375330; 0.195095;, + -0.906126; -0.375330; 0.195095;, + -0.815492; -0.544895; 0.195095;, + -0.795665; -0.531647; 0.290291;, + -0.884096; -0.366205; 0.290291;, + -0.884096; -0.366205; 0.290291;, + -0.795665; -0.531647; 0.290291;, + -0.768175; -0.513279; 0.382690;, + -0.853551; -0.353553; 0.382690;, + -0.853551; -0.353553; 0.382690;, + -0.768175; -0.513279; 0.382690;, + -0.733287; -0.489967; 0.471405;, + -0.814785; -0.337495; 0.471405;, + -0.814785; -0.337495; 0.471405;, + -0.733287; -0.489967; 0.471405;, + -0.691337; -0.461937; 0.555579;, + -0.768172; -0.318188; 0.555579;, + -0.768172; -0.318188; 0.555579;, + -0.691337; -0.461937; 0.555579;, + -0.642729; -0.429458; 0.634401;, + -0.714162; -0.295816; 0.634401;, + -0.714162; -0.295816; 0.634401;, + -0.642729; -0.429458; 0.634401;, + -0.587931; -0.392843; 0.707115;, + -0.653274; -0.270595; 0.707115;, + -0.653274; -0.270595; 0.707115;, + -0.587931; -0.392843; 0.707115;, + -0.527471; -0.352445; 0.773018;, + -0.586095; -0.242768; 0.773018;, + -0.586095; -0.242768; 0.773018;, + -0.527471; -0.352445; 0.773018;, + -0.461932; -0.308653; 0.831476;, + -0.513272; -0.212604; 0.831476;, + -0.513272; -0.212604; 0.831476;, + -0.461932; -0.308653; 0.831476;, + -0.391945; -0.261889; 0.881926;, + -0.435506; -0.180393; 0.881926;, + -0.435506; -0.180393; 0.881926;, + -0.391945; -0.261889; 0.881926;, + -0.318184; -0.212604; 0.923882;, + -0.353547; -0.146444; 0.923882;, + -0.353547; -0.146444; 0.923882;, + -0.318184; -0.212604; 0.923882;, + -0.241358; -0.161270; 0.956942;, + -0.268182; -0.111085; 0.956942;, + -0.268182; -0.111085; 0.956942;, + -0.241358; -0.161270; 0.956942;, + -0.162208; -0.108384; 0.980786;, + -0.180236; -0.074656; 0.980786;, + -0.180236; -0.074656; 0.980786;, + -0.162208; -0.108384; 0.980786;, + -0.081497; -0.054454; 0.995185;, + -0.090554; -0.037509; 0.995185;, + -0.090554; -0.037509; 0.995185;, + -0.081497; -0.054454; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.081497; -0.054454; 0.995185;, + -0.069307; -0.069307; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.162208; -0.108384; 0.980786;, + -0.137947; -0.137947; 0.980786;, + -0.069307; -0.069307; 0.995185;, + -0.081497; -0.054454; 0.995185;, + -0.241358; -0.161270; 0.956942;, + -0.205258; -0.205258; 0.956942;, + -0.137947; -0.137947; 0.980786;, + -0.162208; -0.108384; 0.980786;, + -0.318184; -0.212604; 0.923882;, + -0.270593; -0.270593; 0.923882;, + -0.205258; -0.205258; 0.956942;, + -0.241358; -0.161270; 0.956942;, + -0.391945; -0.261889; 0.881926;, + -0.333322; -0.333322; 0.881926;, + -0.270593; -0.270593; 0.923882;, + -0.318184; -0.212604; 0.923882;, + -0.461932; -0.308653; 0.831476;, + -0.392841; -0.392841; 0.831476;, + -0.333322; -0.333322; 0.881926;, + -0.391945; -0.261889; 0.881926;, + -0.527471; -0.352445; 0.773018;, + -0.448577; -0.448578; 0.773018;, + -0.392841; -0.392841; 0.831476;, + -0.461932; -0.308653; 0.831476;, + -0.587931; -0.392843; 0.707115;, + -0.499994; -0.499995; 0.707115;, + -0.448577; -0.448578; 0.773018;, + -0.527471; -0.352445; 0.773018;, + -0.642729; -0.429458; 0.634401;, + -0.546596; -0.546596; 0.634401;, + -0.499994; -0.499995; 0.707115;, + -0.587931; -0.392843; 0.707115;, + -0.691337; -0.461937; 0.555579;, + -0.587933; -0.587934; 0.555579;, + -0.546596; -0.546596; 0.634401;, + -0.642729; -0.429458; 0.634401;, + -0.733287; -0.489967; 0.471405;, + -0.623609; -0.623609; 0.471405;, + -0.587933; -0.587934; 0.555579;, + -0.691337; -0.461937; 0.555579;, + -0.768175; -0.513279; 0.382690;, + -0.653279; -0.653280; 0.382690;, + -0.623609; -0.623609; 0.471405;, + -0.733287; -0.489967; 0.471405;, + -0.795665; -0.531647; 0.290291;, + -0.676658; -0.676658; 0.290290;, + -0.653279; -0.653280; 0.382690;, + -0.768175; -0.513279; 0.382690;, + -0.815492; -0.544895; 0.195095;, + -0.693519; -0.693520; 0.195094;, + -0.676658; -0.676658; 0.290290;, + -0.795665; -0.531647; 0.290291;, + -0.827465; -0.552895; 0.098020;, + -0.703701; -0.703702; 0.098020;, + -0.693519; -0.693520; 0.195094;, + -0.815492; -0.544895; 0.195095;, + -0.831469; -0.555570; 0.000000;, + -0.707107; -0.707107; 0.000000;, + -0.703701; -0.703702; 0.098020;, + -0.827465; -0.552895; 0.098020;, + -0.827465; -0.552895; -0.098020;, + -0.703701; -0.703702; -0.098020;, + -0.707107; -0.707107; 0.000000;, + -0.831469; -0.555570; 0.000000;, + -0.815492; -0.544895; -0.195095;, + -0.693519; -0.693520; -0.195095;, + -0.703701; -0.703702; -0.098020;, + -0.827465; -0.552895; -0.098020;, + -0.795665; -0.531647; -0.290291;, + -0.676657; -0.676658; -0.290291;, + -0.693519; -0.693520; -0.195095;, + -0.815492; -0.544895; -0.195095;, + -0.768175; -0.513278; -0.382691;, + -0.653279; -0.653280; -0.382691;, + -0.676657; -0.676658; -0.290291;, + -0.795665; -0.531647; -0.290291;, + -0.733287; -0.489967; -0.471405;, + -0.623609; -0.623609; -0.471405;, + -0.653279; -0.653280; -0.382691;, + -0.768175; -0.513278; -0.382691;, + -0.691336; -0.461936; -0.555580;, + -0.587933; -0.587933; -0.555580;, + -0.623609; -0.623609; -0.471405;, + -0.733287; -0.489967; -0.471405;, + -0.642728; -0.429458; -0.634402;, + -0.546596; -0.546596; -0.634402;, + -0.587933; -0.587933; -0.555580;, + -0.691336; -0.461936; -0.555580;, + -0.587931; -0.392843; -0.707115;, + -0.499994; -0.499994; -0.707115;, + -0.546596; -0.546596; -0.634402;, + -0.642728; -0.429458; -0.634402;, + -0.527472; -0.352446; -0.773017;, + -0.448578; -0.448578; -0.773017;, + -0.499994; -0.499994; -0.707115;, + -0.587931; -0.392843; -0.707115;, + -0.461932; -0.308653; -0.831476;, + -0.392841; -0.392841; -0.831476;, + -0.448578; -0.448578; -0.773017;, + -0.527472; -0.352446; -0.773017;, + -0.391945; -0.261889; -0.881926;, + -0.333321; -0.333322; -0.881926;, + -0.392841; -0.392841; -0.831476;, + -0.461932; -0.308653; -0.831476;, + -0.318183; -0.212603; -0.923883;, + -0.270592; -0.270593; -0.923883;, + -0.333321; -0.333322; -0.881926;, + -0.391945; -0.261889; -0.881926;, + -0.241357; -0.161269; -0.956943;, + -0.205257; -0.205257; -0.956943;, + -0.270592; -0.270593; -0.923883;, + -0.318183; -0.212603; -0.923883;, + -0.162207; -0.108384; -0.980786;, + -0.137946; -0.137946; -0.980786;, + -0.205257; -0.205257; -0.956943;, + -0.241357; -0.161269; -0.956943;, + -0.081496; -0.054454; -0.995185;, + -0.069307; -0.069307; -0.995185;, + -0.137946; -0.137946; -0.980786;, + -0.162207; -0.108384; -0.980786;, + -0.000000; -0.000000; -1.000000;, + -0.069307; -0.069307; -0.995185;, + -0.081496; -0.054454; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.054454; -0.081496; -0.995185;, + -0.069307; -0.069307; -0.995185;, + -0.069307; -0.069307; -0.995185;, + -0.054454; -0.081496; -0.995185;, + -0.108384; -0.162207; -0.980786;, + -0.137946; -0.137946; -0.980786;, + -0.137946; -0.137946; -0.980786;, + -0.108384; -0.162207; -0.980786;, + -0.161269; -0.241357; -0.956943;, + -0.205257; -0.205257; -0.956943;, + -0.205257; -0.205257; -0.956943;, + -0.161269; -0.241357; -0.956943;, + -0.212603; -0.318183; -0.923883;, + -0.270592; -0.270593; -0.923883;, + -0.270592; -0.270593; -0.923883;, + -0.212603; -0.318183; -0.923883;, + -0.261889; -0.391945; -0.881926;, + -0.333321; -0.333322; -0.881926;, + -0.333321; -0.333322; -0.881926;, + -0.261889; -0.391945; -0.881926;, + -0.308653; -0.461932; -0.831476;, + -0.392841; -0.392841; -0.831476;, + -0.392841; -0.392841; -0.831476;, + -0.308653; -0.461932; -0.831476;, + -0.352445; -0.527472; -0.773017;, + -0.448578; -0.448578; -0.773017;, + -0.448578; -0.448578; -0.773017;, + -0.352445; -0.527472; -0.773017;, + -0.392843; -0.587931; -0.707115;, + -0.499994; -0.499994; -0.707115;, + -0.499994; -0.499994; -0.707115;, + -0.392843; -0.587931; -0.707115;, + -0.429457; -0.642729; -0.634402;, + -0.546596; -0.546596; -0.634402;, + -0.546596; -0.546596; -0.634402;, + -0.429457; -0.642729; -0.634402;, + -0.461936; -0.691337; -0.555580;, + -0.587933; -0.587933; -0.555580;, + -0.587933; -0.587933; -0.555580;, + -0.461936; -0.691337; -0.555580;, + -0.489966; -0.733287; -0.471405;, + -0.623609; -0.623609; -0.471405;, + -0.623609; -0.623609; -0.471405;, + -0.489966; -0.733287; -0.471405;, + -0.513278; -0.768175; -0.382691;, + -0.653279; -0.653280; -0.382691;, + -0.653279; -0.653280; -0.382691;, + -0.513278; -0.768175; -0.382691;, + -0.531646; -0.795665; -0.290291;, + -0.676657; -0.676658; -0.290291;, + -0.676657; -0.676658; -0.290291;, + -0.531646; -0.795665; -0.290291;, + -0.544894; -0.815493; -0.195094;, + -0.693519; -0.693520; -0.195095;, + -0.693519; -0.693520; -0.195095;, + -0.544894; -0.815493; -0.195094;, + -0.552895; -0.827466; -0.098019;, + -0.703701; -0.703702; -0.098020;, + -0.703701; -0.703702; -0.098020;, + -0.552895; -0.827466; -0.098019;, + -0.555570; -0.831470; 0.000000;, + -0.707107; -0.707107; 0.000000;, + -0.707107; -0.707107; 0.000000;, + -0.555570; -0.831470; 0.000000;, + -0.552895; -0.827466; 0.098020;, + -0.703701; -0.703702; 0.098020;, + -0.703701; -0.703702; 0.098020;, + -0.552895; -0.827466; 0.098020;, + -0.544894; -0.815493; 0.195094;, + -0.693519; -0.693520; 0.195094;, + -0.693519; -0.693520; 0.195094;, + -0.544894; -0.815493; 0.195094;, + -0.531646; -0.795666; 0.290290;, + -0.676658; -0.676658; 0.290290;, + -0.676658; -0.676658; 0.290290;, + -0.531646; -0.795666; 0.290290;, + -0.513278; -0.768176; 0.382690;, + -0.653279; -0.653280; 0.382690;, + -0.653279; -0.653280; 0.382690;, + -0.513278; -0.768176; 0.382690;, + -0.489966; -0.733287; 0.471405;, + -0.623609; -0.623609; 0.471405;, + -0.623609; -0.623609; 0.471405;, + -0.489966; -0.733287; 0.471405;, + -0.461936; -0.691337; 0.555579;, + -0.587933; -0.587934; 0.555579;, + -0.587933; -0.587934; 0.555579;, + -0.461936; -0.691337; 0.555579;, + -0.429458; -0.642729; 0.634401;, + -0.546596; -0.546596; 0.634401;, + -0.546596; -0.546596; 0.634401;, + -0.429458; -0.642729; 0.634401;, + -0.392843; -0.587931; 0.707115;, + -0.499994; -0.499995; 0.707115;, + -0.499994; -0.499995; 0.707115;, + -0.392843; -0.587931; 0.707115;, + -0.352445; -0.527471; 0.773018;, + -0.448577; -0.448578; 0.773018;, + -0.448577; -0.448578; 0.773018;, + -0.352445; -0.527471; 0.773018;, + -0.308653; -0.461932; 0.831476;, + -0.392841; -0.392841; 0.831476;, + -0.392841; -0.392841; 0.831476;, + -0.308653; -0.461932; 0.831476;, + -0.261889; -0.391945; 0.881926;, + -0.333322; -0.333322; 0.881926;, + -0.333322; -0.333322; 0.881926;, + -0.261889; -0.391945; 0.881926;, + -0.212603; -0.318184; 0.923882;, + -0.270593; -0.270593; 0.923882;, + -0.270593; -0.270593; 0.923882;, + -0.212603; -0.318184; 0.923882;, + -0.161270; -0.241358; 0.956942;, + -0.205258; -0.205258; 0.956942;, + -0.205258; -0.205258; 0.956942;, + -0.161270; -0.241358; 0.956942;, + -0.108384; -0.162208; 0.980786;, + -0.137947; -0.137947; 0.980786;, + -0.137947; -0.137947; 0.980786;, + -0.108384; -0.162208; 0.980786;, + -0.054454; -0.081497; 0.995185;, + -0.069307; -0.069307; 0.995185;, + -0.069307; -0.069307; 0.995185;, + -0.054454; -0.081497; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.054454; -0.081497; 0.995185;, + -0.037509; -0.090554; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.108384; -0.162208; 0.980786;, + -0.074656; -0.180236; 0.980786;, + -0.037509; -0.090554; 0.995185;, + -0.054454; -0.081497; 0.995185;, + -0.161270; -0.241358; 0.956942;, + -0.111085; -0.268183; 0.956942;, + -0.074656; -0.180236; 0.980786;, + -0.108384; -0.162208; 0.980786;, + -0.212603; -0.318184; 0.923882;, + -0.146444; -0.353547; 0.923882;, + -0.111085; -0.268183; 0.956942;, + -0.161270; -0.241358; 0.956942;, + -0.261889; -0.391945; 0.881926;, + -0.180392; -0.435506; 0.881926;, + -0.146444; -0.353547; 0.923882;, + -0.212603; -0.318184; 0.923882;, + -0.308653; -0.461932; 0.831476;, + -0.212604; -0.513272; 0.831476;, + -0.180392; -0.435506; 0.881926;, + -0.261889; -0.391945; 0.881926;, + -0.352445; -0.527471; 0.773018;, + -0.242768; -0.586095; 0.773018;, + -0.212604; -0.513272; 0.831476;, + -0.308653; -0.461932; 0.831476;, + -0.392843; -0.587931; 0.707115;, + -0.270595; -0.653274; 0.707115;, + -0.242768; -0.586095; 0.773018;, + -0.352445; -0.527471; 0.773018;, + -0.429458; -0.642729; 0.634401;, + -0.295816; -0.714163; 0.634401;, + -0.270595; -0.653274; 0.707115;, + -0.392843; -0.587931; 0.707115;, + -0.461936; -0.691337; 0.555579;, + -0.318187; -0.768172; 0.555580;, + -0.295816; -0.714163; 0.634401;, + -0.429458; -0.642729; 0.634401;, + -0.489966; -0.733287; 0.471405;, + -0.337495; -0.814785; 0.471405;, + -0.318187; -0.768172; 0.555580;, + -0.461936; -0.691337; 0.555579;, + -0.513278; -0.768176; 0.382690;, + -0.353552; -0.853551; 0.382690;, + -0.337495; -0.814785; 0.471405;, + -0.489966; -0.733287; 0.471405;, + -0.531646; -0.795666; 0.290290;, + -0.366204; -0.884096; 0.290290;, + -0.353552; -0.853551; 0.382690;, + -0.513278; -0.768176; 0.382690;, + -0.544894; -0.815493; 0.195094;, + -0.375330; -0.906127; 0.195094;, + -0.366204; -0.884096; 0.290290;, + -0.531646; -0.795666; 0.290290;, + -0.552895; -0.827466; 0.098020;, + -0.380840; -0.919431; 0.098020;, + -0.375330; -0.906127; 0.195094;, + -0.544894; -0.815493; 0.195094;, + -0.555570; -0.831470; 0.000000;, + -0.382683; -0.923880; 0.000000;, + -0.380840; -0.919431; 0.098020;, + -0.552895; -0.827466; 0.098020;, + -0.552895; -0.827466; -0.098019;, + -0.380840; -0.919431; -0.098019;, + -0.382683; -0.923880; 0.000000;, + -0.555570; -0.831470; 0.000000;, + -0.544894; -0.815493; -0.195094;, + -0.375330; -0.906127; -0.195094;, + -0.380840; -0.919431; -0.098019;, + -0.552895; -0.827466; -0.098019;, + -0.531646; -0.795665; -0.290291;, + -0.366204; -0.884096; -0.290291;, + -0.375330; -0.906127; -0.195094;, + -0.544894; -0.815493; -0.195094;, + -0.513278; -0.768175; -0.382691;, + -0.353552; -0.853551; -0.382691;, + -0.366204; -0.884096; -0.290291;, + -0.531646; -0.795665; -0.290291;, + -0.489966; -0.733287; -0.471405;, + -0.337495; -0.814785; -0.471405;, + -0.353552; -0.853551; -0.382691;, + -0.513278; -0.768175; -0.382691;, + -0.461936; -0.691337; -0.555580;, + -0.318187; -0.768172; -0.555580;, + -0.337495; -0.814785; -0.471405;, + -0.489966; -0.733287; -0.471405;, + -0.429457; -0.642729; -0.634402;, + -0.295815; -0.714162; -0.634402;, + -0.318187; -0.768172; -0.555580;, + -0.461936; -0.691337; -0.555580;, + -0.392843; -0.587931; -0.707115;, + -0.270595; -0.653274; -0.707115;, + -0.295815; -0.714162; -0.634402;, + -0.429457; -0.642729; -0.634402;, + -0.352445; -0.527472; -0.773017;, + -0.242768; -0.586095; -0.773017;, + -0.270595; -0.653274; -0.707115;, + -0.392843; -0.587931; -0.707115;, + -0.308653; -0.461932; -0.831476;, + -0.212604; -0.513272; -0.831476;, + -0.242768; -0.586095; -0.773017;, + -0.352445; -0.527472; -0.773017;, + -0.261889; -0.391945; -0.881926;, + -0.180392; -0.435506; -0.881926;, + -0.212604; -0.513272; -0.831476;, + -0.308653; -0.461932; -0.831476;, + -0.212603; -0.318183; -0.923883;, + -0.146443; -0.353546; -0.923883;, + -0.180392; -0.435506; -0.881926;, + -0.261889; -0.391945; -0.881926;, + -0.161269; -0.241357; -0.956943;, + -0.111084; -0.268181; -0.956943;, + -0.146443; -0.353546; -0.923883;, + -0.212603; -0.318183; -0.923883;, + -0.108384; -0.162207; -0.980786;, + -0.074656; -0.180235; -0.980786;, + -0.111084; -0.268181; -0.956943;, + -0.161269; -0.241357; -0.956943;, + -0.054454; -0.081496; -0.995185;, + -0.037509; -0.090554; -0.995185;, + -0.074656; -0.180235; -0.980786;, + -0.108384; -0.162207; -0.980786;, + -0.000000; -0.000000; -1.000000;, + -0.037509; -0.090554; -0.995185;, + -0.054454; -0.081496; -0.995185;, + -0.000000; -0.000000; -1.000000;, + -0.019122; -0.096131; -0.995185;, + -0.037509; -0.090554; -0.995185;, + -0.037509; -0.090554; -0.995185;, + -0.019122; -0.096131; -0.995185;, + -0.038059; -0.191337; -0.980786;, + -0.074656; -0.180235; -0.980786;, + -0.074656; -0.180235; -0.980786;, + -0.038059; -0.191337; -0.980786;, + -0.056630; -0.284700; -0.956943;, + -0.111084; -0.268181; -0.956943;, + -0.111084; -0.268181; -0.956943;, + -0.056630; -0.284700; -0.956943;, + -0.074656; -0.375322; -0.923883;, + -0.146443; -0.353546; -0.923883;, + -0.146443; -0.353546; -0.923883;, + -0.074656; -0.375322; -0.923883;, + -0.091963; -0.462330; -0.881926;, + -0.180392; -0.435506; -0.881926;, + -0.180392; -0.435506; -0.881926;, + -0.091963; -0.462330; -0.881926;, + -0.108384; -0.544886; -0.831476;, + -0.212604; -0.513272; -0.831476;, + -0.212604; -0.513272; -0.831476;, + -0.108384; -0.544886; -0.831476;, + -0.123762; -0.622195; -0.773017;, + -0.242768; -0.586095; -0.773017;, + -0.242768; -0.586095; -0.773017;, + -0.123762; -0.622195; -0.773017;, + -0.137948; -0.693511; -0.707115;, + -0.270595; -0.653274; -0.707115;, + -0.270595; -0.653274; -0.707115;, + -0.137948; -0.693511; -0.707115;, + -0.150805; -0.758150; -0.634402;, + -0.295815; -0.714162; -0.634402;, + -0.295815; -0.714162; -0.634402;, + -0.150805; -0.758150; -0.634402;, + -0.162210; -0.815487; -0.555580;, + -0.318187; -0.768172; -0.555580;, + -0.318187; -0.768172; -0.555580;, + -0.162210; -0.815487; -0.555580;, + -0.172053; -0.864971; -0.471405;, + -0.337495; -0.814785; -0.471405;, + -0.337495; -0.814785; -0.471405;, + -0.172053; -0.864971; -0.471405;, + -0.180239; -0.906125; -0.382691;, + -0.353552; -0.853551; -0.382691;, + -0.353552; -0.853551; -0.382691;, + -0.180239; -0.906125; -0.382691;, + -0.186689; -0.938551; -0.290291;, + -0.366204; -0.884096; -0.290291;, + -0.366204; -0.884096; -0.290291;, + -0.186689; -0.938551; -0.290291;, + -0.191341; -0.961939; -0.195094;, + -0.375330; -0.906127; -0.195094;, + -0.375330; -0.906127; -0.195094;, + -0.191341; -0.961939; -0.195094;, + -0.194151; -0.976062; -0.098019;, + -0.380840; -0.919431; -0.098019;, + -0.380840; -0.919431; -0.098019;, + -0.194151; -0.976062; -0.098019;, + -0.195090; -0.980785; 0.000000;, + -0.382683; -0.923880; 0.000000;, + -0.382683; -0.923880; 0.000000;, + -0.195090; -0.980785; 0.000000;, + -0.194151; -0.976062; 0.098020;, + -0.380840; -0.919431; 0.098020;, + -0.380840; -0.919431; 0.098020;, + -0.194151; -0.976062; 0.098020;, + -0.191341; -0.961939; 0.195094;, + -0.375330; -0.906127; 0.195094;, + -0.375330; -0.906127; 0.195094;, + -0.191341; -0.961939; 0.195094;, + -0.186689; -0.938551; 0.290290;, + -0.366204; -0.884096; 0.290290;, + -0.366204; -0.884096; 0.290290;, + -0.186689; -0.938551; 0.290290;, + -0.180239; -0.906125; 0.382690;, + -0.353552; -0.853551; 0.382690;, + -0.353552; -0.853551; 0.382690;, + -0.180239; -0.906125; 0.382690;, + -0.172053; -0.864971; 0.471405;, + -0.337495; -0.814785; 0.471405;, + -0.337495; -0.814785; 0.471405;, + -0.172053; -0.864971; 0.471405;, + -0.162210; -0.815487; 0.555580;, + -0.318187; -0.768172; 0.555580;, + -0.318187; -0.768172; 0.555580;, + -0.162210; -0.815487; 0.555580;, + -0.150805; -0.758151; 0.634401;, + -0.295816; -0.714163; 0.634401;, + -0.295816; -0.714163; 0.634401;, + -0.150805; -0.758151; 0.634401;, + -0.137948; -0.693512; 0.707114;, + -0.270595; -0.653274; 0.707115;, + -0.270595; -0.653274; 0.707115;, + -0.137948; -0.693512; 0.707114;, + -0.123762; -0.622195; 0.773018;, + -0.242768; -0.586095; 0.773018;, + -0.242768; -0.586095; 0.773018;, + -0.123762; -0.622195; 0.773018;, + -0.108384; -0.544886; 0.831476;, + -0.212604; -0.513272; 0.831476;, + -0.212604; -0.513272; 0.831476;, + -0.108384; -0.544886; 0.831476;, + -0.091963; -0.462331; 0.881926;, + -0.180392; -0.435506; 0.881926;, + -0.180392; -0.435506; 0.881926;, + -0.091963; -0.462331; 0.881926;, + -0.074656; -0.375323; 0.923882;, + -0.146444; -0.353547; 0.923882;, + -0.146444; -0.353547; 0.923882;, + -0.074656; -0.375323; 0.923882;, + -0.056630; -0.284701; 0.956942;, + -0.111085; -0.268183; 0.956942;, + -0.111085; -0.268183; 0.956942;, + -0.056630; -0.284701; 0.956942;, + -0.038059; -0.191337; 0.980786;, + -0.074656; -0.180236; 0.980786;, + -0.074656; -0.180236; 0.980786;, + -0.038059; -0.191337; 0.980786;, + -0.019122; -0.096132; 0.995185;, + -0.037509; -0.090554; 0.995185;, + -0.037509; -0.090554; 0.995185;, + -0.019122; -0.096132; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.019122; -0.096132; 0.995185;, + 0.000000; -0.098015; 0.995185;, + 0.000000; -0.000000; 1.000000;, + -0.038059; -0.191337; 0.980786;, + 0.000000; -0.195086; 0.980786;, + 0.000000; -0.098015; 0.995185;, + -0.019122; -0.096132; 0.995185;, + -0.056630; -0.284701; 0.956942;, + 0.000000; -0.290279; 0.956942;, + 0.000000; -0.195086; 0.980786;, + -0.038059; -0.191337; 0.980786;, + -0.074656; -0.375323; 0.923882;, + 0.000000; -0.382676; 0.923882;, + 0.000000; -0.290279; 0.956942;, + -0.056630; -0.284701; 0.956942;, + -0.091963; -0.462331; 0.881926;, + 0.000000; -0.471388; 0.881926;, + 0.000000; -0.382676; 0.923882;, + -0.074656; -0.375323; 0.923882;, + -0.108384; -0.544886; 0.831476;, + 0.000000; -0.555561; 0.831476;, + 0.000000; -0.471388; 0.881926;, + -0.091963; -0.462331; 0.881926;, + -0.123762; -0.622195; 0.773018;, + 0.000000; -0.634384; 0.773018;, + 0.000000; -0.555561; 0.831476;, + -0.108384; -0.544886; 0.831476;, + -0.137948; -0.693512; 0.707114;, + 0.000000; -0.707099; 0.707114;, + 0.000000; -0.634384; 0.773018;, + -0.123762; -0.622195; 0.773018;, + -0.150805; -0.758151; 0.634401;, + 0.000000; -0.773004; 0.634401;, + 0.000000; -0.707099; 0.707114;, + -0.137948; -0.693512; 0.707114;, + -0.162210; -0.815487; 0.555580;, + 0.000000; -0.831463; 0.555580;, + 0.000000; -0.773004; 0.634401;, + -0.150805; -0.758151; 0.634401;, + -0.172053; -0.864971; 0.471405;, + 0.000000; -0.881917; 0.471405;, + 0.000000; -0.831463; 0.555580;, + -0.162210; -0.815487; 0.555580;, + -0.180239; -0.906125; 0.382690;, + 0.000000; -0.923877; 0.382690;, + 0.000000; -0.881917; 0.471405;, + -0.172053; -0.864971; 0.471405;, + -0.186689; -0.938551; 0.290290;, + 0.000000; -0.956939; 0.290290;, + 0.000000; -0.923877; 0.382690;, + -0.180239; -0.906125; 0.382690;, + -0.191341; -0.961939; 0.195094;, + 0.000000; -0.980785; 0.195094;, + 0.000000; -0.956939; 0.290290;, + -0.186689; -0.938551; 0.290290;, + -0.194151; -0.976062; 0.098020;, + 0.000000; -0.995184; 0.098020;, + 0.000000; -0.980785; 0.195094;, + -0.191341; -0.961939; 0.195094;, + -0.195090; -0.980785; 0.000000;, + 0.000000; -1.000000; 0.000000;, + 0.000000; -0.995184; 0.098020;, + -0.194151; -0.976062; 0.098020;, + -0.194151; -0.976062; -0.098019;, + 0.000000; -0.995185; -0.098019;, + 0.000000; -1.000000; 0.000000;, + -0.195090; -0.980785; 0.000000;, + -0.191341; -0.961939; -0.195094;, + 0.000000; -0.980785; -0.195094;, + 0.000000; -0.995185; -0.098019;, + -0.194151; -0.976062; -0.098019;, + -0.186689; -0.938551; -0.290291;, + 0.000000; -0.956938; -0.290291;, + 0.000000; -0.980785; -0.195094;, + -0.191341; -0.961939; -0.195094;, + -0.180239; -0.906125; -0.382691;, + 0.000000; -0.923877; -0.382691;, + 0.000000; -0.956938; -0.290291;, + -0.186689; -0.938551; -0.290291;, + -0.172053; -0.864971; -0.471405;, + 0.000000; -0.881917; -0.471406;, + 0.000000; -0.923877; -0.382691;, + -0.180239; -0.906125; -0.382691;, + -0.162210; -0.815487; -0.555580;, + 0.000000; -0.831463; -0.555580;, + 0.000000; -0.881917; -0.471406;, + -0.172053; -0.864971; -0.471405;, + -0.150805; -0.758150; -0.634402;, + 0.000000; -0.773003; -0.634402;, + 0.000000; -0.831463; -0.555580;, + -0.162210; -0.815487; -0.555580;, + -0.137948; -0.693511; -0.707115;, + 0.000000; -0.707098; -0.707115;, + 0.000000; -0.773003; -0.634402;, + -0.150805; -0.758150; -0.634402;, + -0.123762; -0.622195; -0.773017;, + 0.000000; -0.634385; -0.773017;, + 0.000000; -0.707098; -0.707115;, + -0.137948; -0.693511; -0.707115;, + -0.108384; -0.544886; -0.831476;, + 0.000000; -0.555561; -0.831476;, + 0.000000; -0.634385; -0.773017;, + -0.123762; -0.622195; -0.773017;, + -0.091963; -0.462330; -0.881926;, + 0.000000; -0.471388; -0.881926;, + 0.000000; -0.555561; -0.831476;, + -0.108384; -0.544886; -0.831476;, + -0.074656; -0.375322; -0.923883;, + 0.000000; -0.382675; -0.923883;, + 0.000000; -0.471388; -0.881926;, + -0.091963; -0.462330; -0.881926;, + -0.056630; -0.284700; -0.956943;, + 0.000000; -0.290277; -0.956943;, + 0.000000; -0.382675; -0.923883;, + -0.074656; -0.375322; -0.923883;, + -0.038059; -0.191337; -0.980786;, + 0.000000; -0.195085; -0.980786;, + 0.000000; -0.290277; -0.956943;, + -0.056630; -0.284700; -0.956943;, + -0.019122; -0.096131; -0.995185;, + 0.000000; -0.098015; -0.995185;, + 0.000000; -0.195085; -0.980786;, + -0.038059; -0.191337; -0.980786;, + -0.000000; -0.000000; -1.000000;, + 0.000000; -0.098015; -0.995185;, + -0.019122; -0.096131; -0.995185;, + -0.000000; -0.000000; -1.000000;, + 0.019122; -0.096131; -0.995185;, + 0.000000; -0.098015; -0.995185;, + 0.000000; -0.098015; -0.995185;, + 0.019122; -0.096131; -0.995185;, + 0.038059; -0.191337; -0.980786;, + 0.000000; -0.195085; -0.980786;, + 0.000000; -0.195085; -0.980786;, + 0.038059; -0.191337; -0.980786;, + 0.056630; -0.284700; -0.956943;, + 0.000000; -0.290277; -0.956943;, + 0.000000; -0.290277; -0.956943;, + 0.056630; -0.284700; -0.956943;, + 0.074656; -0.375322; -0.923883;, + 0.000000; -0.382675; -0.923883;, + 0.000000; -0.382675; -0.923883;, + 0.074656; -0.375322; -0.923883;, + 0.091963; -0.462330; -0.881926;, + 0.000000; -0.471388; -0.881926;, + 0.000000; -0.471388; -0.881926;, + 0.091963; -0.462330; -0.881926;, + 0.108385; -0.544886; -0.831476;, + 0.000000; -0.555561; -0.831476;, + 0.000000; -0.555561; -0.831476;, + 0.108385; -0.544886; -0.831476;, + 0.123763; -0.622195; -0.773017;, + 0.000000; -0.634385; -0.773017;, + 0.000000; -0.634385; -0.773017;, + 0.123763; -0.622195; -0.773017;, + 0.137948; -0.693511; -0.707115;, + 0.000000; -0.707098; -0.707115;, + 0.000000; -0.707098; -0.707115;, + 0.137948; -0.693511; -0.707115;, + 0.150806; -0.758150; -0.634402;, + 0.000000; -0.773003; -0.634402;, + 0.000000; -0.773003; -0.634402;, + 0.150806; -0.758150; -0.634402;, + 0.162211; -0.815487; -0.555580;, + 0.000000; -0.831463; -0.555580;, + 0.000000; -0.831463; -0.555580;, + 0.162211; -0.815487; -0.555580;, + 0.172054; -0.864971; -0.471406;, + 0.000000; -0.881917; -0.471406;, + 0.000000; -0.881917; -0.471406;, + 0.172054; -0.864971; -0.471406;, + 0.180240; -0.906124; -0.382691;, + 0.000000; -0.923877; -0.382691;, + 0.000000; -0.923877; -0.382691;, + 0.180240; -0.906124; -0.382691;, + 0.186690; -0.938551; -0.290291;, + 0.000000; -0.956938; -0.290291;, + 0.000000; -0.956938; -0.290291;, + 0.186690; -0.938551; -0.290291;, + 0.191342; -0.961939; -0.195094;, + 0.000000; -0.980785; -0.195094;, + 0.000000; -0.980785; -0.195094;, + 0.191342; -0.961939; -0.195094;, + 0.194151; -0.976062; -0.098019;, + 0.000000; -0.995185; -0.098019;, + 0.000000; -0.995185; -0.098019;, + 0.194151; -0.976062; -0.098019;, + 0.195091; -0.980785; 0.000000;, + 0.000000; -1.000000; 0.000000;, + 0.000000; -1.000000; 0.000000;, + 0.195091; -0.980785; 0.000000;, + 0.194151; -0.976062; 0.098020;, + 0.000000; -0.995184; 0.098020;, + 0.000000; -0.995184; 0.098020;, + 0.194151; -0.976062; 0.098020;, + 0.191342; -0.961939; 0.195094;, + 0.000000; -0.980785; 0.195094;, + 0.000000; -0.980785; 0.195094;, + 0.191342; -0.961939; 0.195094;, + 0.186690; -0.938551; 0.290290;, + 0.000000; -0.956939; 0.290290;, + 0.000000; -0.956939; 0.290290;, + 0.186690; -0.938551; 0.290290;, + 0.180240; -0.906125; 0.382690;, + 0.000000; -0.923877; 0.382690;, + 0.000000; -0.923877; 0.382690;, + 0.180240; -0.906125; 0.382690;, + 0.172054; -0.864971; 0.471405;, + 0.000000; -0.881917; 0.471405;, + 0.000000; -0.881917; 0.471405;, + 0.172054; -0.864971; 0.471405;, + 0.162211; -0.815487; 0.555580;, + 0.000000; -0.831463; 0.555580;, + 0.000000; -0.831463; 0.555580;, + 0.162211; -0.815487; 0.555580;, + 0.150806; -0.758151; 0.634401;, + 0.000000; -0.773004; 0.634401;, + 0.000000; -0.773004; 0.634401;, + 0.150806; -0.758151; 0.634401;, + 0.137948; -0.693512; 0.707115;, + 0.000000; -0.707099; 0.707114;, + 0.000000; -0.707099; 0.707114;, + 0.137948; -0.693512; 0.707115;, + 0.123762; -0.622195; 0.773018;, + 0.000000; -0.634384; 0.773018;, + 0.000000; -0.634384; 0.773018;, + 0.123762; -0.622195; 0.773018;, + 0.108385; -0.544886; 0.831476;, + 0.000000; -0.555561; 0.831476;, + 0.000000; -0.555561; 0.831476;, + 0.108385; -0.544886; 0.831476;, + 0.091963; -0.462331; 0.881926;, + 0.000000; -0.471388; 0.881926;, + 0.000000; -0.471388; 0.881926;, + 0.091963; -0.462331; 0.881926;, + 0.074657; -0.375323; 0.923882;, + 0.000000; -0.382676; 0.923882;, + 0.000000; -0.382676; 0.923882;, + 0.074657; -0.375323; 0.923882;, + 0.056631; -0.284701; 0.956942;, + 0.000000; -0.290279; 0.956942;, + 0.000000; -0.290279; 0.956942;, + 0.056631; -0.284701; 0.956942;, + 0.038059; -0.191337; 0.980786;, + 0.000000; -0.195086; 0.980786;, + 0.000000; -0.195086; 0.980786;, + 0.038059; -0.191337; 0.980786;, + 0.019122; -0.096132; 0.995185;, + 0.000000; -0.098015; 0.995185;, + 0.000000; -0.098015; 0.995185;, + 0.019122; -0.096132; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.019122; -0.096132; 0.995185;, + 0.037509; -0.090554; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.038059; -0.191337; 0.980786;, + 0.074656; -0.180236; 0.980786;, + 0.037509; -0.090554; 0.995185;, + 0.019122; -0.096132; 0.995185;, + 0.056631; -0.284701; 0.956942;, + 0.111085; -0.268182; 0.956942;, + 0.074656; -0.180236; 0.980786;, + 0.038059; -0.191337; 0.980786;, + 0.074657; -0.375323; 0.923882;, + 0.146444; -0.353547; 0.923882;, + 0.111085; -0.268182; 0.956942;, + 0.056631; -0.284701; 0.956942;, + 0.091963; -0.462331; 0.881926;, + 0.180393; -0.435506; 0.881926;, + 0.146444; -0.353547; 0.923882;, + 0.074657; -0.375323; 0.923882;, + 0.108385; -0.544886; 0.831476;, + 0.212604; -0.513272; 0.831476;, + 0.180393; -0.435506; 0.881926;, + 0.091963; -0.462331; 0.881926;, + 0.123762; -0.622195; 0.773018;, + 0.242769; -0.586095; 0.773018;, + 0.212604; -0.513272; 0.831476;, + 0.108385; -0.544886; 0.831476;, + 0.137948; -0.693512; 0.707115;, + 0.270595; -0.653274; 0.707114;, + 0.242769; -0.586095; 0.773018;, + 0.123762; -0.622195; 0.773018;, + 0.150806; -0.758151; 0.634401;, + 0.295816; -0.714162; 0.634401;, + 0.270595; -0.653274; 0.707114;, + 0.137948; -0.693512; 0.707115;, + 0.162211; -0.815487; 0.555580;, + 0.318187; -0.768172; 0.555580;, + 0.295816; -0.714162; 0.634401;, + 0.150806; -0.758151; 0.634401;, + 0.172054; -0.864971; 0.471405;, + 0.337495; -0.814785; 0.471405;, + 0.318187; -0.768172; 0.555580;, + 0.162211; -0.815487; 0.555580;, + 0.180240; -0.906125; 0.382690;, + 0.353553; -0.853551; 0.382690;, + 0.337495; -0.814785; 0.471405;, + 0.172054; -0.864971; 0.471405;, + 0.186690; -0.938551; 0.290290;, + 0.366205; -0.884096; 0.290290;, + 0.353553; -0.853551; 0.382690;, + 0.180240; -0.906125; 0.382690;, + 0.191342; -0.961939; 0.195094;, + 0.375330; -0.906127; 0.195094;, + 0.366205; -0.884096; 0.290290;, + 0.186690; -0.938551; 0.290290;, + 0.194151; -0.976062; 0.098020;, + 0.380841; -0.919430; 0.098020;, + 0.375330; -0.906127; 0.195094;, + 0.191342; -0.961939; 0.195094;, + 0.195091; -0.980785; 0.000000;, + 0.382684; -0.923879; 0.000000;, + 0.380841; -0.919430; 0.098020;, + 0.194151; -0.976062; 0.098020;, + 0.194151; -0.976062; -0.098019;, + 0.380841; -0.919430; -0.098019;, + 0.382684; -0.923879; 0.000000;, + 0.195091; -0.980785; 0.000000;, + 0.191342; -0.961939; -0.195094;, + 0.375330; -0.906127; -0.195094;, + 0.380841; -0.919430; -0.098019;, + 0.194151; -0.976062; -0.098019;, + 0.186690; -0.938551; -0.290291;, + 0.366205; -0.884096; -0.290291;, + 0.375330; -0.906127; -0.195094;, + 0.191342; -0.961939; -0.195094;, + 0.180240; -0.906124; -0.382691;, + 0.353552; -0.853551; -0.382691;, + 0.366205; -0.884096; -0.290291;, + 0.186690; -0.938551; -0.290291;, + 0.172054; -0.864971; -0.471406;, + 0.337495; -0.814785; -0.471406;, + 0.353552; -0.853551; -0.382691;, + 0.180240; -0.906124; -0.382691;, + 0.162211; -0.815487; -0.555580;, + 0.318188; -0.768172; -0.555580;, + 0.337495; -0.814785; -0.471406;, + 0.172054; -0.864971; -0.471406;, + 0.150806; -0.758150; -0.634402;, + 0.295816; -0.714162; -0.634402;, + 0.318188; -0.768172; -0.555580;, + 0.162211; -0.815487; -0.555580;, + 0.137948; -0.693511; -0.707115;, + 0.270595; -0.653273; -0.707115;, + 0.295816; -0.714162; -0.634402;, + 0.150806; -0.758150; -0.634402;, + 0.123763; -0.622195; -0.773017;, + 0.242769; -0.586095; -0.773017;, + 0.270595; -0.653273; -0.707115;, + 0.137948; -0.693511; -0.707115;, + 0.108385; -0.544886; -0.831476;, + 0.212604; -0.513272; -0.831476;, + 0.242769; -0.586095; -0.773017;, + 0.123763; -0.622195; -0.773017;, + 0.091963; -0.462330; -0.881926;, + 0.180393; -0.435506; -0.881926;, + 0.212604; -0.513272; -0.831476;, + 0.108385; -0.544886; -0.831476;, + 0.074656; -0.375322; -0.923883;, + 0.146444; -0.353546; -0.923883;, + 0.180393; -0.435506; -0.881926;, + 0.091963; -0.462330; -0.881926;, + 0.056630; -0.284700; -0.956943;, + 0.111084; -0.268181; -0.956943;, + 0.146444; -0.353546; -0.923883;, + 0.074656; -0.375322; -0.923883;, + 0.038059; -0.191337; -0.980786;, + 0.074656; -0.180235; -0.980786;, + 0.111084; -0.268181; -0.956943;, + 0.056630; -0.284700; -0.956943;, + 0.019122; -0.096131; -0.995185;, + 0.037509; -0.090554; -0.995185;, + 0.074656; -0.180235; -0.980786;, + 0.038059; -0.191337; -0.980786;, + -0.000000; -0.000000; -1.000000;, + 0.037509; -0.090554; -0.995185;, + 0.019122; -0.096131; -0.995185;, + -0.000000; -0.000000; -1.000000;, + 0.054454; -0.081496; -0.995185;, + 0.037509; -0.090554; -0.995185;, + 0.037509; -0.090554; -0.995185;, + 0.054454; -0.081496; -0.995185;, + 0.108384; -0.162207; -0.980786;, + 0.074656; -0.180235; -0.980786;, + 0.074656; -0.180235; -0.980786;, + 0.108384; -0.162207; -0.980786;, + 0.161270; -0.241357; -0.956943;, + 0.111084; -0.268181; -0.956943;, + 0.111084; -0.268181; -0.956943;, + 0.161270; -0.241357; -0.956943;, + 0.212603; -0.318183; -0.923883;, + 0.146444; -0.353546; -0.923883;, + 0.146444; -0.353546; -0.923883;, + 0.212603; -0.318183; -0.923883;, + 0.261889; -0.391945; -0.881926;, + 0.180393; -0.435506; -0.881926;, + 0.180393; -0.435506; -0.881926;, + 0.261889; -0.391945; -0.881926;, + 0.308654; -0.461932; -0.831475;, + 0.212604; -0.513272; -0.831476;, + 0.212604; -0.513272; -0.831476;, + 0.308654; -0.461932; -0.831475;, + 0.352446; -0.527472; -0.773017;, + 0.242769; -0.586095; -0.773017;, + 0.242769; -0.586095; -0.773017;, + 0.352446; -0.527472; -0.773017;, + 0.392843; -0.587930; -0.707115;, + 0.270595; -0.653273; -0.707115;, + 0.270595; -0.653273; -0.707115;, + 0.392843; -0.587930; -0.707115;, + 0.429458; -0.642728; -0.634402;, + 0.295816; -0.714162; -0.634402;, + 0.295816; -0.714162; -0.634402;, + 0.429458; -0.642728; -0.634402;, + 0.461937; -0.691336; -0.555580;, + 0.318188; -0.768172; -0.555580;, + 0.318188; -0.768172; -0.555580;, + 0.461937; -0.691336; -0.555580;, + 0.489967; -0.733287; -0.471406;, + 0.337495; -0.814785; -0.471406;, + 0.337495; -0.814785; -0.471406;, + 0.489967; -0.733287; -0.471406;, + 0.513279; -0.768175; -0.382691;, + 0.353552; -0.853551; -0.382691;, + 0.353552; -0.853551; -0.382691;, + 0.513279; -0.768175; -0.382691;, + 0.531647; -0.795665; -0.290291;, + 0.366205; -0.884096; -0.290291;, + 0.366205; -0.884096; -0.290291;, + 0.531647; -0.795665; -0.290291;, + 0.544895; -0.815492; -0.195094;, + 0.375330; -0.906127; -0.195094;, + 0.375330; -0.906127; -0.195094;, + 0.544895; -0.815492; -0.195094;, + 0.552895; -0.827466; -0.098019;, + 0.380841; -0.919430; -0.098019;, + 0.380841; -0.919430; -0.098019;, + 0.552895; -0.827466; -0.098019;, + 0.555570; -0.831469; 0.000000;, + 0.382684; -0.923879; 0.000000;, + 0.382684; -0.923879; 0.000000;, + 0.555570; -0.831469; 0.000000;, + 0.552895; -0.827465; 0.098020;, + 0.380841; -0.919430; 0.098020;, + 0.380841; -0.919430; 0.098020;, + 0.552895; -0.827465; 0.098020;, + 0.544895; -0.815493; 0.195094;, + 0.375330; -0.906127; 0.195094;, + 0.375330; -0.906127; 0.195094;, + 0.544895; -0.815493; 0.195094;, + 0.531647; -0.795665; 0.290290;, + 0.366205; -0.884096; 0.290290;, + 0.366205; -0.884096; 0.290290;, + 0.531647; -0.795665; 0.290290;, + 0.513279; -0.768175; 0.382690;, + 0.353553; -0.853551; 0.382690;, + 0.353553; -0.853551; 0.382690;, + 0.513279; -0.768175; 0.382690;, + 0.489967; -0.733287; 0.471405;, + 0.337495; -0.814785; 0.471405;, + 0.337495; -0.814785; 0.471405;, + 0.489967; -0.733287; 0.471405;, + 0.461936; -0.691336; 0.555580;, + 0.318187; -0.768172; 0.555580;, + 0.318187; -0.768172; 0.555580;, + 0.461936; -0.691336; 0.555580;, + 0.429458; -0.642729; 0.634401;, + 0.295816; -0.714162; 0.634401;, + 0.295816; -0.714162; 0.634401;, + 0.429458; -0.642729; 0.634401;, + 0.392843; -0.587931; 0.707114;, + 0.270595; -0.653274; 0.707114;, + 0.270595; -0.653274; 0.707114;, + 0.392843; -0.587931; 0.707114;, + 0.352445; -0.527471; 0.773018;, + 0.242769; -0.586095; 0.773018;, + 0.242769; -0.586095; 0.773018;, + 0.352445; -0.527471; 0.773018;, + 0.308653; -0.461932; 0.831476;, + 0.212604; -0.513272; 0.831476;, + 0.212604; -0.513272; 0.831476;, + 0.308653; -0.461932; 0.831476;, + 0.261889; -0.391945; 0.881926;, + 0.180393; -0.435506; 0.881926;, + 0.180393; -0.435506; 0.881926;, + 0.261889; -0.391945; 0.881926;, + 0.212604; -0.318184; 0.923882;, + 0.146444; -0.353547; 0.923882;, + 0.146444; -0.353547; 0.923882;, + 0.212604; -0.318184; 0.923882;, + 0.161270; -0.241358; 0.956942;, + 0.111085; -0.268182; 0.956942;, + 0.111085; -0.268182; 0.956942;, + 0.161270; -0.241358; 0.956942;, + 0.108384; -0.162208; 0.980786;, + 0.074656; -0.180236; 0.980786;, + 0.074656; -0.180236; 0.980786;, + 0.108384; -0.162208; 0.980786;, + 0.054454; -0.081497; 0.995185;, + 0.037509; -0.090554; 0.995185;, + 0.037509; -0.090554; 0.995185;, + 0.054454; -0.081497; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.054454; -0.081497; 0.995185;, + 0.069307; -0.069307; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.108384; -0.162208; 0.980786;, + 0.137947; -0.137947; 0.980786;, + 0.069307; -0.069307; 0.995185;, + 0.054454; -0.081497; 0.995185;, + 0.161270; -0.241358; 0.956942;, + 0.205258; -0.205258; 0.956942;, + 0.137947; -0.137947; 0.980786;, + 0.108384; -0.162208; 0.980786;, + 0.212604; -0.318184; 0.923882;, + 0.270593; -0.270593; 0.923882;, + 0.205258; -0.205258; 0.956942;, + 0.161270; -0.241358; 0.956942;, + 0.261889; -0.391945; 0.881926;, + 0.333322; -0.333322; 0.881926;, + 0.270593; -0.270593; 0.923882;, + 0.212604; -0.318184; 0.923882;, + 0.308653; -0.461932; 0.831476;, + 0.392841; -0.392841; 0.831476;, + 0.333322; -0.333322; 0.881926;, + 0.261889; -0.391945; 0.881926;, + 0.352445; -0.527471; 0.773018;, + 0.448578; -0.448577; 0.773018;, + 0.392841; -0.392841; 0.831476;, + 0.308653; -0.461932; 0.831476;, + 0.392843; -0.587931; 0.707114;, + 0.499995; -0.499995; 0.707114;, + 0.448578; -0.448577; 0.773018;, + 0.352445; -0.527471; 0.773018;, + 0.429458; -0.642729; 0.634401;, + 0.546596; -0.546596; 0.634401;, + 0.499995; -0.499995; 0.707114;, + 0.392843; -0.587931; 0.707114;, + 0.461936; -0.691336; 0.555580;, + 0.587933; -0.587933; 0.555580;, + 0.546596; -0.546596; 0.634401;, + 0.429458; -0.642729; 0.634401;, + 0.489967; -0.733287; 0.471405;, + 0.623610; -0.623609; 0.471405;, + 0.587933; -0.587933; 0.555580;, + 0.461936; -0.691336; 0.555580;, + 0.513279; -0.768175; 0.382690;, + 0.653280; -0.653279; 0.382690;, + 0.623610; -0.623609; 0.471405;, + 0.489967; -0.733287; 0.471405;, + 0.531647; -0.795665; 0.290290;, + 0.676658; -0.676658; 0.290290;, + 0.653280; -0.653279; 0.382690;, + 0.513279; -0.768175; 0.382690;, + 0.544895; -0.815493; 0.195094;, + 0.693520; -0.693519; 0.195093;, + 0.676658; -0.676658; 0.290290;, + 0.531647; -0.795665; 0.290290;, + 0.552895; -0.827465; 0.098020;, + 0.703702; -0.703702; 0.098020;, + 0.693520; -0.693519; 0.195093;, + 0.544895; -0.815493; 0.195094;, + 0.555570; -0.831469; 0.000000;, + 0.707107; -0.707107; 0.000000;, + 0.703702; -0.703702; 0.098020;, + 0.552895; -0.827465; 0.098020;, + 0.552895; -0.827466; -0.098019;, + 0.703702; -0.703702; -0.098019;, + 0.707107; -0.707107; 0.000000;, + 0.555570; -0.831469; 0.000000;, + 0.544895; -0.815492; -0.195094;, + 0.693520; -0.693519; -0.195094;, + 0.703702; -0.703702; -0.098019;, + 0.552895; -0.827466; -0.098019;, + 0.531647; -0.795665; -0.290291;, + 0.676658; -0.676657; -0.290291;, + 0.693520; -0.693519; -0.195094;, + 0.544895; -0.815492; -0.195094;, + 0.513279; -0.768175; -0.382691;, + 0.653280; -0.653279; -0.382691;, + 0.676658; -0.676657; -0.290291;, + 0.531647; -0.795665; -0.290291;, + 0.489967; -0.733287; -0.471406;, + 0.623609; -0.623609; -0.471406;, + 0.653280; -0.653279; -0.382691;, + 0.513279; -0.768175; -0.382691;, + 0.461937; -0.691336; -0.555580;, + 0.587934; -0.587933; -0.555580;, + 0.623609; -0.623609; -0.471406;, + 0.489967; -0.733287; -0.471406;, + 0.429458; -0.642728; -0.634402;, + 0.546596; -0.546595; -0.634402;, + 0.587934; -0.587933; -0.555580;, + 0.461937; -0.691336; -0.555580;, + 0.392843; -0.587930; -0.707115;, + 0.499994; -0.499994; -0.707115;, + 0.546596; -0.546595; -0.634402;, + 0.429458; -0.642728; -0.634402;, + 0.352446; -0.527472; -0.773017;, + 0.448578; -0.448578; -0.773017;, + 0.499994; -0.499994; -0.707115;, + 0.392843; -0.587930; -0.707115;, + 0.308654; -0.461932; -0.831475;, + 0.392841; -0.392841; -0.831475;, + 0.448578; -0.448578; -0.773017;, + 0.352446; -0.527472; -0.773017;, + 0.261889; -0.391945; -0.881926;, + 0.333322; -0.333322; -0.881926;, + 0.392841; -0.392841; -0.831475;, + 0.308654; -0.461932; -0.831475;, + 0.212603; -0.318183; -0.923883;, + 0.270592; -0.270592; -0.923883;, + 0.333322; -0.333322; -0.881926;, + 0.261889; -0.391945; -0.881926;, + 0.161270; -0.241357; -0.956943;, + 0.205257; -0.205257; -0.956943;, + 0.270592; -0.270592; -0.923883;, + 0.212603; -0.318183; -0.923883;, + 0.108384; -0.162207; -0.980786;, + 0.137946; -0.137946; -0.980786;, + 0.205257; -0.205257; -0.956943;, + 0.161270; -0.241357; -0.956943;, + 0.054454; -0.081496; -0.995185;, + 0.069307; -0.069307; -0.995185;, + 0.137946; -0.137946; -0.980786;, + 0.108384; -0.162207; -0.980786;, + -0.000000; -0.000000; -1.000000;, + 0.069307; -0.069307; -0.995185;, + 0.054454; -0.081496; -0.995185;, + -0.000000; -0.000000; -1.000000;, + 0.081496; -0.054454; -0.995185;, + 0.069307; -0.069307; -0.995185;, + 0.069307; -0.069307; -0.995185;, + 0.081496; -0.054454; -0.995185;, + 0.162208; -0.108384; -0.980786;, + 0.137946; -0.137946; -0.980786;, + 0.137946; -0.137946; -0.980786;, + 0.162208; -0.108384; -0.980786;, + 0.241357; -0.161269; -0.956943;, + 0.205257; -0.205257; -0.956943;, + 0.205257; -0.205257; -0.956943;, + 0.241357; -0.161269; -0.956943;, + 0.318183; -0.212603; -0.923883;, + 0.270592; -0.270592; -0.923883;, + 0.270592; -0.270592; -0.923883;, + 0.318183; -0.212603; -0.923883;, + 0.391945; -0.261889; -0.881926;, + 0.333322; -0.333322; -0.881926;, + 0.333322; -0.333322; -0.881926;, + 0.391945; -0.261889; -0.881926;, + 0.461933; -0.308653; -0.831475;, + 0.392841; -0.392841; -0.831475;, + 0.392841; -0.392841; -0.831475;, + 0.461933; -0.308653; -0.831475;, + 0.527472; -0.352445; -0.773017;, + 0.448578; -0.448578; -0.773017;, + 0.448578; -0.448578; -0.773017;, + 0.527472; -0.352445; -0.773017;, + 0.587931; -0.392842; -0.707115;, + 0.499994; -0.499994; -0.707115;, + 0.499994; -0.499994; -0.707115;, + 0.587931; -0.392842; -0.707115;, + 0.642729; -0.429457; -0.634402;, + 0.546596; -0.546595; -0.634402;, + 0.546596; -0.546595; -0.634402;, + 0.642729; -0.429457; -0.634402;, + 0.691337; -0.461936; -0.555580;, + 0.587934; -0.587933; -0.555580;, + 0.587934; -0.587933; -0.555580;, + 0.691337; -0.461936; -0.555580;, + 0.733287; -0.489966; -0.471406;, + 0.623609; -0.623609; -0.471406;, + 0.623609; -0.623609; -0.471406;, + 0.733287; -0.489966; -0.471406;, + 0.768175; -0.513278; -0.382691;, + 0.653280; -0.653279; -0.382691;, + 0.653280; -0.653279; -0.382691;, + 0.768175; -0.513278; -0.382691;, + 0.795666; -0.531646; -0.290291;, + 0.676658; -0.676657; -0.290291;, + 0.676658; -0.676657; -0.290291;, + 0.795666; -0.531646; -0.290291;, + 0.815493; -0.544894; -0.195094;, + 0.693520; -0.693519; -0.195094;, + 0.693520; -0.693519; -0.195094;, + 0.815493; -0.544894; -0.195094;, + 0.827466; -0.552895; -0.098019;, + 0.703702; -0.703702; -0.098019;, + 0.703702; -0.703702; -0.098019;, + 0.827466; -0.552895; -0.098019;, + 0.831470; -0.555570; 0.000000;, + 0.707107; -0.707107; 0.000000;, + 0.707107; -0.707107; 0.000000;, + 0.831470; -0.555570; 0.000000;, + 0.827466; -0.552895; 0.098020;, + 0.703702; -0.703702; 0.098020;, + 0.703702; -0.703702; 0.098020;, + 0.827466; -0.552895; 0.098020;, + 0.815493; -0.544895; 0.195093;, + 0.693520; -0.693519; 0.195093;, + 0.693520; -0.693519; 0.195093;, + 0.815493; -0.544895; 0.195093;, + 0.795666; -0.531646; 0.290290;, + 0.676658; -0.676658; 0.290290;, + 0.676658; -0.676658; 0.290290;, + 0.795666; -0.531646; 0.290290;, + 0.768176; -0.513278; 0.382690;, + 0.653280; -0.653279; 0.382690;, + 0.653280; -0.653279; 0.382690;, + 0.768176; -0.513278; 0.382690;, + 0.733287; -0.489966; 0.471405;, + 0.623610; -0.623609; 0.471405;, + 0.623610; -0.623609; 0.471405;, + 0.733287; -0.489966; 0.471405;, + 0.691337; -0.461936; 0.555580;, + 0.587933; -0.587933; 0.555580;, + 0.587933; -0.587933; 0.555580;, + 0.691337; -0.461936; 0.555580;, + 0.642729; -0.429458; 0.634401;, + 0.546596; -0.546596; 0.634401;, + 0.546596; -0.546596; 0.634401;, + 0.642729; -0.429458; 0.634401;, + 0.587932; -0.392843; 0.707114;, + 0.499995; -0.499995; 0.707114;, + 0.499995; -0.499995; 0.707114;, + 0.587932; -0.392843; 0.707114;, + 0.527471; -0.352445; 0.773018;, + 0.448578; -0.448577; 0.773018;, + 0.448578; -0.448577; 0.773018;, + 0.527471; -0.352445; 0.773018;, + 0.461933; -0.308653; 0.831476;, + 0.392841; -0.392841; 0.831476;, + 0.392841; -0.392841; 0.831476;, + 0.461933; -0.308653; 0.831476;, + 0.391945; -0.261889; 0.881926;, + 0.333322; -0.333322; 0.881926;, + 0.333322; -0.333322; 0.881926;, + 0.391945; -0.261889; 0.881926;, + 0.318184; -0.212603; 0.923882;, + 0.270593; -0.270593; 0.923882;, + 0.270593; -0.270593; 0.923882;, + 0.318184; -0.212603; 0.923882;, + 0.241358; -0.161270; 0.956942;, + 0.205258; -0.205258; 0.956942;, + 0.205258; -0.205258; 0.956942;, + 0.241358; -0.161270; 0.956942;, + 0.162208; -0.108384; 0.980786;, + 0.137947; -0.137947; 0.980786;, + 0.137947; -0.137947; 0.980786;, + 0.162208; -0.108384; 0.980786;, + 0.081497; -0.054454; 0.995185;, + 0.069307; -0.069307; 0.995185;, + 0.069307; -0.069307; 0.995185;, + 0.081497; -0.054454; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.081497; -0.054454; 0.995185;, + 0.090554; -0.037509; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.162208; -0.108384; 0.980786;, + 0.180236; -0.074656; 0.980786;, + 0.090554; -0.037509; 0.995185;, + 0.081497; -0.054454; 0.995185;, + 0.241358; -0.161270; 0.956942;, + 0.268183; -0.111085; 0.956942;, + 0.180236; -0.074656; 0.980786;, + 0.162208; -0.108384; 0.980786;, + 0.318184; -0.212603; 0.923882;, + 0.353547; -0.146444; 0.923882;, + 0.268183; -0.111085; 0.956942;, + 0.241358; -0.161270; 0.956942;, + 0.391945; -0.261889; 0.881926;, + 0.435506; -0.180392; 0.881926;, + 0.353547; -0.146444; 0.923882;, + 0.318184; -0.212603; 0.923882;, + 0.461933; -0.308653; 0.831476;, + 0.513272; -0.212604; 0.831476;, + 0.435506; -0.180392; 0.881926;, + 0.391945; -0.261889; 0.881926;, + 0.527471; -0.352445; 0.773018;, + 0.586095; -0.242768; 0.773018;, + 0.513272; -0.212604; 0.831476;, + 0.461933; -0.308653; 0.831476;, + 0.587932; -0.392843; 0.707114;, + 0.653275; -0.270595; 0.707114;, + 0.586095; -0.242768; 0.773018;, + 0.527471; -0.352445; 0.773018;, + 0.642729; -0.429458; 0.634401;, + 0.714163; -0.295816; 0.634401;, + 0.653275; -0.270595; 0.707114;, + 0.587932; -0.392843; 0.707114;, + 0.691337; -0.461936; 0.555580;, + 0.768172; -0.318187; 0.555580;, + 0.714163; -0.295816; 0.634401;, + 0.642729; -0.429458; 0.634401;, + 0.733287; -0.489966; 0.471405;, + 0.814785; -0.337495; 0.471405;, + 0.768172; -0.318187; 0.555580;, + 0.691337; -0.461936; 0.555580;, + 0.768176; -0.513278; 0.382690;, + 0.853551; -0.353552; 0.382690;, + 0.814785; -0.337495; 0.471405;, + 0.733287; -0.489966; 0.471405;, + 0.795666; -0.531646; 0.290290;, + 0.884096; -0.366204; 0.290290;, + 0.853551; -0.353552; 0.382690;, + 0.768176; -0.513278; 0.382690;, + 0.815493; -0.544895; 0.195093;, + 0.906127; -0.375330; 0.195093;, + 0.884096; -0.366204; 0.290290;, + 0.795666; -0.531646; 0.290290;, + 0.827466; -0.552895; 0.098020;, + 0.919431; -0.380840; 0.098020;, + 0.906127; -0.375330; 0.195093;, + 0.815493; -0.544895; 0.195093;, + 0.831470; -0.555570; 0.000000;, + 0.923880; -0.382683; 0.000000;, + 0.919431; -0.380840; 0.098020;, + 0.827466; -0.552895; 0.098020;, + 0.827466; -0.552895; -0.098019;, + 0.919431; -0.380840; -0.098019;, + 0.923880; -0.382683; 0.000000;, + 0.831470; -0.555570; 0.000000;, + 0.815493; -0.544894; -0.195094;, + 0.906127; -0.375330; -0.195094;, + 0.919431; -0.380840; -0.098019;, + 0.827466; -0.552895; -0.098019;, + 0.795666; -0.531646; -0.290291;, + 0.884096; -0.366204; -0.290291;, + 0.906127; -0.375330; -0.195094;, + 0.815493; -0.544894; -0.195094;, + 0.768175; -0.513278; -0.382691;, + 0.853551; -0.353552; -0.382691;, + 0.884096; -0.366204; -0.290291;, + 0.795666; -0.531646; -0.290291;, + 0.733287; -0.489966; -0.471406;, + 0.814785; -0.337494; -0.471406;, + 0.853551; -0.353552; -0.382691;, + 0.768175; -0.513278; -0.382691;, + 0.691337; -0.461936; -0.555580;, + 0.768172; -0.318187; -0.555580;, + 0.814785; -0.337494; -0.471406;, + 0.733287; -0.489966; -0.471406;, + 0.642729; -0.429457; -0.634402;, + 0.714162; -0.295815; -0.634402;, + 0.768172; -0.318187; -0.555580;, + 0.691337; -0.461936; -0.555580;, + 0.587931; -0.392842; -0.707115;, + 0.653274; -0.270594; -0.707115;, + 0.714162; -0.295815; -0.634402;, + 0.642729; -0.429457; -0.634402;, + 0.527472; -0.352445; -0.773017;, + 0.586095; -0.242768; -0.773017;, + 0.653274; -0.270594; -0.707115;, + 0.587931; -0.392842; -0.707115;, + 0.461933; -0.308653; -0.831475;, + 0.513272; -0.212604; -0.831475;, + 0.586095; -0.242768; -0.773017;, + 0.527472; -0.352445; -0.773017;, + 0.391945; -0.261889; -0.881926;, + 0.435506; -0.180392; -0.881926;, + 0.513272; -0.212604; -0.831475;, + 0.461933; -0.308653; -0.831475;, + 0.318183; -0.212603; -0.923883;, + 0.353546; -0.146443; -0.923883;, + 0.435506; -0.180392; -0.881926;, + 0.391945; -0.261889; -0.881926;, + 0.241357; -0.161269; -0.956943;, + 0.268181; -0.111084; -0.956943;, + 0.353546; -0.146443; -0.923883;, + 0.318183; -0.212603; -0.923883;, + 0.162208; -0.108384; -0.980786;, + 0.180235; -0.074656; -0.980786;, + 0.268181; -0.111084; -0.956943;, + 0.241357; -0.161269; -0.956943;, + 0.081496; -0.054454; -0.995185;, + 0.090554; -0.037509; -0.995185;, + 0.180235; -0.074656; -0.980786;, + 0.162208; -0.108384; -0.980786;, + -0.000000; -0.000000; -1.000000;, + 0.090554; -0.037509; -0.995185;, + 0.081496; -0.054454; -0.995185;, + -0.000000; -0.000000; -1.000000;, + 0.096131; -0.019122; -0.995185;, + 0.090554; -0.037509; -0.995185;, + 0.090554; -0.037509; -0.995185;, + 0.096131; -0.019122; -0.995185;, + 0.191337; -0.038059; -0.980786;, + 0.180235; -0.074656; -0.980786;, + 0.180235; -0.074656; -0.980786;, + 0.191337; -0.038059; -0.980786;, + 0.284700; -0.056630; -0.956943;, + 0.268181; -0.111084; -0.956943;, + 0.268181; -0.111084; -0.956943;, + 0.284700; -0.056630; -0.956943;, + 0.375322; -0.074656; -0.923883;, + 0.353546; -0.146443; -0.923883;, + 0.353546; -0.146443; -0.923883;, + 0.375322; -0.074656; -0.923883;, + 0.462331; -0.091963; -0.881926;, + 0.435506; -0.180392; -0.881926;, + 0.435506; -0.180392; -0.881926;, + 0.462331; -0.091963; -0.881926;, + 0.544887; -0.108384; -0.831475;, + 0.513272; -0.212604; -0.831475;, + 0.513272; -0.212604; -0.831475;, + 0.544887; -0.108384; -0.831475;, + 0.622195; -0.123762; -0.773017;, + 0.586095; -0.242768; -0.773017;, + 0.586095; -0.242768; -0.773017;, + 0.622195; -0.123762; -0.773017;, + 0.693512; -0.137948; -0.707115;, + 0.653274; -0.270594; -0.707115;, + 0.653274; -0.270594; -0.707115;, + 0.693512; -0.137948; -0.707115;, + 0.758150; -0.150805; -0.634402;, + 0.714162; -0.295815; -0.634402;, + 0.714162; -0.295815; -0.634402;, + 0.758150; -0.150805; -0.634402;, + 0.815487; -0.162210; -0.555580;, + 0.768172; -0.318187; -0.555580;, + 0.768172; -0.318187; -0.555580;, + 0.815487; -0.162210; -0.555580;, + 0.864971; -0.172053; -0.471406;, + 0.814785; -0.337494; -0.471406;, + 0.814785; -0.337494; -0.471406;, + 0.864971; -0.172053; -0.471406;, + 0.906125; -0.180239; -0.382691;, + 0.853551; -0.353552; -0.382691;, + 0.853551; -0.353552; -0.382691;, + 0.906125; -0.180239; -0.382691;, + 0.938551; -0.186689; -0.290291;, + 0.884096; -0.366204; -0.290291;, + 0.884096; -0.366204; -0.290291;, + 0.938551; -0.186689; -0.290291;, + 0.961939; -0.191341; -0.195094;, + 0.906127; -0.375330; -0.195094;, + 0.906127; -0.375330; -0.195094;, + 0.961939; -0.191341; -0.195094;, + 0.976062; -0.194151; -0.098019;, + 0.919431; -0.380840; -0.098019;, + 0.919431; -0.380840; -0.098019;, + 0.976062; -0.194151; -0.098019;, + 0.980785; -0.195090; 0.000000;, + 0.923880; -0.382683; 0.000000;, + 0.923880; -0.382683; 0.000000;, + 0.980785; -0.195090; 0.000000;, + 0.976062; -0.194151; 0.098020;, + 0.919431; -0.380840; 0.098020;, + 0.919431; -0.380840; 0.098020;, + 0.976062; -0.194151; 0.098020;, + 0.961939; -0.191341; 0.195094;, + 0.906127; -0.375330; 0.195093;, + 0.906127; -0.375330; 0.195093;, + 0.961939; -0.191341; 0.195094;, + 0.938551; -0.186689; 0.290290;, + 0.884096; -0.366204; 0.290290;, + 0.884096; -0.366204; 0.290290;, + 0.938551; -0.186689; 0.290290;, + 0.906125; -0.180239; 0.382690;, + 0.853551; -0.353552; 0.382690;, + 0.853551; -0.353552; 0.382690;, + 0.906125; -0.180239; 0.382690;, + 0.864971; -0.172053; 0.471405;, + 0.814785; -0.337495; 0.471405;, + 0.814785; -0.337495; 0.471405;, + 0.864971; -0.172053; 0.471405;, + 0.815487; -0.162210; 0.555579;, + 0.768172; -0.318187; 0.555580;, + 0.768172; -0.318187; 0.555580;, + 0.815487; -0.162210; 0.555579;, + 0.758151; -0.150805; 0.634401;, + 0.714163; -0.295816; 0.634401;, + 0.714163; -0.295816; 0.634401;, + 0.758151; -0.150805; 0.634401;, + 0.693513; -0.137948; 0.707114;, + 0.653275; -0.270595; 0.707114;, + 0.653275; -0.270595; 0.707114;, + 0.693513; -0.137948; 0.707114;, + 0.622195; -0.123762; 0.773018;, + 0.586095; -0.242768; 0.773018;, + 0.586095; -0.242768; 0.773018;, + 0.622195; -0.123762; 0.773018;, + 0.544886; -0.108384; 0.831476;, + 0.513272; -0.212604; 0.831476;, + 0.513272; -0.212604; 0.831476;, + 0.544886; -0.108384; 0.831476;, + 0.462331; -0.091963; 0.881926;, + 0.435506; -0.180392; 0.881926;, + 0.435506; -0.180392; 0.881926;, + 0.462331; -0.091963; 0.881926;, + 0.375323; -0.074656; 0.923882;, + 0.353547; -0.146444; 0.923882;, + 0.353547; -0.146444; 0.923882;, + 0.375323; -0.074656; 0.923882;, + 0.284701; -0.056630; 0.956942;, + 0.268183; -0.111085; 0.956942;, + 0.268183; -0.111085; 0.956942;, + 0.284701; -0.056630; 0.956942;, + 0.191337; -0.038059; 0.980786;, + 0.180236; -0.074656; 0.980786;, + 0.180236; -0.074656; 0.980786;, + 0.191337; -0.038059; 0.980786;, + 0.096132; -0.019122; 0.995185;, + 0.090554; -0.037509; 0.995185;, + 0.090554; -0.037509; 0.995185;, + 0.096132; -0.019122; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.096132; -0.019122; 0.995185;, + 0.098015; -0.000000; 0.995185;, + 0.000000; -0.000000; 1.000000;, + 0.191337; -0.038059; 0.980786;, + 0.195086; -0.000000; 0.980786;, + 0.098015; -0.000000; 0.995185;, + 0.096132; -0.019122; 0.995185;, + 0.284701; -0.056630; 0.956942;, + 0.290279; -0.000001; 0.956942;, + 0.195086; -0.000000; 0.980786;, + 0.191337; -0.038059; 0.980786;, + 0.375323; -0.074656; 0.923882;, + 0.382676; -0.000001; 0.923882;, + 0.290279; -0.000001; 0.956942;, + 0.284701; -0.056630; 0.956942;, + 0.462331; -0.091963; 0.881926;, + 0.471389; -0.000001; 0.881926;, + 0.382676; -0.000001; 0.923882;, + 0.375323; -0.074656; 0.923882;, + 0.544886; -0.108384; 0.831476;, + 0.555561; -0.000001; 0.831476;, + 0.471389; -0.000001; 0.881926;, + 0.462331; -0.091963; 0.881926;, + 0.622195; -0.123762; 0.773018;, + 0.634384; -0.000001; 0.773018;, + 0.555561; -0.000001; 0.831476;, + 0.544886; -0.108384; 0.831476;, + 0.693513; -0.137948; 0.707114;, + 0.707099; -0.000001; 0.707114;, + 0.634384; -0.000001; 0.773018;, + 0.622195; -0.123762; 0.773018;, + 0.758151; -0.150805; 0.634401;, + 0.773004; -0.000002; 0.634401;, + 0.707099; -0.000001; 0.707114;, + 0.693513; -0.137948; 0.707114;, + 0.815487; -0.162210; 0.555579;, + 0.831464; -0.000002; 0.555579;, + 0.773004; -0.000002; 0.634401;, + 0.758151; -0.150805; 0.634401;, + 0.864971; -0.172053; 0.471405;, + 0.881917; -0.000002; 0.471405;, + 0.831464; -0.000002; 0.555579;, + 0.815487; -0.162210; 0.555579;, + 0.906125; -0.180239; 0.382690;, + 0.923877; -0.000002; 0.382691;, + 0.881917; -0.000002; 0.471405;, + 0.864971; -0.172053; 0.471405;, + 0.938551; -0.186689; 0.290290;, + 0.956939; -0.000002; 0.290290;, + 0.923877; -0.000002; 0.382691;, + 0.906125; -0.180239; 0.382690;, + 0.961939; -0.191341; 0.195094;, + 0.980785; -0.000002; 0.195094;, + 0.956939; -0.000002; 0.290290;, + 0.938551; -0.186689; 0.290290;, + 0.976062; -0.194151; 0.098020;, + 0.995185; -0.000002; 0.098020;, + 0.980785; -0.000002; 0.195094;, + 0.961939; -0.191341; 0.195094;, + 0.980785; -0.195090; 0.000000;, + 1.000000; -0.000002; 0.000000;, + 0.995185; -0.000002; 0.098020;, + 0.976062; -0.194151; 0.098020;, + 0.976062; -0.194151; -0.098019;, + 0.995185; -0.000002; -0.098019;, + 1.000000; -0.000002; 0.000000;, + 0.980785; -0.195090; 0.000000;, + 0.961939; -0.191341; -0.195094;, + 0.980784; -0.000002; -0.195094;, + 0.995185; -0.000002; -0.098019;, + 0.976062; -0.194151; -0.098019;, + 0.938551; -0.186689; -0.290291;, + 0.956939; -0.000002; -0.290291;, + 0.980784; -0.000002; -0.195094;, + 0.961939; -0.191341; -0.195094;, + 0.906125; -0.180239; -0.382691;, + 0.923877; -0.000002; -0.382691;, + 0.956939; -0.000002; -0.290291;, + 0.938551; -0.186689; -0.290291;, + 0.864971; -0.172053; -0.471406;, + 0.881917; -0.000002; -0.471405;, + 0.923877; -0.000002; -0.382691;, + 0.906125; -0.180239; -0.382691;, + 0.815487; -0.162210; -0.555580;, + 0.831463; -0.000002; -0.555580;, + 0.881917; -0.000002; -0.471405;, + 0.864971; -0.172053; -0.471406;, + 0.758150; -0.150805; -0.634402;, + 0.773003; -0.000002; -0.634402;, + 0.831463; -0.000002; -0.555580;, + 0.815487; -0.162210; -0.555580;, + 0.693512; -0.137948; -0.707115;, + 0.707098; -0.000002; -0.707115;, + 0.773003; -0.000002; -0.634402;, + 0.758150; -0.150805; -0.634402;, + 0.622195; -0.123762; -0.773017;, + 0.634385; -0.000001; -0.773017;, + 0.707098; -0.000002; -0.707115;, + 0.693512; -0.137948; -0.707115;, + 0.544887; -0.108384; -0.831475;, + 0.555562; -0.000001; -0.831475;, + 0.634385; -0.000001; -0.773017;, + 0.622195; -0.123762; -0.773017;, + 0.462331; -0.091963; -0.881926;, + 0.471388; -0.000001; -0.881926;, + 0.555562; -0.000001; -0.831475;, + 0.544887; -0.108384; -0.831475;, + 0.375322; -0.074656; -0.923883;, + 0.382675; -0.000001; -0.923883;, + 0.471388; -0.000001; -0.881926;, + 0.462331; -0.091963; -0.881926;, + 0.284700; -0.056630; -0.956943;, + 0.290277; -0.000001; -0.956943;, + 0.382675; -0.000001; -0.923883;, + 0.375322; -0.074656; -0.923883;, + 0.191337; -0.038059; -0.980786;, + 0.195085; -0.000000; -0.980786;, + 0.290277; -0.000001; -0.956943;, + 0.284700; -0.056630; -0.956943;, + 0.096131; -0.019122; -0.995185;, + 0.098015; -0.000000; -0.995185;, + 0.195085; -0.000000; -0.980786;, + 0.191337; -0.038059; -0.980786;, + -0.000000; -0.000000; -1.000000;, + 0.098015; -0.000000; -0.995185;, + 0.096131; -0.019122; -0.995185;; +1024; +3; 0, 1, 2;, +4; 3, 4, 5, 6;, +4; 7, 8, 9, 10;, +4; 11, 12, 13, 14;, +4; 15, 16, 17, 18;, +4; 19, 20, 21, 22;, +4; 23, 24, 25, 26;, +4; 27, 28, 29, 30;, +4; 31, 32, 33, 34;, +4; 35, 36, 37, 38;, +4; 39, 40, 41, 42;, +4; 43, 44, 45, 46;, +4; 47, 48, 49, 50;, +4; 51, 52, 53, 54;, +4; 55, 56, 57, 58;, +4; 59, 60, 61, 62;, +4; 63, 64, 65, 66;, +4; 67, 68, 69, 70;, +4; 71, 72, 73, 74;, +4; 75, 76, 77, 78;, +4; 79, 80, 81, 82;, +4; 83, 84, 85, 86;, +4; 87, 88, 89, 90;, +4; 91, 92, 93, 94;, +4; 95, 96, 97, 98;, +4; 99, 100, 101, 102;, +4; 103, 104, 105, 106;, +4; 107, 108, 109, 110;, +4; 111, 112, 113, 114;, +4; 115, 116, 117, 118;, +4; 119, 120, 121, 122;, +3; 123, 124, 125;, +3; 126, 127, 128;, +4; 129, 130, 131, 132;, +4; 133, 134, 135, 136;, +4; 137, 138, 139, 140;, +4; 141, 142, 143, 144;, +4; 145, 146, 147, 148;, +4; 149, 150, 151, 152;, +4; 153, 154, 155, 156;, +4; 157, 158, 159, 160;, +4; 161, 162, 163, 164;, +4; 165, 166, 167, 168;, +4; 169, 170, 171, 172;, +4; 173, 174, 175, 176;, +4; 177, 178, 179, 180;, +4; 181, 182, 183, 184;, +4; 185, 186, 187, 188;, +4; 189, 190, 191, 192;, +4; 193, 194, 195, 196;, +4; 197, 198, 199, 200;, +4; 201, 202, 203, 204;, +4; 205, 206, 207, 208;, +4; 209, 210, 211, 212;, +4; 213, 214, 215, 216;, +4; 217, 218, 219, 220;, +4; 221, 222, 223, 224;, +4; 225, 226, 227, 228;, +4; 229, 230, 231, 232;, +4; 233, 234, 235, 236;, +4; 237, 238, 239, 240;, +4; 241, 242, 243, 244;, +4; 245, 246, 247, 248;, +3; 249, 250, 251;, +3; 252, 253, 254;, +4; 255, 256, 257, 258;, +4; 259, 260, 261, 262;, +4; 263, 264, 265, 266;, +4; 267, 268, 269, 270;, +4; 271, 272, 273, 274;, +4; 275, 276, 277, 278;, +4; 279, 280, 281, 282;, +4; 283, 284, 285, 286;, +4; 287, 288, 289, 290;, +4; 291, 292, 293, 294;, +4; 295, 296, 297, 298;, +4; 299, 300, 301, 302;, +4; 303, 304, 305, 306;, +4; 307, 308, 309, 310;, +4; 311, 312, 313, 314;, +4; 315, 316, 317, 318;, +4; 319, 320, 321, 322;, +4; 323, 324, 325, 326;, +4; 327, 328, 329, 330;, +4; 331, 332, 333, 334;, +4; 335, 336, 337, 338;, +4; 339, 340, 341, 342;, +4; 343, 344, 345, 346;, +4; 347, 348, 349, 350;, +4; 351, 352, 353, 354;, +4; 355, 356, 357, 358;, +4; 359, 360, 361, 362;, +4; 363, 364, 365, 366;, +4; 367, 368, 369, 370;, +4; 371, 372, 373, 374;, +3; 375, 376, 377;, +3; 378, 379, 380;, +4; 381, 382, 383, 384;, +4; 385, 386, 387, 388;, +4; 389, 390, 391, 392;, +4; 393, 394, 395, 396;, +4; 397, 398, 399, 400;, +4; 401, 402, 403, 404;, +4; 405, 406, 407, 408;, +4; 409, 410, 411, 412;, +4; 413, 414, 415, 416;, +4; 417, 418, 419, 420;, +4; 421, 422, 423, 424;, +4; 425, 426, 427, 428;, +4; 429, 430, 431, 432;, +4; 433, 434, 435, 436;, +4; 437, 438, 439, 440;, +4; 441, 442, 443, 444;, +4; 445, 446, 447, 448;, +4; 449, 450, 451, 452;, +4; 453, 454, 455, 456;, +4; 457, 458, 459, 460;, +4; 461, 462, 463, 464;, +4; 465, 466, 467, 468;, +4; 469, 470, 471, 472;, +4; 473, 474, 475, 476;, +4; 477, 478, 479, 480;, +4; 481, 482, 483, 484;, +4; 485, 486, 487, 488;, +4; 489, 490, 491, 492;, +4; 493, 494, 495, 496;, +4; 497, 498, 499, 500;, +3; 501, 502, 503;, +3; 504, 505, 506;, +4; 507, 508, 509, 510;, +4; 511, 512, 513, 514;, +4; 515, 516, 517, 518;, +4; 519, 520, 521, 522;, +4; 523, 524, 525, 526;, +4; 527, 528, 529, 530;, +4; 531, 532, 533, 534;, +4; 535, 536, 537, 538;, +4; 539, 540, 541, 542;, +4; 543, 544, 545, 546;, +4; 547, 548, 549, 550;, +4; 551, 552, 553, 554;, +4; 555, 556, 557, 558;, +4; 559, 560, 561, 562;, +4; 563, 564, 565, 566;, +4; 567, 568, 569, 570;, +4; 571, 572, 573, 574;, +4; 575, 576, 577, 578;, +4; 579, 580, 581, 582;, +4; 583, 584, 585, 586;, +4; 587, 588, 589, 590;, +4; 591, 592, 593, 594;, +4; 595, 596, 597, 598;, +4; 599, 600, 601, 602;, +4; 603, 604, 605, 606;, +4; 607, 608, 609, 610;, +4; 611, 612, 613, 614;, +4; 615, 616, 617, 618;, +4; 619, 620, 621, 622;, +4; 623, 624, 625, 626;, +3; 627, 628, 629;, +3; 630, 631, 632;, +4; 633, 634, 635, 636;, +4; 637, 638, 639, 640;, +4; 641, 642, 643, 644;, +4; 645, 646, 647, 648;, +4; 649, 650, 651, 652;, +4; 653, 654, 655, 656;, +4; 657, 658, 659, 660;, +4; 661, 662, 663, 664;, +4; 665, 666, 667, 668;, +4; 669, 670, 671, 672;, +4; 673, 674, 675, 676;, +4; 677, 678, 679, 680;, +4; 681, 682, 683, 684;, +4; 685, 686, 687, 688;, +4; 689, 690, 691, 692;, +4; 693, 694, 695, 696;, +4; 697, 698, 699, 700;, +4; 701, 702, 703, 704;, +4; 705, 706, 707, 708;, +4; 709, 710, 711, 712;, +4; 713, 714, 715, 716;, +4; 717, 718, 719, 720;, +4; 721, 722, 723, 724;, +4; 725, 726, 727, 728;, +4; 729, 730, 731, 732;, +4; 733, 734, 735, 736;, +4; 737, 738, 739, 740;, +4; 741, 742, 743, 744;, +4; 745, 746, 747, 748;, +4; 749, 750, 751, 752;, +3; 753, 754, 755;, +3; 756, 757, 758;, +4; 759, 760, 761, 762;, +4; 763, 764, 765, 766;, +4; 767, 768, 769, 770;, +4; 771, 772, 773, 774;, +4; 775, 776, 777, 778;, +4; 779, 780, 781, 782;, +4; 783, 784, 785, 786;, +4; 787, 788, 789, 790;, +4; 791, 792, 793, 794;, +4; 795, 796, 797, 798;, +4; 799, 800, 801, 802;, +4; 803, 804, 805, 806;, +4; 807, 808, 809, 810;, +4; 811, 812, 813, 814;, +4; 815, 816, 817, 818;, +4; 819, 820, 821, 822;, +4; 823, 824, 825, 826;, +4; 827, 828, 829, 830;, +4; 831, 832, 833, 834;, +4; 835, 836, 837, 838;, +4; 839, 840, 841, 842;, +4; 843, 844, 845, 846;, +4; 847, 848, 849, 850;, +4; 851, 852, 853, 854;, +4; 855, 856, 857, 858;, +4; 859, 860, 861, 862;, +4; 863, 864, 865, 866;, +4; 867, 868, 869, 870;, +4; 871, 872, 873, 874;, +4; 875, 876, 877, 878;, +3; 879, 880, 881;, +3; 882, 883, 884;, +4; 885, 886, 887, 888;, +4; 889, 890, 891, 892;, +4; 893, 894, 895, 896;, +4; 897, 898, 899, 900;, +4; 901, 902, 903, 904;, +4; 905, 906, 907, 908;, +4; 909, 910, 911, 912;, +4; 913, 914, 915, 916;, +4; 917, 918, 919, 920;, +4; 921, 922, 923, 924;, +4; 925, 926, 927, 928;, +4; 929, 930, 931, 932;, +4; 933, 934, 935, 936;, +4; 937, 938, 939, 940;, +4; 941, 942, 943, 944;, +4; 945, 946, 947, 948;, +4; 949, 950, 951, 952;, +4; 953, 954, 955, 956;, +4; 957, 958, 959, 960;, +4; 961, 962, 963, 964;, +4; 965, 966, 967, 968;, +4; 969, 970, 971, 972;, +4; 973, 974, 975, 976;, +4; 977, 978, 979, 980;, +4; 981, 982, 983, 984;, +4; 985, 986, 987, 988;, +4; 989, 990, 991, 992;, +4; 993, 994, 995, 996;, +4; 997, 998, 999, 1000;, +4; 1001, 1002, 1003, 1004;, +3; 1005, 1006, 1007;, +3; 1008, 1009, 1010;, +4; 1011, 1012, 1013, 1014;, +4; 1015, 1016, 1017, 1018;, +4; 1019, 1020, 1021, 1022;, +4; 1023, 1024, 1025, 1026;, +4; 1027, 1028, 1029, 1030;, +4; 1031, 1032, 1033, 1034;, +4; 1035, 1036, 1037, 1038;, +4; 1039, 1040, 1041, 1042;, +4; 1043, 1044, 1045, 1046;, +4; 1047, 1048, 1049, 1050;, +4; 1051, 1052, 1053, 1054;, +4; 1055, 1056, 1057, 1058;, +4; 1059, 1060, 1061, 1062;, +4; 1063, 1064, 1065, 1066;, +4; 1067, 1068, 1069, 1070;, +4; 1071, 1072, 1073, 1074;, +4; 1075, 1076, 1077, 1078;, +4; 1079, 1080, 1081, 1082;, +4; 1083, 1084, 1085, 1086;, +4; 1087, 1088, 1089, 1090;, +4; 1091, 1092, 1093, 1094;, +4; 1095, 1096, 1097, 1098;, +4; 1099, 1100, 1101, 1102;, +4; 1103, 1104, 1105, 1106;, +4; 1107, 1108, 1109, 1110;, +4; 1111, 1112, 1113, 1114;, +4; 1115, 1116, 1117, 1118;, +4; 1119, 1120, 1121, 1122;, +4; 1123, 1124, 1125, 1126;, +4; 1127, 1128, 1129, 1130;, +3; 1131, 1132, 1133;, +3; 1134, 1135, 1136;, +4; 1137, 1138, 1139, 1140;, +4; 1141, 1142, 1143, 1144;, +4; 1145, 1146, 1147, 1148;, +4; 1149, 1150, 1151, 1152;, +4; 1153, 1154, 1155, 1156;, +4; 1157, 1158, 1159, 1160;, +4; 1161, 1162, 1163, 1164;, +4; 1165, 1166, 1167, 1168;, +4; 1169, 1170, 1171, 1172;, +4; 1173, 1174, 1175, 1176;, +4; 1177, 1178, 1179, 1180;, +4; 1181, 1182, 1183, 1184;, +4; 1185, 1186, 1187, 1188;, +4; 1189, 1190, 1191, 1192;, +4; 1193, 1194, 1195, 1196;, +4; 1197, 1198, 1199, 1200;, +4; 1201, 1202, 1203, 1204;, +4; 1205, 1206, 1207, 1208;, +4; 1209, 1210, 1211, 1212;, +4; 1213, 1214, 1215, 1216;, +4; 1217, 1218, 1219, 1220;, +4; 1221, 1222, 1223, 1224;, +4; 1225, 1226, 1227, 1228;, +4; 1229, 1230, 1231, 1232;, +4; 1233, 1234, 1235, 1236;, +4; 1237, 1238, 1239, 1240;, +4; 1241, 1242, 1243, 1244;, +4; 1245, 1246, 1247, 1248;, +4; 1249, 1250, 1251, 1252;, +4; 1253, 1254, 1255, 1256;, +3; 1257, 1258, 1259;, +3; 1260, 1261, 1262;, +4; 1263, 1264, 1265, 1266;, +4; 1267, 1268, 1269, 1270;, +4; 1271, 1272, 1273, 1274;, +4; 1275, 1276, 1277, 1278;, +4; 1279, 1280, 1281, 1282;, +4; 1283, 1284, 1285, 1286;, +4; 1287, 1288, 1289, 1290;, +4; 1291, 1292, 1293, 1294;, +4; 1295, 1296, 1297, 1298;, +4; 1299, 1300, 1301, 1302;, +4; 1303, 1304, 1305, 1306;, +4; 1307, 1308, 1309, 1310;, +4; 1311, 1312, 1313, 1314;, +4; 1315, 1316, 1317, 1318;, +4; 1319, 1320, 1321, 1322;, +4; 1323, 1324, 1325, 1326;, +4; 1327, 1328, 1329, 1330;, +4; 1331, 1332, 1333, 1334;, +4; 1335, 1336, 1337, 1338;, +4; 1339, 1340, 1341, 1342;, +4; 1343, 1344, 1345, 1346;, +4; 1347, 1348, 1349, 1350;, +4; 1351, 1352, 1353, 1354;, +4; 1355, 1356, 1357, 1358;, +4; 1359, 1360, 1361, 1362;, +4; 1363, 1364, 1365, 1366;, +4; 1367, 1368, 1369, 1370;, +4; 1371, 1372, 1373, 1374;, +4; 1375, 1376, 1377, 1378;, +4; 1379, 1380, 1381, 1382;, +3; 1383, 1384, 1385;, +3; 1386, 1387, 1388;, +4; 1389, 1390, 1391, 1392;, +4; 1393, 1394, 1395, 1396;, +4; 1397, 1398, 1399, 1400;, +4; 1401, 1402, 1403, 1404;, +4; 1405, 1406, 1407, 1408;, +4; 1409, 1410, 1411, 1412;, +4; 1413, 1414, 1415, 1416;, +4; 1417, 1418, 1419, 1420;, +4; 1421, 1422, 1423, 1424;, +4; 1425, 1426, 1427, 1428;, +4; 1429, 1430, 1431, 1432;, +4; 1433, 1434, 1435, 1436;, +4; 1437, 1438, 1439, 1440;, +4; 1441, 1442, 1443, 1444;, +4; 1445, 1446, 1447, 1448;, +4; 1449, 1450, 1451, 1452;, +4; 1453, 1454, 1455, 1456;, +4; 1457, 1458, 1459, 1460;, +4; 1461, 1462, 1463, 1464;, +4; 1465, 1466, 1467, 1468;, +4; 1469, 1470, 1471, 1472;, +4; 1473, 1474, 1475, 1476;, +4; 1477, 1478, 1479, 1480;, +4; 1481, 1482, 1483, 1484;, +4; 1485, 1486, 1487, 1488;, +4; 1489, 1490, 1491, 1492;, +4; 1493, 1494, 1495, 1496;, +4; 1497, 1498, 1499, 1500;, +4; 1501, 1502, 1503, 1504;, +4; 1505, 1506, 1507, 1508;, +3; 1509, 1510, 1511;, +3; 1512, 1513, 1514;, +4; 1515, 1516, 1517, 1518;, +4; 1519, 1520, 1521, 1522;, +4; 1523, 1524, 1525, 1526;, +4; 1527, 1528, 1529, 1530;, +4; 1531, 1532, 1533, 1534;, +4; 1535, 1536, 1537, 1538;, +4; 1539, 1540, 1541, 1542;, +4; 1543, 1544, 1545, 1546;, +4; 1547, 1548, 1549, 1550;, +4; 1551, 1552, 1553, 1554;, +4; 1555, 1556, 1557, 1558;, +4; 1559, 1560, 1561, 1562;, +4; 1563, 1564, 1565, 1566;, +4; 1567, 1568, 1569, 1570;, +4; 1571, 1572, 1573, 1574;, +4; 1575, 1576, 1577, 1578;, +4; 1579, 1580, 1581, 1582;, +4; 1583, 1584, 1585, 1586;, +4; 1587, 1588, 1589, 1590;, +4; 1591, 1592, 1593, 1594;, +4; 1595, 1596, 1597, 1598;, +4; 1599, 1600, 1601, 1602;, +4; 1603, 1604, 1605, 1606;, +4; 1607, 1608, 1609, 1610;, +4; 1611, 1612, 1613, 1614;, +4; 1615, 1616, 1617, 1618;, +4; 1619, 1620, 1621, 1622;, +4; 1623, 1624, 1625, 1626;, +4; 1627, 1628, 1629, 1630;, +4; 1631, 1632, 1633, 1634;, +3; 1635, 1636, 1637;, +3; 1638, 1639, 1640;, +4; 1641, 1642, 1643, 1644;, +4; 1645, 1646, 1647, 1648;, +4; 1649, 1650, 1651, 1652;, +4; 1653, 1654, 1655, 1656;, +4; 1657, 1658, 1659, 1660;, +4; 1661, 1662, 1663, 1664;, +4; 1665, 1666, 1667, 1668;, +4; 1669, 1670, 1671, 1672;, +4; 1673, 1674, 1675, 1676;, +4; 1677, 1678, 1679, 1680;, +4; 1681, 1682, 1683, 1684;, +4; 1685, 1686, 1687, 1688;, +4; 1689, 1690, 1691, 1692;, +4; 1693, 1694, 1695, 1696;, +4; 1697, 1698, 1699, 1700;, +4; 1701, 1702, 1703, 1704;, +4; 1705, 1706, 1707, 1708;, +4; 1709, 1710, 1711, 1712;, +4; 1713, 1714, 1715, 1716;, +4; 1717, 1718, 1719, 1720;, +4; 1721, 1722, 1723, 1724;, +4; 1725, 1726, 1727, 1728;, +4; 1729, 1730, 1731, 1732;, +4; 1733, 1734, 1735, 1736;, +4; 1737, 1738, 1739, 1740;, +4; 1741, 1742, 1743, 1744;, +4; 1745, 1746, 1747, 1748;, +4; 1749, 1750, 1751, 1752;, +4; 1753, 1754, 1755, 1756;, +4; 1757, 1758, 1759, 1760;, +3; 1761, 1762, 1763;, +3; 1764, 1765, 1766;, +4; 1767, 1768, 1769, 1770;, +4; 1771, 1772, 1773, 1774;, +4; 1775, 1776, 1777, 1778;, +4; 1779, 1780, 1781, 1782;, +4; 1783, 1784, 1785, 1786;, +4; 1787, 1788, 1789, 1790;, +4; 1791, 1792, 1793, 1794;, +4; 1795, 1796, 1797, 1798;, +4; 1799, 1800, 1801, 1802;, +4; 1803, 1804, 1805, 1806;, +4; 1807, 1808, 1809, 1810;, +4; 1811, 1812, 1813, 1814;, +4; 1815, 1816, 1817, 1818;, +4; 1819, 1820, 1821, 1822;, +4; 1823, 1824, 1825, 1826;, +4; 1827, 1828, 1829, 1830;, +4; 1831, 1832, 1833, 1834;, +4; 1835, 1836, 1837, 1838;, +4; 1839, 1840, 1841, 1842;, +4; 1843, 1844, 1845, 1846;, +4; 1847, 1848, 1849, 1850;, +4; 1851, 1852, 1853, 1854;, +4; 1855, 1856, 1857, 1858;, +4; 1859, 1860, 1861, 1862;, +4; 1863, 1864, 1865, 1866;, +4; 1867, 1868, 1869, 1870;, +4; 1871, 1872, 1873, 1874;, +4; 1875, 1876, 1877, 1878;, +4; 1879, 1880, 1881, 1882;, +4; 1883, 1884, 1885, 1886;, +3; 1887, 1888, 1889;, +3; 1890, 1891, 1892;, +4; 1893, 1894, 1895, 1896;, +4; 1897, 1898, 1899, 1900;, +4; 1901, 1902, 1903, 1904;, +4; 1905, 1906, 1907, 1908;, +4; 1909, 1910, 1911, 1912;, +4; 1913, 1914, 1915, 1916;, +4; 1917, 1918, 1919, 1920;, +4; 1921, 1922, 1923, 1924;, +4; 1925, 1926, 1927, 1928;, +4; 1929, 1930, 1931, 1932;, +4; 1933, 1934, 1935, 1936;, +4; 1937, 1938, 1939, 1940;, +4; 1941, 1942, 1943, 1944;, +4; 1945, 1946, 1947, 1948;, +4; 1949, 1950, 1951, 1952;, +4; 1953, 1954, 1955, 1956;, +4; 1957, 1958, 1959, 1960;, +4; 1961, 1962, 1963, 1964;, +4; 1965, 1966, 1967, 1968;, +4; 1969, 1970, 1971, 1972;, +4; 1973, 1974, 1975, 1976;, +4; 1977, 1978, 1979, 1980;, +4; 1981, 1982, 1983, 1984;, +4; 1985, 1986, 1987, 1988;, +4; 1989, 1990, 1991, 1992;, +4; 1993, 1994, 1995, 1996;, +4; 1997, 1998, 1999, 2000;, +4; 2001, 2002, 2003, 2004;, +4; 2005, 2006, 2007, 2008;, +4; 2009, 2010, 2011, 2012;, +3; 2013, 2014, 2015;, +3; 2016, 2017, 2018;, +4; 2019, 2020, 2021, 2022;, +4; 2023, 2024, 2025, 2026;, +4; 2027, 2028, 2029, 2030;, +4; 2031, 2032, 2033, 2034;, +4; 2035, 2036, 2037, 2038;, +4; 2039, 2040, 2041, 2042;, +4; 2043, 2044, 2045, 2046;, +4; 2047, 2048, 2049, 2050;, +4; 2051, 2052, 2053, 2054;, +4; 2055, 2056, 2057, 2058;, +4; 2059, 2060, 2061, 2062;, +4; 2063, 2064, 2065, 2066;, +4; 2067, 2068, 2069, 2070;, +4; 2071, 2072, 2073, 2074;, +4; 2075, 2076, 2077, 2078;, +4; 2079, 2080, 2081, 2082;, +4; 2083, 2084, 2085, 2086;, +4; 2087, 2088, 2089, 2090;, +4; 2091, 2092, 2093, 2094;, +4; 2095, 2096, 2097, 2098;, +4; 2099, 2100, 2101, 2102;, +4; 2103, 2104, 2105, 2106;, +4; 2107, 2108, 2109, 2110;, +4; 2111, 2112, 2113, 2114;, +4; 2115, 2116, 2117, 2118;, +4; 2119, 2120, 2121, 2122;, +4; 2123, 2124, 2125, 2126;, +4; 2127, 2128, 2129, 2130;, +4; 2131, 2132, 2133, 2134;, +4; 2135, 2136, 2137, 2138;, +3; 2139, 2140, 2141;, +3; 2142, 2143, 2144;, +4; 2145, 2146, 2147, 2148;, +4; 2149, 2150, 2151, 2152;, +4; 2153, 2154, 2155, 2156;, +4; 2157, 2158, 2159, 2160;, +4; 2161, 2162, 2163, 2164;, +4; 2165, 2166, 2167, 2168;, +4; 2169, 2170, 2171, 2172;, +4; 2173, 2174, 2175, 2176;, +4; 2177, 2178, 2179, 2180;, +4; 2181, 2182, 2183, 2184;, +4; 2185, 2186, 2187, 2188;, +4; 2189, 2190, 2191, 2192;, +4; 2193, 2194, 2195, 2196;, +4; 2197, 2198, 2199, 2200;, +4; 2201, 2202, 2203, 2204;, +4; 2205, 2206, 2207, 2208;, +4; 2209, 2210, 2211, 2212;, +4; 2213, 2214, 2215, 2216;, +4; 2217, 2218, 2219, 2220;, +4; 2221, 2222, 2223, 2224;, +4; 2225, 2226, 2227, 2228;, +4; 2229, 2230, 2231, 2232;, +4; 2233, 2234, 2235, 2236;, +4; 2237, 2238, 2239, 2240;, +4; 2241, 2242, 2243, 2244;, +4; 2245, 2246, 2247, 2248;, +4; 2249, 2250, 2251, 2252;, +4; 2253, 2254, 2255, 2256;, +4; 2257, 2258, 2259, 2260;, +4; 2261, 2262, 2263, 2264;, +3; 2265, 2266, 2267;, +3; 2268, 2269, 2270;, +4; 2271, 2272, 2273, 2274;, +4; 2275, 2276, 2277, 2278;, +4; 2279, 2280, 2281, 2282;, +4; 2283, 2284, 2285, 2286;, +4; 2287, 2288, 2289, 2290;, +4; 2291, 2292, 2293, 2294;, +4; 2295, 2296, 2297, 2298;, +4; 2299, 2300, 2301, 2302;, +4; 2303, 2304, 2305, 2306;, +4; 2307, 2308, 2309, 2310;, +4; 2311, 2312, 2313, 2314;, +4; 2315, 2316, 2317, 2318;, +4; 2319, 2320, 2321, 2322;, +4; 2323, 2324, 2325, 2326;, +4; 2327, 2328, 2329, 2330;, +4; 2331, 2332, 2333, 2334;, +4; 2335, 2336, 2337, 2338;, +4; 2339, 2340, 2341, 2342;, +4; 2343, 2344, 2345, 2346;, +4; 2347, 2348, 2349, 2350;, +4; 2351, 2352, 2353, 2354;, +4; 2355, 2356, 2357, 2358;, +4; 2359, 2360, 2361, 2362;, +4; 2363, 2364, 2365, 2366;, +4; 2367, 2368, 2369, 2370;, +4; 2371, 2372, 2373, 2374;, +4; 2375, 2376, 2377, 2378;, +4; 2379, 2380, 2381, 2382;, +4; 2383, 2384, 2385, 2386;, +4; 2387, 2388, 2389, 2390;, +3; 2391, 2392, 2393;, +3; 2394, 2395, 2396;, +4; 2397, 2398, 2399, 2400;, +4; 2401, 2402, 2403, 2404;, +4; 2405, 2406, 2407, 2408;, +4; 2409, 2410, 2411, 2412;, +4; 2413, 2414, 2415, 2416;, +4; 2417, 2418, 2419, 2420;, +4; 2421, 2422, 2423, 2424;, +4; 2425, 2426, 2427, 2428;, +4; 2429, 2430, 2431, 2432;, +4; 2433, 2434, 2435, 2436;, +4; 2437, 2438, 2439, 2440;, +4; 2441, 2442, 2443, 2444;, +4; 2445, 2446, 2447, 2448;, +4; 2449, 2450, 2451, 2452;, +4; 2453, 2454, 2455, 2456;, +4; 2457, 2458, 2459, 2460;, +4; 2461, 2462, 2463, 2464;, +4; 2465, 2466, 2467, 2468;, +4; 2469, 2470, 2471, 2472;, +4; 2473, 2474, 2475, 2476;, +4; 2477, 2478, 2479, 2480;, +4; 2481, 2482, 2483, 2484;, +4; 2485, 2486, 2487, 2488;, +4; 2489, 2490, 2491, 2492;, +4; 2493, 2494, 2495, 2496;, +4; 2497, 2498, 2499, 2500;, +4; 2501, 2502, 2503, 2504;, +4; 2505, 2506, 2507, 2508;, +4; 2509, 2510, 2511, 2512;, +4; 2513, 2514, 2515, 2516;, +3; 2517, 2518, 2519;, +3; 2520, 2521, 2522;, +4; 2523, 2524, 2525, 2526;, +4; 2527, 2528, 2529, 2530;, +4; 2531, 2532, 2533, 2534;, +4; 2535, 2536, 2537, 2538;, +4; 2539, 2540, 2541, 2542;, +4; 2543, 2544, 2545, 2546;, +4; 2547, 2548, 2549, 2550;, +4; 2551, 2552, 2553, 2554;, +4; 2555, 2556, 2557, 2558;, +4; 2559, 2560, 2561, 2562;, +4; 2563, 2564, 2565, 2566;, +4; 2567, 2568, 2569, 2570;, +4; 2571, 2572, 2573, 2574;, +4; 2575, 2576, 2577, 2578;, +4; 2579, 2580, 2581, 2582;, +4; 2583, 2584, 2585, 2586;, +4; 2587, 2588, 2589, 2590;, +4; 2591, 2592, 2593, 2594;, +4; 2595, 2596, 2597, 2598;, +4; 2599, 2600, 2601, 2602;, +4; 2603, 2604, 2605, 2606;, +4; 2607, 2608, 2609, 2610;, +4; 2611, 2612, 2613, 2614;, +4; 2615, 2616, 2617, 2618;, +4; 2619, 2620, 2621, 2622;, +4; 2623, 2624, 2625, 2626;, +4; 2627, 2628, 2629, 2630;, +4; 2631, 2632, 2633, 2634;, +4; 2635, 2636, 2637, 2638;, +4; 2639, 2640, 2641, 2642;, +3; 2643, 2644, 2645;, +3; 2646, 2647, 2648;, +4; 2649, 2650, 2651, 2652;, +4; 2653, 2654, 2655, 2656;, +4; 2657, 2658, 2659, 2660;, +4; 2661, 2662, 2663, 2664;, +4; 2665, 2666, 2667, 2668;, +4; 2669, 2670, 2671, 2672;, +4; 2673, 2674, 2675, 2676;, +4; 2677, 2678, 2679, 2680;, +4; 2681, 2682, 2683, 2684;, +4; 2685, 2686, 2687, 2688;, +4; 2689, 2690, 2691, 2692;, +4; 2693, 2694, 2695, 2696;, +4; 2697, 2698, 2699, 2700;, +4; 2701, 2702, 2703, 2704;, +4; 2705, 2706, 2707, 2708;, +4; 2709, 2710, 2711, 2712;, +4; 2713, 2714, 2715, 2716;, +4; 2717, 2718, 2719, 2720;, +4; 2721, 2722, 2723, 2724;, +4; 2725, 2726, 2727, 2728;, +4; 2729, 2730, 2731, 2732;, +4; 2733, 2734, 2735, 2736;, +4; 2737, 2738, 2739, 2740;, +4; 2741, 2742, 2743, 2744;, +4; 2745, 2746, 2747, 2748;, +4; 2749, 2750, 2751, 2752;, +4; 2753, 2754, 2755, 2756;, +4; 2757, 2758, 2759, 2760;, +4; 2761, 2762, 2763, 2764;, +4; 2765, 2766, 2767, 2768;, +3; 2769, 2770, 2771;, +3; 2772, 2773, 2774;, +4; 2775, 2776, 2777, 2778;, +4; 2779, 2780, 2781, 2782;, +4; 2783, 2784, 2785, 2786;, +4; 2787, 2788, 2789, 2790;, +4; 2791, 2792, 2793, 2794;, +4; 2795, 2796, 2797, 2798;, +4; 2799, 2800, 2801, 2802;, +4; 2803, 2804, 2805, 2806;, +4; 2807, 2808, 2809, 2810;, +4; 2811, 2812, 2813, 2814;, +4; 2815, 2816, 2817, 2818;, +4; 2819, 2820, 2821, 2822;, +4; 2823, 2824, 2825, 2826;, +4; 2827, 2828, 2829, 2830;, +4; 2831, 2832, 2833, 2834;, +4; 2835, 2836, 2837, 2838;, +4; 2839, 2840, 2841, 2842;, +4; 2843, 2844, 2845, 2846;, +4; 2847, 2848, 2849, 2850;, +4; 2851, 2852, 2853, 2854;, +4; 2855, 2856, 2857, 2858;, +4; 2859, 2860, 2861, 2862;, +4; 2863, 2864, 2865, 2866;, +4; 2867, 2868, 2869, 2870;, +4; 2871, 2872, 2873, 2874;, +4; 2875, 2876, 2877, 2878;, +4; 2879, 2880, 2881, 2882;, +4; 2883, 2884, 2885, 2886;, +4; 2887, 2888, 2889, 2890;, +4; 2891, 2892, 2893, 2894;, +3; 2895, 2896, 2897;, +3; 2898, 2899, 2900;, +4; 2901, 2902, 2903, 2904;, +4; 2905, 2906, 2907, 2908;, +4; 2909, 2910, 2911, 2912;, +4; 2913, 2914, 2915, 2916;, +4; 2917, 2918, 2919, 2920;, +4; 2921, 2922, 2923, 2924;, +4; 2925, 2926, 2927, 2928;, +4; 2929, 2930, 2931, 2932;, +4; 2933, 2934, 2935, 2936;, +4; 2937, 2938, 2939, 2940;, +4; 2941, 2942, 2943, 2944;, +4; 2945, 2946, 2947, 2948;, +4; 2949, 2950, 2951, 2952;, +4; 2953, 2954, 2955, 2956;, +4; 2957, 2958, 2959, 2960;, +4; 2961, 2962, 2963, 2964;, +4; 2965, 2966, 2967, 2968;, +4; 2969, 2970, 2971, 2972;, +4; 2973, 2974, 2975, 2976;, +4; 2977, 2978, 2979, 2980;, +4; 2981, 2982, 2983, 2984;, +4; 2985, 2986, 2987, 2988;, +4; 2989, 2990, 2991, 2992;, +4; 2993, 2994, 2995, 2996;, +4; 2997, 2998, 2999, 3000;, +4; 3001, 3002, 3003, 3004;, +4; 3005, 3006, 3007, 3008;, +4; 3009, 3010, 3011, 3012;, +4; 3013, 3014, 3015, 3016;, +4; 3017, 3018, 3019, 3020;, +3; 3021, 3022, 3023;, +3; 3024, 3025, 3026;, +4; 3027, 3028, 3029, 3030;, +4; 3031, 3032, 3033, 3034;, +4; 3035, 3036, 3037, 3038;, +4; 3039, 3040, 3041, 3042;, +4; 3043, 3044, 3045, 3046;, +4; 3047, 3048, 3049, 3050;, +4; 3051, 3052, 3053, 3054;, +4; 3055, 3056, 3057, 3058;, +4; 3059, 3060, 3061, 3062;, +4; 3063, 3064, 3065, 3066;, +4; 3067, 3068, 3069, 3070;, +4; 3071, 3072, 3073, 3074;, +4; 3075, 3076, 3077, 3078;, +4; 3079, 3080, 3081, 3082;, +4; 3083, 3084, 3085, 3086;, +4; 3087, 3088, 3089, 3090;, +4; 3091, 3092, 3093, 3094;, +4; 3095, 3096, 3097, 3098;, +4; 3099, 3100, 3101, 3102;, +4; 3103, 3104, 3105, 3106;, +4; 3107, 3108, 3109, 3110;, +4; 3111, 3112, 3113, 3114;, +4; 3115, 3116, 3117, 3118;, +4; 3119, 3120, 3121, 3122;, +4; 3123, 3124, 3125, 3126;, +4; 3127, 3128, 3129, 3130;, +4; 3131, 3132, 3133, 3134;, +4; 3135, 3136, 3137, 3138;, +4; 3139, 3140, 3141, 3142;, +4; 3143, 3144, 3145, 3146;, +3; 3147, 3148, 3149;, +3; 3150, 3151, 3152;, +4; 3153, 3154, 3155, 3156;, +4; 3157, 3158, 3159, 3160;, +4; 3161, 3162, 3163, 3164;, +4; 3165, 3166, 3167, 3168;, +4; 3169, 3170, 3171, 3172;, +4; 3173, 3174, 3175, 3176;, +4; 3177, 3178, 3179, 3180;, +4; 3181, 3182, 3183, 3184;, +4; 3185, 3186, 3187, 3188;, +4; 3189, 3190, 3191, 3192;, +4; 3193, 3194, 3195, 3196;, +4; 3197, 3198, 3199, 3200;, +4; 3201, 3202, 3203, 3204;, +4; 3205, 3206, 3207, 3208;, +4; 3209, 3210, 3211, 3212;, +4; 3213, 3214, 3215, 3216;, +4; 3217, 3218, 3219, 3220;, +4; 3221, 3222, 3223, 3224;, +4; 3225, 3226, 3227, 3228;, +4; 3229, 3230, 3231, 3232;, +4; 3233, 3234, 3235, 3236;, +4; 3237, 3238, 3239, 3240;, +4; 3241, 3242, 3243, 3244;, +4; 3245, 3246, 3247, 3248;, +4; 3249, 3250, 3251, 3252;, +4; 3253, 3254, 3255, 3256;, +4; 3257, 3258, 3259, 3260;, +4; 3261, 3262, 3263, 3264;, +4; 3265, 3266, 3267, 3268;, +4; 3269, 3270, 3271, 3272;, +3; 3273, 3274, 3275;, +3; 3276, 3277, 3278;, +4; 3279, 3280, 3281, 3282;, +4; 3283, 3284, 3285, 3286;, +4; 3287, 3288, 3289, 3290;, +4; 3291, 3292, 3293, 3294;, +4; 3295, 3296, 3297, 3298;, +4; 3299, 3300, 3301, 3302;, +4; 3303, 3304, 3305, 3306;, +4; 3307, 3308, 3309, 3310;, +4; 3311, 3312, 3313, 3314;, +4; 3315, 3316, 3317, 3318;, +4; 3319, 3320, 3321, 3322;, +4; 3323, 3324, 3325, 3326;, +4; 3327, 3328, 3329, 3330;, +4; 3331, 3332, 3333, 3334;, +4; 3335, 3336, 3337, 3338;, +4; 3339, 3340, 3341, 3342;, +4; 3343, 3344, 3345, 3346;, +4; 3347, 3348, 3349, 3350;, +4; 3351, 3352, 3353, 3354;, +4; 3355, 3356, 3357, 3358;, +4; 3359, 3360, 3361, 3362;, +4; 3363, 3364, 3365, 3366;, +4; 3367, 3368, 3369, 3370;, +4; 3371, 3372, 3373, 3374;, +4; 3375, 3376, 3377, 3378;, +4; 3379, 3380, 3381, 3382;, +4; 3383, 3384, 3385, 3386;, +4; 3387, 3388, 3389, 3390;, +4; 3391, 3392, 3393, 3394;, +4; 3395, 3396, 3397, 3398;, +3; 3399, 3400, 3401;, +3; 3402, 3403, 3404;, +4; 3405, 3406, 3407, 3408;, +4; 3409, 3410, 3411, 3412;, +4; 3413, 3414, 3415, 3416;, +4; 3417, 3418, 3419, 3420;, +4; 3421, 3422, 3423, 3424;, +4; 3425, 3426, 3427, 3428;, +4; 3429, 3430, 3431, 3432;, +4; 3433, 3434, 3435, 3436;, +4; 3437, 3438, 3439, 3440;, +4; 3441, 3442, 3443, 3444;, +4; 3445, 3446, 3447, 3448;, +4; 3449, 3450, 3451, 3452;, +4; 3453, 3454, 3455, 3456;, +4; 3457, 3458, 3459, 3460;, +4; 3461, 3462, 3463, 3464;, +4; 3465, 3466, 3467, 3468;, +4; 3469, 3470, 3471, 3472;, +4; 3473, 3474, 3475, 3476;, +4; 3477, 3478, 3479, 3480;, +4; 3481, 3482, 3483, 3484;, +4; 3485, 3486, 3487, 3488;, +4; 3489, 3490, 3491, 3492;, +4; 3493, 3494, 3495, 3496;, +4; 3497, 3498, 3499, 3500;, +4; 3501, 3502, 3503, 3504;, +4; 3505, 3506, 3507, 3508;, +4; 3509, 3510, 3511, 3512;, +4; 3513, 3514, 3515, 3516;, +4; 3517, 3518, 3519, 3520;, +4; 3521, 3522, 3523, 3524;, +3; 3525, 3526, 3527;, +3; 3528, 3529, 3530;, +4; 3531, 3532, 3533, 3534;, +4; 3535, 3536, 3537, 3538;, +4; 3539, 3540, 3541, 3542;, +4; 3543, 3544, 3545, 3546;, +4; 3547, 3548, 3549, 3550;, +4; 3551, 3552, 3553, 3554;, +4; 3555, 3556, 3557, 3558;, +4; 3559, 3560, 3561, 3562;, +4; 3563, 3564, 3565, 3566;, +4; 3567, 3568, 3569, 3570;, +4; 3571, 3572, 3573, 3574;, +4; 3575, 3576, 3577, 3578;, +4; 3579, 3580, 3581, 3582;, +4; 3583, 3584, 3585, 3586;, +4; 3587, 3588, 3589, 3590;, +4; 3591, 3592, 3593, 3594;, +4; 3595, 3596, 3597, 3598;, +4; 3599, 3600, 3601, 3602;, +4; 3603, 3604, 3605, 3606;, +4; 3607, 3608, 3609, 3610;, +4; 3611, 3612, 3613, 3614;, +4; 3615, 3616, 3617, 3618;, +4; 3619, 3620, 3621, 3622;, +4; 3623, 3624, 3625, 3626;, +4; 3627, 3628, 3629, 3630;, +4; 3631, 3632, 3633, 3634;, +4; 3635, 3636, 3637, 3638;, +4; 3639, 3640, 3641, 3642;, +4; 3643, 3644, 3645, 3646;, +4; 3647, 3648, 3649, 3650;, +3; 3651, 3652, 3653;, +3; 3654, 3655, 3656;, +4; 3657, 3658, 3659, 3660;, +4; 3661, 3662, 3663, 3664;, +4; 3665, 3666, 3667, 3668;, +4; 3669, 3670, 3671, 3672;, +4; 3673, 3674, 3675, 3676;, +4; 3677, 3678, 3679, 3680;, +4; 3681, 3682, 3683, 3684;, +4; 3685, 3686, 3687, 3688;, +4; 3689, 3690, 3691, 3692;, +4; 3693, 3694, 3695, 3696;, +4; 3697, 3698, 3699, 3700;, +4; 3701, 3702, 3703, 3704;, +4; 3705, 3706, 3707, 3708;, +4; 3709, 3710, 3711, 3712;, +4; 3713, 3714, 3715, 3716;, +4; 3717, 3718, 3719, 3720;, +4; 3721, 3722, 3723, 3724;, +4; 3725, 3726, 3727, 3728;, +4; 3729, 3730, 3731, 3732;, +4; 3733, 3734, 3735, 3736;, +4; 3737, 3738, 3739, 3740;, +4; 3741, 3742, 3743, 3744;, +4; 3745, 3746, 3747, 3748;, +4; 3749, 3750, 3751, 3752;, +4; 3753, 3754, 3755, 3756;, +4; 3757, 3758, 3759, 3760;, +4; 3761, 3762, 3763, 3764;, +4; 3765, 3766, 3767, 3768;, +4; 3769, 3770, 3771, 3772;, +4; 3773, 3774, 3775, 3776;, +3; 3777, 3778, 3779;, +3; 3780, 3781, 3782;, +4; 3783, 3784, 3785, 3786;, +4; 3787, 3788, 3789, 3790;, +4; 3791, 3792, 3793, 3794;, +4; 3795, 3796, 3797, 3798;, +4; 3799, 3800, 3801, 3802;, +4; 3803, 3804, 3805, 3806;, +4; 3807, 3808, 3809, 3810;, +4; 3811, 3812, 3813, 3814;, +4; 3815, 3816, 3817, 3818;, +4; 3819, 3820, 3821, 3822;, +4; 3823, 3824, 3825, 3826;, +4; 3827, 3828, 3829, 3830;, +4; 3831, 3832, 3833, 3834;, +4; 3835, 3836, 3837, 3838;, +4; 3839, 3840, 3841, 3842;, +4; 3843, 3844, 3845, 3846;, +4; 3847, 3848, 3849, 3850;, +4; 3851, 3852, 3853, 3854;, +4; 3855, 3856, 3857, 3858;, +4; 3859, 3860, 3861, 3862;, +4; 3863, 3864, 3865, 3866;, +4; 3867, 3868, 3869, 3870;, +4; 3871, 3872, 3873, 3874;, +4; 3875, 3876, 3877, 3878;, +4; 3879, 3880, 3881, 3882;, +4; 3883, 3884, 3885, 3886;, +4; 3887, 3888, 3889, 3890;, +4; 3891, 3892, 3893, 3894;, +4; 3895, 3896, 3897, 3898;, +4; 3899, 3900, 3901, 3902;, +3; 3903, 3904, 3905;, +3; 3906, 3907, 3908;, +4; 3909, 3910, 3911, 3912;, +4; 3913, 3914, 3915, 3916;, +4; 3917, 3918, 3919, 3920;, +4; 3921, 3922, 3923, 3924;, +4; 3925, 3926, 3927, 3928;, +4; 3929, 3930, 3931, 3932;, +4; 3933, 3934, 3935, 3936;, +4; 3937, 3938, 3939, 3940;, +4; 3941, 3942, 3943, 3944;, +4; 3945, 3946, 3947, 3948;, +4; 3949, 3950, 3951, 3952;, +4; 3953, 3954, 3955, 3956;, +4; 3957, 3958, 3959, 3960;, +4; 3961, 3962, 3963, 3964;, +4; 3965, 3966, 3967, 3968;, +4; 3969, 3970, 3971, 3972;, +4; 3973, 3974, 3975, 3976;, +4; 3977, 3978, 3979, 3980;, +4; 3981, 3982, 3983, 3984;, +4; 3985, 3986, 3987, 3988;, +4; 3989, 3990, 3991, 3992;, +4; 3993, 3994, 3995, 3996;, +4; 3997, 3998, 3999, 4000;, +4; 4001, 4002, 4003, 4004;, +4; 4005, 4006, 4007, 4008;, +4; 4009, 4010, 4011, 4012;, +4; 4013, 4014, 4015, 4016;, +4; 4017, 4018, 4019, 4020;, +4; 4021, 4022, 4023, 4024;, +4; 4025, 4026, 4027, 4028;, +3; 4029, 4030, 4031;; +} //End of MeshNormals + } +} +} diff --git a/Content/Sounds/bbswish.wav b/Content/Sounds/bbswish.wav new file mode 100755 index 0000000..187a4b4 Binary files /dev/null and b/Content/Sounds/bbswish.wav differ diff --git a/Content/Textures/text_background.bmp b/Content/Textures/text_background.bmp new file mode 100755 index 0000000..a63bc0d Binary files /dev/null and b/Content/Textures/text_background.bmp differ diff --git a/Content/Textures/text_background.xcf b/Content/Textures/text_background.xcf new file mode 100755 index 0000000..e00d7ed Binary files /dev/null and b/Content/Textures/text_background.xcf differ diff --git a/Content/cachefile-{7536376D-BAEC-4BD1-B221-29613EDBB7CE}-targetpath.txt b/Content/cachefile-{7536376D-BAEC-4BD1-B221-29613EDBB7CE}-targetpath.txt new file mode 100755 index 0000000..3965188 --- /dev/null +++ b/Content/cachefile-{7536376D-BAEC-4BD1-B221-29613EDBB7CE}-targetpath.txt @@ -0,0 +1,6 @@ +Content\Fonts\GameFont.xnb +Content\Models\sphere.xnb +Content\Models\cube.xnb +Content\Models\hoop.xnb +Content\Textures\text_background.xnb +Content\Models\basketball.xnb diff --git a/Cuboid.cs b/Cuboid.cs new file mode 100644 index 0000000..6460019 --- /dev/null +++ b/Cuboid.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Content; + +namespace TheraWii +{ + class Cuboid + { + public Vector3 Scale; + public Vector3 Position; + public Vector3 color; + + protected float aspectRatio; + protected Model cuboidModel; + protected Vector3 cameraPosition = new Vector3(0.0f, 0.0f, 10.0f); + protected GraphicsDeviceManager graphics; + protected ContentManager Content; + + public Cuboid() + { + } + + public Cuboid(GraphicsDeviceManager g, ContentManager c, Vector3 position, Vector3 scale, Color color) + { + this.Scale = scale; + this.Position = position; + this.color = color.ToVector3(); + + graphics = g; + Content = c; + + aspectRatio = graphics.GraphicsDevice.Viewport.AspectRatio; + + cuboidModel = Content.Load("Models\\cube"); + } + + public virtual void Draw() + { + // Copy any parent transforms. + Matrix[] transforms = new Matrix[cuboidModel.Bones.Count]; + cuboidModel.CopyAbsoluteBoneTransformsTo(transforms); + + // Draw the model. A model can have multiple meshes, so loop. + foreach (ModelMesh mesh in cuboidModel.Meshes) + { + // This is where the mesh orientation is set, as well as our camera and projection. + foreach (BasicEffect effect in mesh.Effects) + { + effect.EnableDefaultLighting(); + effect.PreferPerPixelLighting = true; + effect.DiffuseColor = this.color; + effect.LightingEnabled = false; + //effect.DirectionalLight0.Direction = new Vector3(0.0f, 0.0f, 1.0f); + + effect.View = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up); + effect.Projection = Matrix.CreatePerspective(0.2f, 0.2f, 1.0f, 1000.0f); + + effect.World = transforms[mesh.ParentBone.Index] + //* Matrix.CreateRotationZ(MathHelper.ToRadians(30.0f)) + * Matrix.CreateScale(0.5f * Scale.X, 0.5f * Scale.Y, 0.5f * Scale.Z) + * Matrix.CreateTranslation(Position) + ; + } + // Draw the mesh, using the effects set above. + mesh.Draw(); + } + } + } +} diff --git a/DScsv.cs b/DScsv.cs new file mode 100644 index 0000000..eed0cfa --- /dev/null +++ b/DScsv.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections; +using System.Collections.Generic; +//using System.Linq; +using System.Text; +using System.IO; +using Microsoft.Xna.Framework; + +/* + * Methods should be called in the following order + * DScsv() to create the object + * Initialize(string, Profile, Session) to set new file + * + * Repeat the following methods for each task + * startTask(string) to name the task + * addField(string) name each column + * writeHeader() write the header cols to the file + * newRecord(DateTime) to set a new record time + * setData(string fieldname,string data) to add a new piece of data + * writeRecord() to write the record to file and clear record from memory + * + * closeFile() to close the file when all tasks have been written to file for a given session + */ + +namespace TheraWii +{ + public class DScsv + { + public Hashtable fieldData; + public List hashKeyOrder; + public TimeSpan gameTime; + public Session session; + + private StreamWriter sw; + + public DScsv() + { + } + + public void Initialize(Session s) + { + session = s; + gameTime = new TimeSpan(); + fieldData = new Hashtable(); + Initialize(); + } + + public void Initialize() + { + sw = new StreamWriter(session.GetDataFilePath(), true); + sw.WriteLine("#Profile:," + session.profile); + sw.WriteLine("#Date:," + "{0:d}", session.createDate); + sw.WriteLine("#Time:," + "{0:t}", session.createDate); + sw.WriteLine("#Therapy:," + session.therapy); + } + + //names new task + public void startTask(Task t) + { + sw.WriteLine("#Task Name:," + t.Name); + sw.WriteLine("#Task Type:," + t.GetType().ToString()); + fieldData.Clear(); + } + + //add field to hash map + public void addField(string fieldName) + { + fieldData.Add(fieldName, ""); + } + + //write the header to file + public void writeHeader() + { + sw.Write("#ActionTime,"); //this is populated independently from the hashtable + hashKeyOrder = new List(); + //sorting field names alphabetically - going to list is simplier than rolling own sort. + foreach (string s in fieldData.Keys) + { + hashKeyOrder.Add(s); + } + hashKeyOrder.Sort((s1, s2) => string.Compare(s1, s2)); + + //now we write the field names alphabetically + foreach (string s in hashKeyOrder) + { + sw.Write(s + ","); + } + sw.WriteLine(); + } + + //new Record + public void newRecord(TimeSpan gt) + { + this.gameTime += gt; + } + + //set data in hash map + public void setData(string field, string data) + { + if (fieldData.ContainsKey(field)) + fieldData[field] = data; + else + throw new KeyNotFoundException(); + } + + //write record and clear from hash map + public void writeRecord() + { + sw.Write(gameTime + ","); + for (int i = 0; i < hashKeyOrder.Count; i++) + { + sw.Write(fieldData[hashKeyOrder[i]] + ","); + fieldData[hashKeyOrder[i]] = ""; + } + sw.WriteLine(); + } + + //close file + public void closeFile() + { + sw.Close(); + } + + public List getData(string filename) + { + List d = new List(); + StreamReader sr = File.OpenText(filename); + + string input; + while ((input = sr.ReadLine()) != null) + { + d.Add(input.Split(new char[1]{','})); + } + sr.Close(); + return d; + + } + + public static void exportSession(Session session, String saveFile) + { + File.Copy(session.GetDataFilePath(), saveFile); + } + + public void delete(String file) + { + try + { + FileInfo f = new FileInfo(file); + f.Delete(); + } + catch (IOException) + { + + } + } + + public void WriteLine(String s) + { + sw.WriteLine(s); + } + } +} diff --git a/DataModel.cs b/DataModel.cs new file mode 100644 index 0000000..afa4dac --- /dev/null +++ b/DataModel.cs @@ -0,0 +1,50 @@ +using System; +using System.Collections.Generic; + +namespace TheraWii +{ + public class DataModel + { + private List therapies; + private List profiles; + public bool PlayFullscreen; + + public DataModel() + { + therapies = new List(); + profiles = new List(); + PlayFullscreen = false; + } + + public List Therapies + { + get { return therapies; } + } + + public List Profiles + { + get { return profiles; } + } + + public void removeTherapy(Therapy t) + { + therapies.Remove(t); + } + + public void removeProfile(Profile p) + { + profiles.Remove(p); + } + + public bool isProfileNameUnique(String s) + { + foreach (Profile p in profiles) + { + if (p.Name == s) + return false; + } + return true; + } + } + +} \ No newline at end of file diff --git a/DataStorage.cs b/DataStorage.cs new file mode 100644 index 0000000..2c935b3 --- /dev/null +++ b/DataStorage.cs @@ -0,0 +1,243 @@ +using System; +using System.IO; +using System.Xml; +using System.Xml.Serialization; +using System.Windows.Forms; +using Ionic.Zip; +using System.Diagnostics; + +namespace TheraWii +{ + public class DataStorage + { + private DataModel dm; + private XmlSerializer dm_serializer, therapy_serializer, profile_serializer; + private string DATA_STORE_FILENAME = "dataModel.xml"; + private string DEMO_DS_FILE = "dataModel.xml"; + public static string DATA_STORE_FOLDER; + + public DataStorage() + { + dm_serializer = new XmlSerializer(typeof(DataModel)); + therapy_serializer = new XmlSerializer(typeof(Therapy)); + profile_serializer = new XmlSerializer(typeof(Profile)); + DATA_STORE_FOLDER = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\TheraWii"; + DirectoryInfo di = new DirectoryInfo(DATA_STORE_FOLDER); + if (!di.Exists) + { + di.Create(); + } + DATA_STORE_FILENAME = Path.Combine(DATA_STORE_FOLDER, DATA_STORE_FILENAME); + DEMO_DS_FILE = Path.Combine( + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),"TheraWii"), + DEMO_DS_FILE); + + DeserializeDataModel(); + } + + public DataModel DataModel + { + get { return dm; } + } + + public void SerializeDataModel() + { + FileInfo f1 = new FileInfo(DATA_STORE_FILENAME); + FileInfo f2 = new FileInfo(DATA_STORE_FILENAME + ".old"); + if (f2.Exists) + f2.Delete(); + if (f1.Exists) + f1.MoveTo(DATA_STORE_FILENAME + ".old"); + TextWriter writer = new StreamWriter(DATA_STORE_FILENAME); + try { dm_serializer.Serialize(writer, dm); } + catch (Exception e) + { + writer.Close(); + FileInfo f3 = new FileInfo(DATA_STORE_FILENAME); + f3.Delete(); + f1.MoveTo(DATA_STORE_FILENAME); + string s = e.StackTrace; + throw new InvalidOperationException("Error Serialzing DataModel - reverted to old xml"); + + } + if (writer != null) + writer.Close(); + + } + + public void SerializeTherapy(string filename, Therapy t) + { + TextWriter writer = new StreamWriter(filename); + + try + { + therapy_serializer.Serialize(writer, t); + } + catch (Exception e) + { + writer.Close(); + string s = e.StackTrace; + throw new InvalidOperationException("Error Serialzing Therapy"); + } + + if (writer != null) + writer.Close(); + } + + public void SerializeProfile(string filename, Profile p) + { + Stream stream = new MemoryStream(); + TextWriter writer = new StreamWriter(stream); + + try + { + profile_serializer.Serialize(writer, p); + } + catch (Exception e) + { + writer.Close(); + string s = e.StackTrace; + throw new InvalidOperationException("Error Serialzing Profile"); + } + + try + { + using (ZipFile zip = new ZipFile()) + { + zip.AddEntry("profile.twp", stream); + zip.AddDirectory(p.GetDataFolder(), p.Name); + zip.Save(filename); + } + } + catch (Exception e) + { + throw new InvalidOperationException("Error Exporting Profile: " + e.Message); + } + + if (writer != null) + writer.Close(); + } + + public void DeserializeDataModel() + { + FileInfo fi = new FileInfo(DATA_STORE_FILENAME); + + // Load demo dataStore.xml from Program folder + if (!fi.Exists) + { + FileInfo demoFI = new FileInfo(DEMO_DS_FILE); + if (demoFI.Exists) + { + System.IO.File.Copy(DEMO_DS_FILE, DATA_STORE_FILENAME); + } + fi.Refresh(); + } + + if (fi.Exists) + { + TextReader reader = new StreamReader(DATA_STORE_FILENAME); + try + { + dm = (DataModel)dm_serializer.Deserialize(reader); + } + catch (Exception) + { + string date = String.Format("{0:g}", DateTime.Now); + fi.MoveTo(DATA_STORE_FILENAME + ".fail.xml"); + MessageBox.Show("Unable to Load Data. Moving failed data file to: " + fi.FullName, + "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning); + dm = new DataModel(); + } + finally + { + reader.Close(); + } + } + else + { + dm = new DataModel(); + } + } + + public void DeserializeTherapy(string filename, ref Therapy t) + { + FileInfo fi = new FileInfo(filename); + + if (fi.Exists) + { + TextReader reader = new StreamReader(filename); + try + { + t = (Therapy)therapy_serializer.Deserialize(reader); + } + catch (Exception) + { + throw new InvalidOperationException("Invalid File Format"); + } + finally + { + reader.Close(); + } + } + else + { + throw new FileNotFoundException("Could not locate file: " + filename); + } + } + + public void DeserializeProfile(string filename, ref Profile p) + { + FileInfo fi = new FileInfo(filename); + + if (fi.Exists) + { + using (ZipFile zip = ZipFile.Read(filename)) + { + string profFile = "profile.twp"; + + foreach (string fileInZip in zip.EntryFileNames) + { + if (fileInZip.Equals(profFile, StringComparison.InvariantCultureIgnoreCase)) + { + Debug.WriteLine("Found profile file in ZIP archive. Extracting it now"); + + zip[fileInZip].Extract(profFile); + profFile = Path.Combine(DATA_STORE_FOLDER, profFile); + TextReader reader = new StreamReader(profFile); + + try + { + p = (Profile)profile_serializer.Deserialize(reader); + } + catch (Exception) + { + throw new InvalidOperationException("Invalid File Format"); + } + finally + { + reader.Close(); + } + + if (dm.isProfileNameUnique(p.Name) && !Directory.Exists(p.GetDataFolder())) + { + zip.ExtractAll(DATA_STORE_FOLDER, ExtractExistingFileAction.OverwriteSilently); + } + else + { + throw new InvalidOperationException("There is already an existing profile named " + + p.Name + ". Delete or rename it before importing."); + } + + File.Delete(profFile); + } + } + } + } + else + { + throw new FileNotFoundException("Could not locate file: " + filename); + } + } + } +} + diff --git a/DeleteProfile.Designer.cs b/DeleteProfile.Designer.cs new file mode 100644 index 0000000..8891e9f --- /dev/null +++ b/DeleteProfile.Designer.cs @@ -0,0 +1,108 @@ +namespace TheraWii +{ + partial class FormDeleteProfile + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(59, 37); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(162, 20); + this.textBoxName.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(29, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(192, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Enter a unique name for the new profile"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(18, 40); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(35, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Name"; + // + // buttonOk + // + this.buttonOk.Location = new System.Drawing.Point(41, 75); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 3; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(122, 75); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 4; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // FormNewTherapy + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(238, 116); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxName); + this.Name = "FormNewTherapy"; + this.Text = "New Therapy"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + } +} \ No newline at end of file diff --git a/DeleteProfile.cs b/DeleteProfile.cs new file mode 100644 index 0000000..821c33b --- /dev/null +++ b/DeleteProfile.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormDeleteProfile : Form + { + private DataModel dm; + + public FormDeleteProfile(DataModel dm) + { + InitializeComponent(); + this.dm = dm; + } + + private void buttonOk_Click(object sender, EventArgs e) + { + if (textBoxName.Text.Length != 0) + { + Profile t = new Profile(); + t.initialize(textBoxName.Text); + dm.Profiles.Add(t); + this.Close(); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + } +} \ No newline at end of file diff --git a/DeleteProfile.resx b/DeleteProfile.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/DeleteProfile.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/DialogTask.cs b/DialogTask.cs new file mode 100644 index 0000000..90c8fe5 --- /dev/null +++ b/DialogTask.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.Xml.Serialization; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework; + +namespace TheraWii +{ + + public class DialogTask : Task + { + private string displayText; + [XmlIgnore] + public GameTextBox textBox; + + public string DisplayText + { + get { return displayText; } + set { displayText = value; } + } + + public DialogTask() + { + endCondition = new ButtonEndCondition(); + } + + public DialogTask(DialogTask d) + { + Name = "copy of" + d.Name; + displayText = d.displayText; + endCondition = d.endCondition.returnNew(); + } + + public override List getRequiredDevices() + { + List wt = endCondition.getRequiredDevices(); + return wt; + } + + public override void Initialize( + GraphicsDeviceManager g, ContentManager c, SpriteBatch sb, + int screenHeight, int screenWidth, Session s, Vector3 position) + { + base.Initialize(g, c, sb, screenHeight, screenWidth, s, position); + + textBox = new GameTextBox(); + String buttonText = ""; + /* create some space in the text message before printing the end condition critera */ + if (endCondition.GetType() == typeof(ButtonEndCondition)) + { + buttonText = "\n\nHit the " + ((ButtonEndCondition)endCondition).getButtonText() + " to continue."; + } + else if (endCondition.GetType() == typeof(TimeLimitEndCondition)) + { + buttonText = "\n\n\nTherapy will continue in " + ((TimeLimitEndCondition)endCondition).TimeLimit + " seconds."; + } + + textBox.Initialize(displayText + buttonText, c, sb, screenHeight, screenWidth); + } + + public override void Draw(GameTime gt) + { + textBox.Draw(); + } + + public override string ToString() + { + return base.ToString() + " (Dialog)"; + } + + public override System.Windows.Forms.Form GetTaskForm() + { + return new FormDialogTask(this); + } + } +} + diff --git a/DimensionalTask.cs b/DimensionalTask.cs new file mode 100644 index 0000000..f1d9929 --- /dev/null +++ b/DimensionalTask.cs @@ -0,0 +1,150 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Content; + +namespace TheraWii +{ + public abstract class DimensionalTask : Task + { + public Region region; + + public InputDevice primaryInput; + public InputHandling inputHandling; + public List additionalInput; + public PerformanceMetricType performanceMetric; + + public bool regionEnabled; + + private Ellipsoid cursor; + private TaskData taskData; + + public override void Initialize( + GraphicsDeviceManager g, ContentManager c, SpriteBatch sb, + int screenHeight, int screenWidth, Session s, Vector3 position) + { + base.Initialize(g, c, sb, screenHeight, screenWidth, s, position); + primaryInput.Initialize(Position); + foreach (InputDevice id in additionalInput) + { + id.Initialize(Position); + } + + if (region.Shape == ShapeType.Hoop) + { + cursor = new Basketball(g, c, Position, Vector3.One, Color.Red); + } + else + { + cursor = new Ellipsoid(g, c, Position, Vector3.One, Color.Red); + } + + cursor.Scale = new Vector3(0.02f, 0.02f, 0.02f); + + primaryInput.writeFields(output); + primaryInput.Handling = inputHandling; + foreach (InputDevice ID in additionalInput) + { + ID.writeFields(output); + ID.Handling = inputHandling; + } + + taskData = new TaskData(); + taskData.TaskName = this.Name; + taskData.Metrics.primary = (int)performanceMetric; + s.TaskDatas.Add(taskData); + + if ((endCondition.GetType() == typeof(TimeLimitEndCondition) && ((TimeLimitEndCondition)endCondition).Type == TimeLimitType.TimeInRegion) || + (endCondition.GetType() == typeof(TimeLimitEndCondition) && ((TimeLimitEndCondition)endCondition).Type == TimeLimitType.TimeOutRegion)) + output.addField("IsInRegion"); + output.addField("RegionX1"); + output.addField("RegionX2"); + output.addField("RegionY1"); + output.addField("RegionY2"); + output.addField("RegionZ1"); + output.addField("RegionZ2"); + + output.writeHeader(); + } + + public override void Finish() + { + primaryInput.Finish(); + taskData.Metrics.WriteOutput(output); + base.Finish(); + } + + public override void Update(GameTime gt) + { + //base.Update(gt); + Position = primaryInput.getXYZ(); + cursor.Position = Position; + if (!conditionMet) + conditionMet = endCondition.isMet(gt, region, cursor.Position); + + output.newRecord(gt.ElapsedGameTime); + if ((endCondition.GetType() == typeof(TimeLimitEndCondition) && ((TimeLimitEndCondition)endCondition).Type == TimeLimitType.TimeInRegion) || + (endCondition.GetType() == typeof(TimeLimitEndCondition) && ((TimeLimitEndCondition)endCondition).Type == TimeLimitType.TimeOutRegion)) + output.setData("IsInRegion", ((TimeLimitEndCondition)endCondition).inRegion.ToString()); + output.setData("RegionX1", (((RegionParameter)region.rParams[regPT.X]).cPos- ((RegionParameter)region.rParams[regPT.X]).cSize / 2).ToString()); + output.setData("RegionX2", (((RegionParameter)region.rParams[regPT.X]).cPos+ ((RegionParameter)region.rParams[regPT.X]).cSize / 2).ToString()); + output.setData("RegionY1", (((RegionParameter)region.rParams[regPT.Y]).cPos - ((RegionParameter)region.rParams[regPT.Y]).cSize / 2).ToString()); + output.setData("RegionY2", (((RegionParameter)region.rParams[regPT.Y]).cPos + ((RegionParameter)region.rParams[regPT.Y]).cSize / 2).ToString()); + output.setData("RegionZ1", (((RegionParameter)region.rParams[regPT.Z]).cPos - ((RegionParameter)region.rParams[regPT.Z]).cSize / 2).ToString()); + output.setData("RegionZ2", (((RegionParameter)region.rParams[regPT.Z]).cPos + ((RegionParameter)region.rParams[regPT.Z]).cSize / 2).ToString()); + + //primary input + primaryInput.writeStatus(output); + + //write other input status + foreach (InputDevice ID in additionalInput) + { + ID.writeStatus(output); + } + + //write record + output.writeRecord(); + + taskData.Metrics.Update(gt, this); + } + + public override void Draw(GameTime gt) + { + cursor.Draw(); + } + + public override List getRequiredDevices() + { + List wt = new List(); + WiiType wti; + if (primaryInput != null) + { + if (!wt.Contains(wti = primaryInput.getInputEnum())) + wt.Add(wti); + } + if (additionalInput != null && additionalInput.Count > 0) + { + foreach (InputDevice id in additionalInput) + if (!wt.Contains(wti = id.getInputEnum())) + wt.Add(wti); + } + List wt2; + if ((wt2 = endCondition.getRequiredDevices()).Count > 0) + { + foreach (WiiType wte in wt2) + { + if (!wt.Contains(wte)) + wt.Add(wte); + } + } + return wt; + } + + public bool IsInRegion() + { + return region.isInRegion(cursor.Position); + } + } +} diff --git a/Ellipsoid.cs b/Ellipsoid.cs new file mode 100644 index 0000000..5fb4df5 --- /dev/null +++ b/Ellipsoid.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Audio; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.GamerServices; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Net; +using Microsoft.Xna.Framework.Storage; + +namespace TheraWii +{ + class Ellipsoid + { + public virtual Vector3 Scale { get; set; } + public Vector3 Position; + public Vector3 color; + + protected float aspectRatio; + protected Model ellipsoidModel; + protected Vector3 cameraPosition = new Vector3(0.0f, 0.0f, 10.0f); + protected GraphicsDeviceManager graphics; + protected ContentManager Content; + + public Ellipsoid() + { + } + + public Ellipsoid(GraphicsDeviceManager g, ContentManager c, Vector3 position, Vector3 scale, Color color) + { + this.Scale = scale; + this.Position = position; + this.color = color.ToVector3(); + + graphics = g; + Content = c; + + aspectRatio = graphics.GraphicsDevice.Viewport.AspectRatio; + + ellipsoidModel = Content.Load("Models\\sphere"); + } + + public virtual void Draw() + { + // Copy any parent transforms. + Matrix[] transforms = new Matrix[ellipsoidModel.Bones.Count]; + ellipsoidModel.CopyAbsoluteBoneTransformsTo(transforms); + + // Draw the model. A model can have multiple meshes, so loop. + foreach (ModelMesh mesh in ellipsoidModel.Meshes) + { + // This is where the mesh orientation is set, as well as our camera and projection. + foreach (BasicEffect effect in mesh.Effects) + { + effect.EnableDefaultLighting(); + effect.PreferPerPixelLighting = true; + effect.DiffuseColor = this.color; + effect.LightingEnabled = false; + //effect.DirectionalLight0.Direction = new Vector3(0.0f, 0.0f, 1.0f); + + effect.View = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up); + effect.Projection = Matrix.CreatePerspective(0.2f, 0.2f, 1.0f, 1000.0f); + effect.World = transforms[mesh.ParentBone.Index] + //* Matrix.CreateRotationZ(MathHelper.ToRadians(30.0f)) + * Matrix.CreateScale(Scale.X/aspectRatio, Scale.Y, Scale.Z) + * Matrix.CreateTranslation(Position) + ; + } + // Draw the mesh, using the effects set above. + mesh.Draw(); + } + } + } +} diff --git a/EndCondition.cs b/EndCondition.cs new file mode 100644 index 0000000..ad844b5 --- /dev/null +++ b/EndCondition.cs @@ -0,0 +1,356 @@ +using System; +using System.Xml.Serialization; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; +using System.Collections.Generic; + +namespace TheraWii +{ + public enum Button { + LeftMouse = 0, + RightMouse, + A, + B, + Up, + Down, + Left, + Right, + Plus, + Minus, + Home, + One, + Two, + BalanceBoardButton + } + + [XmlInclude(typeof(ButtonEndCondition)), XmlInclude(typeof(TimeLimitEndCondition)), XmlInclude(typeof(Repeat_rEndCondition)), + XmlInclude(typeof(Repeat_tEndCondition)), XmlInclude(typeof(Repeat_BothEndCondition))] + public abstract class EndCondition + { + public abstract bool isMet(GameTime gameTime, Region r, Vector3 pos); + public abstract List getRequiredDevices(); + public bool isNewExecution; + public EndCondition() {} + public EndCondition(EndCondition ec) {} + public EndCondition returnNew() + { + if (this.GetType() == typeof(ButtonEndCondition)) + return new ButtonEndCondition((ButtonEndCondition)this); + else if (this.GetType() == typeof(TimeLimitEndCondition)) + return new TimeLimitEndCondition((TimeLimitEndCondition)this); + else if (this.GetType() == typeof(Repeat_rEndCondition)) + return new Repeat_rEndCondition((Repeat_rEndCondition)this); + else if (this.GetType() == typeof(Repeat_tEndCondition)) + return new Repeat_tEndCondition((Repeat_tEndCondition)this); + else if (this.GetType() == typeof(Repeat_BothEndCondition)) + return new Repeat_BothEndCondition((Repeat_BothEndCondition)this); + else + return null; + } + } + + public class ButtonEndCondition : EndCondition + { + public static string[] ButtonText = new string[] { + "Left Mouse Button", + "Right Mouse Button", + "Wii Remote A", + "Wii Remote B", + "Wii Remote Up", + "Wii Remote Down", + "Wii Remote Left", + "Wii Remote Right", + "Wii Remote +", + "Wii Remote -", + "Wii Remote Home", + "Wii Remote 1", + "Wii Remote 2", + "Wii Balance Board Button" + }; + + private MouseState lastMouse; + private WiimoteState lastRemote; + private BalanceBoardState lastBalance; + + public Button Button; + + public ButtonEndCondition() + { + Button = Button.LeftMouse; + lastMouse = new MouseState(); + lastRemote = new WiimoteState(); + lastBalance = new BalanceBoardState(); + } + + public ButtonEndCondition(ButtonEndCondition ec) + { + Button = ec.Button; + lastMouse = new MouseState(); + lastRemote = new WiimoteState(); + lastBalance = new BalanceBoardState(); + } + + public override bool isMet(GameTime gameTime, Region r, Vector3 pos) + { + MouseState mouse = Mouse.GetState(); + WiimoteState remote = WiiUse.GetRemoteState(); + BalanceBoardState balance = WiiUse.GetBalanceBoardState(); + bool rv = false; + + switch (Button) + { + case Button.LeftMouse: + rv = mouse.LeftButton == ButtonState.Pressed + && lastMouse.LeftButton == ButtonState.Released; + break; + case Button.RightMouse: + rv = mouse.RightButton == ButtonState.Pressed + && lastMouse.RightButton == ButtonState.Released; + break; + case Button.A: + rv = remote.a == ButtonState.Pressed + && lastRemote.a == ButtonState.Released; + break; + case Button.B: + rv = remote.b == ButtonState.Pressed + && lastRemote.b == ButtonState.Released; + break; + case Button.Up: + rv = remote.dUp == ButtonState.Pressed + && lastRemote.dUp == ButtonState.Released; + break; + case Button.Down: + rv = remote.dDown == ButtonState.Pressed + && lastRemote.dDown == ButtonState.Released; + break; + case Button.Left: + rv = remote.dLeft == ButtonState.Pressed + && lastRemote.dLeft == ButtonState.Released; + break; + case Button.Right: + rv = remote.dRight == ButtonState.Pressed + && lastRemote.dRight == ButtonState.Released; + break; + case Button.One: + rv = remote.one == ButtonState.Pressed + && lastRemote.one == ButtonState.Released; + break; + case Button.Two: + rv = remote.two == ButtonState.Pressed + && lastRemote.two == ButtonState.Released; + break; + case Button.Home: + rv = remote.home == ButtonState.Pressed + && lastRemote.home == ButtonState.Released; + break; + case Button.Plus: + rv = remote.plus == ButtonState.Pressed + && lastRemote.plus == ButtonState.Released; + break; + case Button.Minus: + rv = remote.minus == ButtonState.Pressed + && lastRemote.minus == ButtonState.Released; + break; + case Button.BalanceBoardButton: + rv = balance.button == ButtonState.Pressed + && lastBalance.button == ButtonState.Released; + break; + default: + rv = false; + break; + } + lastMouse = mouse; + lastRemote = remote; + lastBalance = balance; + + return rv; + } + + public string getButtonText() + { + return ButtonText[(int)Button]; + } + + public override List getRequiredDevices() + { + List wt = new List(); + if ((int)Button <= 1) + wt.Add(WiiType.Mouse); + else if ((int)Button <= 12) + wt.Add(WiiType.Remote); + else if ((int)Button == 13) + wt.Add(WiiType.BalanceBoard); + return wt; + } + } + + public enum TimeLimitType {TimeInRegion, TimeOutRegion, TotalTime} + + public class TimeLimitEndCondition : EndCondition + { + public TimeLimitType Type; + public double TimeLimit; + public bool inRegion; + + protected TimeSpan elapsedTime; + + public TimeLimitEndCondition() + { + Type = TimeLimitType.TotalTime; + TimeLimit = 5; + } + + public TimeLimitEndCondition(TimeLimitEndCondition tle) + { + Type = tle.Type; + TimeLimit = tle.TimeLimit; + } + + + public override List getRequiredDevices() + { + return new List(); + } + + public override bool isMet(GameTime gameTime, Region r, Vector3 pos) + { + // reset elapsedTime on new Execution + if (isNewExecution) + { + elapsedTime = new TimeSpan(); + isNewExecution = false; + inRegion = false; + } + // Update + switch (Type) + { + case TimeLimitType.TimeInRegion: + if (r.isInRegion(pos)) + { + elapsedTime += gameTime.ElapsedGameTime; + inRegion = true; + } + else + { + elapsedTime -= elapsedTime; + inRegion = false; + } + break; + case TimeLimitType.TimeOutRegion: + if (r.isInRegion(pos)) + { + elapsedTime -= elapsedTime; + inRegion = true; + } + else + { + elapsedTime += gameTime.ElapsedGameTime; + inRegion = false; + } + break; + case TimeLimitType.TotalTime: + default: + elapsedTime += gameTime.ElapsedGameTime; + break; + } + + // Check + return elapsedTime.TotalSeconds >= TimeLimit; + } + + + } + + public class Repeat_rEndCondition : EndCondition + { + public int numRepeats; + public Repeat_rEndCondition() { } + public Repeat_rEndCondition(Repeat_rEndCondition re) + { + numRepeats = re.numRepeats; + } + + public override bool isMet(GameTime gameTime, Region r, Vector3 pos) + { + throw new NotImplementedException(); + } + public bool isMet(int iterRepeat) + { + return iterRepeat >= numRepeats; + } + public override List getRequiredDevices() + { + return new List(); + } + public void Initialize(int numRepeats) + { + this.numRepeats = numRepeats; + } + } + + public class Repeat_tEndCondition : TimeLimitEndCondition + { + public Repeat_tEndCondition() { } + public Repeat_tEndCondition(Repeat_tEndCondition ec) + { + this.TimeLimit = ec.TimeLimit; + this.Type = ec.Type; + } + public bool isMet(GameTime gameTime) + { + // reset elapsedTime on new Execution + if (isNewExecution) + { + elapsedTime = new TimeSpan(); + isNewExecution = false; + inRegion = false; + } + elapsedTime += gameTime.ElapsedGameTime; + // Check + return elapsedTime.TotalSeconds >= TimeLimit; + } + public void Initialize(int TimeLimit) + { + this.TimeLimit = TimeLimit; + } + } + + public class Repeat_BothEndCondition: EndCondition + { + public Repeat_rEndCondition rEnd; + public Repeat_tEndCondition tEnd; + public Repeat_BothEndCondition() + { + rEnd = new Repeat_rEndCondition(); + tEnd = new Repeat_tEndCondition(); + tEnd.Type = TimeLimitType.TotalTime; + } + public Repeat_BothEndCondition(Repeat_BothEndCondition ec) + { + rEnd = new Repeat_rEndCondition(ec.rEnd); + tEnd = new Repeat_tEndCondition(ec.tEnd); + tEnd.Type = TimeLimitType.TotalTime; + } + public void Initialize(int NumberRepeats, int TotalTimeLimit) + { + rEnd.numRepeats = NumberRepeats; + tEnd.TimeLimit = TotalTimeLimit; + } + + public override bool isMet(GameTime gameTime, Region r, Vector3 pos) + { + throw new NotImplementedException(); + } + + public bool isMet(int iterRepeat, GameTime gameTime) + { + return rEnd.isMet(iterRepeat) && tEnd.isMet(gameTime); + } + public override List getRequiredDevices() + { + return new List(); + } + } + +} + diff --git a/Form2DTask.Designer.cs b/Form2DTask.Designer.cs new file mode 100644 index 0000000..9e36644 --- /dev/null +++ b/Form2DTask.Designer.cs @@ -0,0 +1,907 @@ +namespace TheraWii +{ + partial class Form2DTask + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label5 = new System.Windows.Forms.Label(); + this.TaskTitle = new System.Windows.Forms.Label(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label3 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.comboBoxEndCondition = new System.Windows.Forms.ComboBox(); + this.comboBoxEndButton = new System.Windows.Forms.ComboBox(); + this.comboBoxInputDevice = new System.Windows.Forms.ComboBox(); + this.comboBoxInputHandling = new System.Windows.Forms.ComboBox(); + this.comboBoxPerformanceMetric = new System.Windows.Forms.ComboBox(); + this.label10 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.listBoxAdditionalInputs = new System.Windows.Forms.ListBox(); + this.buttonAddInput = new System.Windows.Forms.Button(); + this.buttonRemoveInput = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.numericUpDownSizeY1 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeY2 = new System.Windows.Forms.Label(); + this.numericUpDownSizeY2 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeY1 = new System.Windows.Forms.Label(); + this.numericUpDownSizeX1 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeX2 = new System.Windows.Forms.Label(); + this.numericUpDownSizeX2 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeX1 = new System.Windows.Forms.Label(); + this.comboBoxSizeY = new System.Windows.Forms.ComboBox(); + this.comboBoxSizeX = new System.Windows.Forms.ComboBox(); + this.label16 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.numericUpDownPosY1 = new System.Windows.Forms.NumericUpDown(); + this.labelPosY2 = new System.Windows.Forms.Label(); + this.numericUpDownPosY2 = new System.Windows.Forms.NumericUpDown(); + this.labelPosY1 = new System.Windows.Forms.Label(); + this.numericUpDownPosX1 = new System.Windows.Forms.NumericUpDown(); + this.labelPosX2 = new System.Windows.Forms.Label(); + this.numericUpDownPosX2 = new System.Windows.Forms.NumericUpDown(); + this.label20 = new System.Windows.Forms.Label(); + this.labelPosX1 = new System.Windows.Forms.Label(); + this.comboBoxPosY = new System.Windows.Forms.ComboBox(); + this.comboBoxPosX = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.comboBoxShape = new System.Windows.Forms.ComboBox(); + this.checkBoxEnableRegion = new System.Windows.Forms.CheckBox(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOK = new System.Windows.Forms.Button(); + this.numericUpDownEndSeconds = new System.Windows.Forms.NumericUpDown(); + this.labelEndSeconds = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeY1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeY2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeX1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeX2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosY1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosY2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosX1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosX2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownEndSeconds)).BeginInit(); + this.SuspendLayout(); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(6, 157); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(0, 13); + this.label5.TabIndex = 12; + // + // TaskTitle + // + this.TaskTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TaskTitle.AutoSize = true; + this.TaskTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TaskTitle.Location = new System.Drawing.Point(187, 9); + this.TaskTitle.Name = "TaskTitle"; + this.TaskTitle.Size = new System.Drawing.Size(148, 24); + this.TaskTitle.TabIndex = 0; + this.TaskTitle.Text = "2D Task Options"; + this.TaskTitle.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(174, 47); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(173, 20); + this.textBoxName.TabIndex = 1; + this.textBoxName.Text = "Dynamic"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(130, 50); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Name:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(97, 94); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(71, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Input Device:"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(89, 119); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(79, 13); + this.label3.TabIndex = 6; + this.label3.Text = "Input Handling:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(92, 528); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(76, 13); + this.label4.TabIndex = 7; + this.label4.Text = "End Condition:"; + // + // comboBoxEndCondition + // + this.comboBoxEndCondition.FormattingEnabled = true; + this.comboBoxEndCondition.Items.AddRange(new object[] { + "Button Press", + "Time Limit", + "Time In Region", + "Time Out of Region"}); + this.comboBoxEndCondition.Location = new System.Drawing.Point(174, 525); + this.comboBoxEndCondition.Name = "comboBoxEndCondition"; + this.comboBoxEndCondition.Size = new System.Drawing.Size(173, 21); + this.comboBoxEndCondition.TabIndex = 8; + this.comboBoxEndCondition.Text = "Button Press"; + this.comboBoxEndCondition.SelectedIndexChanged += new System.EventHandler(this.comboBoxEndCondition_SelectedIndexChanged); + // + // comboBoxEndButton + // + this.comboBoxEndButton.FormattingEnabled = true; + this.comboBoxEndButton.Items.AddRange(new object[] { + "A", + "B", + "Home", + "+", + "-", + "1", + "2", + "Up", + "Down", + "Left", + "Right"}); + this.comboBoxEndButton.Location = new System.Drawing.Point(174, 552); + this.comboBoxEndButton.Name = "comboBoxEndButton"; + this.comboBoxEndButton.Size = new System.Drawing.Size(173, 21); + this.comboBoxEndButton.TabIndex = 9; + this.comboBoxEndButton.Text = "A"; + // + // comboBoxInputDevice + // + this.comboBoxInputDevice.FormattingEnabled = true; + this.comboBoxInputDevice.Items.AddRange(new object[] { + "Balance Board", + "IR Pointer", + "Remote Roll/Pitch", + "Remote + Nunchuck Joystick", + "Remote + Nunchuck Roll/Pitch"}); + this.comboBoxInputDevice.Location = new System.Drawing.Point(174, 91); + this.comboBoxInputDevice.Name = "comboBoxInputDevice"; + this.comboBoxInputDevice.Size = new System.Drawing.Size(173, 21); + this.comboBoxInputDevice.TabIndex = 10; + this.comboBoxInputDevice.Text = "Balance Board"; + // + // comboBoxInputHandling + // + this.comboBoxInputHandling.FormattingEnabled = true; + this.comboBoxInputHandling.Location = new System.Drawing.Point(174, 116); + this.comboBoxInputHandling.Name = "comboBoxInputHandling"; + this.comboBoxInputHandling.Size = new System.Drawing.Size(173, 21); + this.comboBoxInputHandling.TabIndex = 11; + this.comboBoxInputHandling.Text = "Absolute"; + // + // comboBoxPerformanceMetric + // + this.comboBoxPerformanceMetric.FormattingEnabled = true; + this.comboBoxPerformanceMetric.Items.AddRange(new object[] { + "Time in region", + "Time out of region", + "Total Time", + "Center of Balance Position", + "Center of Balance Average", + "Smoothness"}); + this.comboBoxPerformanceMetric.Location = new System.Drawing.Point(174, 276); + this.comboBoxPerformanceMetric.Name = "comboBoxPerformanceMetric"; + this.comboBoxPerformanceMetric.Size = new System.Drawing.Size(173, 21); + this.comboBoxPerformanceMetric.TabIndex = 21; + this.comboBoxPerformanceMetric.Text = "Smoothness"; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(29, 279); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(139, 13); + this.label10.TabIndex = 22; + this.label10.Text = "Primary Performance Metric:"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(30, 143); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(138, 13); + this.label11.TabIndex = 24; + this.label11.Text = "Additional Inputs to Record:"; + // + // listBoxAdditionalInputs + // + this.listBoxAdditionalInputs.FormattingEnabled = true; + this.listBoxAdditionalInputs.Items.AddRange(new object[] { + "Wii Remote Acceleration", + "Nunchuck Joystick"}); + this.listBoxAdditionalInputs.Location = new System.Drawing.Point(174, 143); + this.listBoxAdditionalInputs.Name = "listBoxAdditionalInputs"; + this.listBoxAdditionalInputs.Size = new System.Drawing.Size(173, 121); + this.listBoxAdditionalInputs.TabIndex = 25; + // + // buttonAddInput + // + this.buttonAddInput.Location = new System.Drawing.Point(353, 143); + this.buttonAddInput.Name = "buttonAddInput"; + this.buttonAddInput.Size = new System.Drawing.Size(95, 26); + this.buttonAddInput.TabIndex = 26; + this.buttonAddInput.Text = "Add Input"; + this.buttonAddInput.UseVisualStyleBackColor = true; + this.buttonAddInput.Click += new System.EventHandler(this.buttonAddInput_Click); + // + // buttonRemoveInput + // + this.buttonRemoveInput.Location = new System.Drawing.Point(353, 175); + this.buttonRemoveInput.Name = "buttonRemoveInput"; + this.buttonRemoveInput.Size = new System.Drawing.Size(95, 26); + this.buttonRemoveInput.TabIndex = 27; + this.buttonRemoveInput.Text = "RemoveInput"; + this.buttonRemoveInput.UseVisualStyleBackColor = true; + this.buttonRemoveInput.Click += new System.EventHandler(this.buttonRemoveInput_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.numericUpDownSizeY1); + this.groupBox1.Controls.Add(this.labelSizeY2); + this.groupBox1.Controls.Add(this.numericUpDownSizeY2); + this.groupBox1.Controls.Add(this.labelSizeY1); + this.groupBox1.Controls.Add(this.numericUpDownSizeX1); + this.groupBox1.Controls.Add(this.labelSizeX2); + this.groupBox1.Controls.Add(this.numericUpDownSizeX2); + this.groupBox1.Controls.Add(this.labelSizeX1); + this.groupBox1.Controls.Add(this.comboBoxSizeY); + this.groupBox1.Controls.Add(this.comboBoxSizeX); + this.groupBox1.Controls.Add(this.label16); + this.groupBox1.Controls.Add(this.label17); + this.groupBox1.Controls.Add(this.numericUpDownPosY1); + this.groupBox1.Controls.Add(this.labelPosY2); + this.groupBox1.Controls.Add(this.numericUpDownPosY2); + this.groupBox1.Controls.Add(this.labelPosY1); + this.groupBox1.Controls.Add(this.numericUpDownPosX1); + this.groupBox1.Controls.Add(this.labelPosX2); + this.groupBox1.Controls.Add(this.numericUpDownPosX2); + this.groupBox1.Controls.Add(this.label20); + this.groupBox1.Controls.Add(this.labelPosX1); + this.groupBox1.Controls.Add(this.comboBoxPosY); + this.groupBox1.Controls.Add(this.comboBoxPosX); + this.groupBox1.Controls.Add(this.label9); + this.groupBox1.Controls.Add(this.label8); + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.comboBoxShape); + this.groupBox1.Location = new System.Drawing.Point(12, 336); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(468, 173); + this.groupBox1.TabIndex = 29; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Region Settings"; + // + // numericUpDownSizeY1 + // + this.numericUpDownSizeY1.DecimalPlaces = 2; + this.numericUpDownSizeY1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeY1.Location = new System.Drawing.Point(311, 143); + this.numericUpDownSizeY1.Maximum = new decimal(new int[] { + 2, + 0, + 0, + 0}); + this.numericUpDownSizeY1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeY1.Name = "numericUpDownSizeY1"; + this.numericUpDownSizeY1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeY1.TabIndex = 69; + this.numericUpDownSizeY1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeY1.Value = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeY1.Visible = false; + // + // labelSizeY2 + // + this.labelSizeY2.AutoSize = true; + this.labelSizeY2.Location = new System.Drawing.Point(377, 145); + this.labelSizeY2.Name = "labelSizeY2"; + this.labelSizeY2.Size = new System.Drawing.Size(26, 13); + this.labelSizeY2.TabIndex = 67; + this.labelSizeY2.Text = "End"; + this.labelSizeY2.Visible = false; + // + // numericUpDownSizeY2 + // + this.numericUpDownSizeY2.DecimalPlaces = 2; + this.numericUpDownSizeY2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeY2.Location = new System.Drawing.Point(409, 143); + this.numericUpDownSizeY2.Maximum = new decimal(new int[] { + 2, + 0, + 0, + 0}); + this.numericUpDownSizeY2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeY2.Name = "numericUpDownSizeY2"; + this.numericUpDownSizeY2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeY2.TabIndex = 68; + this.numericUpDownSizeY2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeY2.Value = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + // + // labelSizeY1 + // + this.labelSizeY1.AutoSize = true; + this.labelSizeY1.Location = new System.Drawing.Point(271, 145); + this.labelSizeY1.Name = "labelSizeY1"; + this.labelSizeY1.Size = new System.Drawing.Size(34, 13); + this.labelSizeY1.TabIndex = 66; + this.labelSizeY1.Text = "Value"; + // + // numericUpDownSizeX1 + // + this.numericUpDownSizeX1.DecimalPlaces = 2; + this.numericUpDownSizeX1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeX1.Location = new System.Drawing.Point(311, 90); + this.numericUpDownSizeX1.Maximum = new decimal(new int[] { + 2, + 0, + 0, + 0}); + this.numericUpDownSizeX1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeX1.Name = "numericUpDownSizeX1"; + this.numericUpDownSizeX1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeX1.TabIndex = 65; + this.numericUpDownSizeX1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeX1.Value = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeX1.Visible = false; + // + // labelSizeX2 + // + this.labelSizeX2.AutoSize = true; + this.labelSizeX2.Location = new System.Drawing.Point(377, 92); + this.labelSizeX2.Name = "labelSizeX2"; + this.labelSizeX2.Size = new System.Drawing.Size(26, 13); + this.labelSizeX2.TabIndex = 63; + this.labelSizeX2.Text = "End"; + this.labelSizeX2.Visible = false; + // + // numericUpDownSizeX2 + // + this.numericUpDownSizeX2.DecimalPlaces = 2; + this.numericUpDownSizeX2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeX2.Location = new System.Drawing.Point(409, 90); + this.numericUpDownSizeX2.Maximum = new decimal(new int[] { + 2, + 0, + 0, + 0}); + this.numericUpDownSizeX2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeX2.Name = "numericUpDownSizeX2"; + this.numericUpDownSizeX2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeX2.TabIndex = 64; + this.numericUpDownSizeX2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeX2.Value = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + // + // labelSizeX1 + // + this.labelSizeX1.AutoSize = true; + this.labelSizeX1.Location = new System.Drawing.Point(271, 92); + this.labelSizeX1.Name = "labelSizeX1"; + this.labelSizeX1.Size = new System.Drawing.Size(34, 13); + this.labelSizeX1.TabIndex = 61; + this.labelSizeX1.Text = "Value"; + // + // comboBoxSizeY + // + this.comboBoxSizeY.FormattingEnabled = true; + this.comboBoxSizeY.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxSizeY.Location = new System.Drawing.Point(274, 116); + this.comboBoxSizeY.Name = "comboBoxSizeY"; + this.comboBoxSizeY.Size = new System.Drawing.Size(188, 21); + this.comboBoxSizeY.TabIndex = 62; + this.comboBoxSizeY.Text = "Static"; + this.comboBoxSizeY.SelectedIndexChanged += new System.EventHandler(this.comboBoxSizeY_SelectedIndexChanged); + // + // comboBoxSizeX + // + this.comboBoxSizeX.FormattingEnabled = true; + this.comboBoxSizeX.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxSizeX.Location = new System.Drawing.Point(274, 62); + this.comboBoxSizeX.Name = "comboBoxSizeX"; + this.comboBoxSizeX.Size = new System.Drawing.Size(188, 21); + this.comboBoxSizeX.TabIndex = 60; + this.comboBoxSizeX.Text = "Static"; + this.comboBoxSizeX.SelectedIndexChanged += new System.EventHandler(this.comboBoxSizeX_SelectedIndexChanged); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(254, 119); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(14, 13); + this.label16.TabIndex = 59; + this.label16.Text = "Y"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(254, 65); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(14, 13); + this.label17.TabIndex = 58; + this.label17.Text = "X"; + // + // numericUpDownPosY1 + // + this.numericUpDownPosY1.DecimalPlaces = 2; + this.numericUpDownPosY1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosY1.Location = new System.Drawing.Point(84, 143); + this.numericUpDownPosY1.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosY1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosY1.Name = "numericUpDownPosY1"; + this.numericUpDownPosY1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosY1.TabIndex = 57; + this.numericUpDownPosY1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPosY1.Visible = false; + // + // labelPosY2 + // + this.labelPosY2.AutoSize = true; + this.labelPosY2.Location = new System.Drawing.Point(150, 145); + this.labelPosY2.Name = "labelPosY2"; + this.labelPosY2.Size = new System.Drawing.Size(26, 13); + this.labelPosY2.TabIndex = 55; + this.labelPosY2.Text = "End"; + this.labelPosY2.Visible = false; + // + // numericUpDownPosY2 + // + this.numericUpDownPosY2.DecimalPlaces = 2; + this.numericUpDownPosY2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosY2.Location = new System.Drawing.Point(182, 143); + this.numericUpDownPosY2.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosY2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosY2.Name = "numericUpDownPosY2"; + this.numericUpDownPosY2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosY2.TabIndex = 56; + this.numericUpDownPosY2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // labelPosY1 + // + this.labelPosY1.AutoSize = true; + this.labelPosY1.Location = new System.Drawing.Point(44, 145); + this.labelPosY1.Name = "labelPosY1"; + this.labelPosY1.Size = new System.Drawing.Size(34, 13); + this.labelPosY1.TabIndex = 54; + this.labelPosY1.Text = "Value"; + // + // numericUpDownPosX1 + // + this.numericUpDownPosX1.DecimalPlaces = 2; + this.numericUpDownPosX1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosX1.Location = new System.Drawing.Point(84, 90); + this.numericUpDownPosX1.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosX1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosX1.Name = "numericUpDownPosX1"; + this.numericUpDownPosX1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosX1.TabIndex = 53; + this.numericUpDownPosX1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPosX1.Visible = false; + // + // labelPosX2 + // + this.labelPosX2.AutoSize = true; + this.labelPosX2.Location = new System.Drawing.Point(150, 92); + this.labelPosX2.Name = "labelPosX2"; + this.labelPosX2.Size = new System.Drawing.Size(26, 13); + this.labelPosX2.TabIndex = 37; + this.labelPosX2.Text = "End"; + this.labelPosX2.Visible = false; + // + // numericUpDownPosX2 + // + this.numericUpDownPosX2.DecimalPlaces = 2; + this.numericUpDownPosX2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosX2.Location = new System.Drawing.Point(182, 90); + this.numericUpDownPosX2.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosX2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosX2.Name = "numericUpDownPosX2"; + this.numericUpDownPosX2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosX2.TabIndex = 52; + this.numericUpDownPosX2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(248, 47); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(30, 13); + this.label20.TabIndex = 37; + this.label20.Text = "Size:"; + // + // labelPosX1 + // + this.labelPosX1.AutoSize = true; + this.labelPosX1.Location = new System.Drawing.Point(44, 92); + this.labelPosX1.Name = "labelPosX1"; + this.labelPosX1.Size = new System.Drawing.Size(34, 13); + this.labelPosX1.TabIndex = 23; + this.labelPosX1.Text = "Value"; + // + // comboBoxPosY + // + this.comboBoxPosY.FormattingEnabled = true; + this.comboBoxPosY.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxPosY.Location = new System.Drawing.Point(47, 116); + this.comboBoxPosY.Name = "comboBoxPosY"; + this.comboBoxPosY.Size = new System.Drawing.Size(188, 21); + this.comboBoxPosY.TabIndex = 32; + this.comboBoxPosY.Text = "Static"; + this.comboBoxPosY.SelectedIndexChanged += new System.EventHandler(this.comboBoxPosY_SelectedIndexChanged); + // + // comboBoxPosX + // + this.comboBoxPosX.FormattingEnabled = true; + this.comboBoxPosX.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxPosX.Location = new System.Drawing.Point(47, 62); + this.comboBoxPosX.Name = "comboBoxPosX"; + this.comboBoxPosX.Size = new System.Drawing.Size(188, 21); + this.comboBoxPosX.TabIndex = 21; + this.comboBoxPosX.Text = "Static"; + this.comboBoxPosX.SelectedIndexChanged += new System.EventHandler(this.comboBoxPosX_SelectedIndexChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(27, 119); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(14, 13); + this.label9.TabIndex = 20; + this.label9.Text = "Y"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(27, 65); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(14, 13); + this.label8.TabIndex = 19; + this.label8.Text = "X"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(18, 46); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(47, 13); + this.label7.TabIndex = 18; + this.label7.Text = "Position:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(115, 20); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(41, 13); + this.label6.TabIndex = 15; + this.label6.Text = "Shape:"; + // + // comboBoxShape + // + this.comboBoxShape.FormattingEnabled = true; + this.comboBoxShape.Location = new System.Drawing.Point(162, 17); + this.comboBoxShape.Name = "comboBoxShape"; + this.comboBoxShape.Size = new System.Drawing.Size(173, 21); + this.comboBoxShape.TabIndex = 14; + // + // checkBoxEnableRegion + // + this.checkBoxEnableRegion.AutoSize = true; + this.checkBoxEnableRegion.Location = new System.Drawing.Point(12, 313); + this.checkBoxEnableRegion.Name = "checkBoxEnableRegion"; + this.checkBoxEnableRegion.Size = new System.Drawing.Size(98, 17); + this.checkBoxEnableRegion.TabIndex = 13; + this.checkBoxEnableRegion.Text = "Enable Region"; + this.checkBoxEnableRegion.UseVisualStyleBackColor = true; + this.checkBoxEnableRegion.CheckedChanged += new System.EventHandler(this.checkBoxEnableRegion_CheckedChanged); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(405, 596); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 30; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOK + // + this.buttonOK.Location = new System.Drawing.Point(324, 596); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 31; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); + // + // numericUpDownEndSeconds + // + this.numericUpDownEndSeconds.DecimalPlaces = 2; + this.numericUpDownEndSeconds.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownEndSeconds.Location = new System.Drawing.Point(174, 552); + this.numericUpDownEndSeconds.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.numericUpDownEndSeconds.Name = "numericUpDownEndSeconds"; + this.numericUpDownEndSeconds.Size = new System.Drawing.Size(65, 20); + this.numericUpDownEndSeconds.TabIndex = 32; + this.numericUpDownEndSeconds.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + this.numericUpDownEndSeconds.Visible = false; + // + // labelEndSeconds + // + this.labelEndSeconds.AutoSize = true; + this.labelEndSeconds.Location = new System.Drawing.Point(245, 555); + this.labelEndSeconds.Name = "labelEndSeconds"; + this.labelEndSeconds.Size = new System.Drawing.Size(49, 13); + this.labelEndSeconds.TabIndex = 33; + this.labelEndSeconds.Text = "Seconds"; + this.labelEndSeconds.Visible = false; + // + // Form2DTask + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(492, 639); + this.Controls.Add(this.labelEndSeconds); + this.Controls.Add(this.numericUpDownEndSeconds); + this.Controls.Add(this.buttonOK); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.buttonRemoveInput); + this.Controls.Add(this.buttonAddInput); + this.Controls.Add(this.listBoxAdditionalInputs); + this.Controls.Add(this.label11); + this.Controls.Add(this.label10); + this.Controls.Add(this.comboBoxPerformanceMetric); + this.Controls.Add(this.label5); + this.Controls.Add(this.comboBoxInputHandling); + this.Controls.Add(this.comboBoxInputDevice); + this.Controls.Add(this.comboBoxEndButton); + this.Controls.Add(this.comboBoxEndCondition); + this.Controls.Add(this.label4); + this.Controls.Add(this.label3); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.TaskTitle); + this.Controls.Add(this.checkBoxEnableRegion); + this.Name = "Form2DTask"; + this.Text = "2D Task Options"; + this.Load += new System.EventHandler(this.Form2DTask_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form2DTask_FormClosing); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeY1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeY2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeX1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeX2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosY1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosY2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosX1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosX2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownEndSeconds)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label TaskTitle; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox comboBoxEndCondition; + private System.Windows.Forms.ComboBox comboBoxEndButton; + private System.Windows.Forms.ComboBox comboBoxInputDevice; + private System.Windows.Forms.ComboBox comboBoxInputHandling; + private System.Windows.Forms.ComboBox comboBoxPerformanceMetric; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.ListBox listBoxAdditionalInputs; + private System.Windows.Forms.Button buttonAddInput; + private System.Windows.Forms.Button buttonRemoveInput; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox comboBoxShape; + private System.Windows.Forms.CheckBox checkBoxEnableRegion; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.ComboBox comboBoxPosX; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Label labelPosX1; + private System.Windows.Forms.ComboBox comboBoxPosY; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.NumericUpDown numericUpDownPosX2; + private System.Windows.Forms.Label labelPosX2; + private System.Windows.Forms.NumericUpDown numericUpDownPosX1; + private System.Windows.Forms.NumericUpDown numericUpDownPosY1; + private System.Windows.Forms.Label labelPosY2; + private System.Windows.Forms.NumericUpDown numericUpDownPosY2; + private System.Windows.Forms.Label labelPosY1; + private System.Windows.Forms.NumericUpDown numericUpDownSizeY1; + private System.Windows.Forms.Label labelSizeY2; + private System.Windows.Forms.NumericUpDown numericUpDownSizeY2; + private System.Windows.Forms.Label labelSizeY1; + private System.Windows.Forms.NumericUpDown numericUpDownSizeX1; + private System.Windows.Forms.Label labelSizeX2; + private System.Windows.Forms.NumericUpDown numericUpDownSizeX2; + private System.Windows.Forms.Label labelSizeX1; + private System.Windows.Forms.ComboBox comboBoxSizeY; + private System.Windows.Forms.ComboBox comboBoxSizeX; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.NumericUpDown numericUpDownEndSeconds; + private System.Windows.Forms.Label labelEndSeconds; + } +} \ No newline at end of file diff --git a/Form2DTask.cs b/Form2DTask.cs new file mode 100644 index 0000000..6b14276 --- /dev/null +++ b/Form2DTask.cs @@ -0,0 +1,355 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class Form2DTask : Form + { + private Task2D task; + private ButtonEndCondition buttonEnd; + private TimeLimitEndCondition timeEnd; + private List additionalInputs; + private static Point prevLocation; + + public Form2DTask(Task2D t) + { + InitializeComponent(); + comboBoxInputDevice.DataSource = Input2D.GetPossibleInputs(); + comboBoxInputHandling.DataSource = InputHandlingNames.InputHandlingStrings; + comboBoxPerformanceMetric.DataSource = PerformanceMetrics.PerformanceMetricStrings; + comboBoxEndButton.DataSource = ButtonEndCondition.ButtonText; + comboBoxShape.DataSource = new ShapeType[] { ShapeType.Rectangle, ShapeType.Ellipse, ShapeType.Hoop }; + SpecifierLabel[] SpecifierLabels = new SpecifierLabel[] + { + SpecifierLabel.Static, SpecifierLabel.Dynamic, + SpecifierLabel.Random + }; + comboBoxPosX.BindingContext = new BindingContext(); + comboBoxPosX.DataSource = SpecifierLabels; + comboBoxPosX.Tag = t.region.rParams[regPT.X]; + comboBoxPosY.BindingContext = new BindingContext(); + comboBoxPosY.DataSource = SpecifierLabels; + comboBoxPosY.Tag = t.region.rParams[regPT.Y]; + comboBoxSizeX.BindingContext = new BindingContext(); + comboBoxSizeX.DataSource = SpecifierLabels; + comboBoxSizeY.BindingContext = new BindingContext(); + comboBoxSizeY.DataSource = SpecifierLabels; + + + // Load Form from task data + task = t; + textBoxName.Text = task.Name; + + // Input loading + comboBoxInputDevice.SelectedIndex = Input2D.GetInputIndex(task.primaryInput); + additionalInputs = new List(); + additionalInputs.AddRange(task.additionalInput); + listBoxAdditionalInputs.DataSource = additionalInputs; + + // Input handling load + comboBoxInputHandling.SelectedIndex = (int)task.inputHandling; + + // Performance Metric load + comboBoxPerformanceMetric.SelectedIndex = (int)task.performanceMetric; + + //Region Loading + if (t.regionEnabled) + { + groupBox1.Enabled = true; + checkBoxEnableRegion.Checked = true; + } + else + { + groupBox1.Enabled = false; + checkBoxEnableRegion.Checked = false; + } + if (t.region.Shape != ShapeType.NONE) + { + comboBoxShape.SelectedItem = t.region.Shape; + comboBoxPosX.SelectedItem = ((RegionParameter)comboBoxPosX.Tag).SL_pos; + comboBoxPosY.SelectedItem = ((RegionParameter)comboBoxPosY.Tag).SL_pos; + comboBoxSizeX.SelectedItem = ((RegionParameter)comboBoxPosX.Tag).SL_size; + comboBoxSizeY.SelectedItem = ((RegionParameter)comboBoxPosY.Tag).SL_size; + numericUpDownPosX1.Value = (decimal)((RegionParameter)comboBoxPosX.Tag).pos[0]; + numericUpDownPosX2.Value = (decimal)((RegionParameter)comboBoxPosX.Tag).pos[1]; + numericUpDownPosY1.Value = (decimal)((RegionParameter)comboBoxPosY.Tag).pos[0]; + numericUpDownPosY2.Value = (decimal)((RegionParameter)comboBoxPosY.Tag).pos[1]; + numericUpDownSizeX1.Value = (decimal)((RegionParameter)comboBoxPosX.Tag).size[0]; + numericUpDownSizeX2.Value = (decimal)((RegionParameter)comboBoxPosX.Tag).size[1]; + numericUpDownSizeY1.Value = (decimal)((RegionParameter)comboBoxPosY.Tag).size[0]; + numericUpDownSizeY2.Value = (decimal)((RegionParameter)comboBoxPosY.Tag).size[1]; + } + + // End Condition Loading + if (task.endCondition.GetType() == typeof(ButtonEndCondition)) + { + buttonEnd = (ButtonEndCondition)task.endCondition; + timeEnd = new TimeLimitEndCondition(); + comboBoxEndCondition.SelectedIndex = 0; + + } + else + { + buttonEnd = new ButtonEndCondition(); + timeEnd = (TimeLimitEndCondition)task.endCondition; + if(((TimeLimitEndCondition)task.endCondition).Type == TimeLimitType.TotalTime) + comboBoxEndCondition.SelectedIndex = 1; + else if(((TimeLimitEndCondition)task.endCondition).Type == TimeLimitType.TimeInRegion) + comboBoxEndCondition.SelectedIndex = 2; + else if (((TimeLimitEndCondition)task.endCondition).Type == TimeLimitType.TimeOutRegion) + comboBoxEndCondition.SelectedIndex = 3; + } + numericUpDownEndSeconds.Value = (decimal)timeEnd.TimeLimit; + comboBoxEndButton.SelectedIndex = (int)buttonEnd.Button; + } + + private void buttonOK_Click(object sender, EventArgs e) + { + task.Name = textBoxName.Text; + + // Save Input + task.primaryInput = (InputDevice) comboBoxInputDevice.SelectedItem; + task.additionalInput = additionalInputs; + + // Save input handling + task.inputHandling = (InputHandling)comboBoxInputHandling.SelectedIndex; + + // Save performance metric + task.performanceMetric = (PerformanceMetricType)comboBoxPerformanceMetric.SelectedIndex; + + // Save Region + task.regionEnabled = checkBoxEnableRegion.Checked; + task.region.Shape = (ShapeType)comboBoxShape.SelectedIndex; + + //Console.WriteLine("UI Size: " + (float)numericUpDownSizeX2.Value + "," + (float)numericUpDownSizeY2.Value); + //Console.WriteLine("UI Pos: " + (float)numericUpDownPosX2.Value + "," + (float)numericUpDownPosY2.Value); + + task.region.Shape = (ShapeType)comboBoxShape.SelectedItem; + ((RegionParameter)comboBoxPosX.Tag).SL_pos = (SpecifierLabel)comboBoxPosX.SelectedItem; + ((RegionParameter)comboBoxPosY.Tag).SL_pos = (SpecifierLabel)comboBoxPosY.SelectedItem; + ((RegionParameter)comboBoxPosX.Tag).SL_size = (SpecifierLabel)comboBoxSizeX.SelectedItem; + ((RegionParameter)comboBoxPosY.Tag).SL_size = (SpecifierLabel)comboBoxSizeY.SelectedItem; + ((RegionParameter)comboBoxPosX.Tag).pos[0] = (float)numericUpDownPosX1.Value; + ((RegionParameter)comboBoxPosX.Tag).pos[1] = (float)numericUpDownPosX2.Value; + ((RegionParameter)comboBoxPosY.Tag).pos[0] = (float)numericUpDownPosY1.Value; + ((RegionParameter)comboBoxPosY.Tag).pos[1] = (float)numericUpDownPosY2.Value; + ((RegionParameter)comboBoxPosX.Tag).size[0] = (float)numericUpDownSizeX1.Value; + ((RegionParameter)comboBoxPosX.Tag).size[1] = (float)numericUpDownSizeX2.Value; + ((RegionParameter)comboBoxPosY.Tag).size[0] = (float)numericUpDownSizeY1.Value; + ((RegionParameter)comboBoxPosY.Tag).size[1] = (float)numericUpDownSizeY2.Value; + + // Save end condition + timeEnd.TimeLimit = (double)numericUpDownEndSeconds.Value; + buttonEnd.Button = (Button)comboBoxEndButton.SelectedIndex; + switch (comboBoxEndCondition.SelectedIndex) + { + case 0: // Button Press + task.endCondition = buttonEnd; + break; + case 1: // Time Limit + timeEnd.Type = TimeLimitType.TotalTime; + task.endCondition = timeEnd; + break; + case 2: // Time In Region + timeEnd.Type = TimeLimitType.TimeInRegion; + task.endCondition = timeEnd; + break; + case 3: // Time Out of Region + timeEnd.Type = TimeLimitType.TimeOutRegion; + task.endCondition = timeEnd; + break; + } + + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + private void buttonAddInput_Click(object sender, EventArgs e) + { + InputDevice primary = (InputDevice)comboBoxInputDevice.SelectedItem; + InputDevice[] unused = Input2D.GetUnusedInputs(primary, additionalInputs); + FormAddInputs f = new FormAddInputs(unused); + f.Tag = this.Tag; + DialogResult result = f.ShowDialog(); + if (result == DialogResult.OK) + { + additionalInputs.Add((InputDevice)f.GetSelectedInput()); + } + listBoxAdditionalInputs.DataSource = null; + listBoxAdditionalInputs.DataSource = additionalInputs; + } + + private void buttonRemoveInput_Click(object sender, EventArgs e) + { + InputDevice item = (InputDevice)listBoxAdditionalInputs.SelectedItem; + if (item != null) + { + additionalInputs.Remove(item); + listBoxAdditionalInputs.DataSource = null; + listBoxAdditionalInputs.DataSource = additionalInputs; + } + } + + private void checkBoxEnableRegion_CheckedChanged(object sender, EventArgs e) + { + groupBox1.Enabled = checkBoxEnableRegion.Checked; + } + private void comboBoxPosX_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxPosX.SelectedIndex) + { + case 0: + labelPosX1.Text = "Value"; + labelPosX2.Visible = false; + numericUpDownPosX1.Visible = false; + break; + case 1: + labelPosX1.Text = "Start"; + labelPosX2.Visible = true; + labelPosX2.Text = "End"; + numericUpDownPosX1.Visible = true; + break; + case 2: + labelPosX1.Text = "Min"; + labelPosX2.Visible = true; + labelPosX2.Text = "Max"; + numericUpDownPosX1.Visible = true; + break; + } + } + + private void comboBoxPosY_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxPosY.SelectedIndex) + { + case 0: + labelPosY1.Text = "Value"; + labelPosY2.Visible = false; + numericUpDownPosY1.Visible = false; + break; + case 1: + labelPosY1.Text = "Start"; + labelPosY2.Visible = true; + labelPosY2.Text = "End"; + numericUpDownPosY1.Visible = true; + break; + case 2: + labelPosY1.Text = "Min"; + labelPosY2.Visible = true; + labelPosY2.Text = "Max"; + numericUpDownPosY1.Visible = true; + break; + } + } + + private void comboBoxSizeX_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSizeX.SelectedIndex) + { + case 0: + labelSizeX1.Text = "Value"; + labelSizeX2.Visible = false; + numericUpDownSizeX1.Visible = false; + break; + case 1: + labelSizeX1.Text = "Start"; + labelSizeX2.Visible = true; + labelSizeX2.Text = "End"; + numericUpDownSizeX1.Visible = true; + break; + case 2: + labelSizeX1.Text = "Min"; + labelSizeX2.Visible = true; + labelSizeX2.Text = "Max"; + numericUpDownSizeX1.Visible = true; + break; + } + } + + private void comboBoxSizeY_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSizeY.SelectedIndex) + { + case 0: + labelSizeY1.Text = "Value"; + labelSizeY2.Visible = false; + numericUpDownSizeY1.Visible = false; + break; + case 1: + labelSizeY1.Text = "Start"; + labelSizeY2.Visible = true; + labelSizeY2.Text = "End"; + numericUpDownSizeY1.Visible = true; + break; + case 2: + labelSizeY1.Text = "Min"; + labelSizeY2.Visible = true; + labelSizeY2.Text = "Max"; + numericUpDownSizeY1.Visible = true; + break; + } + } + + private void comboBoxEndCondition_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxEndCondition.SelectedIndex) + { + case 0: // Button Press + labelEndSeconds.Visible = false; + numericUpDownEndSeconds.Visible = false; + comboBoxEndButton.Visible = true; + break; + case 1: // Time Limit + labelEndSeconds.Visible = true; + numericUpDownEndSeconds.Visible = true; + comboBoxEndButton.Visible = false; + break; + case 2: // Time in Region + labelEndSeconds.Visible = true; + numericUpDownEndSeconds.Visible = true; + comboBoxEndButton.Visible = false; + break; + case 3: // Time out of Region + labelEndSeconds.Visible = true; + numericUpDownEndSeconds.Visible = true; + comboBoxEndButton.Visible = false; + break; + } + } + + private void Form2DTask_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void Form2DTask_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + } +} diff --git a/Form2DTask.resx b/Form2DTask.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/Form2DTask.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Form3DTask.Designer.cs b/Form3DTask.Designer.cs new file mode 100644 index 0000000..49c0290 --- /dev/null +++ b/Form3DTask.Designer.cs @@ -0,0 +1,1094 @@ +namespace TheraWii +{ + partial class Form3DTask + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label5 = new System.Windows.Forms.Label(); + this.TaskTitle = new System.Windows.Forms.Label(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.label4 = new System.Windows.Forms.Label(); + this.comboBoxEndCondition = new System.Windows.Forms.ComboBox(); + this.comboBoxEndButton = new System.Windows.Forms.ComboBox(); + this.comboBoxInputDevice = new System.Windows.Forms.ComboBox(); + this.comboBoxPerformanceMetric = new System.Windows.Forms.ComboBox(); + this.label10 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.listBoxAdditionalInputs = new System.Windows.Forms.ListBox(); + this.buttonAddInput = new System.Windows.Forms.Button(); + this.buttonRemoveInput = new System.Windows.Forms.Button(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.numericUpDownSizeZ1 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeZ2 = new System.Windows.Forms.Label(); + this.numericUpDownSizeZ2 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeZ1 = new System.Windows.Forms.Label(); + this.comboBoxSizeZ = new System.Windows.Forms.ComboBox(); + this.label13 = new System.Windows.Forms.Label(); + this.numericUpDownPosZ1 = new System.Windows.Forms.NumericUpDown(); + this.labelPosZ2 = new System.Windows.Forms.Label(); + this.numericUpDownPosZ2 = new System.Windows.Forms.NumericUpDown(); + this.labelPosZ1 = new System.Windows.Forms.Label(); + this.comboBoxPosZ = new System.Windows.Forms.ComboBox(); + this.label18 = new System.Windows.Forms.Label(); + this.numericUpDownSizeY1 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeY2 = new System.Windows.Forms.Label(); + this.numericUpDownSizeY2 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeY1 = new System.Windows.Forms.Label(); + this.numericUpDownSizeX1 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeX2 = new System.Windows.Forms.Label(); + this.numericUpDownSizeX2 = new System.Windows.Forms.NumericUpDown(); + this.labelSizeX1 = new System.Windows.Forms.Label(); + this.comboBoxSizeY = new System.Windows.Forms.ComboBox(); + this.comboBoxSizeX = new System.Windows.Forms.ComboBox(); + this.label16 = new System.Windows.Forms.Label(); + this.label17 = new System.Windows.Forms.Label(); + this.numericUpDownPosY1 = new System.Windows.Forms.NumericUpDown(); + this.labelPosY2 = new System.Windows.Forms.Label(); + this.numericUpDownPosY2 = new System.Windows.Forms.NumericUpDown(); + this.labelPosY1 = new System.Windows.Forms.Label(); + this.numericUpDownPosX1 = new System.Windows.Forms.NumericUpDown(); + this.labelPosX2 = new System.Windows.Forms.Label(); + this.numericUpDownPosX2 = new System.Windows.Forms.NumericUpDown(); + this.label20 = new System.Windows.Forms.Label(); + this.labelPosX1 = new System.Windows.Forms.Label(); + this.comboBoxPosY = new System.Windows.Forms.ComboBox(); + this.comboBoxPosX = new System.Windows.Forms.ComboBox(); + this.label9 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.comboBoxShape = new System.Windows.Forms.ComboBox(); + this.checkBoxEnableRegion = new System.Windows.Forms.CheckBox(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.buttonOK = new System.Windows.Forms.Button(); + this.numericUpDownEndSeconds = new System.Windows.Forms.NumericUpDown(); + this.labelEndSeconds = new System.Windows.Forms.Label(); + this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeZ1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeZ2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosZ1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosZ2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeY1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeY2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeX1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeX2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosY1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosY2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosX1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosX2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownEndSeconds)).BeginInit(); + this.SuspendLayout(); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(6, 157); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(0, 13); + this.label5.TabIndex = 12; + // + // TaskTitle + // + this.TaskTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TaskTitle.AutoSize = true; + this.TaskTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TaskTitle.Location = new System.Drawing.Point(170, 9); + this.TaskTitle.Name = "TaskTitle"; + this.TaskTitle.Size = new System.Drawing.Size(148, 24); + this.TaskTitle.TabIndex = 0; + this.TaskTitle.Text = "3D Task Options"; + this.TaskTitle.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(174, 47); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(173, 20); + this.textBoxName.TabIndex = 1; + this.textBoxName.Text = "Dynamic"; + this.textBoxName.TextChanged += new System.EventHandler(this.textBoxName_TextChanged); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(130, 50); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Name:"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(97, 94); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(71, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Input Device:"; + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(92, 552); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(76, 13); + this.label4.TabIndex = 7; + this.label4.Text = "End Condition:"; + // + // comboBoxEndCondition + // + this.comboBoxEndCondition.FormattingEnabled = true; + this.comboBoxEndCondition.Items.AddRange(new object[] { + "Button Press", + "Time Limit"}); + this.comboBoxEndCondition.Location = new System.Drawing.Point(174, 549); + this.comboBoxEndCondition.Name = "comboBoxEndCondition"; + this.comboBoxEndCondition.Size = new System.Drawing.Size(173, 21); + this.comboBoxEndCondition.TabIndex = 8; + this.comboBoxEndCondition.Text = "Button Press"; + this.comboBoxEndCondition.SelectedIndexChanged += new System.EventHandler(this.comboBoxEndCondition_SelectedIndexChanged); + // + // comboBoxEndButton + // + this.comboBoxEndButton.FormattingEnabled = true; + this.comboBoxEndButton.Items.AddRange(new object[] { + "A", + "B", + "Home", + "+", + "-", + "1", + "2", + "Up", + "Down", + "Left", + "Right"}); + this.comboBoxEndButton.Location = new System.Drawing.Point(174, 576); + this.comboBoxEndButton.Name = "comboBoxEndButton"; + this.comboBoxEndButton.Size = new System.Drawing.Size(173, 21); + this.comboBoxEndButton.TabIndex = 9; + this.comboBoxEndButton.Text = "A"; + // + // comboBoxInputDevice + // + this.comboBoxInputDevice.FormattingEnabled = true; + this.comboBoxInputDevice.Items.AddRange(new object[] { + "Wii Remote", + "Nunchuck"}); + this.comboBoxInputDevice.Location = new System.Drawing.Point(174, 91); + this.comboBoxInputDevice.Name = "comboBoxInputDevice"; + this.comboBoxInputDevice.Size = new System.Drawing.Size(173, 21); + this.comboBoxInputDevice.TabIndex = 10; + this.comboBoxInputDevice.Text = "Wii Remote"; + this.comboBoxInputDevice.SelectedIndexChanged += new System.EventHandler(this.comboBoxInputDevice_SelectedIndexChanged); + // + // comboBoxPerformanceMetric + // + this.comboBoxPerformanceMetric.FormattingEnabled = true; + this.comboBoxPerformanceMetric.Items.AddRange(new object[] { + "Time in region", + "Time out of region", + "Total Time", + "Center of Balance Position", + "Center of Balance Average", + "Smoothness"}); + this.comboBoxPerformanceMetric.Location = new System.Drawing.Point(174, 251); + this.comboBoxPerformanceMetric.Name = "comboBoxPerformanceMetric"; + this.comboBoxPerformanceMetric.Size = new System.Drawing.Size(173, 21); + this.comboBoxPerformanceMetric.TabIndex = 21; + this.comboBoxPerformanceMetric.Text = "Smoothness"; + this.comboBoxPerformanceMetric.SelectedIndexChanged += new System.EventHandler(this.comboBoxPerformanceMetric_SelectedIndexChanged); + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(29, 254); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(139, 13); + this.label10.TabIndex = 22; + this.label10.Text = "Primary Performance Metric:"; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(30, 118); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(138, 13); + this.label11.TabIndex = 24; + this.label11.Text = "Additional Inputs to Record:"; + // + // listBoxAdditionalInputs + // + this.listBoxAdditionalInputs.FormattingEnabled = true; + this.listBoxAdditionalInputs.Items.AddRange(new object[] { + "Wii Remote Acceleration", + "Nunchuck Joystick"}); + this.listBoxAdditionalInputs.Location = new System.Drawing.Point(174, 118); + this.listBoxAdditionalInputs.Name = "listBoxAdditionalInputs"; + this.listBoxAdditionalInputs.Size = new System.Drawing.Size(173, 121); + this.listBoxAdditionalInputs.TabIndex = 25; + // + // buttonAddInput + // + this.buttonAddInput.Location = new System.Drawing.Point(353, 118); + this.buttonAddInput.Name = "buttonAddInput"; + this.buttonAddInput.Size = new System.Drawing.Size(95, 26); + this.buttonAddInput.TabIndex = 26; + this.buttonAddInput.Text = "Add Input"; + this.buttonAddInput.UseVisualStyleBackColor = true; + this.buttonAddInput.Click += new System.EventHandler(this.buttonAddInput_Click); + // + // buttonRemoveInput + // + this.buttonRemoveInput.Location = new System.Drawing.Point(353, 150); + this.buttonRemoveInput.Name = "buttonRemoveInput"; + this.buttonRemoveInput.Size = new System.Drawing.Size(95, 26); + this.buttonRemoveInput.TabIndex = 27; + this.buttonRemoveInput.Text = "RemoveInput"; + this.buttonRemoveInput.UseVisualStyleBackColor = true; + this.buttonRemoveInput.Click += new System.EventHandler(this.buttonRemoveInput_Click); + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.numericUpDownSizeZ1); + this.groupBox1.Controls.Add(this.labelSizeZ2); + this.groupBox1.Controls.Add(this.numericUpDownSizeZ2); + this.groupBox1.Controls.Add(this.labelSizeZ1); + this.groupBox1.Controls.Add(this.comboBoxSizeZ); + this.groupBox1.Controls.Add(this.label13); + this.groupBox1.Controls.Add(this.numericUpDownPosZ1); + this.groupBox1.Controls.Add(this.labelPosZ2); + this.groupBox1.Controls.Add(this.numericUpDownPosZ2); + this.groupBox1.Controls.Add(this.labelPosZ1); + this.groupBox1.Controls.Add(this.comboBoxPosZ); + this.groupBox1.Controls.Add(this.label18); + this.groupBox1.Controls.Add(this.numericUpDownSizeY1); + this.groupBox1.Controls.Add(this.labelSizeY2); + this.groupBox1.Controls.Add(this.numericUpDownSizeY2); + this.groupBox1.Controls.Add(this.labelSizeY1); + this.groupBox1.Controls.Add(this.numericUpDownSizeX1); + this.groupBox1.Controls.Add(this.labelSizeX2); + this.groupBox1.Controls.Add(this.numericUpDownSizeX2); + this.groupBox1.Controls.Add(this.labelSizeX1); + this.groupBox1.Controls.Add(this.comboBoxSizeY); + this.groupBox1.Controls.Add(this.comboBoxSizeX); + this.groupBox1.Controls.Add(this.label16); + this.groupBox1.Controls.Add(this.label17); + this.groupBox1.Controls.Add(this.numericUpDownPosY1); + this.groupBox1.Controls.Add(this.labelPosY2); + this.groupBox1.Controls.Add(this.numericUpDownPosY2); + this.groupBox1.Controls.Add(this.labelPosY1); + this.groupBox1.Controls.Add(this.numericUpDownPosX1); + this.groupBox1.Controls.Add(this.labelPosX2); + this.groupBox1.Controls.Add(this.numericUpDownPosX2); + this.groupBox1.Controls.Add(this.label20); + this.groupBox1.Controls.Add(this.labelPosX1); + this.groupBox1.Controls.Add(this.comboBoxPosY); + this.groupBox1.Controls.Add(this.comboBoxPosX); + this.groupBox1.Controls.Add(this.label9); + this.groupBox1.Controls.Add(this.label8); + this.groupBox1.Controls.Add(this.label7); + this.groupBox1.Controls.Add(this.label6); + this.groupBox1.Controls.Add(this.comboBoxShape); + this.groupBox1.Location = new System.Drawing.Point(12, 309); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(468, 225); + this.groupBox1.TabIndex = 29; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Region Settings"; + // + // numericUpDownSizeZ1 + // + this.numericUpDownSizeZ1.DecimalPlaces = 2; + this.numericUpDownSizeZ1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeZ1.Location = new System.Drawing.Point(311, 196); + this.numericUpDownSizeZ1.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownSizeZ1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownSizeZ1.Name = "numericUpDownSizeZ1"; + this.numericUpDownSizeZ1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeZ1.TabIndex = 81; + this.numericUpDownSizeZ1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeZ1.Visible = false; + // + // labelSizeZ2 + // + this.labelSizeZ2.AutoSize = true; + this.labelSizeZ2.Location = new System.Drawing.Point(377, 198); + this.labelSizeZ2.Name = "labelSizeZ2"; + this.labelSizeZ2.Size = new System.Drawing.Size(26, 13); + this.labelSizeZ2.TabIndex = 79; + this.labelSizeZ2.Text = "End"; + this.labelSizeZ2.Visible = false; + // + // numericUpDownSizeZ2 + // + this.numericUpDownSizeZ2.DecimalPlaces = 2; + this.numericUpDownSizeZ2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeZ2.Location = new System.Drawing.Point(409, 196); + this.numericUpDownSizeZ2.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownSizeZ2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownSizeZ2.Name = "numericUpDownSizeZ2"; + this.numericUpDownSizeZ2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeZ2.TabIndex = 80; + this.numericUpDownSizeZ2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // labelSizeZ1 + // + this.labelSizeZ1.AutoSize = true; + this.labelSizeZ1.Location = new System.Drawing.Point(271, 198); + this.labelSizeZ1.Name = "labelSizeZ1"; + this.labelSizeZ1.Size = new System.Drawing.Size(34, 13); + this.labelSizeZ1.TabIndex = 78; + this.labelSizeZ1.Text = "Value"; + // + // comboBoxSizeZ + // + this.comboBoxSizeZ.FormattingEnabled = true; + this.comboBoxSizeZ.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxSizeZ.Location = new System.Drawing.Point(274, 169); + this.comboBoxSizeZ.Name = "comboBoxSizeZ"; + this.comboBoxSizeZ.Size = new System.Drawing.Size(188, 21); + this.comboBoxSizeZ.TabIndex = 77; + this.comboBoxSizeZ.Text = "Static"; + this.comboBoxSizeZ.SelectedIndexChanged += new System.EventHandler(this.comboBoxSizeZ_SelectedIndexChanged); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(254, 172); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(14, 13); + this.label13.TabIndex = 76; + this.label13.Text = "Z"; + // + // numericUpDownPosZ1 + // + this.numericUpDownPosZ1.DecimalPlaces = 2; + this.numericUpDownPosZ1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosZ1.Location = new System.Drawing.Point(84, 196); + this.numericUpDownPosZ1.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosZ1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosZ1.Name = "numericUpDownPosZ1"; + this.numericUpDownPosZ1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosZ1.TabIndex = 75; + this.numericUpDownPosZ1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPosZ1.Visible = false; + // + // labelPosZ2 + // + this.labelPosZ2.AutoSize = true; + this.labelPosZ2.Location = new System.Drawing.Point(150, 198); + this.labelPosZ2.Name = "labelPosZ2"; + this.labelPosZ2.Size = new System.Drawing.Size(26, 13); + this.labelPosZ2.TabIndex = 73; + this.labelPosZ2.Text = "End"; + this.labelPosZ2.Visible = false; + // + // numericUpDownPosZ2 + // + this.numericUpDownPosZ2.DecimalPlaces = 2; + this.numericUpDownPosZ2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosZ2.Location = new System.Drawing.Point(182, 196); + this.numericUpDownPosZ2.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosZ2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosZ2.Name = "numericUpDownPosZ2"; + this.numericUpDownPosZ2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosZ2.TabIndex = 74; + this.numericUpDownPosZ2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + // + // labelPosZ1 + // + this.labelPosZ1.AutoSize = true; + this.labelPosZ1.Location = new System.Drawing.Point(44, 198); + this.labelPosZ1.Name = "labelPosZ1"; + this.labelPosZ1.Size = new System.Drawing.Size(34, 13); + this.labelPosZ1.TabIndex = 72; + this.labelPosZ1.Text = "Value"; + // + // comboBoxPosZ + // + this.comboBoxPosZ.FormattingEnabled = true; + this.comboBoxPosZ.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxPosZ.Location = new System.Drawing.Point(47, 169); + this.comboBoxPosZ.Name = "comboBoxPosZ"; + this.comboBoxPosZ.Size = new System.Drawing.Size(188, 21); + this.comboBoxPosZ.TabIndex = 71; + this.comboBoxPosZ.Text = "Static"; + this.comboBoxPosZ.SelectedIndexChanged += new System.EventHandler(this.comboBoxPosZ_SelectedIndexChanged); + // + // label18 + // + this.label18.AutoSize = true; + this.label18.Location = new System.Drawing.Point(27, 172); + this.label18.Name = "label18"; + this.label18.Size = new System.Drawing.Size(14, 13); + this.label18.TabIndex = 70; + this.label18.Text = "Z"; + // + // numericUpDownSizeY1 + // + this.numericUpDownSizeY1.DecimalPlaces = 2; + this.numericUpDownSizeY1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeY1.Location = new System.Drawing.Point(311, 143); + this.numericUpDownSizeY1.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownSizeY1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownSizeY1.Name = "numericUpDownSizeY1"; + this.numericUpDownSizeY1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeY1.TabIndex = 69; + this.numericUpDownSizeY1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeY1.Visible = false; + this.numericUpDownSizeY1.ValueChanged += new System.EventHandler(this.numericUpDownSizeY1_ValueChanged); + // + // labelSizeY2 + // + this.labelSizeY2.AutoSize = true; + this.labelSizeY2.Location = new System.Drawing.Point(377, 145); + this.labelSizeY2.Name = "labelSizeY2"; + this.labelSizeY2.Size = new System.Drawing.Size(26, 13); + this.labelSizeY2.TabIndex = 67; + this.labelSizeY2.Text = "End"; + this.labelSizeY2.Visible = false; + // + // numericUpDownSizeY2 + // + this.numericUpDownSizeY2.DecimalPlaces = 2; + this.numericUpDownSizeY2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeY2.Location = new System.Drawing.Point(409, 143); + this.numericUpDownSizeY2.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownSizeY2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownSizeY2.Name = "numericUpDownSizeY2"; + this.numericUpDownSizeY2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeY2.TabIndex = 68; + this.numericUpDownSizeY2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeY2.ValueChanged += new System.EventHandler(this.numericUpDownSizeY2_ValueChanged); + // + // labelSizeY1 + // + this.labelSizeY1.AutoSize = true; + this.labelSizeY1.Location = new System.Drawing.Point(271, 145); + this.labelSizeY1.Name = "labelSizeY1"; + this.labelSizeY1.Size = new System.Drawing.Size(34, 13); + this.labelSizeY1.TabIndex = 66; + this.labelSizeY1.Text = "Value"; + // + // numericUpDownSizeX1 + // + this.numericUpDownSizeX1.DecimalPlaces = 2; + this.numericUpDownSizeX1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeX1.Location = new System.Drawing.Point(311, 90); + this.numericUpDownSizeX1.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownSizeX1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownSizeX1.Name = "numericUpDownSizeX1"; + this.numericUpDownSizeX1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeX1.TabIndex = 65; + this.numericUpDownSizeX1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeX1.Visible = false; + this.numericUpDownSizeX1.ValueChanged += new System.EventHandler(this.numericUpDownSizeX1_ValueChanged); + // + // labelSizeX2 + // + this.labelSizeX2.AutoSize = true; + this.labelSizeX2.Location = new System.Drawing.Point(377, 92); + this.labelSizeX2.Name = "labelSizeX2"; + this.labelSizeX2.Size = new System.Drawing.Size(26, 13); + this.labelSizeX2.TabIndex = 63; + this.labelSizeX2.Text = "End"; + this.labelSizeX2.Visible = false; + // + // numericUpDownSizeX2 + // + this.numericUpDownSizeX2.DecimalPlaces = 2; + this.numericUpDownSizeX2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownSizeX2.Location = new System.Drawing.Point(409, 90); + this.numericUpDownSizeX2.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownSizeX2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownSizeX2.Name = "numericUpDownSizeX2"; + this.numericUpDownSizeX2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownSizeX2.TabIndex = 64; + this.numericUpDownSizeX2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownSizeX2.ValueChanged += new System.EventHandler(this.numericUpDownSizeX2_ValueChanged); + // + // labelSizeX1 + // + this.labelSizeX1.AutoSize = true; + this.labelSizeX1.Location = new System.Drawing.Point(271, 92); + this.labelSizeX1.Name = "labelSizeX1"; + this.labelSizeX1.Size = new System.Drawing.Size(34, 13); + this.labelSizeX1.TabIndex = 61; + this.labelSizeX1.Text = "Value"; + // + // comboBoxSizeY + // + this.comboBoxSizeY.FormattingEnabled = true; + this.comboBoxSizeY.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxSizeY.Location = new System.Drawing.Point(274, 116); + this.comboBoxSizeY.Name = "comboBoxSizeY"; + this.comboBoxSizeY.Size = new System.Drawing.Size(188, 21); + this.comboBoxSizeY.TabIndex = 62; + this.comboBoxSizeY.Text = "Static"; + this.comboBoxSizeY.SelectedIndexChanged += new System.EventHandler(this.comboBoxSizeY_SelectedIndexChanged); + // + // comboBoxSizeX + // + this.comboBoxSizeX.FormattingEnabled = true; + this.comboBoxSizeX.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxSizeX.Location = new System.Drawing.Point(274, 62); + this.comboBoxSizeX.Name = "comboBoxSizeX"; + this.comboBoxSizeX.Size = new System.Drawing.Size(188, 21); + this.comboBoxSizeX.TabIndex = 60; + this.comboBoxSizeX.Text = "Static"; + this.comboBoxSizeX.SelectedIndexChanged += new System.EventHandler(this.comboBoxSizeX_SelectedIndexChanged); + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(254, 119); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(14, 13); + this.label16.TabIndex = 59; + this.label16.Text = "Y"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(254, 65); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(14, 13); + this.label17.TabIndex = 58; + this.label17.Text = "X"; + // + // numericUpDownPosY1 + // + this.numericUpDownPosY1.DecimalPlaces = 2; + this.numericUpDownPosY1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosY1.Location = new System.Drawing.Point(84, 143); + this.numericUpDownPosY1.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosY1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosY1.Name = "numericUpDownPosY1"; + this.numericUpDownPosY1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosY1.TabIndex = 57; + this.numericUpDownPosY1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPosY1.Visible = false; + this.numericUpDownPosY1.ValueChanged += new System.EventHandler(this.numericUpDownPosY1_ValueChanged); + // + // labelPosY2 + // + this.labelPosY2.AutoSize = true; + this.labelPosY2.Location = new System.Drawing.Point(150, 145); + this.labelPosY2.Name = "labelPosY2"; + this.labelPosY2.Size = new System.Drawing.Size(26, 13); + this.labelPosY2.TabIndex = 55; + this.labelPosY2.Text = "End"; + this.labelPosY2.Visible = false; + // + // numericUpDownPosY2 + // + this.numericUpDownPosY2.DecimalPlaces = 2; + this.numericUpDownPosY2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosY2.Location = new System.Drawing.Point(182, 143); + this.numericUpDownPosY2.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosY2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosY2.Name = "numericUpDownPosY2"; + this.numericUpDownPosY2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosY2.TabIndex = 56; + this.numericUpDownPosY2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPosY2.ValueChanged += new System.EventHandler(this.numericUpDownPosY2_ValueChanged); + // + // labelPosY1 + // + this.labelPosY1.AutoSize = true; + this.labelPosY1.Location = new System.Drawing.Point(44, 145); + this.labelPosY1.Name = "labelPosY1"; + this.labelPosY1.Size = new System.Drawing.Size(34, 13); + this.labelPosY1.TabIndex = 54; + this.labelPosY1.Text = "Value"; + // + // numericUpDownPosX1 + // + this.numericUpDownPosX1.DecimalPlaces = 2; + this.numericUpDownPosX1.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosX1.Location = new System.Drawing.Point(84, 90); + this.numericUpDownPosX1.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosX1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosX1.Name = "numericUpDownPosX1"; + this.numericUpDownPosX1.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosX1.TabIndex = 53; + this.numericUpDownPosX1.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPosX1.Visible = false; + this.numericUpDownPosX1.ValueChanged += new System.EventHandler(this.numericUpDownPosX1_ValueChanged); + // + // labelPosX2 + // + this.labelPosX2.AutoSize = true; + this.labelPosX2.Location = new System.Drawing.Point(150, 92); + this.labelPosX2.Name = "labelPosX2"; + this.labelPosX2.Size = new System.Drawing.Size(26, 13); + this.labelPosX2.TabIndex = 37; + this.labelPosX2.Text = "End"; + this.labelPosX2.Visible = false; + // + // numericUpDownPosX2 + // + this.numericUpDownPosX2.DecimalPlaces = 2; + this.numericUpDownPosX2.Increment = new decimal(new int[] { + 1, + 0, + 0, + 65536}); + this.numericUpDownPosX2.Location = new System.Drawing.Point(182, 90); + this.numericUpDownPosX2.Maximum = new decimal(new int[] { + 1, + 0, + 0, + 0}); + this.numericUpDownPosX2.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDownPosX2.Name = "numericUpDownPosX2"; + this.numericUpDownPosX2.Size = new System.Drawing.Size(53, 20); + this.numericUpDownPosX2.TabIndex = 52; + this.numericUpDownPosX2.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.numericUpDownPosX2.ValueChanged += new System.EventHandler(this.numericUpDownPosX2_ValueChanged); + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(248, 47); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(30, 13); + this.label20.TabIndex = 37; + this.label20.Text = "Size:"; + // + // labelPosX1 + // + this.labelPosX1.AutoSize = true; + this.labelPosX1.Location = new System.Drawing.Point(44, 92); + this.labelPosX1.Name = "labelPosX1"; + this.labelPosX1.Size = new System.Drawing.Size(34, 13); + this.labelPosX1.TabIndex = 23; + this.labelPosX1.Text = "Value"; + // + // comboBoxPosY + // + this.comboBoxPosY.FormattingEnabled = true; + this.comboBoxPosY.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxPosY.Location = new System.Drawing.Point(47, 116); + this.comboBoxPosY.Name = "comboBoxPosY"; + this.comboBoxPosY.Size = new System.Drawing.Size(188, 21); + this.comboBoxPosY.TabIndex = 32; + this.comboBoxPosY.Text = "Static"; + this.comboBoxPosY.SelectedIndexChanged += new System.EventHandler(this.comboBoxPosY_SelectedIndexChanged); + // + // comboBoxPosX + // + this.comboBoxPosX.FormattingEnabled = true; + this.comboBoxPosX.Items.AddRange(new object[] { + "Static", + "Dynamic", + "Random"}); + this.comboBoxPosX.Location = new System.Drawing.Point(47, 62); + this.comboBoxPosX.Name = "comboBoxPosX"; + this.comboBoxPosX.Size = new System.Drawing.Size(188, 21); + this.comboBoxPosX.TabIndex = 21; + this.comboBoxPosX.Text = "Static"; + this.comboBoxPosX.SelectedIndexChanged += new System.EventHandler(this.comboBoxPosX_SelectedIndexChanged); + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(27, 119); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(14, 13); + this.label9.TabIndex = 20; + this.label9.Text = "Y"; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(27, 65); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(14, 13); + this.label8.TabIndex = 19; + this.label8.Text = "X"; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(18, 46); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(47, 13); + this.label7.TabIndex = 18; + this.label7.Text = "Position:"; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(115, 20); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(41, 13); + this.label6.TabIndex = 15; + this.label6.Text = "Shape:"; + // + // comboBoxShape + // + this.comboBoxShape.FormattingEnabled = true; + this.comboBoxShape.Items.AddRange(new object[] { + "Cuboid", + "Ellipsoid"}); + this.comboBoxShape.Location = new System.Drawing.Point(162, 17); + this.comboBoxShape.Name = "comboBoxShape"; + this.comboBoxShape.Size = new System.Drawing.Size(173, 21); + this.comboBoxShape.TabIndex = 14; + this.comboBoxShape.Text = "Cuboid"; + this.comboBoxShape.SelectedIndexChanged += new System.EventHandler(this.comboBoxShape_SelectedIndexChanged); + // + // checkBoxEnableRegion + // + this.checkBoxEnableRegion.AutoSize = true; + this.checkBoxEnableRegion.Location = new System.Drawing.Point(12, 286); + this.checkBoxEnableRegion.Name = "checkBoxEnableRegion"; + this.checkBoxEnableRegion.Size = new System.Drawing.Size(98, 17); + this.checkBoxEnableRegion.TabIndex = 13; + this.checkBoxEnableRegion.Text = "Enable Region"; + this.checkBoxEnableRegion.UseVisualStyleBackColor = true; + this.checkBoxEnableRegion.CheckedChanged += new System.EventHandler(this.checkBoxEnableRegion_CheckedChanged); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(405, 603); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 30; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // buttonOK + // + this.buttonOK.Location = new System.Drawing.Point(324, 603); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 31; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); + // + // numericUpDownEndSeconds + // + this.numericUpDownEndSeconds.Location = new System.Drawing.Point(174, 576); + this.numericUpDownEndSeconds.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.numericUpDownEndSeconds.Name = "numericUpDownEndSeconds"; + this.numericUpDownEndSeconds.Size = new System.Drawing.Size(65, 20); + this.numericUpDownEndSeconds.TabIndex = 32; + this.numericUpDownEndSeconds.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + this.numericUpDownEndSeconds.Visible = false; + // + // labelEndSeconds + // + this.labelEndSeconds.AutoSize = true; + this.labelEndSeconds.Location = new System.Drawing.Point(245, 579); + this.labelEndSeconds.Name = "labelEndSeconds"; + this.labelEndSeconds.Size = new System.Drawing.Size(49, 13); + this.labelEndSeconds.TabIndex = 33; + this.labelEndSeconds.Text = "Seconds"; + this.labelEndSeconds.Visible = false; + // + // Form3DTask + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(492, 632); + this.Controls.Add(this.labelEndSeconds); + this.Controls.Add(this.numericUpDownEndSeconds); + this.Controls.Add(this.buttonOK); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.groupBox1); + this.Controls.Add(this.buttonRemoveInput); + this.Controls.Add(this.buttonAddInput); + this.Controls.Add(this.listBoxAdditionalInputs); + this.Controls.Add(this.label11); + this.Controls.Add(this.label10); + this.Controls.Add(this.comboBoxPerformanceMetric); + this.Controls.Add(this.label5); + this.Controls.Add(this.comboBoxInputDevice); + this.Controls.Add(this.comboBoxEndButton); + this.Controls.Add(this.comboBoxEndCondition); + this.Controls.Add(this.label4); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.TaskTitle); + this.Controls.Add(this.checkBoxEnableRegion); + this.Name = "Form3DTask"; + this.Text = "3D Task Options"; + this.Load += new System.EventHandler(this.Form3DTask_Load); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form3DTask_FormClosing); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeZ1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeZ2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosZ1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosZ2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeY1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeY2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeX1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownSizeX2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosY1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosY2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosX1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownPosX2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownEndSeconds)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label TaskTitle; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.ComboBox comboBoxEndCondition; + private System.Windows.Forms.ComboBox comboBoxEndButton; + private System.Windows.Forms.ComboBox comboBoxInputDevice; + private System.Windows.Forms.ComboBox comboBoxPerformanceMetric; + private System.Windows.Forms.Label label10; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.ListBox listBoxAdditionalInputs; + private System.Windows.Forms.Button buttonAddInput; + private System.Windows.Forms.Button buttonRemoveInput; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label8; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.ComboBox comboBoxShape; + private System.Windows.Forms.CheckBox checkBoxEnableRegion; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.ComboBox comboBoxPosX; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Label labelPosX1; + private System.Windows.Forms.ComboBox comboBoxPosY; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.NumericUpDown numericUpDownPosX2; + private System.Windows.Forms.Label labelPosX2; + private System.Windows.Forms.NumericUpDown numericUpDownPosX1; + private System.Windows.Forms.NumericUpDown numericUpDownPosY1; + private System.Windows.Forms.Label labelPosY2; + private System.Windows.Forms.NumericUpDown numericUpDownPosY2; + private System.Windows.Forms.Label labelPosY1; + private System.Windows.Forms.NumericUpDown numericUpDownSizeY1; + private System.Windows.Forms.Label labelSizeY2; + private System.Windows.Forms.NumericUpDown numericUpDownSizeY2; + private System.Windows.Forms.Label labelSizeY1; + private System.Windows.Forms.NumericUpDown numericUpDownSizeX1; + private System.Windows.Forms.Label labelSizeX2; + private System.Windows.Forms.NumericUpDown numericUpDownSizeX2; + private System.Windows.Forms.Label labelSizeX1; + private System.Windows.Forms.ComboBox comboBoxSizeY; + private System.Windows.Forms.ComboBox comboBoxSizeX; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.NumericUpDown numericUpDownEndSeconds; + private System.Windows.Forms.Label labelEndSeconds; + private System.Windows.Forms.NumericUpDown numericUpDownSizeZ1; + private System.Windows.Forms.Label labelSizeZ2; + private System.Windows.Forms.NumericUpDown numericUpDownSizeZ2; + private System.Windows.Forms.Label labelSizeZ1; + private System.Windows.Forms.ComboBox comboBoxSizeZ; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.NumericUpDown numericUpDownPosZ1; + private System.Windows.Forms.Label labelPosZ2; + private System.Windows.Forms.NumericUpDown numericUpDownPosZ2; + private System.Windows.Forms.Label labelPosZ1; + private System.Windows.Forms.ComboBox comboBoxPosZ; + private System.Windows.Forms.Label label18; + } +} \ No newline at end of file diff --git a/Form3DTask.cs b/Form3DTask.cs new file mode 100644 index 0000000..992b581 --- /dev/null +++ b/Form3DTask.cs @@ -0,0 +1,450 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class Form3DTask : Form + { + private Task3D task; + private ButtonEndCondition buttonEnd; + private TimeLimitEndCondition timeEnd; + private List additionalInputs; + private static Point prevLocation; + + public Form3DTask(Task3D t) + { + InitializeComponent(); + comboBoxInputDevice.DataSource = Input3D.GetPossibleInputs(); + comboBoxEndButton.DataSource = ButtonEndCondition.ButtonText; + comboBoxPerformanceMetric.DataSource = PerformanceMetrics.PerformanceMetricStrings; + comboBoxShape.DataSource = new ShapeType[] { ShapeType.Cuboid, ShapeType.Ellipsoid }; + SpecifierLabel[] SpecifierLabels = new SpecifierLabel[] + { + SpecifierLabel.Static, SpecifierLabel.Dynamic, + SpecifierLabel.Random + }; + comboBoxPosX.BindingContext = new BindingContext(); + comboBoxPosX.DataSource = SpecifierLabels; + comboBoxPosY.BindingContext = new BindingContext(); + comboBoxPosY.DataSource = SpecifierLabels; + comboBoxPosZ.BindingContext = new BindingContext(); + comboBoxPosZ.DataSource = SpecifierLabels; + comboBoxSizeX.BindingContext = new BindingContext(); + comboBoxSizeX.DataSource = SpecifierLabels; + comboBoxSizeY.BindingContext = new BindingContext(); + comboBoxSizeY.DataSource = SpecifierLabels; + comboBoxSizeZ.BindingContext = new BindingContext(); + comboBoxSizeZ.DataSource = SpecifierLabels; + + + // Load Form from task data + task = t; + textBoxName.Text = task.Name; + + // Input loading + comboBoxInputDevice.SelectedIndex = Input3D.GetInputIndex(task.primaryInput); + additionalInputs = new List(); + if (task.additionalInput != null) + additionalInputs.AddRange(task.additionalInput); + listBoxAdditionalInputs.DataSource = additionalInputs; + + // Performance Metric load + comboBoxPerformanceMetric.SelectedIndex = (int)task.performanceMetric; + + //Region Loading + if (t.regionEnabled) + { + groupBox1.Enabled = true; + checkBoxEnableRegion.Checked = true; + } + else + { + groupBox1.Enabled = false; + checkBoxEnableRegion.Checked = false; + } + + if (t.region.Shape != ShapeType.NONE) + { + comboBoxPosX.SelectedItem = ((RegionParameter)t.region.rParams[regPT.X]).SL_pos; + comboBoxPosY.SelectedItem = ((RegionParameter)t.region.rParams[regPT.Y]).SL_pos; + comboBoxPosZ.SelectedItem = ((RegionParameter)t.region.rParams[regPT.Z]).SL_pos; + comboBoxSizeX.SelectedItem = ((RegionParameter)t.region.rParams[regPT.X]).SL_size; + comboBoxSizeY.SelectedItem = ((RegionParameter)t.region.rParams[regPT.Y]).SL_size; + comboBoxSizeZ.SelectedItem = ((RegionParameter)t.region.rParams[regPT.Z]).SL_size; + numericUpDownPosX1.Value = (decimal)((RegionParameter)t.region.rParams[regPT.X]).pos[0]; + numericUpDownPosX2.Value = (decimal)((RegionParameter)t.region.rParams[regPT.X]).pos[1]; + numericUpDownPosY1.Value = (decimal)((RegionParameter)t.region.rParams[regPT.Y]).pos[0]; + numericUpDownPosY2.Value = (decimal)((RegionParameter)t.region.rParams[regPT.Y]).pos[1]; + numericUpDownPosZ1.Value = (decimal)((RegionParameter)t.region.rParams[regPT.Y]).pos[0]; + numericUpDownPosZ2.Value = (decimal)((RegionParameter)t.region.rParams[regPT.Y]).pos[1]; + numericUpDownSizeX1.Value = (decimal)((RegionParameter)t.region.rParams[regPT.X]).size[0]; + numericUpDownSizeX2.Value = (decimal)((RegionParameter)t.region.rParams[regPT.X]).size[1]; + numericUpDownSizeY1.Value = (decimal)((RegionParameter)t.region.rParams[regPT.Y]).size[0]; + numericUpDownSizeY2.Value = (decimal)((RegionParameter)t.region.rParams[regPT.Y]).size[1]; + numericUpDownSizeZ1.Value = (decimal)((RegionParameter)t.region.rParams[regPT.Z]).size[0]; + numericUpDownSizeZ2.Value = (decimal)((RegionParameter)t.region.rParams[regPT.Z]).size[1]; + } + + // End Condition Loading + if (task.endCondition.GetType() == typeof(ButtonEndCondition)) + { + buttonEnd = (ButtonEndCondition)task.endCondition; + timeEnd = new TimeLimitEndCondition(); + comboBoxEndCondition.SelectedIndex = 0; + + } + else + { + buttonEnd = new ButtonEndCondition(); + timeEnd = (TimeLimitEndCondition)task.endCondition; + comboBoxEndCondition.SelectedIndex = 1; + } + numericUpDownEndSeconds.Value = (decimal)timeEnd.TimeLimit; + comboBoxEndButton.SelectedIndex = (int)buttonEnd.Button; + } + + private void buttonOK_Click(object sender, EventArgs e) + { + task.Name = textBoxName.Text; + + // Save Input + task.primaryInput = (InputDevice)comboBoxInputDevice.SelectedItem; + task.additionalInput = additionalInputs; + + // Save performance metric + task.performanceMetric = (PerformanceMetricType)comboBoxPerformanceMetric.SelectedIndex; + + // Save Region + task.regionEnabled = checkBoxEnableRegion.Checked; + task.region.Shape = (ShapeType)comboBoxShape.SelectedItem; + //task.region.posx.sLabel = (RegionParameter.SpecifierLabel)comboBoxPosX.SelectedItem; + //task.region.posy.sLabel = (RegionParameter.SpecifierLabel)comboBoxPosY.SelectedItem; + //task.region.posz.sLabel = (RegionParameter.SpecifierLabel)comboBoxPosZ.SelectedItem; + //task.region.sizex.sLabel = (RegionParameter.SpecifierLabel)comboBoxSizeX.SelectedItem; + //task.region.sizey.sLabel = (RegionParameter.SpecifierLabel)comboBoxSizeY.SelectedItem; + //task.region.sizez.sLabel = (RegionParameter.SpecifierLabel)comboBoxSizeZ.SelectedItem; + //task.region.posx.param[0] = (float)numericUpDownPosX1.Value; + //task.region.posx.param[1] = (float)numericUpDownPosX2.Value; + //task.region.posy.param[0] = (float)numericUpDownPosY1.Value; + //task.region.posy.param[1] = (float)numericUpDownPosY2.Value; + //task.region.posz.param[0] = (float)numericUpDownPosZ1.Value; + //task.region.posz.param[1] = (float)numericUpDownPosZ2.Value; + //task.region.sizex.param[0] = (float)numericUpDownSizeX1.Value; + //task.region.sizex.param[1] = (float)numericUpDownSizeX2.Value; + //task.region.sizey.param[0] = (float)numericUpDownSizeY1.Value; + //task.region.sizey.param[1] = (float)numericUpDownSizeY2.Value; + //task.region.sizez.param[0] = (float)numericUpDownSizeZ1.Value; + //task.region.sizez.param[1] = (float)numericUpDownSizeZ2.Value; + + // Save end condition + timeEnd.TimeLimit = (double)numericUpDownEndSeconds.Value; + buttonEnd.Button = (Button)comboBoxEndButton.SelectedIndex; + switch (comboBoxEndCondition.SelectedIndex) + { + case 0: // Button Press + task.endCondition = buttonEnd; + break; + case 1: // Time Limit + task.endCondition = timeEnd; + break; + } + + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + private void buttonAddInput_Click(object sender, EventArgs e) + { + InputDevice primary = (InputDevice)comboBoxInputDevice.SelectedItem; + InputDevice[] unused = Input3D.GetUnusedInputs(primary, additionalInputs); + FormAddInputs f = new FormAddInputs(unused); + f.Tag = this.Tag; + DialogResult result = f.ShowDialog(); + if (result == DialogResult.OK) + { + additionalInputs.Add((InputDevice)f.GetSelectedInput()); + } + listBoxAdditionalInputs.DataSource = null; + listBoxAdditionalInputs.DataSource = additionalInputs; + } + + private void buttonRemoveInput_Click(object sender, EventArgs e) + { + InputDevice item = (InputDevice)listBoxAdditionalInputs.SelectedItem; + if (item != null) + { + additionalInputs.Remove(item); + listBoxAdditionalInputs.DataSource = null; + listBoxAdditionalInputs.DataSource = additionalInputs; + } + } + + private void textBoxName_TextChanged(object sender, EventArgs e) + { + + } + + private void comboBoxInputDevice_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void comboBoxInputHandling_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void comboBoxPerformanceMetric_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void checkBoxEnableRegion_CheckedChanged(object sender, EventArgs e) + { + groupBox1.Enabled = checkBoxEnableRegion.Checked; + } + + private void comboBoxShape_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void comboBoxPosX_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxPosX.SelectedIndex) + { + case 0: + labelPosX1.Text = "Value"; + labelPosX2.Visible = false; + numericUpDownPosX1.Visible = false; + break; + case 1: + labelPosX1.Text = "Start"; + labelPosX2.Visible = true; + labelPosX2.Text = "End"; + numericUpDownPosX1.Visible = true; + break; + case 2: + labelPosX1.Text = "Min"; + labelPosX2.Visible = true; + labelPosX2.Text = "Max"; + numericUpDownPosX1.Visible = true; + break; + } + } + + private void comboBoxPosY_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxPosY.SelectedIndex) + { + case 0: + labelPosY1.Text = "Value"; + labelPosY2.Visible = false; + numericUpDownPosY1.Visible = false; + break; + case 1: + labelPosY1.Text = "Start"; + labelPosY2.Visible = true; + labelPosY2.Text = "End"; + numericUpDownPosY1.Visible = true; + break; + case 2: + labelPosY1.Text = "Min"; + labelPosY2.Visible = true; + labelPosY2.Text = "Max"; + numericUpDownPosY1.Visible = true; + break; + } + } + + private void comboBoxSizeX_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSizeX.SelectedIndex) + { + case 0: + labelSizeX1.Text = "Value"; + labelSizeX2.Visible = false; + numericUpDownSizeX1.Visible = false; + break; + case 1: + labelSizeX1.Text = "Start"; + labelSizeX2.Visible = true; + labelSizeX2.Text = "End"; + numericUpDownSizeX1.Visible = true; + break; + case 2: + labelSizeX1.Text = "Min"; + labelSizeX2.Visible = true; + labelSizeX2.Text = "Max"; + numericUpDownSizeX1.Visible = true; + break; + } + } + + private void comboBoxSizeY_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSizeY.SelectedIndex) + { + case 0: + labelSizeY1.Text = "Value"; + labelSizeY2.Visible = false; + numericUpDownSizeY1.Visible = false; + break; + case 1: + labelSizeY1.Text = "Start"; + labelSizeY2.Visible = true; + labelSizeY2.Text = "End"; + numericUpDownSizeY1.Visible = true; + break; + case 2: + labelSizeY1.Text = "Min"; + labelSizeY2.Visible = true; + labelSizeY2.Text = "Max"; + numericUpDownSizeY1.Visible = true; + break; + } + } + + private void numericUpDownPosX1_ValueChanged(object sender, EventArgs e) + { + + } + + private void numericUpDownPosX2_ValueChanged(object sender, EventArgs e) + { + + } + + private void numericUpDownPosY1_ValueChanged(object sender, EventArgs e) + { + + } + + private void numericUpDownPosY2_ValueChanged(object sender, EventArgs e) + { + + } + + private void numericUpDownSizeX1_ValueChanged(object sender, EventArgs e) + { + + } + + private void numericUpDownSizeX2_ValueChanged(object sender, EventArgs e) + { + + } + + private void numericUpDownSizeY1_ValueChanged(object sender, EventArgs e) + { + + } + + private void numericUpDownSizeY2_ValueChanged(object sender, EventArgs e) + { + + } + + + private void comboBoxPosZ_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxPosZ.SelectedIndex) + { + case 0: + labelPosZ1.Text = "Value"; + labelPosZ2.Visible = false; + numericUpDownPosZ1.Visible = false; + break; + case 1: + labelPosZ1.Text = "Start"; + labelPosZ2.Visible = true; + labelPosZ2.Text = "End"; + numericUpDownPosZ1.Visible = true; + break; + case 2: + labelPosZ1.Text = "Min"; + labelPosZ2.Visible = true; + labelPosZ2.Text = "Max"; + numericUpDownPosZ1.Visible = true; + break; + } + } + + private void comboBoxSizeZ_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxSizeZ.SelectedIndex) + { + case 0: + labelSizeZ1.Text = "Value"; + labelSizeZ2.Visible = false; + numericUpDownSizeZ1.Visible = false; + break; + case 1: + labelSizeZ1.Text = "Start"; + labelSizeZ2.Visible = true; + labelSizeZ2.Text = "End"; + numericUpDownSizeZ1.Visible = true; + break; + case 2: + labelSizeZ1.Text = "Min"; + labelSizeZ2.Visible = true; + labelSizeZ2.Text = "Max"; + numericUpDownSizeZ1.Visible = true; + break; + } + } + + private void comboBoxEndCondition_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxEndCondition.SelectedIndex) + { + case 0: // Button Press + labelEndSeconds.Visible = false; + numericUpDownEndSeconds.Visible = false; + comboBoxEndButton.Visible = true; + break; + case 1: // Time Limit + labelEndSeconds.Visible = true; + numericUpDownEndSeconds.Visible = true; + comboBoxEndButton.Visible = false; + break; + } + } + + private void Form3DTask_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void Form3DTask_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + + } +} \ No newline at end of file diff --git a/Form3DTask.resx b/Form3DTask.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/Form3DTask.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormAbout.Designer.cs b/FormAbout.Designer.cs new file mode 100644 index 0000000..9936eef --- /dev/null +++ b/FormAbout.Designer.cs @@ -0,0 +1,218 @@ +namespace TheraWii +{ + partial class FormAbout + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAbout)); + this.labelVersion = new System.Windows.Forms.Label(); + this.labelCopyright = new System.Windows.Forms.Label(); + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.logoPictureBox = new System.Windows.Forms.PictureBox(); + this.labelProductName = new System.Windows.Forms.Label(); + this.textBoxDescription = new System.Windows.Forms.TextBox(); + this.linkLabel1 = new System.Windows.Forms.LinkLabel(); + this.label1 = new System.Windows.Forms.Label(); + this.okButton = new System.Windows.Forms.Button(); + this.linkLabel2 = new System.Windows.Forms.LinkLabel(); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // labelVersion + // + this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelVersion.Location = new System.Drawing.Point(285, 30); + this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(332, 17); + this.labelVersion.TabIndex = 0; + this.labelVersion.Text = "Version 1.0 "; + this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelCopyright + // + this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelCopyright.Location = new System.Drawing.Point(285, 70); + this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.Size = new System.Drawing.Size(332, 17); + this.labelCopyright.TabIndex = 21; + this.labelCopyright.Text = "Copyright: GNU GPLv3"; + this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 2; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 45F)); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 55F)); + this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); + this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); + this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); + this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 3); + this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); + this.tableLayoutPanel.Controls.Add(this.linkLabel1, 1, 2); + this.tableLayoutPanel.Controls.Add(this.label1, 1, 5); + this.tableLayoutPanel.Controls.Add(this.okButton, 1, 7); + this.tableLayoutPanel.Controls.Add(this.linkLabel2, 1, 6); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.Location = new System.Drawing.Point(0, 0); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 8; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 45F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(620, 489); + this.tableLayoutPanel.TabIndex = 1; + // + // logoPictureBox + // + this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); + this.logoPictureBox.Location = new System.Drawing.Point(3, 3); + this.logoPictureBox.Name = "logoPictureBox"; + this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 5); + this.logoPictureBox.Size = new System.Drawing.Size(273, 388); + this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; + this.logoPictureBox.TabIndex = 12; + this.logoPictureBox.TabStop = false; + // + // labelProductName + // + this.labelProductName.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelProductName.Location = new System.Drawing.Point(282, 0); + this.labelProductName.MaximumSize = new System.Drawing.Size(250, 25); + this.labelProductName.MinimumSize = new System.Drawing.Size(250, 25); + this.labelProductName.Name = "labelProductName"; + this.labelProductName.Padding = new System.Windows.Forms.Padding(0, 5, 0, 0); + this.labelProductName.Size = new System.Drawing.Size(250, 25); + this.labelProductName.TabIndex = 19; + this.labelProductName.Text = "TheraWii"; + this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // textBoxDescription + // + this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxDescription.Location = new System.Drawing.Point(285, 93); + this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); + this.textBoxDescription.Multiline = true; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxDescription.Size = new System.Drawing.Size(332, 298); + this.textBoxDescription.TabIndex = 23; + this.textBoxDescription.TabStop = false; + this.textBoxDescription.Text = resources.GetString("textBoxDescription.Text"); + // + // linkLabel1 + // + this.linkLabel1.AutoSize = true; + this.linkLabel1.Location = new System.Drawing.Point(285, 50); + this.linkLabel1.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.linkLabel1.Name = "linkLabel1"; + this.linkLabel1.Size = new System.Drawing.Size(267, 13); + this.linkLabel1.TabIndex = 25; + this.linkLabel1.TabStop = true; + this.linkLabel1.Text = "http://www.cs.drexel.edu/~dpn52/Therawii/index.html"; + this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); + // + // label1 + // + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(285, 394); + this.label1.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.label1.MaximumSize = new System.Drawing.Size(250, 39); + this.label1.MinimumSize = new System.Drawing.Size(250, 39); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(250, 39); + this.label1.TabIndex = 27; + this.label1.Text = "WiiUse library is licensed under the terms of\nGNU GPLv3"; + this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // okButton + // + this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.okButton.Location = new System.Drawing.Point(542, 462); + this.okButton.Name = "okButton"; + this.okButton.Size = new System.Drawing.Size(75, 24); + this.okButton.TabIndex = 24; + this.okButton.Text = "&OK"; + this.okButton.Click += new System.EventHandler(this.okButton_Click); + // + // linkLabel2 + // + this.linkLabel2.AutoSize = true; + this.linkLabel2.Location = new System.Drawing.Point(285, 439); + this.linkLabel2.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.linkLabel2.Name = "linkLabel2"; + this.linkLabel2.Size = new System.Drawing.Size(112, 13); + this.linkLabel2.TabIndex = 28; + this.linkLabel2.TabStop = true; + this.linkLabel2.Text = "http://www.wiiuse.net"; + // + // FormAbout + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(620, 489); + this.Controls.Add(this.tableLayoutPanel); + this.KeyPreview = true; + this.Name = "FormAbout"; + this.Text = "About"; + this.Load += new System.EventHandler(this.FormAbout_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormAbout_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormAbout_FormClosing); + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.Label labelVersion; + private System.Windows.Forms.Label labelCopyright; + private System.Windows.Forms.Button okButton; + private System.Windows.Forms.TextBox textBoxDescription; + private System.Windows.Forms.Label labelProductName; + private System.Windows.Forms.LinkLabel linkLabel1; + private System.Windows.Forms.PictureBox logoPictureBox; + private System.Windows.Forms.LinkLabel linkLabel2; + private System.Windows.Forms.Label label1; + + } +} \ No newline at end of file diff --git a/FormAbout.cs b/FormAbout.cs new file mode 100644 index 0000000..8f40f75 --- /dev/null +++ b/FormAbout.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormAbout : Form + { + private static Point prevLocation; + public FormAbout() + { + InitializeComponent(); + } + + private void FormAbout_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + okButton_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + okButton_Click(this, new EventArgs()); + } + } + + private void FormAbout_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormAbout_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + + private void okButton_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + System.Diagnostics.Process.Start(linkLabel1.Text); + } + } +} \ No newline at end of file diff --git a/FormAbout.resx b/FormAbout.resx new file mode 100755 index 0000000..3ccecf5 --- /dev/null +++ b/FormAbout.resx @@ -0,0 +1,982 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + + + + TheraWii is a software application that gives Physical Therapy clinicians and researchers the ability to use commodity motion capture devices to gather quantatative data about patient movement and create customized interactions. + +Copyright (C) 2009 Tim Chagnon, Andrew Meinert, Don Naegely, Joe Kokinda + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. + + \ No newline at end of file diff --git a/FormAddDevices.Designer.cs b/FormAddDevices.Designer.cs new file mode 100644 index 0000000..d925a96 --- /dev/null +++ b/FormAddDevices.Designer.cs @@ -0,0 +1,140 @@ +namespace TheraWii +{ + partial class FormAddDevices + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.labelSelectTask = new System.Windows.Forms.Label(); + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.labelWarning = new System.Windows.Forms.Label(); + this.listViewInputs = new System.Windows.Forms.ListView(); + this.SuspendLayout(); + // + // labelSelectTask + // + this.labelSelectTask.AutoSize = true; + this.labelSelectTask.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelSelectTask.Location = new System.Drawing.Point(22, 9); + this.labelSelectTask.MaximumSize = new System.Drawing.Size(275, 0); + this.labelSelectTask.MinimumSize = new System.Drawing.Size(275, 0); + this.labelSelectTask.Name = "labelSelectTask"; + this.labelSelectTask.Size = new System.Drawing.Size(275, 17); + this.labelSelectTask.TabIndex = 1; + this.labelSelectTask.Text = "This therapy requires the following inputs:"; + // + // buttonOK + // + this.buttonOK.Location = new System.Drawing.Point(70, 264); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 2; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.buttonAdd_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(173, 264); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 3; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(22, 171); + this.label1.MinimumSize = new System.Drawing.Size(275, 0); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(275, 17); + this.label1.TabIndex = 4; + this.label1.Text = "Please connect these devices in Windows."; + // + // labelWarning + // + this.labelWarning.AutoSize = true; + this.labelWarning.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelWarning.ForeColor = System.Drawing.Color.Red; + this.labelWarning.Location = new System.Drawing.Point(22, 197); + this.labelWarning.MaximumSize = new System.Drawing.Size(275, 0); + this.labelWarning.MinimumSize = new System.Drawing.Size(275, 0); + this.labelWarning.Name = "labelWarning"; + this.labelWarning.Size = new System.Drawing.Size(275, 51); + this.labelWarning.TabIndex = 5; + this.labelWarning.Text = "The devices in red were not detected. Ensure they are detected by Windows, then" + + " click OK."; + this.labelWarning.Visible = false; + // + // listViewInputs + // + this.listViewInputs.Location = new System.Drawing.Point(25, 38); + this.listViewInputs.MinimumSize = new System.Drawing.Size(268, 121); + this.listViewInputs.Name = "listViewInputs"; + this.listViewInputs.Size = new System.Drawing.Size(268, 121); + this.listViewInputs.TabIndex = 6; + this.listViewInputs.UseCompatibleStateImageBehavior = false; + this.listViewInputs.View = System.Windows.Forms.View.List; + // + // FormAddDevices + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(318, 299); + this.Controls.Add(this.listViewInputs); + this.Controls.Add(this.labelWarning); + this.Controls.Add(this.label1); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOK); + this.Controls.Add(this.labelSelectTask); + this.KeyPreview = true; + this.Name = "FormAddDevices"; + this.Text = "Device Connect"; + this.Load += new System.EventHandler(this.FormAddDevices_Load); + this.DoubleClick += new System.EventHandler(this.FormAddDevices_DoubleClick); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormAddDevices_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormAddDevices_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label labelSelectTask; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label labelWarning; + private System.Windows.Forms.ListView listViewInputs; + } +} \ No newline at end of file diff --git a/FormAddDevices.cs b/FormAddDevices.cs new file mode 100644 index 0000000..54c311f --- /dev/null +++ b/FormAddDevices.cs @@ -0,0 +1,95 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormAddDevices : Form + { + private static Point prevLocation; + public FormAddDevices(List inputs) + { + InitializeComponent(); + foreach (WiiType wi in inputs) + { + ListViewItem lvi = new ListViewItem(InputDevice.WiiTypeString[(int)wi]); + lvi.Tag = wi; + listViewInputs.Items.Add(lvi); + } + + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + bool allConnected = true; + foreach (ListViewItem lvi in listViewInputs.Items) + { + // Query WiiUse for the device - assuming mouse is connected + WiiUse.Connect(); + if ((WiiType)lvi.Tag != WiiType.Mouse) + { + if (!WiiUse.IsConnected((WiiType)lvi.Tag)) + { + allConnected = false; + lvi.ForeColor = System.Drawing.Color.Red; + } + } + } + if (allConnected) + { + this.DialogResult = DialogResult.OK; + this.Close(); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + private void FormAddDevices_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonAdd_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void FormAddDevices_DoubleClick(object sender, EventArgs e) + { + buttonAdd_Click(sender, e); + } + + private void FormAddDevices_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormAddDevices_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + } +} \ No newline at end of file diff --git a/FormAddDevices.resx b/FormAddDevices.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormAddDevices.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormAddInput.Designer.cs b/FormAddInput.Designer.cs new file mode 100644 index 0000000..d2c6fea --- /dev/null +++ b/FormAddInput.Designer.cs @@ -0,0 +1,118 @@ +namespace TheraWii +{ + partial class FormAddInputs + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.listBoxInputs = new System.Windows.Forms.ListBox(); + this.labelSelectTask = new System.Windows.Forms.Label(); + this.buttonAdd = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // listBoxInputs + // + this.listBoxInputs.FormattingEnabled = true; + this.listBoxInputs.Location = new System.Drawing.Point(32, 23); + this.listBoxInputs.Name = "listBoxInputs"; + this.listBoxInputs.Size = new System.Drawing.Size(156, 95); + this.listBoxInputs.TabIndex = 0; + this.listBoxInputs.SelectedIndexChanged += new System.EventHandler(this.listBoxInputs_SelectedIndexChanged); + this.listBoxInputs.DoubleClick += new System.EventHandler(this.listBoxInputs_DoubleClick); + // + // labelSelectTask + // + this.labelSelectTask.AutoSize = true; + this.labelSelectTask.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelSelectTask.Location = new System.Drawing.Point(63, 0); + this.labelSelectTask.Name = "labelSelectTask"; + this.labelSelectTask.Size = new System.Drawing.Size(95, 20); + this.labelSelectTask.TabIndex = 1; + this.labelSelectTask.Text = "Select Input"; + // + // buttonAdd + // + this.buttonAdd.Location = new System.Drawing.Point(32, 124); + this.buttonAdd.Name = "buttonAdd"; + this.buttonAdd.Size = new System.Drawing.Size(75, 23); + this.buttonAdd.TabIndex = 2; + this.buttonAdd.Text = "Add"; + this.buttonAdd.UseVisualStyleBackColor = true; + this.buttonAdd.Click += new System.EventHandler(this.buttonAdd_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(113, 124); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 3; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.labelSelectTask); + this.panel1.Controls.Add(this.buttonCancel); + this.panel1.Controls.Add(this.listBoxInputs); + this.panel1.Controls.Add(this.buttonAdd); + this.panel1.Location = new System.Drawing.Point(12, 12); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(221, 154); + this.panel1.TabIndex = 4; + // + // FormAddInputs + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(246, 176); + this.Controls.Add(this.panel1); + this.KeyPreview = true; + this.Name = "FormAddInputs"; + this.Text = "NewTask"; + this.Load += new System.EventHandler(this.FormAddInputs_Load); + this.DoubleClick += new System.EventHandler(this.listBoxInputs_DoubleClick); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormAddInputs_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormAddInputs_FormClosing); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListBox listBoxInputs; + private System.Windows.Forms.Label labelSelectTask; + private System.Windows.Forms.Button buttonAdd; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/FormAddInput.cs b/FormAddInput.cs new file mode 100644 index 0000000..515e79f --- /dev/null +++ b/FormAddInput.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormAddInputs : Form + { + private static Point prevLocation; + public FormAddInputs(InputDevice[] inputs) + { + InitializeComponent(); + listBoxInputs.DataSource = inputs; + } + + private void buttonAdd_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + public InputDevice GetSelectedInput() + { + return (InputDevice)listBoxInputs.SelectedItem; + } + + private void listBoxInputs_SelectedIndexChanged(object sender, EventArgs e) + { + } + + private void FormAddInputs_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonAdd_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void listBoxInputs_DoubleClick(object sender, EventArgs e) + { + buttonAdd_Click(sender, e); + } + + private void FormAddInputs_Load(object sender, EventArgs e) + { + if (prevLocation == null || (prevLocation.X == 0 && prevLocation.Y == 0)) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormAddInputs_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + } +} \ No newline at end of file diff --git a/FormAddInput.resx b/FormAddInput.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormAddInput.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormDialogTask.Designer.cs b/FormDialogTask.Designer.cs new file mode 100644 index 0000000..efaad3b --- /dev/null +++ b/FormDialogTask.Designer.cs @@ -0,0 +1,228 @@ +namespace TheraWii +{ + partial class FormDialogTask + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.TaskTitle = new System.Windows.Forms.Label(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.textBoxDisplayText = new System.Windows.Forms.RichTextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.labelEndSeconds = new System.Windows.Forms.Label(); + this.numericUpDownEndSeconds = new System.Windows.Forms.NumericUpDown(); + this.comboBoxEndButton = new System.Windows.Forms.ComboBox(); + this.comboBoxEndCondition = new System.Windows.Forms.ComboBox(); + this.label4 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownEndSeconds)).BeginInit(); + this.SuspendLayout(); + // + // TaskTitle + // + this.TaskTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TaskTitle.AutoSize = true; + this.TaskTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TaskTitle.Location = new System.Drawing.Point(95, 9); + this.TaskTitle.Name = "TaskTitle"; + this.TaskTitle.Size = new System.Drawing.Size(178, 24); + this.TaskTitle.TabIndex = 0; + this.TaskTitle.Text = "Dialog Task Options"; + this.TaskTitle.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(98, 50); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(175, 20); + this.textBoxName.TabIndex = 1; + this.textBoxName.Text = "Intro"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(54, 53); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Name:"; + // + // textBoxDisplayText + // + this.textBoxDisplayText.Location = new System.Drawing.Point(98, 76); + this.textBoxDisplayText.Name = "textBoxDisplayText"; + this.textBoxDisplayText.Size = new System.Drawing.Size(260, 98); + this.textBoxDisplayText.TabIndex = 5; + this.textBoxDisplayText.Text = "Welcome!\n\nPress A to continue."; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(24, 79); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(68, 13); + this.label3.TabIndex = 6; + this.label3.Text = "Display Text:"; + // + // buttonOk + // + this.buttonOk.Location = new System.Drawing.Point(207, 241); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 10; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(288, 241); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 11; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // labelEndSeconds + // + this.labelEndSeconds.AutoSize = true; + this.labelEndSeconds.Location = new System.Drawing.Point(169, 210); + this.labelEndSeconds.Name = "labelEndSeconds"; + this.labelEndSeconds.Size = new System.Drawing.Size(49, 13); + this.labelEndSeconds.TabIndex = 38; + this.labelEndSeconds.Text = "Seconds"; + this.labelEndSeconds.Visible = false; + // + // numericUpDownEndSeconds + // + this.numericUpDownEndSeconds.Location = new System.Drawing.Point(98, 207); + this.numericUpDownEndSeconds.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.numericUpDownEndSeconds.Name = "numericUpDownEndSeconds"; + this.numericUpDownEndSeconds.Size = new System.Drawing.Size(65, 20); + this.numericUpDownEndSeconds.TabIndex = 37; + this.numericUpDownEndSeconds.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + this.numericUpDownEndSeconds.Visible = false; + // + // comboBoxEndButton + // + this.comboBoxEndButton.FormattingEnabled = true; + this.comboBoxEndButton.Items.AddRange(new object[] { + "A", + "B", + "Home", + "+", + "-", + "1", + "2", + "Up", + "Down", + "Left", + "Right"}); + this.comboBoxEndButton.Location = new System.Drawing.Point(98, 207); + this.comboBoxEndButton.Name = "comboBoxEndButton"; + this.comboBoxEndButton.Size = new System.Drawing.Size(173, 21); + this.comboBoxEndButton.TabIndex = 36; + this.comboBoxEndButton.Text = "A"; + // + // comboBoxEndCondition + // + this.comboBoxEndCondition.FormattingEnabled = true; + this.comboBoxEndCondition.Items.AddRange(new object[] { + "Button Press", + "Time Limit"}); + this.comboBoxEndCondition.Location = new System.Drawing.Point(98, 180); + this.comboBoxEndCondition.Name = "comboBoxEndCondition"; + this.comboBoxEndCondition.Size = new System.Drawing.Size(173, 21); + this.comboBoxEndCondition.TabIndex = 35; + this.comboBoxEndCondition.Text = "Button Press"; + this.comboBoxEndCondition.SelectedIndexChanged += new System.EventHandler(this.comboBoxEndCondition_SelectedIndexChanged); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(16, 183); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(76, 13); + this.label4.TabIndex = 34; + this.label4.Text = "End Condition:"; + // + // FormDialogTask + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(375, 278); + this.Controls.Add(this.labelEndSeconds); + this.Controls.Add(this.numericUpDownEndSeconds); + this.Controls.Add(this.comboBoxEndButton); + this.Controls.Add(this.comboBoxEndCondition); + this.Controls.Add(this.label4); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBoxDisplayText); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.TaskTitle); + this.KeyPreview = true; + this.Name = "FormDialogTask"; + this.Text = "Edit Dialog Task"; + this.Load += new System.EventHandler(this.FormDialogTask_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormDialogTask_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormDialogTask_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownEndSeconds)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label TaskTitle; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.RichTextBox textBoxDisplayText; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Label labelEndSeconds; + private System.Windows.Forms.NumericUpDown numericUpDownEndSeconds; + private System.Windows.Forms.ComboBox comboBoxEndButton; + private System.Windows.Forms.ComboBox comboBoxEndCondition; + private System.Windows.Forms.Label label4; + } +} \ No newline at end of file diff --git a/FormDialogTask.cs b/FormDialogTask.cs new file mode 100644 index 0000000..c7afaee --- /dev/null +++ b/FormDialogTask.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormDialogTask : Form + { + private DialogTask task; + private ButtonEndCondition buttonEnd; + private TimeLimitEndCondition timeEnd; + private static Point prevLocation; + + public FormDialogTask(DialogTask t) + { + InitializeComponent(); + comboBoxEndButton.DataSource = ButtonEndCondition.ButtonText; + + task = t; + textBoxName.Text = task.Name; + textBoxDisplayText.Text = task.DisplayText; + + // End Condition Loading + if (task.endCondition.GetType() == typeof(ButtonEndCondition)) + { + buttonEnd = (ButtonEndCondition)task.endCondition; + timeEnd = new TimeLimitEndCondition(); + comboBoxEndCondition.SelectedIndex = 0; + + } + else + { + buttonEnd = new ButtonEndCondition(); + timeEnd = (TimeLimitEndCondition)task.endCondition; + comboBoxEndCondition.SelectedIndex = 1; + } + numericUpDownEndSeconds.Value = (decimal)timeEnd.TimeLimit; + comboBoxEndButton.SelectedIndex = (int)buttonEnd.Button; + } + + private void buttonOk_Click(object sender, EventArgs e) + { + task.Name = textBoxName.Text; + task.DisplayText = textBoxDisplayText.Text; + + // Save end condition + timeEnd.TimeLimit = (double)numericUpDownEndSeconds.Value; + buttonEnd.Button = (Button)comboBoxEndButton.SelectedIndex; + switch (comboBoxEndCondition.SelectedIndex) + { + case 0: // Button Press + task.endCondition = buttonEnd; + break; + case 1: // Time Limit + task.endCondition = timeEnd; + break; + } + + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + private void comboBoxEndCondition_SelectedIndexChanged(object sender, EventArgs e) + { + switch (comboBoxEndCondition.SelectedIndex) + { + case 0: // Button Press + labelEndSeconds.Visible = false; + numericUpDownEndSeconds.Visible = false; + comboBoxEndButton.Visible = true; + break; + case 1: // Time Limit + labelEndSeconds.Visible = true; + numericUpDownEndSeconds.Visible = true; + comboBoxEndButton.Visible = false; + break; + } + } + + private void FormDialogTask_KeyPress(object sender, KeyPressEventArgs e) + { + if (this.ActiveControl != textBoxDisplayText && e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonOk_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void FormDialogTask_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormDialogTask_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + + } +} \ No newline at end of file diff --git a/FormDialogTask.resx b/FormDialogTask.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormDialogTask.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormMain.Designer.cs b/FormMain.Designer.cs new file mode 100644 index 0000000..b372a88 --- /dev/null +++ b/FormMain.Designer.cs @@ -0,0 +1,945 @@ +namespace TheraWii +{ + partial class FormMain + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.TreeNode treeNode6 = new System.Windows.Forms.TreeNode("Intro (Dialog)"); + System.Windows.Forms.TreeNode treeNode7 = new System.Windows.Forms.TreeNode("Static Trace (2D)"); + System.Windows.Forms.TreeNode treeNode8 = new System.Windows.Forms.TreeNode("Dynamic (2D)"); + System.Windows.Forms.TreeNode treeNode9 = new System.Windows.Forms.TreeNode("Moving Regions (Repeat)", new System.Windows.Forms.TreeNode[] { + treeNode8}); + System.Windows.Forms.TreeNode treeNode10 = new System.Windows.Forms.TreeNode("End (Dialog)"); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.importTherapyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exportTherapyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.importProfileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exportProfileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.quitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.editToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.copyTherapyMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.copyTaskMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.pasteMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutTheraWiiToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.tabProfile = new System.Windows.Forms.TabPage(); + this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this.listViewProfiles = new System.Windows.Forms.ListView(); + this.ProfName = new System.Windows.Forms.ColumnHeader(); + this.CreateDate = new System.Windows.Forms.ColumnHeader(); + this.NumSessions = new System.Windows.Forms.ColumnHeader(); + this.buttonEditProfile = new System.Windows.Forms.Button(); + this.buttonDeleteProfile = new System.Windows.Forms.Button(); + this.buttonAddProfile = new System.Windows.Forms.Button(); + this.label1 = new System.Windows.Forms.Label(); + this.buttonMetrics = new System.Windows.Forms.Button(); + this.listViewSessions = new System.Windows.Forms.ListView(); + this.columnHeader1 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader2 = new System.Windows.Forms.ColumnHeader(); + this.columnHeader3 = new System.Windows.Forms.ColumnHeader(); + this.buttonViewSession = new System.Windows.Forms.Button(); + this.buttonExportSession = new System.Windows.Forms.Button(); + this.buttonDeleteSession = new System.Windows.Forms.Button(); + this.label2 = new System.Windows.Forms.Label(); + this.tabWorkflows = new System.Windows.Forms.TabPage(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.buttonPlay = new System.Windows.Forms.Button(); + this.buttonDeleteTherapy = new System.Windows.Forms.Button(); + this.buttonAddTherapy = new System.Windows.Forms.Button(); + this.labelTherapy = new System.Windows.Forms.Label(); + this.listTherapies = new System.Windows.Forms.ListBox(); + this.treeViewTasks = new System.Windows.Forms.TreeView(); + this.labelTasks = new System.Windows.Forms.Label(); + this.buttonMoveDown = new System.Windows.Forms.Button(); + this.buttonMoveUp = new System.Windows.Forms.Button(); + this.buttonEditTask = new System.Windows.Forms.Button(); + this.buttonDeleteTask = new System.Windows.Forms.Button(); + this.buttonAddTask = new System.Windows.Forms.Button(); + this.tabs = new System.Windows.Forms.TabControl(); + this.button2 = new System.Windows.Forms.Button(); + this.button3 = new System.Windows.Forms.Button(); + this.button4 = new System.Windows.Forms.Button(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.labelProfiles = new System.Windows.Forms.Label(); + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.Workflow = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.DateTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.buttonOpen = new System.Windows.Forms.Button(); + this.buttonExport = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.labelSessions = new System.Windows.Forms.Label(); + this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.playFullscreenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.menuStrip1.SuspendLayout(); + this.tabProfile.SuspendLayout(); + this.splitContainer2.Panel1.SuspendLayout(); + this.splitContainer2.Panel2.SuspendLayout(); + this.splitContainer2.SuspendLayout(); + this.tabWorkflows.SuspendLayout(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.tabs.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.editToolStripMenuItem, + this.helpToolStripMenuItem, + this.viewToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(753, 24); + this.menuStrip1.TabIndex = 1; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.importTherapyToolStripMenuItem, + this.exportTherapyToolStripMenuItem, + this.toolStripSeparator2, + this.importProfileToolStripMenuItem, + this.exportProfileToolStripMenuItem, + this.toolStripSeparator1, + this.quitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // importTherapyToolStripMenuItem + // + this.importTherapyToolStripMenuItem.Name = "importTherapyToolStripMenuItem"; + this.importTherapyToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.importTherapyToolStripMenuItem.Text = "Import Therapy..."; + this.importTherapyToolStripMenuItem.Click += new System.EventHandler(this.importTherapyToolStripMenuItem_Click); + // + // exportTherapyToolStripMenuItem + // + this.exportTherapyToolStripMenuItem.Name = "exportTherapyToolStripMenuItem"; + this.exportTherapyToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.exportTherapyToolStripMenuItem.Text = "Export Therapy..."; + this.exportTherapyToolStripMenuItem.Click += new System.EventHandler(this.exportTherapyToolStripMenuItem_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(162, 6); + // + // importProfileToolStripMenuItem + // + this.importProfileToolStripMenuItem.Name = "importProfileToolStripMenuItem"; + this.importProfileToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.importProfileToolStripMenuItem.Text = "Import Profile..."; + this.importProfileToolStripMenuItem.Click += new System.EventHandler(this.importProfileToolStripMenuItem_Click); + // + // exportProfileToolStripMenuItem + // + this.exportProfileToolStripMenuItem.Name = "exportProfileToolStripMenuItem"; + this.exportProfileToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.exportProfileToolStripMenuItem.Text = "Export Profile..."; + this.exportProfileToolStripMenuItem.Click += new System.EventHandler(this.exportProfileToolStripMenuItem_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(162, 6); + // + // quitToolStripMenuItem + // + this.quitToolStripMenuItem.Name = "quitToolStripMenuItem"; + this.quitToolStripMenuItem.Size = new System.Drawing.Size(165, 22); + this.quitToolStripMenuItem.Text = "Quit"; + this.quitToolStripMenuItem.Click += new System.EventHandler(this.quitToolStripMenuItem_Click); + // + // editToolStripMenuItem + // + this.editToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.copyTherapyMenuItem, + this.toolStripSeparator3, + this.copyTaskMenuItem, + this.toolStripSeparator4, + this.pasteMenuItem}); + this.editToolStripMenuItem.Name = "editToolStripMenuItem"; + this.editToolStripMenuItem.Size = new System.Drawing.Size(39, 20); + this.editToolStripMenuItem.Text = "Edit"; + this.editToolStripMenuItem.DropDownOpening += new System.EventHandler(this.editToolStripMenuItem_DropDownOpening); + // + // copyTherapyMenuItem + // + this.copyTherapyMenuItem.Name = "copyTherapyMenuItem"; + this.copyTherapyMenuItem.Size = new System.Drawing.Size(148, 22); + this.copyTherapyMenuItem.Text = "Copy Therapy"; + this.copyTherapyMenuItem.Click += new System.EventHandler(this.copyTherapyMenuItem_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(145, 6); + // + // copyTaskMenuItem + // + this.copyTaskMenuItem.Name = "copyTaskMenuItem"; + this.copyTaskMenuItem.Size = new System.Drawing.Size(148, 22); + this.copyTaskMenuItem.Text = "Copy Task"; + this.copyTaskMenuItem.Click += new System.EventHandler(this.copyToolStripMenuItem_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(145, 6); + // + // pasteMenuItem + // + this.pasteMenuItem.Name = "pasteMenuItem"; + this.pasteMenuItem.Size = new System.Drawing.Size(148, 22); + this.pasteMenuItem.Text = "Paste"; + this.pasteMenuItem.Click += new System.EventHandler(this.pasteMenuItem_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.aboutTheraWiiToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // aboutTheraWiiToolStripMenuItem + // + this.aboutTheraWiiToolStripMenuItem.Name = "aboutTheraWiiToolStripMenuItem"; + this.aboutTheraWiiToolStripMenuItem.Size = new System.Drawing.Size(157, 22); + this.aboutTheraWiiToolStripMenuItem.Text = "About TheraWii"; + this.aboutTheraWiiToolStripMenuItem.Click += new System.EventHandler(this.aboutTheraWiiToolStripMenuItem_Click); + // + // tabProfile + // + this.tabProfile.Controls.Add(this.splitContainer2); + this.tabProfile.Location = new System.Drawing.Point(4, 22); + this.tabProfile.Name = "tabProfile"; + this.tabProfile.Padding = new System.Windows.Forms.Padding(3); + this.tabProfile.Size = new System.Drawing.Size(744, 412); + this.tabProfile.TabIndex = 1; + this.tabProfile.Text = "Profile Management"; + this.tabProfile.UseVisualStyleBackColor = true; + // + // splitContainer2 + // + this.splitContainer2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer2.Location = new System.Drawing.Point(3, 3); + this.splitContainer2.Name = "splitContainer2"; + // + // splitContainer2.Panel1 + // + this.splitContainer2.Panel1.Controls.Add(this.listViewProfiles); + this.splitContainer2.Panel1.Controls.Add(this.buttonEditProfile); + this.splitContainer2.Panel1.Controls.Add(this.buttonDeleteProfile); + this.splitContainer2.Panel1.Controls.Add(this.buttonAddProfile); + this.splitContainer2.Panel1.Controls.Add(this.label1); + // + // splitContainer2.Panel2 + // + this.splitContainer2.Panel2.Controls.Add(this.buttonMetrics); + this.splitContainer2.Panel2.Controls.Add(this.listViewSessions); + this.splitContainer2.Panel2.Controls.Add(this.buttonViewSession); + this.splitContainer2.Panel2.Controls.Add(this.buttonExportSession); + this.splitContainer2.Panel2.Controls.Add(this.buttonDeleteSession); + this.splitContainer2.Panel2.Controls.Add(this.label2); + this.splitContainer2.Size = new System.Drawing.Size(746, 412); + this.splitContainer2.SplitterDistance = 313; + this.splitContainer2.TabIndex = 1; + // + // listViewProfiles + // + this.listViewProfiles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewProfiles.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.ProfName, + this.CreateDate, + this.NumSessions}); + this.listViewProfiles.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listViewProfiles.FullRowSelect = true; + this.listViewProfiles.Location = new System.Drawing.Point(9, 37); + this.listViewProfiles.MultiSelect = false; + this.listViewProfiles.Name = "listViewProfiles"; + this.listViewProfiles.Size = new System.Drawing.Size(289, 340); + this.listViewProfiles.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.listViewProfiles.TabIndex = 14; + this.listViewProfiles.UseCompatibleStateImageBehavior = false; + this.listViewProfiles.View = System.Windows.Forms.View.Details; + this.listViewProfiles.SelectedIndexChanged += new System.EventHandler(this.listViewProfiles_SelectedIndexChanged); + this.listViewProfiles.DoubleClick += new System.EventHandler(this.listViewProfiles_DoubleClick); + this.listViewProfiles.Leave += new System.EventHandler(this.listViewProfiles_Leave); + this.listViewProfiles.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewProfiles_ColumnClick); + this.listViewProfiles.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listViewProfiles_KeyDown); + // + // ProfName + // + this.ProfName.Text = "Name"; + this.ProfName.Width = 110; + // + // CreateDate + // + this.CreateDate.Text = "Created"; + this.CreateDate.Width = 80; + // + // NumSessions + // + this.NumSessions.Text = "Sessions"; + this.NumSessions.TextAlign = System.Windows.Forms.HorizontalAlignment.Center; + this.NumSessions.Width = 74; + // + // buttonEditProfile + // + this.buttonEditProfile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonEditProfile.Location = new System.Drawing.Point(137, 381); + this.buttonEditProfile.Name = "buttonEditProfile"; + this.buttonEditProfile.Size = new System.Drawing.Size(50, 26); + this.buttonEditProfile.TabIndex = 13; + this.buttonEditProfile.Text = "Edit"; + this.buttonEditProfile.UseVisualStyleBackColor = true; + this.buttonEditProfile.Click += new System.EventHandler(this.buttonEditProfile_Click); + // + // buttonDeleteProfile + // + this.buttonDeleteProfile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonDeleteProfile.Location = new System.Drawing.Point(73, 381); + this.buttonDeleteProfile.Name = "buttonDeleteProfile"; + this.buttonDeleteProfile.Size = new System.Drawing.Size(50, 26); + this.buttonDeleteProfile.TabIndex = 12; + this.buttonDeleteProfile.Text = "Delete"; + this.buttonDeleteProfile.UseVisualStyleBackColor = true; + this.buttonDeleteProfile.Click += new System.EventHandler(this.buttonDeleteProfile_Click); + // + // buttonAddProfile + // + this.buttonAddProfile.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonAddProfile.Location = new System.Drawing.Point(9, 381); + this.buttonAddProfile.Name = "buttonAddProfile"; + this.buttonAddProfile.Size = new System.Drawing.Size(50, 26); + this.buttonAddProfile.TabIndex = 11; + this.buttonAddProfile.Text = "Add"; + this.buttonAddProfile.UseVisualStyleBackColor = true; + this.buttonAddProfile.Click += new System.EventHandler(this.buttonAddProfile_Click); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(7, 8); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(71, 24); + this.label1.TabIndex = 2; + this.label1.Text = "Profiles"; + // + // buttonMetrics + // + this.buttonMetrics.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonMetrics.Location = new System.Drawing.Point(317, 156); + this.buttonMetrics.Name = "buttonMetrics"; + this.buttonMetrics.Size = new System.Drawing.Size(95, 26); + this.buttonMetrics.TabIndex = 18; + this.buttonMetrics.Text = "View Metrics"; + this.buttonMetrics.UseVisualStyleBackColor = true; + this.buttonMetrics.Click += new System.EventHandler(this.buttonMetrics_Click); + // + // listViewSessions + // + this.listViewSessions.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listViewSessions.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.columnHeader1, + this.columnHeader2, + this.columnHeader3}); + this.listViewSessions.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listViewSessions.FullRowSelect = true; + this.listViewSessions.Location = new System.Drawing.Point(9, 37); + this.listViewSessions.Name = "listViewSessions"; + this.listViewSessions.Size = new System.Drawing.Size(302, 340); + this.listViewSessions.Sorting = System.Windows.Forms.SortOrder.Ascending; + this.listViewSessions.TabIndex = 17; + this.listViewSessions.UseCompatibleStateImageBehavior = false; + this.listViewSessions.View = System.Windows.Forms.View.Details; + this.listViewSessions.DoubleClick += new System.EventHandler(this.listViewSessions_DoubleClick); + this.listViewSessions.Leave += new System.EventHandler(this.listViewSessions_Leave); + this.listViewSessions.ColumnClick += new System.Windows.Forms.ColumnClickEventHandler(this.listViewSessions_ColumnClick); + this.listViewSessions.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listViewSessions_KeyDown); + // + // columnHeader1 + // + this.columnHeader1.Text = "#"; + this.columnHeader1.Width = 30; + // + // columnHeader2 + // + this.columnHeader2.Text = "Session Date"; + this.columnHeader2.Width = 133; + // + // columnHeader3 + // + this.columnHeader3.Text = "Therapy"; + this.columnHeader3.Width = 115; + // + // buttonViewSession + // + this.buttonViewSession.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonViewSession.Location = new System.Drawing.Point(317, 37); + this.buttonViewSession.Name = "buttonViewSession"; + this.buttonViewSession.Size = new System.Drawing.Size(95, 26); + this.buttonViewSession.TabIndex = 16; + this.buttonViewSession.Text = "View Session"; + this.buttonViewSession.UseVisualStyleBackColor = true; + this.buttonViewSession.Click += new System.EventHandler(this.buttonViewSession_Click); + // + // buttonExportSession + // + this.buttonExportSession.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonExportSession.Location = new System.Drawing.Point(317, 69); + this.buttonExportSession.Name = "buttonExportSession"; + this.buttonExportSession.Size = new System.Drawing.Size(95, 26); + this.buttonExportSession.TabIndex = 5; + this.buttonExportSession.Text = "Export Session"; + this.buttonExportSession.UseVisualStyleBackColor = true; + this.buttonExportSession.Click += new System.EventHandler(this.buttonExportSession_Click); + // + // buttonDeleteSession + // + this.buttonDeleteSession.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDeleteSession.Location = new System.Drawing.Point(317, 101); + this.buttonDeleteSession.Name = "buttonDeleteSession"; + this.buttonDeleteSession.Size = new System.Drawing.Size(95, 26); + this.buttonDeleteSession.TabIndex = 15; + this.buttonDeleteSession.Text = "Delete Session"; + this.buttonDeleteSession.UseVisualStyleBackColor = true; + this.buttonDeleteSession.Click += new System.EventHandler(this.buttonDeleteSession_Click); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label2.Location = new System.Drawing.Point(7, 8); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(163, 24); + this.label2.TabIndex = 3; + this.label2.Text = "Sessions in Profile"; + // + // tabWorkflows + // + this.tabWorkflows.Controls.Add(this.splitContainer1); + this.tabWorkflows.Location = new System.Drawing.Point(4, 22); + this.tabWorkflows.Name = "tabWorkflows"; + this.tabWorkflows.Padding = new System.Windows.Forms.Padding(3); + this.tabWorkflows.Size = new System.Drawing.Size(744, 412); + this.tabWorkflows.TabIndex = 0; + this.tabWorkflows.Text = "Therapy Editor"; + this.tabWorkflows.UseVisualStyleBackColor = true; + // + // splitContainer1 + // + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.splitContainer1.Location = new System.Drawing.Point(3, 3); + this.splitContainer1.Name = "splitContainer1"; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.buttonPlay); + this.splitContainer1.Panel1.Controls.Add(this.buttonDeleteTherapy); + this.splitContainer1.Panel1.Controls.Add(this.buttonAddTherapy); + this.splitContainer1.Panel1.Controls.Add(this.labelTherapy); + this.splitContainer1.Panel1.Controls.Add(this.listTherapies); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.treeViewTasks); + this.splitContainer1.Panel2.Controls.Add(this.labelTasks); + this.splitContainer1.Panel2.Controls.Add(this.buttonMoveDown); + this.splitContainer1.Panel2.Controls.Add(this.buttonMoveUp); + this.splitContainer1.Panel2.Controls.Add(this.buttonEditTask); + this.splitContainer1.Panel2.Controls.Add(this.buttonDeleteTask); + this.splitContainer1.Panel2.Controls.Add(this.buttonAddTask); + this.splitContainer1.Size = new System.Drawing.Size(746, 412); + this.splitContainer1.SplitterDistance = 313; + this.splitContainer1.TabIndex = 2; + // + // buttonPlay + // + this.buttonPlay.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonPlay.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Underline))), System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.buttonPlay.ForeColor = System.Drawing.Color.ForestGreen; + this.buttonPlay.Location = new System.Drawing.Point(137, 381); + this.buttonPlay.Name = "buttonPlay"; + this.buttonPlay.Size = new System.Drawing.Size(50, 26); + this.buttonPlay.TabIndex = 17; + this.buttonPlay.Text = "Play!"; + this.buttonPlay.UseVisualStyleBackColor = true; + this.buttonPlay.Click += new System.EventHandler(this.buttonPlay_Click); + // + // buttonDeleteTherapy + // + this.buttonDeleteTherapy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonDeleteTherapy.Location = new System.Drawing.Point(73, 381); + this.buttonDeleteTherapy.Name = "buttonDeleteTherapy"; + this.buttonDeleteTherapy.Size = new System.Drawing.Size(50, 26); + this.buttonDeleteTherapy.TabIndex = 16; + this.buttonDeleteTherapy.Text = "Delete"; + this.buttonDeleteTherapy.UseVisualStyleBackColor = true; + this.buttonDeleteTherapy.Click += new System.EventHandler(this.buttonDeleteTherapy_Click); + // + // buttonAddTherapy + // + this.buttonAddTherapy.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); + this.buttonAddTherapy.Location = new System.Drawing.Point(9, 381); + this.buttonAddTherapy.Name = "buttonAddTherapy"; + this.buttonAddTherapy.Size = new System.Drawing.Size(50, 26); + this.buttonAddTherapy.TabIndex = 15; + this.buttonAddTherapy.Text = "Add"; + this.buttonAddTherapy.UseVisualStyleBackColor = true; + this.buttonAddTherapy.Click += new System.EventHandler(this.buttonAddTherapy_Click); + // + // labelTherapy + // + this.labelTherapy.AutoSize = true; + this.labelTherapy.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelTherapy.Location = new System.Drawing.Point(7, 8); + this.labelTherapy.Name = "labelTherapy"; + this.labelTherapy.Size = new System.Drawing.Size(80, 24); + this.labelTherapy.TabIndex = 14; + this.labelTherapy.Text = "Therapy"; + // + // listTherapies + // + this.listTherapies.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listTherapies.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.listTherapies.FormattingEnabled = true; + this.listTherapies.IntegralHeight = false; + this.listTherapies.ItemHeight = 16; + this.listTherapies.Items.AddRange(new object[] { + "Default"}); + this.listTherapies.Location = new System.Drawing.Point(9, 37); + this.listTherapies.Name = "listTherapies"; + this.listTherapies.Size = new System.Drawing.Size(289, 340); + this.listTherapies.TabIndex = 0; + this.listTherapies.SelectedIndexChanged += new System.EventHandler(this.listTherapies_SelectedIndexChanged); + this.listTherapies.Leave += new System.EventHandler(this.listTherapies_Leave); + this.listTherapies.DoubleClick += new System.EventHandler(this.listTherapies_DoubleClick); + this.listTherapies.KeyDown += new System.Windows.Forms.KeyEventHandler(this.listTherapies_KeyDown); + // + // treeViewTasks + // + this.treeViewTasks.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.treeViewTasks.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.treeViewTasks.Location = new System.Drawing.Point(9, 37); + this.treeViewTasks.Name = "treeViewTasks"; + treeNode6.Name = "Node0"; + treeNode6.Text = "Intro (Dialog)"; + treeNode7.Name = "Node1"; + treeNode7.Text = "Static Trace (2D)"; + treeNode8.Name = "Node3"; + treeNode8.Text = "Dynamic (2D)"; + treeNode9.Name = "Node2"; + treeNode9.Text = "Moving Regions (Repeat)"; + treeNode10.Name = "Node4"; + treeNode10.Text = "End (Dialog)"; + this.treeViewTasks.Nodes.AddRange(new System.Windows.Forms.TreeNode[] { + treeNode6, + treeNode7, + treeNode9, + treeNode10}); + this.treeViewTasks.Size = new System.Drawing.Size(302, 340); + this.treeViewTasks.TabIndex = 12; + this.treeViewTasks.DoubleClick += new System.EventHandler(this.treeViewTasks_DoubleClick); + this.treeViewTasks.Leave += new System.EventHandler(this.treeViewTasks_Leave); + this.treeViewTasks.KeyDown += new System.Windows.Forms.KeyEventHandler(this.treeViewTasks_KeyDown); + this.treeViewTasks.Click += new System.EventHandler(this.treeViewTasks_Click); + // + // labelTasks + // + this.labelTasks.AutoSize = true; + this.labelTasks.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelTasks.Location = new System.Drawing.Point(7, 8); + this.labelTasks.Name = "labelTasks"; + this.labelTasks.Size = new System.Drawing.Size(154, 24); + this.labelTasks.TabIndex = 11; + this.labelTasks.Text = "Tasks in Therapy"; + // + // buttonMoveDown + // + this.buttonMoveDown.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonMoveDown.Location = new System.Drawing.Point(317, 231); + this.buttonMoveDown.Name = "buttonMoveDown"; + this.buttonMoveDown.Size = new System.Drawing.Size(74, 26); + this.buttonMoveDown.TabIndex = 7; + this.buttonMoveDown.Text = "Move Down"; + this.buttonMoveDown.UseVisualStyleBackColor = true; + this.buttonMoveDown.Click += new System.EventHandler(this.buttonTaskMoveDown_Click); + // + // buttonMoveUp + // + this.buttonMoveUp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonMoveUp.Location = new System.Drawing.Point(317, 199); + this.buttonMoveUp.Name = "buttonMoveUp"; + this.buttonMoveUp.Size = new System.Drawing.Size(74, 26); + this.buttonMoveUp.TabIndex = 6; + this.buttonMoveUp.Text = "Move Up"; + this.buttonMoveUp.UseVisualStyleBackColor = true; + this.buttonMoveUp.Click += new System.EventHandler(this.buttonTaskMoveUp_Click); + // + // buttonEditTask + // + this.buttonEditTask.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonEditTask.Location = new System.Drawing.Point(317, 69); + this.buttonEditTask.Name = "buttonEditTask"; + this.buttonEditTask.Size = new System.Drawing.Size(95, 26); + this.buttonEditTask.TabIndex = 5; + this.buttonEditTask.Text = "Edit Task"; + this.buttonEditTask.UseVisualStyleBackColor = true; + this.buttonEditTask.Click += new System.EventHandler(this.buttonEditTask_Click); + // + // buttonDeleteTask + // + this.buttonDeleteTask.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonDeleteTask.Location = new System.Drawing.Point(317, 101); + this.buttonDeleteTask.Name = "buttonDeleteTask"; + this.buttonDeleteTask.Size = new System.Drawing.Size(95, 26); + this.buttonDeleteTask.TabIndex = 4; + this.buttonDeleteTask.Text = "Delete Task"; + this.buttonDeleteTask.UseVisualStyleBackColor = true; + this.buttonDeleteTask.Click += new System.EventHandler(this.buttonDeleteTask_Click); + // + // buttonAddTask + // + this.buttonAddTask.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.buttonAddTask.Location = new System.Drawing.Point(317, 37); + this.buttonAddTask.Name = "buttonAddTask"; + this.buttonAddTask.Size = new System.Drawing.Size(95, 26); + this.buttonAddTask.TabIndex = 3; + this.buttonAddTask.Text = "Add Task"; + this.buttonAddTask.UseVisualStyleBackColor = true; + this.buttonAddTask.Click += new System.EventHandler(this.buttonAddTask_Click); + // + // tabs + // + this.tabs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tabs.Controls.Add(this.tabWorkflows); + this.tabs.Controls.Add(this.tabProfile); + this.tabs.Location = new System.Drawing.Point(0, 27); + this.tabs.Name = "tabs"; + this.tabs.SelectedIndex = 0; + this.tabs.Size = new System.Drawing.Size(752, 438); + this.tabs.TabIndex = 3; + this.tabs.SelectedIndexChanged += new System.EventHandler(this.tabs_SelectedIndexChanged); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(80, 385); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(35, 26); + this.button2.TabIndex = 13; + this.button2.Text = "Edit"; + this.button2.UseVisualStyleBackColor = true; + // + // button3 + // + this.button3.Location = new System.Drawing.Point(48, 385); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(26, 26); + this.button3.TabIndex = 12; + this.button3.Text = "-"; + this.button3.UseVisualStyleBackColor = true; + // + // button4 + // + this.button4.Location = new System.Drawing.Point(16, 385); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(26, 26); + this.button4.TabIndex = 11; + this.button4.Text = "+"; + this.button4.UseVisualStyleBackColor = true; + // + // listBox1 + // + this.listBox1.FormattingEnabled = true; + this.listBox1.Items.AddRange(new object[] { + "Joe", + "Tim", + "Tom", + "Bob", + "Mary", + "Jane"}); + this.listBox1.Location = new System.Drawing.Point(9, 37); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(178, 342); + this.listBox1.TabIndex = 3; + // + // labelProfiles + // + this.labelProfiles.AutoSize = true; + this.labelProfiles.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelProfiles.Location = new System.Drawing.Point(3, 9); + this.labelProfiles.Name = "labelProfiles"; + this.labelProfiles.Size = new System.Drawing.Size(71, 24); + this.labelProfiles.TabIndex = 2; + this.labelProfiles.Text = "Profiles"; + // + // dataGridView1 + // + this.dataGridView1.AllowUserToAddRows = false; + this.dataGridView1.AllowUserToDeleteRows = false; + dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle4.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle4.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle4.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle4.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle4.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle4; + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.Workflow, + this.DateTime}); + dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle5; + this.dataGridView1.Location = new System.Drawing.Point(22, 38); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.ReadOnly = true; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle6; + this.dataGridView1.Size = new System.Drawing.Size(249, 339); + this.dataGridView1.TabIndex = 17; + // + // Workflow + // + this.Workflow.HeaderText = "Workflow"; + this.Workflow.Name = "Workflow"; + this.Workflow.ReadOnly = true; + // + // DateTime + // + this.DateTime.HeaderText = "DateTime"; + this.DateTime.Name = "DateTime"; + this.DateTime.ReadOnly = true; + // + // buttonOpen + // + this.buttonOpen.Location = new System.Drawing.Point(54, 383); + this.buttonOpen.Name = "buttonOpen"; + this.buttonOpen.Size = new System.Drawing.Size(44, 26); + this.buttonOpen.TabIndex = 16; + this.buttonOpen.Text = "Open"; + this.buttonOpen.UseVisualStyleBackColor = true; + // + // buttonExport + // + this.buttonExport.Location = new System.Drawing.Point(277, 38); + this.buttonExport.Name = "buttonExport"; + this.buttonExport.Size = new System.Drawing.Size(95, 26); + this.buttonExport.TabIndex = 5; + this.buttonExport.Text = "Export"; + this.buttonExport.UseVisualStyleBackColor = true; + // + // button5 + // + this.button5.Location = new System.Drawing.Point(22, 383); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(26, 26); + this.button5.TabIndex = 15; + this.button5.Text = "-"; + this.button5.UseVisualStyleBackColor = true; + // + // labelSessions + // + this.labelSessions.AutoSize = true; + this.labelSessions.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelSessions.Location = new System.Drawing.Point(3, 9); + this.labelSessions.Name = "labelSessions"; + this.labelSessions.Size = new System.Drawing.Size(86, 24); + this.labelSessions.TabIndex = 3; + this.labelSessions.Text = "Sessions"; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + // + // viewToolStripMenuItem + // + this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.playFullscreenToolStripMenuItem}); + this.viewToolStripMenuItem.Name = "viewToolStripMenuItem"; + this.viewToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.viewToolStripMenuItem.Text = "View"; + // + // playFullscreenToolStripMenuItem + // + this.playFullscreenToolStripMenuItem.CheckOnClick = true; + this.playFullscreenToolStripMenuItem.Name = "playFullscreenToolStripMenuItem"; + this.playFullscreenToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.playFullscreenToolStripMenuItem.Text = "Play Fullscreen"; + this.playFullscreenToolStripMenuItem.Click += new System.EventHandler(this.playFullscreenToolStripMenuItem_Click); + // + // FormMain + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(753, 464); + this.Controls.Add(this.tabs); + this.Controls.Add(this.menuStrip1); + this.MainMenuStrip = this.menuStrip1; + this.Name = "FormMain"; + this.ShowIcon = false; + this.Text = "TheraWii"; + this.Load += new System.EventHandler(this.Main_Load); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.tabProfile.ResumeLayout(false); + this.splitContainer2.Panel1.ResumeLayout(false); + this.splitContainer2.Panel1.PerformLayout(); + this.splitContainer2.Panel2.ResumeLayout(false); + this.splitContainer2.Panel2.PerformLayout(); + this.splitContainer2.ResumeLayout(false); + this.tabWorkflows.ResumeLayout(false); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + this.splitContainer1.ResumeLayout(false); + this.tabs.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.TabPage tabProfile; + private System.Windows.Forms.TabPage tabWorkflows; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.ListBox listTherapies; + private System.Windows.Forms.Button buttonMoveDown; + private System.Windows.Forms.Button buttonMoveUp; + private System.Windows.Forms.Button buttonEditTask; + private System.Windows.Forms.Button buttonDeleteTask; + private System.Windows.Forms.Button buttonAddTask; + private System.Windows.Forms.TabControl tabs; + private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.Button buttonEditProfile; + private System.Windows.Forms.Button buttonDeleteProfile; + private System.Windows.Forms.Button buttonAddProfile; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button buttonViewSession; + private System.Windows.Forms.Button buttonExportSession; + private System.Windows.Forms.Button buttonDeleteSession; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.Label labelProfiles; + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.DataGridViewTextBoxColumn Workflow; + private System.Windows.Forms.DataGridViewTextBoxColumn DateTime; + private System.Windows.Forms.Button buttonOpen; + private System.Windows.Forms.Button buttonExport; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Label labelSessions; + private System.Windows.Forms.Label labelTherapy; + private System.Windows.Forms.Label labelTasks; + private System.Windows.Forms.Button buttonPlay; + private System.Windows.Forms.Button buttonDeleteTherapy; + private System.Windows.Forms.Button buttonAddTherapy; + private System.Windows.Forms.ToolStripMenuItem importTherapyToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportTherapyToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripMenuItem importProfileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportProfileToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem quitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem aboutTheraWiiToolStripMenuItem; + private System.Windows.Forms.SaveFileDialog saveFileDialog1; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.ToolStripMenuItem editToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem copyTaskMenuItem; + private System.Windows.Forms.ToolStripMenuItem pasteMenuItem; + private System.Windows.Forms.TreeView treeViewTasks; + private System.Windows.Forms.ListView listViewProfiles; + private System.Windows.Forms.ColumnHeader ProfName; + private System.Windows.Forms.ColumnHeader CreateDate; + private System.Windows.Forms.ColumnHeader NumSessions; + private System.Windows.Forms.ListView listViewSessions; + private System.Windows.Forms.ColumnHeader columnHeader1; + private System.Windows.Forms.ColumnHeader columnHeader2; + private System.Windows.Forms.ColumnHeader columnHeader3; + private System.Windows.Forms.Button buttonMetrics; + private System.Windows.Forms.ToolStripMenuItem copyTherapyMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem viewToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem playFullscreenToolStripMenuItem; + + } +} + diff --git a/FormMain.cs b/FormMain.cs new file mode 100644 index 0000000..d84b317 --- /dev/null +++ b/FormMain.cs @@ -0,0 +1,937 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.Threading; +using System.IO; +using System.Runtime.InteropServices; + +namespace TheraWii +{ + public partial class FormMain : Form + { + public DataStorage ds; + public DataModel dm; + private Therapy selectedTherapy, tempCopyTherapy; + private Task tempCopyTask; + private Profile selectedProfile; + private bool lvP, lvS, lvT, tvT; + private enum CopyCut { copyTherapy, copyTask }; + private CopyCut editAction; + + public FormMain() + { + InitializeComponent(); + } + + private void Main_Load(object sender, EventArgs e) + { + ds = new DataStorage(); + dm = ds.DataModel; + lvP = false; + lvS = false; + + listProfilesRefresh(); + listTherapiesRefresh(); + listTherapies.SelectedIndex = -1; + treeViewTasksRefresh(); + //disable the Session buttons, they will be enabled when a profile is selected + splitContainer2.Panel2.Enabled = false; + playFullscreenToolStripMenuItem.Checked = dm.PlayFullscreen; + + // !!!! Skip GUI while debugging game + /* + selectedProfile = dm.Profiles[0]; + selectedTherapy = dm.Therapies[0]; + Thread thread = new Thread(new ThreadStart(RunXna)); + thread.Name = "TheraWii Game"; + thread.Start(); + Application.Exit(); + */ + + /* WiiUse testing */ + int found = WiiUse.Connect(); + Console.WriteLine("Found {0} wiimotes", found); + Console.WriteLine("Wiimote " + WiiUse.IsConnected(WiiType.Remote)); + Console.WriteLine("Nunchuck " + WiiUse.IsConnected(WiiType.Nunchuck)); + Console.WriteLine("Balance Board " + WiiUse.IsConnected(WiiType.BalanceBoard)); + //getCenterPosition(); + } + + public Point getCenterPosition() + { + Point p = this.Location; + p.X += (this.Width / 2); + p.Y += (this.Height / 2); + return p; + } + + private void listTherapiesRefresh() + { + listTherapies.DataSource = null; + listTherapies.DataSource = dm.Therapies; + listTherapies.DisplayMember = "Name"; + } + + private void treeViewTasksRefresh() + { + Therapy ther = (Therapy) listTherapies.SelectedItem; + treeViewTasks.Nodes.Clear(); + if (ther == null) + { + splitContainer1.Panel2.Enabled = false; + } + else + { + splitContainer1.Panel2.Enabled = true; + treeViewTasks.BeginUpdate(); + TreeNode[] nodes = ther.GetTaskTreeNodes(); + treeViewTasks.Nodes.AddRange(nodes); + treeViewTasks.EndUpdate(); + treeViewTasks.ExpandAll(); + } + } + + private void aboutTheraWiiToolStripMenuItem_Click(object sender, EventArgs e) + { + Form About = new FormAbout(); + About.Tag = this; + About.Show(); + } + + private void buttonViewSession_Click(object sender, EventArgs e) + { + if (listViewProfiles.SelectedItems.Count > 0 && listViewSessions.SelectedItems.Count >= 1) + { + Session s = (Session)listViewSessions.SelectedItems[0].Tag; + Form SessDetail = new FormSessionDetail(s); + SessDetail.Tag = this; + SessDetail.Show(); + listViewSessions.Select(); + } + } + + private void exportTherapyToolStripMenuItem_Click(object sender, EventArgs e) + { + if ( selectedTherapy != null ) + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = "TheraWii Therapy (*.twf)|*.twf|All Files (*.*)|*.*"; + saveFileDialog1.FilterIndex = 1; + saveFileDialog1.RestoreDirectory = true; + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + ds.SerializeTherapy(saveFileDialog1.FileName, selectedTherapy); + } + } + else + { + MessageBox.Show("Error: No Therapy selected.\nPlease select a Therapy from the Therapy Editor tab.", "Export Therapy", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void exportProfileToolStripMenuItem_Click(object sender, EventArgs e) + { + if (selectedProfile != null) + { + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = "TheraWii Profile (*.twp.zip)|*.twp.zip|All Files (*.*)|*.*"; + saveFileDialog1.FilterIndex = 1; + saveFileDialog1.RestoreDirectory = true; + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + try + { + ds.SerializeProfile(saveFileDialog1.FileName, selectedProfile); + } + catch(Exception ex) + { + MessageBox.Show(ex.Message, "Export error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + } + else + { + MessageBox.Show("Error: No Profile selected.\nPlease select a Profile from the Profile Management tab.", "Export Profile", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void importTherapyToolStripMenuItem_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + openFileDialog1.Filter = "TheraWii Therapy (*.twf)|*.twf|All Files (*.*)|*.*"; + openFileDialog1.FilterIndex = 1; + openFileDialog1.RestoreDirectory = true; + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + Therapy t = new Therapy(); + try + { + ds.DeserializeTherapy(openFileDialog1.FileName, ref t); + dm.Therapies.Add(t); + ds.SerializeDataModel(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Import error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + listTherapiesRefresh(); + listTherapies.SelectedIndex = listTherapies.Items.Count - 1; + } + } + + private void importProfileToolStripMenuItem_Click(object sender, EventArgs e) + { + OpenFileDialog openFileDialog1 = new OpenFileDialog(); + openFileDialog1.Filter = "TheraWii Profile (*.twp.zip)|*.twp.zip|All Files (*.*)|*.*"; + openFileDialog1.FilterIndex = 1; + openFileDialog1.RestoreDirectory = true; + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + Profile p = new Profile(); + try + { + ds.DeserializeProfile(openFileDialog1.FileName, ref p); + dm.Profiles.Add(p); + ds.SerializeDataModel(); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Import error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + listProfilesRefresh(); + listViewProfiles.Select(); + if (listViewProfiles.Items.Count > 0) + { + listViewProfiles.Items[listViewProfiles.Items.Count - 1].Selected = true; + listViewProfiles.Items[listViewProfiles.Items.Count - 1].Focused = true; + } + } + } + + private void buttonExportSession_Click(object sender, EventArgs e) + { + if (listViewProfiles.SelectedItems.Count > 0) + { + if (listViewSessions.SelectedItems.Count > 0) + { + Session s = (Session)listViewSessions.SelectedItems[0].Tag; + + //Open file for reading + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + saveFileDialog1.Filter = "Comma Separated Values (*.csv)|*.csv|All Files (*.*)|*.*"; + saveFileDialog1.FilterIndex = 1; + saveFileDialog1.RestoreDirectory = true; + saveFileDialog1.InitialDirectory = Environment.GetFolderPath( Environment.SpecialFolder.Desktop); + saveFileDialog1.FileName = s.dataFile; + + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + String saveFile = saveFileDialog1.FileName; + try + { + DScsv.exportSession(s, saveFile); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Export error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + listViewSessions.Select(); + } + } + } + + private void quitToolStripMenuItem_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + private void buttonAddTask_Click(object sender, EventArgs e) + { + TreeNode t = treeViewTasks.SelectedNode; + List path = new List(); + Form newTaskForm = new FormNewTask((Therapy)listTherapies.SelectedItem); + newTaskForm.Tag = this; + DialogResult r = newTaskForm.ShowDialog(); + if (r == DialogResult.OK) + { + //are we adding to a repeat task? + if (treeViewTasks.SelectedNode != null && (treeViewTasks.SelectedNode.Tag.GetType() == typeof(RepeatTask) || treeViewTasks.SelectedNode.Parent != null)) + { + t = treeViewTasks.SelectedNode; + Task newTask = selectedTherapy.tasks.tasks[selectedTherapy.tasks.Count - 1]; + // nest the new task under the repeat task + if (t.Tag.GetType() == typeof(RepeatTask)) + { + ((RepeatTask)t.Tag).addTask(newTask); + selectedTherapy.tasks.tasks.RemoveAt(selectedTherapy.tasks.Count - 1); + } + // we selected a sibling, add newtask to the parent repeat task + else + { + ((RepeatTask)t.Parent.Tag).addTask(newTask); + selectedTherapy.tasks.tasks.RemoveAt(selectedTherapy.tasks.Count - 1); + } + } + // preserve the node's location + if (t != null) + { + path.Add(t.Index); + while (t.Parent != null) + { + t = t.Parent; + path.Add(t.Index); + } + } + ds.SerializeDataModel(); + treeViewTasksRefresh(); + + // select the previously selected node + if (t != null) + { + t = treeViewTasks.Nodes[path[path.Count - 1]]; + for (int iter = path.Count - 2; iter >= 0; --iter) + { + t = t.Nodes[path[iter]]; + } + if (t.Tag.GetType() == typeof(RepeatTask) && t.GetNodeCount(false) > 0) + treeViewTasks.SelectedNode = t.Nodes[t.GetNodeCount(false) - 1]; + else if (t.NextNode != null) + { + treeViewTasks.SelectedNode = t; + while (treeViewTasks.SelectedNode.NextNode != null) + { + treeViewTasks.SelectedNode = treeViewTasks.SelectedNode.NextNode; + } + } + else + treeViewTasks.SelectedNode = t; + } + } + treeViewTasks.Select(); + } + + private void buttonAddTherapy_Click(object sender, EventArgs e) + { + FormNewTherapy f = new FormNewTherapy(dm); + f.Tag = this; + f.ShowDialog(); + ds.SerializeDataModel(); + listTherapiesRefresh(); + listTherapies.SelectedIndex = listTherapies.Items.Count - 1; + } + + private void buttonDeleteTherapy_Click(object sender, EventArgs e) + { + Therapy t = (Therapy)listTherapies.SelectedItem; + int i = listTherapies.SelectedIndex; + if (t != null) + { + string message = String.Format("Are you sure you want to delete \"{0}\"?", t); + string caption = "Confirm Delete"; + DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo); + if (result == DialogResult.Yes) + { + dm.removeTherapy(t); + ds.SerializeDataModel(); + listTherapiesRefresh(); + } + } + if (listTherapies.Items.Count > 0) + { + if (i < listTherapies.Items.Count) + listTherapies.SelectedIndex = i; + else + listTherapies.SelectedIndex = listTherapies.Items.Count - 1; + } + } + + private void buttonPlay_Click(object sender, EventArgs e) + { + //create a dialog window to connect devices, then move onto profile select + selectedProfile = null; + if (listTherapies.SelectedItem != null && ((Therapy)listTherapies.SelectedItem).tasks.Count > 0) + { + using (FormAddDevices fad = new FormAddDevices(((Therapy)listTherapies.SelectedItem).getRequiredDevices())) + { + fad.Tag = this; + if (fad.ShowDialog() == DialogResult.OK) + { + // create a dialog window to get the profile to use for the game + using (FormProfileChooser fpc = new FormProfileChooser(dm.Profiles, this)) + { + fpc.Tag = this; + if (fpc.ShowDialog() == DialogResult.OK) + { + String selectedName = fpc.getSelectedProfileName(); + if (selectedName == null) + { + selectedProfile = null; + } + foreach (Profile p in dm.Profiles) + { + if (p.Name.CompareTo(selectedName) == 0) + { + selectedProfile = p; + } + } + } + } + } + } + } + else + { + string caption = "Therapy Required"; + DialogResult result = MessageBox.Show("Could not start Therapy. Please make sure that:\n\n 1. A Therapy is selected.\n 2. The selected Therapy contains at least one task.", caption, MessageBoxButtons.OK, MessageBoxIcon.Warning); + } + + if (listTherapies.SelectedItem != null && selectedProfile != null) + { + //Console.WriteLine(selectedProfile + "\n"); + selectedTherapy = (Therapy)listTherapies.SelectedItem; + Thread thread = new Thread(new ThreadStart(RunXna)); + thread.Name = "TheraWii Game"; + thread.Start(); + thread.Join(); + ds.SerializeDataModel(); + } + } + + public void RunXna() + { + Game game = new Game(selectedTherapy, selectedProfile, dm.PlayFullscreen); + game.Run(); + } + + private void listTherapies_SelectedIndexChanged(object sender, EventArgs e) + { + selectedTherapy = (Therapy)listTherapies.SelectedItem; + treeViewTasksRefresh(); + } + + private void buttonEditTask_Click(object sender, EventArgs e) + { + int i = -1; + if (treeViewTasks.SelectedNode != null) + { + i = treeViewTasks.SelectedNode.Index; + Task t = (Task)treeViewTasks.SelectedNode.Tag; + Form f = t.GetTaskForm(); + f.Tag = this; + f.ShowDialog(); + treeViewTasksRefresh(); + ds.SerializeDataModel(); + if (treeViewTasks.Nodes.Count > 0) + { + if (i < treeViewTasks.Nodes.Count) + treeViewTasks.SelectedNode = treeViewTasks.Nodes[i]; + else + treeViewTasks.SelectedNode = treeViewTasks.Nodes[treeViewTasks.Nodes.Count - 1]; + treeViewTasks.Select(); + } + } + + } + + private void buttonDeleteTask_Click(object sender, EventArgs e) + { + TreeNode t = treeViewTasks.SelectedNode; + int i = -1; + int io = -1; + if (t != null) + { + io = t.Index; + // Set Node to select after delete + if (t.Parent == null && t.NextNode != null) + i = t.Index; //t.index and not NextNode because we're deleting t. + else if (t.Parent == null && t.NextNode == null && t.PrevNode != null) + i = t.PrevNode.Index; + else if (t.Parent != null) + { + TreeNode r = treeViewTasks.SelectedNode; + while (r.Parent != null) + r = r.Parent; + i = r.Index; + } + + string message = String.Format("Are you sure you want to delete \"{0}\"?", t.Text); + string caption = "Confirm Delete"; + DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo); + if (result == DialogResult.Yes) + { + if (t.Parent != null && t.Parent.Tag.GetType() == typeof(RepeatTask)) + { + ((RepeatTask)t.Parent.Tag).removeTask((Task)t.Tag); + } + else + { + ((Therapy)listTherapies.SelectedItem).removeTask((Task)(treeViewTasks.SelectedNode.Tag)); + } + ds.SerializeDataModel(); + treeViewTasksRefresh(); + } + else + i = io; + } + if (treeViewTasks.Nodes.Count > 0) + { + if (0 <= i && i < treeViewTasks.Nodes.Count) + { + treeViewTasks.SelectedNode = treeViewTasks.Nodes[i]; + treeViewTasks.Select(); + } + } + } + + public void listProfilesRefresh() + { + listViewProfiles.Items.Clear(); + foreach(Profile p in dm.Profiles) + { + listViewProfiles.Items.Add(p.getListViewItem()); + } + if (listViewProfiles.Tag == null) + listViewProfiles.Tag = 0; + listViewProfiles.ListViewItemSorter = new ListComparer((int)listViewProfiles.Tag); + } + + public void buttonAddProfile_Click(object sender, EventArgs e) + { + Form f = new FormNewProfile(dm); + f.Tag = this; + f.ShowDialog(); + ds.SerializeDataModel(); + listProfilesRefresh(); + listViewProfiles.Select(); + if (listViewProfiles.Items.Count > 0) + { + listViewProfiles.Items[listViewProfiles.Items.Count - 1].Selected = true; + listViewProfiles.Items[listViewProfiles.Items.Count - 1].Focused = true; + } + } + + private void buttonDeleteProfile_Click(object sender, EventArgs e) + { + int i = -1; + if (listViewProfiles.SelectedItems.Count > 0) + { + i = listViewProfiles.SelectedIndices[0]; + Profile p = (Profile)listViewProfiles.SelectedItems[0].Tag; + string message = String.Format("Are you sure you want to delete \"{0}\"?\n\n" + + "WARNING: THIS WILL DELETE ALL SESSION DATA ASSOCIATED WITH \"{0}\"" + , p); + string caption = "Confirm Delete"; + DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo); + if (result == DialogResult.Yes) + { + p.delete(); + dm.removeProfile(p); + listViewProfiles.Items.Remove(listViewProfiles.SelectedItems[0]); + ds.SerializeDataModel(); + listProfilesRefresh(); + } + listViewSessions.Items.Clear(); + } + if (listViewProfiles.Items.Count > 0) + { + if (i < listViewProfiles.Items.Count) + { + listViewProfiles.Items[i].Selected = true; + listViewProfiles.Items[i].Focused = true; + } + else + { + listViewProfiles.Items[listViewProfiles.Items.Count - 1].Selected = true; + listViewProfiles.Items[listViewProfiles.Items.Count - 1].Focused = true; + } + listViewProfiles.Select(); + } + } + + private void buttonEditProfile_Click(object sender, EventArgs e) + { + int i = -1; + if (listViewProfiles.SelectedItems.Count > 0) + { + i = listViewProfiles.SelectedIndices[0]; + Form f = new FormNewProfile(dm, ((Profile)listViewProfiles.SelectedItems[0].Tag)); + f.Tag = this; + f.ShowDialog(); + ds.SerializeDataModel(); + listProfilesRefresh(); + + listViewProfiles.Items[i].Selected = true; + listViewProfiles.Items[i].Focused = true; + listViewProfiles.Select(); + } + } + + private void buttonDeleteSession_Click(object sender, EventArgs e) + { + int ii = -1; + if (listViewSessions.SelectedItems.Count > 0) + { + ii = listViewSessions.SelectedIndices[0]; + string message = String.Format("Are you sure you want to delete session #\"{0}\"?", listViewSessions.SelectedItems[0].Text); + string caption = "Confirm Delete"; + DialogResult result = MessageBox.Show(message, caption, MessageBoxButtons.YesNo); + if (result == DialogResult.Yes) + { + ListViewItem lvi = (ListViewItem)listViewSessions.SelectedItems[0]; + ((Profile)listViewProfiles.SelectedItems[0].Tag).deleteSession((Session)lvi.Tag); + listViewSessions.Items.Remove(lvi); + + ds.SerializeDataModel(); + + //just to make sure session list is in sync with serialized data model + int i = listViewProfiles.SelectedIndices[0]; + listProfilesRefresh(); + listViewProfiles.Items[i].Selected = false; + listViewProfiles.Select(); + listViewProfiles.Items[i].Selected = true; + listViewProfiles.Select(); + if (ii < listViewSessions.Items.Count) + { + listViewSessions.Items[ii].Selected = false; + listViewSessions.Select(); + listViewSessions.Items[ii].Selected = true; + listViewSessions.Select(); + } + else if (listViewSessions.Items.Count > 0) + { + listViewSessions.Items[listViewSessions.Items.Count - 1].Selected = false; + listViewSessions.Select(); + listViewSessions.Items[listViewSessions.Items.Count - 1].Selected = true; + listViewSessions.Select(); + } + } + } + } + + private void listViewProfiles_SelectedIndexChanged(object sender, EventArgs e) + { + ListView l = (ListView)sender; + if (l.SelectedItems.Count > 0) + { + listViewSessions.Items.Clear(); + Profile p = (Profile)l.SelectedItems[0].Tag; + selectedProfile = p; + ListView.ListViewItemCollection lc = p.getSessionList(listViewSessions); + if (listViewSessions.Tag == null) + listViewSessions.Tag = 0; + listViewSessions.ListViewItemSorter = new ListComparer((int)listViewSessions.Tag); + splitContainer2.Panel2.Enabled = true; + } + else + { + listViewSessions.Items.Clear(); + splitContainer2.Panel2.Enabled = false; + } + } + + private void buttonTaskMoveUp_Click(object sender, EventArgs e) + { + TreeNode t = treeViewTasks.SelectedNode; + List path = new List(); + if (treeViewTasks.SelectedNode != null) + { + path.Add(t.Index); + while (t.Parent != null) + { + t = t.Parent; + path.Add(t.Index); + } + path = ((Therapy)listTherapies.SelectedItem).MoveUp(path); + treeViewTasksRefresh(); + + t = treeViewTasks.Nodes[path[path.Count - 1]]; + for (int iter = path.Count - 2; iter >= 0; --iter) + { + t = t.Nodes[path[iter]]; + } + treeViewTasks.SelectedNode = t; + } + treeViewTasks.Select(); + ds.SerializeDataModel(); + } + + private void buttonTaskMoveDown_Click(object sender, EventArgs e) + { + TreeNode t = treeViewTasks.SelectedNode; + List path = new List(); + if (treeViewTasks.SelectedNode != null) + { + path.Add(t.Index); + while (t.Parent != null) + { + t = t.Parent; + path.Add(t.Index); + } + path = ((Therapy)listTherapies.SelectedItem).MoveDown(path); + treeViewTasksRefresh(); + + t = treeViewTasks.Nodes[path[path.Count - 1]]; + for (int iter = path.Count - 2; iter >= 0; --iter) + { + t = t.Nodes[path[iter]]; + } + treeViewTasks.SelectedNode = t; + } + treeViewTasks.Select(); + ds.SerializeDataModel(); + } + + private void treeViewTasks_DoubleClick(object sender, EventArgs e) + { + buttonEditTask_Click(new object(), new EventArgs()); + } + + private void listViewProfiles_DoubleClick(object sender, EventArgs e) + { + buttonEditProfile_Click(new object(), new EventArgs()); + } + + private void listViewSessions_DoubleClick(object sender, EventArgs e) + { + buttonViewSession_Click(new object(), new EventArgs()); + } + + private void listTherapies_DoubleClick(object sender, EventArgs e) + { + buttonPlay_Click(new object(), new EventArgs()); + } + + private void listTherapies_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) + { + buttonDeleteTherapy_Click(this, new EventArgs()); + } + } + + private void treeViewTasks_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) + { + buttonDeleteTask_Click(this, new EventArgs()); + } + } + + private void listViewProfiles_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) + { + buttonDeleteProfile_Click(this, new EventArgs()); + } + } + + private void listViewSessions_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Delete || e.KeyCode == Keys.Back) + { + buttonDeleteSession_Click(this, new EventArgs()); + } + } + + private void tabs_SelectedIndexChanged(object sender, EventArgs e) + { + int i = -1; + int ii = -1; + TreeNode t = null; + if (tabs.SelectedIndex == 0) + { + if (listTherapies.SelectedIndices.Count > 0) + i = listTherapies.SelectedIndices[0]; + if (treeViewTasks.SelectedNode != null) + t = treeViewTasks.SelectedNode; + listTherapiesRefresh(); + if (i != -1) + { + listTherapies.SelectedIndex = i; + if (t != null) + { + treeViewTasks.SelectedNode = t; + treeViewTasks.Select(); + } + } + } + else if (tabs.SelectedIndex == 1) + { + if (listViewProfiles.SelectedIndices.Count > 0) + i = listViewProfiles.SelectedIndices[0]; + if (listViewSessions.SelectedIndices.Count > 0) + ii = listViewSessions.SelectedIndices[0]; + listProfilesRefresh(); + if (i != -1) + { + listViewProfiles.Items[i].Selected = false; + listViewProfiles.Select(); + listViewProfiles.Items[i].Selected = true; + listViewProfiles.Select(); + if (ii != -1) + { + listViewSessions.Items[ii].Selected = false; + listViewSessions.Select(); + listViewSessions.Items[ii].Selected = true; + listViewSessions.Select(); + } + } + + if (lvP) + listViewProfiles.Select(); + if (lvS) + listViewSessions.Select(); + + } + } + + private void listViewSessions_Leave(object sender, EventArgs e) + { + lvS = listViewSessions.Focused; + lvP = listViewProfiles.Focused; + } + + private void listViewProfiles_Leave(object sender, EventArgs e) + { + lvS = listViewSessions.Focused; + lvP = listViewProfiles.Focused; + } + + private void listTherapies_Leave(object sender, EventArgs e) + { + lvT = listTherapies.Focused; + tvT = treeViewTasks.Focused; + } + + private void treeViewTasks_Leave(object sender, EventArgs e) + { + lvT = listTherapies.Focused; + tvT = treeViewTasks.Focused; + } + + private void treeViewTasks_Click(object sender, EventArgs e) + { + ((TreeView)sender).SelectedNode = treeViewTasks.GetNodeAt(((MouseEventArgs)e).Location); + } + + private void buttonMetrics_Click(object sender, EventArgs e) + { + if (listViewProfiles.SelectedItems.Count > 0) + { + Profile p = (Profile)listViewProfiles.SelectedItems[0].Tag; + FormPerformance f = new FormPerformance(p); + f.Show(); + } + } + + private void listViewSessions_ColumnClick(object sender, ColumnClickEventArgs e) + { + listViewSessions.ListViewItemSorter = new ListComparer(e.Column); + listViewSessions.Tag = e.Column; + if (listViewSessions.Sorting == SortOrder.Ascending) + listViewSessions.Sorting = SortOrder.Descending; + else + listViewSessions.Sorting = SortOrder.Ascending; + } + + private void listViewProfiles_ColumnClick(object sender, ColumnClickEventArgs e) + { + listViewProfiles.Tag = e.Column; + listViewProfiles.ListViewItemSorter = new ListComparer(e.Column); + if (listViewProfiles.Sorting == SortOrder.Ascending) + listViewProfiles.Sorting = SortOrder.Descending; + else + listViewProfiles.Sorting = SortOrder.Ascending; + } + + private void copyTherapyMenuItem_Click(object sender, EventArgs e) + { + tempCopyTherapy = ((Therapy)listTherapies.SelectedItem); + editAction = CopyCut.copyTherapy; + } + + private void copyToolStripMenuItem_Click(object sender, EventArgs e) + { + tempCopyTask = ((Task)treeViewTasks.SelectedNode.Tag); + editAction = CopyCut.copyTask; + } + + private void pasteMenuItem_Click(object sender, EventArgs e) + { + switch (editAction) + { + case CopyCut.copyTherapy: + dm.Therapies.Add(new Therapy(tempCopyTherapy)); + listTherapiesRefresh(); + ds.SerializeDataModel(); + break; + case CopyCut.copyTask: + if (tempCopyTask.GetType() == typeof(DialogTask)) + ((Therapy)listTherapies.SelectedItem).addTask(new DialogTask((DialogTask)tempCopyTask)); + else if (tempCopyTask.GetType() == typeof(Task2D)) + ((Therapy)listTherapies.SelectedItem).addTask(new Task2D((Task2D)tempCopyTask)); + else if (tempCopyTask.GetType() == typeof(RepeatTask)) + ((Therapy)listTherapies.SelectedItem).addTask(new RepeatTask((RepeatTask)tempCopyTask)); + treeViewTasksRefresh(); + ds.SerializeDataModel(); + break; + } + } + + private void editToolStripMenuItem_DropDownOpening(object sender, EventArgs e) + { + if (this.tabs.SelectedIndex != 0) + { + copyTaskMenuItem.Enabled = false; + copyTherapyMenuItem.Enabled = false; + pasteMenuItem.Enabled = false; + } + else + { + //copy active + if (listTherapies.SelectedItem == null) + { + copyTherapyMenuItem.Enabled = false; + } + else + { + copyTherapyMenuItem.Enabled = true; + } + if (treeViewTasks.SelectedNode == null) + { + copyTaskMenuItem.Enabled = false; + } + else + { + copyTaskMenuItem.Enabled = true; + } + //Paste active + if (tempCopyTherapy != null || tempCopyTask != null) + { + if (editAction == CopyCut.copyTherapy) + pasteMenuItem.Text = "Paste Therapy"; + else + pasteMenuItem.Text = "Paste Task"; + + pasteMenuItem.Enabled = true; + } + else + pasteMenuItem.Enabled = false; + } + } + + private void playFullscreenToolStripMenuItem_Click(object sender, EventArgs e) + { + dm.PlayFullscreen = playFullscreenToolStripMenuItem.Checked; + ds.SerializeDataModel(); + } + } +} \ No newline at end of file diff --git a/FormMain.resx b/FormMain.resx new file mode 100755 index 0000000..24e5b42 --- /dev/null +++ b/FormMain.resx @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + True + + + True + + + 126, 17 + + + 254, 17 + + \ No newline at end of file diff --git a/FormNewProfile.Designer.cs b/FormNewProfile.Designer.cs new file mode 100644 index 0000000..deb8e27 --- /dev/null +++ b/FormNewProfile.Designer.cs @@ -0,0 +1,113 @@ +namespace TheraWii +{ + partial class FormNewProfile + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textBoxName = new System.Windows.Forms.TextBox(); + this.labelInstruct = new System.Windows.Forms.Label(); + this.labelTextBox = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(91, 69); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(150, 20); + this.textBoxName.TabIndex = 0; + this.textBoxName.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBoxName_KeyPress); + // + // labelInstruct + // + this.labelInstruct.AutoSize = true; + this.labelInstruct.Location = new System.Drawing.Point(49, 17); + this.labelInstruct.Name = "labelInstruct"; + this.labelInstruct.Size = new System.Drawing.Size(192, 13); + this.labelInstruct.TabIndex = 1; + this.labelInstruct.Text = "Enter a unique name for the new profile"; + // + // labelTextBox + // + this.labelTextBox.AutoSize = true; + this.labelTextBox.Location = new System.Drawing.Point(49, 72); + this.labelTextBox.Name = "labelTextBox"; + this.labelTextBox.Size = new System.Drawing.Size(35, 13); + this.labelTextBox.TabIndex = 2; + this.labelTextBox.Text = "Name"; + // + // buttonOk + // + this.buttonOk.Location = new System.Drawing.Point(52, 104); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 3; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(166, 104); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 4; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // FormNewProfile + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(291, 140); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.labelTextBox); + this.Controls.Add(this.labelInstruct); + this.Controls.Add(this.textBoxName); + this.KeyPreview = true; + this.Name = "FormNewProfile"; + this.Text = "New Profile"; + this.Load += new System.EventHandler(this.FormNewProfile_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormNewProfile_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormNewProfile_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label labelInstruct; + private System.Windows.Forms.Label labelTextBox; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + } +} \ No newline at end of file diff --git a/FormNewProfile.cs b/FormNewProfile.cs new file mode 100644 index 0000000..a28ee7d --- /dev/null +++ b/FormNewProfile.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; +using System.IO; + +namespace TheraWii +{ + public partial class FormNewProfile : Form + { + private DataModel dm; + private bool rename; + private Profile p; + private static Point prevLocation; + + public FormNewProfile(DataModel dm) + { + InitializeComponent(); + this.dm = dm; + rename = false; + p = new Profile(); + } + + public FormNewProfile(DataModel dm, Profile p) + { + this.p = p; + InitializeComponent(); + this.Name = "Rename Profile"; + this.labelInstruct.Text = "Please enter a unique name for the profile"; + this.textBoxName.Text = p.Name; + this.dm = dm; + rename = true; + } + + private void buttonOk_Click(object sender, EventArgs e) + { + if (textBoxName.Text.Length != 0 && ( (textBoxName.Text.IndexOfAny(System.IO.Path.GetInvalidPathChars())) == -1)) + { + String newPath = Path.Combine(DataStorage.DATA_STORE_FOLDER, textBoxName.Text); + + if (rename) + { + if (dm.isProfileNameUnique(textBoxName.Text) && !System.IO.Directory.Exists(newPath)) + { + p.Rename(textBoxName.Text); + this.Close(); + } + else if (p.Name == textBoxName.Text) + { + this.Close(); + } + else + { + this.labelInstruct.Text = "ERROR: PROFILE/FOLDER NAME" + + " ALREADY IN USE.\n\nPlease try again."; + } + } + else + { + if (dm.isProfileNameUnique(textBoxName.Text) && !System.IO.Directory.Exists(newPath)) + { + p.initialize(textBoxName.Text); + dm.Profiles.Add(p); + dm.Profiles.Sort(); + this.Close(); + } + else + { + + this.labelInstruct.ForeColor = System.Drawing.Color.Red; + this.labelInstruct.Text = "ERROR: PROFILE/FOLDER NAME\n" + + "ALREADY IN USE.\nPlease try again."; + } + } + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void textBoxName_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonOk_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void FormNewProfile_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonOk_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void FormNewProfile_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormNewProfile_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + } +} \ No newline at end of file diff --git a/FormNewProfile.resx b/FormNewProfile.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormNewProfile.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormNewTask.Designer.cs b/FormNewTask.Designer.cs new file mode 100644 index 0000000..8ef20a0 --- /dev/null +++ b/FormNewTask.Designer.cs @@ -0,0 +1,121 @@ +namespace TheraWii +{ + partial class FormNewTask + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.listBoxTasks = new System.Windows.Forms.ListBox(); + this.labelSelectTask = new System.Windows.Forms.Label(); + this.buttonCreate = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.panel1 = new System.Windows.Forms.Panel(); + this.panel1.SuspendLayout(); + this.SuspendLayout(); + // + // listBoxTasks + // + this.listBoxTasks.FormattingEnabled = true; + this.listBoxTasks.Items.AddRange(new object[] { + "Dialog Task", + "2D Task", + "Repeat Task"}); + this.listBoxTasks.Location = new System.Drawing.Point(32, 23); + this.listBoxTasks.Name = "listBoxTasks"; + this.listBoxTasks.Size = new System.Drawing.Size(156, 95); + this.listBoxTasks.TabIndex = 0; + this.listBoxTasks.DoubleClick += new System.EventHandler(this.listBoxTasks_DoubleClick); + // + // labelSelectTask + // + this.labelSelectTask.AutoSize = true; + this.labelSelectTask.Font = new System.Drawing.Font("Microsoft Sans Serif", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelSelectTask.Location = new System.Drawing.Point(45, 0); + this.labelSelectTask.Name = "labelSelectTask"; + this.labelSelectTask.Size = new System.Drawing.Size(130, 20); + this.labelSelectTask.TabIndex = 1; + this.labelSelectTask.Text = "Select Task Type"; + // + // buttonCreate + // + this.buttonCreate.Location = new System.Drawing.Point(32, 124); + this.buttonCreate.Name = "buttonCreate"; + this.buttonCreate.Size = new System.Drawing.Size(75, 23); + this.buttonCreate.TabIndex = 2; + this.buttonCreate.Text = "Create Task"; + this.buttonCreate.UseVisualStyleBackColor = true; + this.buttonCreate.Click += new System.EventHandler(this.buttonCreate_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(113, 124); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 3; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // panel1 + // + this.panel1.Controls.Add(this.labelSelectTask); + this.panel1.Controls.Add(this.buttonCancel); + this.panel1.Controls.Add(this.listBoxTasks); + this.panel1.Controls.Add(this.buttonCreate); + this.panel1.Location = new System.Drawing.Point(12, 12); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(221, 154); + this.panel1.TabIndex = 4; + // + // FormNewTask + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.AutoSize = true; + this.ClientSize = new System.Drawing.Size(246, 176); + this.Controls.Add(this.panel1); + this.KeyPreview = true; + this.Name = "FormNewTask"; + this.Text = "NewTask"; + this.Load += new System.EventHandler(this.NewTask_Load); + this.DoubleClick += new System.EventHandler(this.FormNewTask_DoubleClick); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormNewTask_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormNewTask_FormClosing); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListBox listBoxTasks; + private System.Windows.Forms.Label labelSelectTask; + private System.Windows.Forms.Button buttonCreate; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Panel panel1; + } +} \ No newline at end of file diff --git a/FormNewTask.cs b/FormNewTask.cs new file mode 100644 index 0000000..7ae9d6b --- /dev/null +++ b/FormNewTask.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormNewTask : Form + { + private Therapy therapy; + private static Point prevLocation; + + public FormNewTask(Therapy t) + { + therapy = t; + InitializeComponent(); + } + + private void NewTask_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + listBoxTasks.Select(); + } + + private void buttonCreate_Click(object sender, EventArgs e) + { + Task newTask; + Form newTaskForm; + switch (listBoxTasks.SelectedIndex) + { + case 0: + newTask = new DialogTask(); + newTaskForm = new FormDialogTask((DialogTask) newTask); + break; + case 1: + newTask = new Task2D(); + newTaskForm = new Form2DTask((Task2D) newTask); + break; + case 2: + newTask = new RepeatTask(); + newTaskForm = new FormRepeatTask((RepeatTask) newTask); + break; + default: + return; + } + this.Visible = false; + newTaskForm.Tag = this.Tag; + DialogResult result = newTaskForm.ShowDialog(); + if (result == DialogResult.OK) + { + //if the task name is left empty then set it to a generic name based on the task type + if (newTask.Name == null || newTask.Name.Length == 0) + { + switch (listBoxTasks.SelectedIndex) + { + case 0: + newTask.Name = "Dialog Task"; + break; + case 1: + newTask.Name = "2D Task"; + break; + case 2: + newTask.Name = "Repeat Task"; + break; + default: + newTask.Name = "Task Name"; + return; + } + } + therapy.addTask(newTask); + this.DialogResult = DialogResult.OK; + } + else + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void FormNewTask_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonCreate_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void listBoxTasks_DoubleClick(object sender, EventArgs e) + { + buttonCreate_Click(this, new EventArgs()); + } + + private void FormNewTask_DoubleClick(object sender, EventArgs e) + { + buttonCreate_Click(sender, e); + } + + private void FormNewTask_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + + } +} \ No newline at end of file diff --git a/FormNewTask.resx b/FormNewTask.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormNewTask.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormNewTherapy.Designer.cs b/FormNewTherapy.Designer.cs new file mode 100644 index 0000000..dfcea4d --- /dev/null +++ b/FormNewTherapy.Designer.cs @@ -0,0 +1,112 @@ +namespace TheraWii +{ + partial class FormNewTherapy + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(59, 37); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(162, 20); + this.textBoxName.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(36, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(164, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Enter a name for the new therapy"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(18, 40); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(35, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Name"; + // + // buttonOk + // + this.buttonOk.Location = new System.Drawing.Point(41, 75); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 3; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(122, 75); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 4; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // FormNewTherapy + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(238, 116); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxName); + this.KeyPreview = true; + this.Name = "FormNewTherapy"; + this.Text = "New Therapy"; + this.Load += new System.EventHandler(this.FormNewTherapy_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormNewTherapy_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormNewTherapy_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + } +} \ No newline at end of file diff --git a/FormNewTherapy.cs b/FormNewTherapy.cs new file mode 100644 index 0000000..0a2e47a --- /dev/null +++ b/FormNewTherapy.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormNewTherapy : Form + { + private DataModel dm; + private static Point prevLocation; + + public FormNewTherapy(DataModel dm) + { + InitializeComponent(); + this.dm = dm; + } + + private void buttonOk_Click(object sender, EventArgs e) + { + if (textBoxName.Text.Length != 0) + { + Therapy t = new Therapy(); + t.Name = textBoxName.Text; + dm.Therapies.Add(t); + dm.Therapies.Sort(); + this.Close(); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void FormNewTherapy_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonOk_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void FormNewTherapy_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormNewTherapy_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + + } +} \ No newline at end of file diff --git a/FormNewTherapy.resx b/FormNewTherapy.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormNewTherapy.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormPerformance.Designer.cs b/FormPerformance.Designer.cs new file mode 100644 index 0000000..f6fe94c --- /dev/null +++ b/FormPerformance.Designer.cs @@ -0,0 +1,223 @@ +namespace TheraWii +{ + partial class FormPerformance + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.Windows.Forms.DataVisualization.Charting.ChartArea chartArea1 = new System.Windows.Forms.DataVisualization.Charting.ChartArea(); + System.Windows.Forms.DataVisualization.Charting.Series series1 = new System.Windows.Forms.DataVisualization.Charting.Series(); + System.Windows.Forms.DataVisualization.Charting.Title title1 = new System.Windows.Forms.DataVisualization.Charting.Title(); + this.chart1 = new System.Windows.Forms.DataVisualization.Charting.Chart(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.comboBoxTherapy = new System.Windows.Forms.ComboBox(); + this.comboBoxMetric = new System.Windows.Forms.ComboBox(); + this.buttonSave = new System.Windows.Forms.Button(); + this.buttonCopy = new System.Windows.Forms.Button(); + this.buttonClose = new System.Windows.Forms.Button(); + this.comboBoxTask = new System.Windows.Forms.ComboBox(); + this.label3 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.chart1)).BeginInit(); + this.SuspendLayout(); + // + // chart1 + // + this.chart1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + chartArea1.AxisX.Interval = 1; + chartArea1.AxisX.LabelAutoFitStyle = ((System.Windows.Forms.DataVisualization.Charting.LabelAutoFitStyles)(((((((System.Windows.Forms.DataVisualization.Charting.LabelAutoFitStyles.IncreaseFont | System.Windows.Forms.DataVisualization.Charting.LabelAutoFitStyles.DecreaseFont) + | System.Windows.Forms.DataVisualization.Charting.LabelAutoFitStyles.StaggeredLabels) + | System.Windows.Forms.DataVisualization.Charting.LabelAutoFitStyles.LabelsAngleStep30) + | System.Windows.Forms.DataVisualization.Charting.LabelAutoFitStyles.LabelsAngleStep45) + | System.Windows.Forms.DataVisualization.Charting.LabelAutoFitStyles.LabelsAngleStep90) + | System.Windows.Forms.DataVisualization.Charting.LabelAutoFitStyles.WordWrap))); + chartArea1.AxisX.LabelStyle.Format = "G"; + chartArea1.AxisX.LabelStyle.IsEndLabelVisible = false; + chartArea1.AxisX.MajorGrid.Enabled = false; + chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.DimGray; + chartArea1.AxisX.Title = "Session"; + chartArea1.AxisX2.MajorGrid.Enabled = false; + chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.LightGray; + chartArea1.AxisY.MinorTickMark.Enabled = true; + chartArea1.AxisY.MinorTickMark.Size = 0.3F; + chartArea1.AxisY2.MajorGrid.Enabled = false; + chartArea1.Name = "ChartArea1"; + this.chart1.ChartAreas.Add(chartArea1); + this.chart1.Location = new System.Drawing.Point(12, 100); + this.chart1.Name = "chart1"; + series1.BorderWidth = 3; + series1.ChartArea = "ChartArea1"; + series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; + series1.IsValueShownAsLabel = true; + series1.IsXValueIndexed = true; + series1.LabelFormat = "F"; + series1.MarkerBorderColor = System.Drawing.Color.Black; + series1.MarkerSize = 7; + series1.MarkerStyle = System.Windows.Forms.DataVisualization.Charting.MarkerStyle.Circle; + series1.Name = "Series1"; + this.chart1.Series.Add(series1); + this.chart1.Size = new System.Drawing.Size(640, 480); + this.chart1.TabIndex = 0; + this.chart1.Text = "chart1"; + title1.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Bold); + title1.Name = "Title"; + title1.Text = "Chart"; + this.chart1.Titles.Add(title1); + // + // label1 + // + this.label1.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(242, 15); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(46, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Therapy"; + // + // label2 + // + this.label2.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(189, 69); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(99, 13); + this.label2.TabIndex = 2; + this.label2.Text = "Performance Metric"; + // + // comboBoxTherapy + // + this.comboBoxTherapy.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.comboBoxTherapy.FormattingEnabled = true; + this.comboBoxTherapy.Location = new System.Drawing.Point(294, 12); + this.comboBoxTherapy.Name = "comboBoxTherapy"; + this.comboBoxTherapy.Size = new System.Drawing.Size(141, 21); + this.comboBoxTherapy.TabIndex = 3; + this.comboBoxTherapy.SelectedIndexChanged += new System.EventHandler(this.comboBoxTherapy_SelectedIndexChanged); + // + // comboBoxMetric + // + this.comboBoxMetric.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.comboBoxMetric.FormattingEnabled = true; + this.comboBoxMetric.Location = new System.Drawing.Point(294, 66); + this.comboBoxMetric.Name = "comboBoxMetric"; + this.comboBoxMetric.Size = new System.Drawing.Size(141, 21); + this.comboBoxMetric.TabIndex = 4; + this.comboBoxMetric.SelectedIndexChanged += new System.EventHandler(this.comboBoxMetric_SelectedIndexChanged); + // + // buttonSave + // + this.buttonSave.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.buttonSave.Location = new System.Drawing.Point(214, 594); + this.buttonSave.Name = "buttonSave"; + this.buttonSave.Size = new System.Drawing.Size(75, 23); + this.buttonSave.TabIndex = 5; + this.buttonSave.Text = "Save"; + this.buttonSave.UseVisualStyleBackColor = true; + this.buttonSave.Click += new System.EventHandler(this.buttonSave_Click); + // + // buttonCopy + // + this.buttonCopy.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.buttonCopy.Location = new System.Drawing.Point(295, 594); + this.buttonCopy.Name = "buttonCopy"; + this.buttonCopy.Size = new System.Drawing.Size(75, 23); + this.buttonCopy.TabIndex = 6; + this.buttonCopy.Text = "Copy"; + this.buttonCopy.UseVisualStyleBackColor = true; + this.buttonCopy.Click += new System.EventHandler(this.buttonCopy_Click); + // + // buttonClose + // + this.buttonClose.Anchor = System.Windows.Forms.AnchorStyles.Bottom; + this.buttonClose.Location = new System.Drawing.Point(376, 594); + this.buttonClose.Name = "buttonClose"; + this.buttonClose.Size = new System.Drawing.Size(75, 23); + this.buttonClose.TabIndex = 7; + this.buttonClose.Text = "Close"; + this.buttonClose.UseVisualStyleBackColor = true; + this.buttonClose.Click += new System.EventHandler(this.buttonClose_Click); + // + // comboBoxTask + // + this.comboBoxTask.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.comboBoxTask.FormattingEnabled = true; + this.comboBoxTask.Location = new System.Drawing.Point(294, 39); + this.comboBoxTask.Name = "comboBoxTask"; + this.comboBoxTask.Size = new System.Drawing.Size(141, 21); + this.comboBoxTask.TabIndex = 9; + this.comboBoxTask.SelectedIndexChanged += new System.EventHandler(this.comboBoxTask_SelectedIndexChanged); + // + // label3 + // + this.label3.Anchor = System.Windows.Forms.AnchorStyles.Top; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(257, 42); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(31, 13); + this.label3.TabIndex = 8; + this.label3.Text = "Task"; + // + // FormPerformance + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(664, 629); + this.Controls.Add(this.comboBoxTask); + this.Controls.Add(this.label3); + this.Controls.Add(this.buttonClose); + this.Controls.Add(this.buttonCopy); + this.Controls.Add(this.buttonSave); + this.Controls.Add(this.comboBoxMetric); + this.Controls.Add(this.comboBoxTherapy); + this.Controls.Add(this.label2); + this.Controls.Add(this.label1); + this.Controls.Add(this.chart1); + this.Name = "FormPerformance"; + this.Text = "Performance Metrics"; + ((System.ComponentModel.ISupportInitialize)(this.chart1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataVisualization.Charting.Chart chart1; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.ComboBox comboBoxTherapy; + private System.Windows.Forms.ComboBox comboBoxMetric; + private System.Windows.Forms.Button buttonSave; + private System.Windows.Forms.Button buttonCopy; + private System.Windows.Forms.Button buttonClose; + private System.Windows.Forms.ComboBox comboBoxTask; + private System.Windows.Forms.Label label3; + + + } +} \ No newline at end of file diff --git a/FormPerformance.cs b/FormPerformance.cs new file mode 100644 index 0000000..1977a81 --- /dev/null +++ b/FormPerformance.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Drawing.Imaging; +using System.Text; +using System.Windows.Forms; +using System.Windows.Forms.DataVisualization.Charting; + +namespace TheraWii +{ + public partial class FormPerformance : Form + { + private Profile profile; + private string therapy, task; + private PerformanceMetricType metric; + + public FormPerformance(Profile p) + { + InitializeComponent(); + + profile = p; + + comboBoxMetric.DataSource = PerformanceMetrics.PerformanceMetricStrings; + comboBoxTherapy.DataSource = profile.GetAllTherapies(); + } + + private void comboBoxTherapy_SelectedIndexChanged(object sender, EventArgs e) + { + therapy = (string)comboBoxTherapy.SelectedItem; + comboBoxTask.DataSource = profile.GetAllTasks(therapy); + } + + private void comboBoxTask_SelectedIndexChanged(object sender, EventArgs e) + { + task = (string)comboBoxTask.SelectedItem; + metric = profile.GetPrimaryMetric(therapy, task); + + comboBoxMetric.SelectedIndex = -1; + comboBoxMetric.SelectedIndex = (int)metric; + } + + private void comboBoxMetric_SelectedIndexChanged(object sender, EventArgs e) + { + if (0 <= comboBoxMetric.SelectedIndex + && comboBoxMetric.SelectedIndex < PerformanceMetrics.PerformanceMetricStrings.Length) + { + metric = (PerformanceMetricType)comboBoxMetric.SelectedIndex; + updateChart(); + } + } + + private void updateChart() + { + DataPoints points = profile.GetMetricPoints(therapy, task, metric); + chart1.Series["Series1"].Points.DataBindXY(points.Xs, points.Ys); + //chart1.Series["Series1"].IsXValueIndexed = true; + chart1.Titles[0].Text = PerformanceMetrics.PerformanceMetricStrings[(int)metric]; + + switch (metric) + { + case PerformanceMetricType.TotalTime: + case PerformanceMetricType.TimeInRegion: + case PerformanceMetricType.TimeOutRegion: + chart1.ChartAreas[0].AxisY.Title = "Seconds"; + break; + case PerformanceMetricType.PathEfficiency: + chart1.ChartAreas[0].AxisY.Title = "Path Distance / Path Length"; + break; + case PerformanceMetricType.MotionArea: + chart1.ChartAreas[0].AxisY.Title = "Distance Units Square"; + break; + case PerformanceMetricType.SpeedAverage: + chart1.ChartAreas[0].AxisY.Title = "Distance Units per Second"; + break; + default: + chart1.ChartAreas[0].AxisY.Title = "Distance Units"; + break; + } + } + + private void buttonSave_Click(object sender, EventArgs e) + { + // Create a new save file dialog + SaveFileDialog saveFileDialog1 = new SaveFileDialog(); + + // Sets the current file name filter string, which determines + // the choices that appear in the "Save as file type" or + // "Files of type" box in the dialog box. + saveFileDialog1.Filter = "PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg|EMF-Plus (*.emf)|*.emf|EMF-Dual (*.emf)|*.emf|EMF (*.emf)|*.emf|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|Bitmap (*.bmp)|*.bmp"; + saveFileDialog1.FilterIndex = 1; + saveFileDialog1.RestoreDirectory = true; + + // Set image file format + if (saveFileDialog1.ShowDialog() == DialogResult.OK) + { + ChartImageFormat format = ChartImageFormat.Bmp; + + if (saveFileDialog1.FileName.EndsWith("bmp")) + { + format = ChartImageFormat.Bmp; + } + else if (saveFileDialog1.FileName.EndsWith("jpg")) + { + format = ChartImageFormat.Jpeg; + } + else if (saveFileDialog1.FileName.EndsWith("emf") && saveFileDialog1.FilterIndex == 3) + { + format = ChartImageFormat.EmfPlus; + } + else if (saveFileDialog1.FileName.EndsWith("emf") && saveFileDialog1.FilterIndex == 4) + { + format = ChartImageFormat.EmfDual; + } + else if (saveFileDialog1.FileName.EndsWith("emf")) + { + format = ChartImageFormat.Emf; + } + else if (saveFileDialog1.FileName.EndsWith("gif")) + { + format = ChartImageFormat.Gif; + } + else if (saveFileDialog1.FileName.EndsWith("png")) + { + format = ChartImageFormat.Png; + } + else if (saveFileDialog1.FileName.EndsWith("tif")) + { + format = ChartImageFormat.Tiff; + } + + // Save image + chart1.SaveImage(saveFileDialog1.FileName, format); + } + + } + + private void buttonCopy_Click(object sender, EventArgs e) + { + // create a memory stream to save the chart image + System.IO.MemoryStream stream = new System.IO.MemoryStream(); + + // save the chart image to the stream + chart1.SaveImage(stream, ImageFormat.Png); + + // create a bitmap using the stream + Bitmap bmp = new Bitmap(stream); + + // save the bitmap to the clipboard + Clipboard.SetDataObject(bmp); + } + + private void buttonClose_Click(object sender, EventArgs e) + { + this.Close(); + } + + + } +} diff --git a/FormPerformance.resx b/FormPerformance.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormPerformance.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormProfileChooser.Designer.cs b/FormProfileChooser.Designer.cs new file mode 100644 index 0000000..ff71189 --- /dev/null +++ b/FormProfileChooser.Designer.cs @@ -0,0 +1,115 @@ +namespace TheraWii +{ + partial class FormProfileChooser + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.labelInstructions = new System.Windows.Forms.Label(); + this.listProfiles = new System.Windows.Forms.ListBox(); + this.buttonAddProfile = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // buttonOK + // + this.buttonOK.Location = new System.Drawing.Point(241, 134); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 0; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(330, 134); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 1; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // labelInstructions + // + this.labelInstructions.AutoSize = true; + this.labelInstructions.Location = new System.Drawing.Point(12, 12); + this.labelInstructions.Name = "labelInstructions"; + this.labelInstructions.Size = new System.Drawing.Size(264, 13); + this.labelInstructions.TabIndex = 2; + this.labelInstructions.Text = "Please select a profile from the list below and click OK."; + // + // listProfiles + // + this.listProfiles.FormattingEnabled = true; + this.listProfiles.Location = new System.Drawing.Point(15, 28); + this.listProfiles.Name = "listProfiles"; + this.listProfiles.Size = new System.Drawing.Size(390, 95); + this.listProfiles.TabIndex = 3; + this.listProfiles.DoubleClick += new System.EventHandler(this.listProfiles_DoubleClick); + // + // buttonAddProfile + // + this.buttonAddProfile.Location = new System.Drawing.Point(15, 131); + this.buttonAddProfile.Name = "buttonAddProfile"; + this.buttonAddProfile.Size = new System.Drawing.Size(74, 26); + this.buttonAddProfile.TabIndex = 16; + this.buttonAddProfile.Text = "Create New"; + this.buttonAddProfile.UseVisualStyleBackColor = true; + this.buttonAddProfile.Click += new System.EventHandler(this.buttonAddProfile_Click); + // + // FormProfileChooser + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(417, 169); + this.Controls.Add(this.buttonAddProfile); + this.Controls.Add(this.listProfiles); + this.Controls.Add(this.labelInstructions); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOK); + this.KeyPreview = true; + this.Name = "FormProfileChooser"; + this.Text = "Profile Chooser"; + this.Load += new System.EventHandler(this.FormProfileChooser_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormProfileChooser_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormProfileChooser_FormClosing); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.Label labelInstructions; + private System.Windows.Forms.ListBox listProfiles; + private System.Windows.Forms.Button buttonAddProfile; + } +} \ No newline at end of file diff --git a/FormProfileChooser.cs b/FormProfileChooser.cs new file mode 100644 index 0000000..5579bfc --- /dev/null +++ b/FormProfileChooser.cs @@ -0,0 +1,116 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormProfileChooser : Form + { + private Form parent; + private static Point prevLocation; + public FormProfileChooser(List profiles, Form f) + { + InitializeComponent(); + parent = f; + //make sure users can only select one profile at a time + listProfiles.SelectionMode = SelectionMode.One; + this.listProfilesRefresh(); + if (listProfiles.Items.Count > 0) + { + listProfiles.SelectedIndex = 0; + listProfiles.Select(); + } + } + + public String getSelectedProfileName() + { + if (listProfiles.SelectedItem != null) + { + return listProfiles.SelectedItem.ToString(); + } + else + { + return null; + } + } + + private void listProfilesRefresh() + { + listProfiles.Items.Clear(); + foreach (Profile p in ((FormMain)parent).dm.Profiles) + { + listProfiles.Items.Add(p.Name); + } + } + + private void buttonOK_Click(object sender, EventArgs e) + { + if (listProfiles.SelectedItems.Count == 1) + { + this.DialogResult = DialogResult.OK; + this.Close(); + } + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void buttonAddProfile_Click(object sender, EventArgs e) + { + Form f = new FormNewProfile(((FormMain)parent).dm); + f.Tag = this.Tag; + f.ShowDialog(); + ((FormMain)parent).ds.SerializeDataModel(); + ((FormMain)parent).listProfilesRefresh(); + this.listProfilesRefresh(); + if (this.listProfiles.Items.Count > 0) + this.listProfiles.SelectedIndex = this.listProfiles.Items.Count - 1; + } + + private void FormProfileChooser_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonOK_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void listProfiles_DoubleClick(object sender, EventArgs e) + { + buttonOK_Click(sender, e); + } + + private void FormProfileChooser_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormProfileChooser_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + } +} \ No newline at end of file diff --git a/FormProfileChooser.resx b/FormProfileChooser.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormProfileChooser.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormRepeatTask.cs b/FormRepeatTask.cs new file mode 100644 index 0000000..1b030ef --- /dev/null +++ b/FormRepeatTask.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormRepeatTask : Form + { + private RepeatTask rTask; + private static Point prevLocation; + + public FormRepeatTask(RepeatTask t) + { + InitializeComponent(); + rTask = t; + + textBoxName.Text = rTask.Name; + + // Load Repeat settings + numericUpDownRepetitions.Value = rTask.numRepeats; + numericUpDownTimeLimit.Value = rTask.TimeLimit; + switch (rTask.RepeatEndType) + { + case RepeatEndType.Repetitions: + radioButtonRepetitions.Checked = true; + numericUpDownRepetitions.Enabled = true; + numericUpDownTimeLimit.Enabled = false; + break; + case RepeatEndType.TimeLimit: + radioButtonTimeLimit.Checked = true; + numericUpDownRepetitions.Enabled = false; + numericUpDownTimeLimit.Enabled = true; + break; + case RepeatEndType.Both: + radioButtonBoth.Checked = true; + numericUpDownRepetitions.Enabled = true; + numericUpDownTimeLimit.Enabled = true; + break; + default: + throw new System.Exception("Unknown RepeatEndType!"); + } + } + + private void buttonOk_Click(object sender, EventArgs e) + { + rTask.Name = textBoxName.Text; + rTask.numRepeats = (int)numericUpDownRepetitions.Value; + rTask.TimeLimit = (int)numericUpDownTimeLimit.Value; + if (radioButtonBoth.Checked == true) + { + rTask.RepeatEndType = RepeatEndType.Both; + rTask.endCondition = new Repeat_BothEndCondition(); + ((Repeat_BothEndCondition)rTask.endCondition).Initialize(rTask.numRepeats, rTask.TimeLimit); + } + else if (radioButtonRepetitions.Checked == true) + { + rTask.RepeatEndType = RepeatEndType.Repetitions; + rTask.endCondition = new Repeat_rEndCondition(); + ((Repeat_rEndCondition)rTask.endCondition).Initialize(rTask.numRepeats); + } + else if (radioButtonTimeLimit.Checked == true) + { + rTask.RepeatEndType = RepeatEndType.TimeLimit; + rTask.endCondition = new Repeat_tEndCondition(); + ((Repeat_tEndCondition)rTask.endCondition).Initialize(rTask.TimeLimit); + } + else + { + throw new System.Exception("Repeat Task Radio Button error"); + } + this.DialogResult = DialogResult.OK; + this.Close(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + this.DialogResult = DialogResult.Cancel; + this.Close(); + } + + private void radioButtonRepetitions_CheckedChanged(object sender, EventArgs e) + { + numericUpDownRepetitions.Enabled = true; + numericUpDownTimeLimit.Enabled = false; + } + + private void radioButtonTimeLimit_CheckedChanged(object sender, EventArgs e) + { + numericUpDownRepetitions.Enabled = false; + numericUpDownTimeLimit.Enabled = true; + } + + private void radioButtonBoth_CheckedChanged(object sender, EventArgs e) + { + numericUpDownRepetitions.Enabled = true; + numericUpDownTimeLimit.Enabled = true; + } + + private void FormRepeatTask_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(13))) + { + buttonOk_Click(this, new EventArgs()); + } + else if (e.KeyChar.Equals(Convert.ToChar(27))) + { + buttonCancel_Click(this, new EventArgs()); + } + } + + private void FormRepeatTask_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormRepeatTask_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + } +} \ No newline at end of file diff --git a/FormRepeatTask.designer.cs b/FormRepeatTask.designer.cs new file mode 100644 index 0000000..04db6b8 --- /dev/null +++ b/FormRepeatTask.designer.cs @@ -0,0 +1,206 @@ +namespace TheraWii +{ + partial class FormRepeatTask + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.TaskTitle = new System.Windows.Forms.Label(); + this.textBoxName = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.buttonOk = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.numericUpDownRepetitions = new System.Windows.Forms.NumericUpDown(); + this.radioButtonRepetitions = new System.Windows.Forms.RadioButton(); + this.radioButtonTimeLimit = new System.Windows.Forms.RadioButton(); + this.radioButtonBoth = new System.Windows.Forms.RadioButton(); + this.numericUpDownTimeLimit = new System.Windows.Forms.NumericUpDown(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRepetitions)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeLimit)).BeginInit(); + this.SuspendLayout(); + // + // TaskTitle + // + this.TaskTitle.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.TaskTitle.AutoSize = true; + this.TaskTitle.Font = new System.Drawing.Font("Microsoft Sans Serif", 14F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.TaskTitle.Location = new System.Drawing.Point(26, 9); + this.TaskTitle.Name = "TaskTitle"; + this.TaskTitle.Size = new System.Drawing.Size(185, 24); + this.TaskTitle.TabIndex = 0; + this.TaskTitle.Text = "Repeat Task Options"; + this.TaskTitle.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // textBoxName + // + this.textBoxName.Location = new System.Drawing.Point(96, 52); + this.textBoxName.Name = "textBoxName"; + this.textBoxName.Size = new System.Drawing.Size(120, 20); + this.textBoxName.TabIndex = 1; + this.textBoxName.Text = "Intro"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(17, 55); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(38, 13); + this.label1.TabIndex = 2; + this.label1.Text = "Name:"; + // + // buttonOk + // + this.buttonOk.Location = new System.Drawing.Point(40, 179); + this.buttonOk.Name = "buttonOk"; + this.buttonOk.Size = new System.Drawing.Size(75, 23); + this.buttonOk.TabIndex = 10; + this.buttonOk.Text = "OK"; + this.buttonOk.UseVisualStyleBackColor = true; + this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); + // + // buttonCancel + // + this.buttonCancel.Location = new System.Drawing.Point(121, 179); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 11; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // numericUpDownRepetitions + // + this.numericUpDownRepetitions.Location = new System.Drawing.Point(172, 90); + this.numericUpDownRepetitions.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.numericUpDownRepetitions.Name = "numericUpDownRepetitions"; + this.numericUpDownRepetitions.Size = new System.Drawing.Size(44, 20); + this.numericUpDownRepetitions.TabIndex = 12; + this.numericUpDownRepetitions.Value = new decimal(new int[] { + 5, + 0, + 0, + 0}); + // + // radioButtonRepetitions + // + this.radioButtonRepetitions.AutoSize = true; + this.radioButtonRepetitions.Checked = true; + this.radioButtonRepetitions.Location = new System.Drawing.Point(20, 90); + this.radioButtonRepetitions.Name = "radioButtonRepetitions"; + this.radioButtonRepetitions.Size = new System.Drawing.Size(79, 17); + this.radioButtonRepetitions.TabIndex = 14; + this.radioButtonRepetitions.TabStop = true; + this.radioButtonRepetitions.Text = "Repetitions"; + this.radioButtonRepetitions.UseVisualStyleBackColor = true; + this.radioButtonRepetitions.CheckedChanged += new System.EventHandler(this.radioButtonRepetitions_CheckedChanged); + // + // radioButtonTimeLimit + // + this.radioButtonTimeLimit.AutoSize = true; + this.radioButtonTimeLimit.Location = new System.Drawing.Point(20, 116); + this.radioButtonTimeLimit.Name = "radioButtonTimeLimit"; + this.radioButtonTimeLimit.Size = new System.Drawing.Size(124, 17); + this.radioButtonTimeLimit.TabIndex = 15; + this.radioButtonTimeLimit.Text = "Time Limit (Seconds)"; + this.radioButtonTimeLimit.UseVisualStyleBackColor = true; + this.radioButtonTimeLimit.CheckedChanged += new System.EventHandler(this.radioButtonTimeLimit_CheckedChanged); + // + // radioButtonBoth + // + this.radioButtonBoth.AutoSize = true; + this.radioButtonBoth.Location = new System.Drawing.Point(20, 142); + this.radioButtonBoth.Name = "radioButtonBoth"; + this.radioButtonBoth.Size = new System.Drawing.Size(48, 17); + this.radioButtonBoth.TabIndex = 16; + this.radioButtonBoth.Text = "Both"; + this.radioButtonBoth.UseVisualStyleBackColor = true; + this.radioButtonBoth.CheckedChanged += new System.EventHandler(this.radioButtonBoth_CheckedChanged); + // + // numericUpDownTimeLimit + // + this.numericUpDownTimeLimit.Enabled = false; + this.numericUpDownTimeLimit.Location = new System.Drawing.Point(172, 116); + this.numericUpDownTimeLimit.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.numericUpDownTimeLimit.Name = "numericUpDownTimeLimit"; + this.numericUpDownTimeLimit.Size = new System.Drawing.Size(44, 20); + this.numericUpDownTimeLimit.TabIndex = 18; + this.numericUpDownTimeLimit.Value = new decimal(new int[] { + 60, + 0, + 0, + 0}); + // + // FormRepeatTask + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(237, 214); + this.Controls.Add(this.numericUpDownTimeLimit); + this.Controls.Add(this.radioButtonBoth); + this.Controls.Add(this.radioButtonTimeLimit); + this.Controls.Add(this.radioButtonRepetitions); + this.Controls.Add(this.numericUpDownRepetitions); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOk); + this.Controls.Add(this.label1); + this.Controls.Add(this.textBoxName); + this.Controls.Add(this.TaskTitle); + this.KeyPreview = true; + this.Name = "FormRepeatTask"; + this.Text = "Repeat Task"; + this.Load += new System.EventHandler(this.FormRepeatTask_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormRepeatTask_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormRepeatTask_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownRepetitions)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDownTimeLimit)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label TaskTitle; + private System.Windows.Forms.TextBox textBoxName; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Button buttonOk; + private System.Windows.Forms.Button buttonCancel; + private System.Windows.Forms.NumericUpDown numericUpDownRepetitions; + private System.Windows.Forms.RadioButton radioButtonRepetitions; + private System.Windows.Forms.RadioButton radioButtonTimeLimit; + private System.Windows.Forms.RadioButton radioButtonBoth; + private System.Windows.Forms.NumericUpDown numericUpDownTimeLimit; + } +} \ No newline at end of file diff --git a/FormRepeatTask.resx b/FormRepeatTask.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormRepeatTask.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/FormSessionDetail.Designer.cs b/FormSessionDetail.Designer.cs new file mode 100644 index 0000000..e2188dd --- /dev/null +++ b/FormSessionDetail.Designer.cs @@ -0,0 +1,115 @@ +using System.Data; +using System.Collections.Generic; +namespace TheraWii +{ + partial class FormSessionDetail + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + public void displaySessionDetails(Session s) + { + DScsv file = new DScsv(); + List data = file.getData(s.GetDataFilePath()); + int max = 0; + int current = 0; + for(int i = 0; i < data.Count; i++) + { + current = 0; + for(int j = 0; j < data[i].Length; j++) + { + current++; + } + if (current > max) + max = current; + } + + DataTable dt = new DataTable("Session"); + //name columns + for (int i = 0; i < max; i++) + { + dt.Columns.Add((i+1).ToString()); + } + //add rows + for(int i = 0; i < data.Count; i++) + { + dt.Rows.Add(data[i]); + } + DataView dv = new DataView(dt); + dataGridView1.DataSource = dv; + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.dataGridView1 = new System.Windows.Forms.DataGridView(); + this.label1 = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); + this.SuspendLayout(); + // + // dataGridView1 + // + this.dataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.dataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.dataGridView1.Location = new System.Drawing.Point(12, 38); + this.dataGridView1.Name = "dataGridView1"; + this.dataGridView1.Size = new System.Drawing.Size(562, 342); + this.dataGridView1.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 16F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.label1.Location = new System.Drawing.Point(7, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(371, 26); + this.label1.TabIndex = 1; + this.label1.Text = "Session Detail for Profile on 10/24/08"; + // + // FormSessionDetail + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(586, 392); + this.Controls.Add(this.label1); + this.Controls.Add(this.dataGridView1); + this.KeyPreview = true; + this.Name = "FormSessionDetail"; + this.Text = "SessionDetail"; + this.Load += new System.EventHandler(this.FormSessionDetail_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.FormSessionDetail_KeyPress); + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FormSessionDetail_FormClosing); + ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView dataGridView1; + private System.Windows.Forms.Label label1; + } +} \ No newline at end of file diff --git a/FormSessionDetail.cs b/FormSessionDetail.cs new file mode 100644 index 0000000..27f2f1e --- /dev/null +++ b/FormSessionDetail.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace TheraWii +{ + public partial class FormSessionDetail : Form + { + private static Point prevLocation; + public FormSessionDetail(Session s) + { + InitializeComponent(); + try + { + displaySessionDetails(s); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "Load error", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void FormSessionDetail_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar.Equals(Convert.ToChar(27))) + { + this.Close(); + } + } + + private void FormSessionDetail_Load(object sender, EventArgs e) + { + if (prevLocation == null || prevLocation.X == 0 && prevLocation.Y == 0) + { + Point center = ((FormMain)this.Tag).getCenterPosition(); + Point newPosition = new Point(); + newPosition.X = center.X - this.Width / 2; + newPosition.Y = center.Y - this.Height / 2; + if (newPosition.Y < 1) + newPosition.Y = 1; + if (newPosition.X < 1) + newPosition.X = 1; + this.Location = newPosition; + } + else + this.Location = prevLocation; + } + + private void FormSessionDetail_FormClosing(object sender, FormClosingEventArgs e) + { + prevLocation = this.Location; + } + } +} \ No newline at end of file diff --git a/FormSessionDetail.resx b/FormSessionDetail.resx new file mode 100755 index 0000000..ff31a6d --- /dev/null +++ b/FormSessionDetail.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Game.cs b/Game.cs new file mode 100644 index 0000000..cbcf39b --- /dev/null +++ b/Game.cs @@ -0,0 +1,231 @@ +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Audio; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.GamerServices; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Net; +using Microsoft.Xna.Framework.Storage; + +namespace TheraWii +{ + /// + /// This is the main type for your game + /// + public class Game : Microsoft.Xna.Framework.Game + { + DialogTask goodbye; + GraphicsDeviceManager graphics; + SpriteBatch spriteBatch; + SpriteFont font; + Therapy therapy; + Profile profile; + Session session; + bool justWentFullScreen = false; + + Matrix worldMatrix; + Matrix viewMatrix; + Matrix projectionMatrix; + BasicEffect basicEffect; + VertexDeclaration vertexDeclaration; + + Line xAxis, yAxis; + + private const int PREFERRED_WIDTH = 1024; + private const int PREFERRED_HEIGHT = 768; + private const long defaultTargetElapsedTime = 333333; // 1/30th of a second in 100s of nanoseconds (ticks).; + + public Game(Therapy t, Profile p, bool fullscreen) + { + + therapy = t; + profile = p; + session = new Session(); + session.Initialize(profile, therapy); + profile.Sessions.Add(session); + graphics = new GraphicsDeviceManager(this); + Content.RootDirectory = "Content"; + graphics.PreferredBackBufferWidth = PREFERRED_WIDTH; // GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width; + graphics.PreferredBackBufferHeight = PREFERRED_HEIGHT; // GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height; + graphics.IsFullScreen = fullscreen; + InputDevice.GAME_WIDTH = graphics.PreferredBackBufferWidth; + InputDevice.GAME_HEIGHT = graphics.PreferredBackBufferHeight; + this.IsFixedTimeStep = true; + this.TargetElapsedTime = new TimeSpan(defaultTargetElapsedTime); + graphics.PreferMultiSampling = true; + } + + /// + /// Allows the game to perform any initialization it needs to before starting to run. + /// This is where it can query for any required services and load any non-graphic + /// related content. Calling base.Initialize will enumerate through any components + /// and initialize them as well. + /// + protected override void Initialize() + { + InitializeTransform(); + InitializeEffect(); + xAxis = new Line(GraphicsDevice, new Vector3(-1, 0, 0), new Vector3(1, 0, 0), Color.Gray); + yAxis = new Line(GraphicsDevice, new Vector3(0, -1, 0), new Vector3(0, 1, 0), Color.Gray); + Mouse.SetPosition(PREFERRED_WIDTH / 2, PREFERRED_HEIGHT / 2); + base.Initialize(); + } + + /// + /// LoadContent will be called once per game and is the place to load + /// all of your content. + /// + protected override void LoadContent() + { + // Create a new SpriteBatch, which can be used to draw textures. + spriteBatch = new SpriteBatch(GraphicsDevice); + therapy.tasks.Initialize(graphics, Content, spriteBatch, PREFERRED_WIDTH, PREFERRED_HEIGHT, session, Vector3.Zero); + font = Content.Load("Fonts\\GameFont"); + } + + /// + /// UnloadContent will be called once per game and is the place to unload + /// all content. + /// + protected override void UnloadContent() + { + Content.Unload(); + } + + /// + /// Initializes the transforms used by the game. + /// + private void InitializeTransform() + { + viewMatrix = Matrix.CreateLookAt( + new Vector3(0.0f, 0.0f, 10.0f), + Vector3.Zero, + Vector3.Up + ); + + projectionMatrix = Matrix.CreatePerspective( + 0.2f, + 0.2f, + 1.0f, 1000.0f); + } + + /// + /// Initializes the effect (loading, parameter setting, and technique selection) + /// used by the game. + /// + private void InitializeEffect() + { + vertexDeclaration = new VertexDeclaration( + GraphicsDevice, + VertexPositionColor.VertexElements + ); + + basicEffect = new BasicEffect(GraphicsDevice, null); + basicEffect.VertexColorEnabled = true; + + worldMatrix = Matrix.Identity; + basicEffect.World = worldMatrix; + basicEffect.View = viewMatrix; + basicEffect.Projection = projectionMatrix; + } + + + /// + /// Allows the game to run logic such as updating the world, + /// checking for collisions, gathering input, and playing audio. + /// + /// Provides a snapshot of timing values. + protected override void Update(GameTime gameTime) + { + WiiUse.Poll(); + + // Allows the game to exit + if (Keyboard.GetState().IsKeyDown(Keys.Escape)) + { + this.Exit(); + } + + // Toggle Full-screen with Alt-Enter + KeyboardState keyState = Keyboard.GetState(); + if ((keyState.IsKeyDown(Keys.RightAlt) || + keyState.IsKeyDown(Keys.LeftAlt)) && + keyState.IsKeyDown(Keys.Enter)) + { + if (!justWentFullScreen) + { + graphics.ToggleFullScreen(); + justWentFullScreen = true; + } + } + else + { + justWentFullScreen = false; + } + // Do we exit + if (therapy.tasks.isComplete() && goodbye == null) + { + goodbye = new DialogTask(); + goodbye.endCondition = new TimeLimitEndCondition(); + ((TimeLimitEndCondition)goodbye.endCondition).TimeLimit = (double)2.0; + ((TimeLimitEndCondition)goodbye.endCondition).Type = TimeLimitType.TotalTime; + goodbye.DisplayText = "Therapy Complete!"; + goodbye.Name = "Complete"; + goodbye.Initialize(this.graphics, this.Content, this.spriteBatch, PREFERRED_WIDTH, PREFERRED_HEIGHT, this.session, Vector3.Zero); + goodbye.textBox.Initialize(goodbye.DisplayText, this.Content, this.spriteBatch, PREFERRED_WIDTH, PREFERRED_HEIGHT); + } + if (goodbye != null) + { + if (goodbye.isComplete()) + this.Exit(); + else + goodbye.Update(gameTime); + } + else + { + // Update Current task + therapy.tasks.Update(gameTime); + } + base.Update(gameTime); + + + } + + protected override void OnExiting(object sender, EventArgs args) + { + base.OnExiting(sender, args); + session.Finish(); + UnloadContent(); + graphics.GraphicsDevice.Dispose(); + } + + /// + /// This is called when the game should draw itself. + /// + /// Provides a snapshot of timing values. + protected override void Draw(GameTime gameTime) + { + graphics.GraphicsDevice.Clear(Color.White); + GraphicsDevice.VertexDeclaration = vertexDeclaration; + + basicEffect.Begin(); + foreach (EffectPass pass in basicEffect.CurrentTechnique.Passes) + { + pass.Begin(); + + xAxis.Draw(); + yAxis.Draw(); + + if (!therapy.tasks.isComplete()) + therapy.tasks.Draw(gameTime); + else if (goodbye != null) + goodbye.Draw(gameTime); + pass.End(); + } + basicEffect.End(); + + base.Draw(gameTime); + } + } +} diff --git a/GameTextBox.cs b/GameTextBox.cs new file mode 100644 index 0000000..4cc08b2 --- /dev/null +++ b/GameTextBox.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Audio; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.GamerServices; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Net; +using Microsoft.Xna.Framework.Storage; +using System.Text.RegularExpressions; + +namespace TheraWii +{ + public class GameTextBox + { + private const int LINE_HEIGHT = 20; /* height of a line of text in pixels */ + private const int CHARACTER_WIDTH = 10; /* width of one character in pixels */ + private const int BORDER_SIZE = 20; /* the border size between the text and edge of background */ + private String[] displayStrings; + private int textWidth, textHeight, boxWidth, boxHeight, textX, textY, boxX, boxY, centerX, centerY; + private SpriteFont font; + private SpriteBatch spriteBatch; + private Texture2D textBackground; + + public GameTextBox() {} + + public void Initialize(String str, ContentManager c, SpriteBatch sb, int screenWidth, int screenHeight) + { + displayStrings = Regex.Split(str, "\n");; + spriteBatch = sb; + + font = c.Load("Fonts\\GameFont"); + textBackground = c.Load("Textures\\text_background"); + + /* Determine the number lines in the display string and the number of characters in the longest line */ + int maxLength = 0, numLines = 0; + foreach( String s in this.displayStrings ) { + numLines++; + if ( s.Length > maxLength ) + maxLength = s.Length; + } + + /* determine the size in screen coords of the text and the background */ + textWidth = CHARACTER_WIDTH * maxLength; + textHeight = LINE_HEIGHT * numLines; + boxWidth = textWidth + 2 * BORDER_SIZE; + boxHeight = textHeight + 2 * BORDER_SIZE; + + /* determine where the center of the screen is */ + centerX = screenWidth / 2; + centerY = screenHeight / 2; + + /* determine where the upper left corner of the text and background box should be by centering + * the text and box in the screen coordinates */ + textX = centerX - textWidth / 2; + textY = centerY - textHeight / 2; + boxX = centerX - boxWidth / 2; + boxY = centerY - boxHeight / 2; + } + + public void Draw() + { + /* draw all the characters in the display string letter by letter */ + spriteBatch.Begin(SpriteBlendMode.AlphaBlend); + spriteBatch.Draw(textBackground, new Rectangle(boxX, boxY, boxWidth, boxHeight), Color.White); + int x = textX, y = textY; + foreach (String s in this.displayStrings) + { + spriteBatch.DrawString(font, s, new Vector2(x, y), Color.Orange); + y += LINE_HEIGHT; + } + spriteBatch.End(); + } + } +} diff --git a/Hoop.cs b/Hoop.cs new file mode 100644 index 0000000..20fb4dd --- /dev/null +++ b/Hoop.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Content; + +namespace TheraWii +{ + class Hoop : Cuboid + { + + public Hoop(GraphicsDeviceManager g, ContentManager c, Vector3 position, Vector3 scale, Color color) + { + this.Scale = scale; + this.Position = position; + this.color = color.ToVector3(); + + graphics = g; + Content = c; + + aspectRatio = graphics.GraphicsDevice.Viewport.AspectRatio; + + cuboidModel = Content.Load("Models\\hoop"); + + } + + public override void Draw() + { + // Copy any parent transforms. + Matrix[] transforms = new Matrix[cuboidModel.Bones.Count]; + cuboidModel.CopyAbsoluteBoneTransformsTo(transforms); + + // Draw the model. A model can have multiple meshes, so loop. + foreach (ModelMesh mesh in cuboidModel.Meshes) + //ModelMesh mesh = cuboidModel.Meshes[1]; + { + // This is where the mesh orientation is set, as well as our camera and projection. + foreach (BasicEffect effect in mesh.Effects) + //BasicEffect effect = (BasicEffect)mesh.Effects[5]; + { + effect.EnableDefaultLighting(); + effect.PreferPerPixelLighting = true; + //effect.DiffuseColor = this.color; + effect.LightingEnabled = true; + //effect.DirectionalLight0.Direction = new Vector3(0.0f, 0.0f, 1.0f); + + effect.View = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up); + effect.Projection = Matrix.CreatePerspective(0.2f, 0.2f, 1.0f, 1000.0f); + + effect.World = transforms[mesh.ParentBone.Index] + * Matrix.CreateTranslation(0.0f, -12.5f, -67.0f) + * Matrix.CreateRotationY(MathHelper.ToRadians(-38.0f)) + * Matrix.CreateRotationX(MathHelper.ToRadians(10.0f)) + * Matrix.CreateScale(0.5f * 0.038f * Scale.X, + 0.5f * 0.044f * Scale.Y, + 0.5f * 0.038f * Scale.Z) + + * Matrix.CreateTranslation(Position) + //* Matrix.CreateTranslation(2.08f, -0.15f, -3.0f) + + ; + } + // Draw the mesh, using the effects set above. + mesh.Draw(); + } + } + } +} diff --git a/IRState.cs b/IRState.cs new file mode 100644 index 0000000..b397706 --- /dev/null +++ b/IRState.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace TheraWii +{ + class IRState : WiiControllerState + { + public float x; + public float y; + public float distance; + + + public IRState() + { + } + + public void Initialize() + { + x = 0; + y = 0; + distance = 0; + connected = false; + } + + public Boolean connected; + public Boolean isConnected() + { + return connected; + } + + internal IRState Copy() + { + return (IRState)this.MemberwiseClone(); + } + } +} diff --git a/InputDevice.cs b/InputDevice.cs new file mode 100644 index 0000000..fcd4b09 --- /dev/null +++ b/InputDevice.cs @@ -0,0 +1,587 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; + +namespace TheraWii +{ + public enum WiiType { BalanceBoard, Remote, Nunchuck, Mouse }; + [XmlInclude(typeof(InputBalanceBoard)), XmlInclude(typeof(InputMouse)), + XmlInclude(typeof(InputNunchuckJoystick)), XmlInclude(typeof(InputNunchuckRollPitch)), + XmlInclude(typeof(InputRemoteIR)), XmlInclude(typeof(InputRemoteRollPitch)), + XmlInclude(typeof(InputRemote)), XmlInclude(typeof(InputNunchuck)) + ] + public abstract class InputDevice + { + public abstract WiiType getInputEnum(); + public static string[] WiiTypeString = new string[] {"BalanceBoard", "Remote", "Nunchuck", "Mouse" }; + //public abstract void outputData(); + + // In range [-1.0, 1.0] + public abstract Vector3 getXYZ(); + public abstract void writeFields(DScsv output); + public abstract void writeStatus(DScsv output); + + [XmlIgnore] + public static int GAME_WIDTH; + [XmlIgnore] + public static int GAME_HEIGHT; + [XmlIgnore] + public InputHandling Handling; + protected float x, y, z; + protected float diffScaling = 0.01f; + protected Vector3 xyz; + protected const int AVG_SAMPLES = 15; + public static float alpha; + + public virtual void Initialize(Vector3 position) + { + x = position.X; + y = position.Y; + z = position.Z; + + xyz = new Vector3(position.X, position.Y, position.Z); + alpha = 2.0f / ((float)(AVG_SAMPLES + 1)); + } + + public virtual void Finish() + { + } + public InputDevice returnNew() + { + if (this.GetType() == typeof(InputBalanceBoard)) + { + return new InputBalanceBoard(); + } + else if (this.GetType() == typeof(InputRemoteIR)) + { + return new InputRemoteIR(); + } + else if (this.GetType() == typeof(InputRemoteRollPitch)) + { + return new InputRemoteRollPitch(); + } + else if (this.GetType() == typeof(InputNunchuckJoystick)) + { + return new InputNunchuckJoystick(); + } + else if (this.GetType() == typeof(InputNunchuckRollPitch)) + { + return new InputNunchuckRollPitch(); + } + else if (this.GetType() == typeof(InputMouse)) + { + return new InputMouse(); + } + else if (this.GetType() == typeof(InputNunchuck)) + { + return new InputNunchuck(); + } + else if (this.GetType() == typeof(InputRemote)) + { + return new InputRemote(); + } + else + { + return null; + } + } + protected void setDifferentialXYZ(float dx, float dy, float dz) + { + if (Handling == InputHandling.Absolute) + { + // Exponential moving average + Vector3 newSample = new Vector3(dx, dy, dz); + xyz = alpha * newSample + (1 - alpha) * xyz; + + x = xyz.X; + y = xyz.Y; + z = xyz.Z; + } + else + { + x = MathHelper.Clamp(x + dx * diffScaling, -1.0f, 1.0f); + y = MathHelper.Clamp(y + dy * diffScaling, -1.0f, 1.0f); + z = MathHelper.Clamp(z + dz * diffScaling, -1.0f, 1.0f); + } + } + + public static InputDevice[] GetUnusedInputs(InputDevice primary, List additionalInputs) + { + List unused = new List(); + List possible = new List(Input2D.GetPossibleInputs()); + possible.AddRange(Input3D.GetPossibleInputs()); + foreach (InputDevice id in possible) + { + if (id.GetType() != primary.GetType()) + { + bool found = false; + foreach (InputDevice addId in additionalInputs) + { + if (id.GetType() == addId.GetType()) + { + found = true; + } + } + if (found == false) + { + unused.Add(id); + } + } + } + return unused.ToArray(); + } + } + + public abstract class Input2D : InputDevice + { + public static Input2D[] GetPossibleInputs() + { + return new Input2D[] { + new InputBalanceBoard(), + new InputRemoteIR(), + new InputRemoteRollPitch(), + new InputNunchuckJoystick(), + new InputNunchuckRollPitch(), + new InputMouse() + }; + } + + public static int GetInputIndex(InputDevice i) + { + if (i.GetType() == typeof(InputBalanceBoard)) + { + return 0; + } + else if (i.GetType() == typeof(InputRemoteIR)) + { + return 1; + } + else if (i.GetType() == typeof(InputRemoteRollPitch)) + { + return 2; + } + else if (i.GetType() == typeof(InputNunchuckJoystick)) + { + return 3; + } + else if (i.GetType() == typeof(InputNunchuckRollPitch)) + { + return 4; + } + else if (i.GetType() == typeof(InputMouse)) + { + return 5; + } + else + { + return 0; + } + } + + + } + + public abstract class Input3D : InputDevice + { + + public static Input3D[] GetPossibleInputs() + { + return new Input3D[] { + new InputRemote(), + new InputNunchuck() + }; + } + + public static int GetInputIndex(InputDevice i) + { + if (i.GetType() == typeof(InputRemote)) + { + return 0; + } + else if (i.GetType() == typeof(InputNunchuck)) + { + return 1; + } + else + { + return 0; + } + } + } + + + public class InputMouse : Input2D + { + + + public override string ToString() + { + return "Mouse"; + } + + public override void Initialize(Vector3 position) + { + base.Initialize(position); + } + + public override Vector3 getXYZ() + { + float dx = MathHelper.Lerp(-1.0f, 1.0f, + MathHelper.Clamp((float)Mouse.GetState().X / GAME_WIDTH, 0.0f, 1.0f)); + float dy = -MathHelper.Lerp(-1.0f, 1.0f, + MathHelper.Clamp((float)Mouse.GetState().Y / GAME_HEIGHT, 0.0f, 1.0f)); + + setDifferentialXYZ(dx, dy, 0.0f); + return new Vector3(x, y, z); + } + + public override WiiType getInputEnum() { return WiiType.Mouse; } + + public override void writeStatus(DScsv output) + { + output.setData("MousePosX", getXYZ().X.ToString()); + output.setData("MousePosY", getXYZ().Y.ToString()); + if(Mouse.GetState().LeftButton == ButtonState.Pressed) + output.setData("MouseLeft", "Pressed"); + else + output.setData("MouseLeft", "Released"); + + if (Mouse.GetState().RightButton == ButtonState.Pressed) + output.setData("MouseRight", "Pressed"); + else + output.setData("MouseRight", "Released"); + } + + public override void writeFields(DScsv output) + { + output.addField("MousePosX"); + output.addField("MousePosY"); + output.addField("MouseLeft"); + output.addField("MouseRight"); + } + } + + public class InputBalanceBoard : Input2D + { + public override string ToString() + { + return "Balance Board"; + } + + public override Vector3 getXYZ() + { + BalanceBoardState b = WiiUse.GetBalanceBoardState(); + float sum = b.frontLeft + b.frontRight + b.backLeft + b.backRight; + float left = b.frontLeft + b.backLeft; + float back = b.backLeft + b.backRight; + float dx = -MathHelper.Lerp(-1.0f, 1.0f, left / sum); + float dy = -MathHelper.Lerp(-1.0f, 1.0f, back / sum); + + setDifferentialXYZ(dx, dy, 0.0f); + return new Vector3(x, y, z); + } + + public override WiiType getInputEnum() { return WiiType.BalanceBoard; } + + public override void writeStatus(DScsv output) + { + Vector3 pos = getXYZ(); + BalanceBoardState w = WiiUse.GetBalanceBoardState(); + output.setData("BalanceX", pos.X.ToString()); + output.setData("BalanceY", pos.Y.ToString()); + output.setData("BalanceFrontLeftKGS", w.frontLeft.ToString()); + output.setData("BalanceFrontRightKGS", w.frontRight.ToString()); + output.setData("BalanceBackLeftKGS", w.backLeft.ToString()); + output.setData("BalanceBackRightKGS", w.backRight.ToString()); + } + + public override void writeFields(DScsv output) + { + output.addField("BalanceX"); + output.addField("BalanceY"); + output.addField("BalanceFrontLeftKGS"); + output.addField("BalanceFrontRightKGS"); + output.addField("BalanceBackLeftKGS"); + output.addField("BalanceBackRightKGS"); + } + + } + + public class InputRemoteIR : Input2D + { + public override string ToString() + { + return "Remote Pointing"; + } + + public override Vector3 getXYZ() + { + WiimoteState w = WiiUse.GetRemoteState(); + float dx = w.ir.x; + float dy = w.ir.y; + setDifferentialXYZ(dx, dy, 0.0f); + return new Vector3(x, y, z); + } + + public override void Initialize(Vector3 position) + { + base.Initialize(position); + WiiUse.EnableIR(); + } + + public override void Finish() + { + WiiUse.DisableIR(); + base.Finish(); + } + + public override WiiType getInputEnum() { return WiiType.Remote; } + + public override void writeStatus(DScsv output) + { + Vector3 pos = getXYZ(); + output.setData("RemotePointerX", pos.X.ToString()); + output.setData("RemotePointerY", pos.Y.ToString()); + } + + public override void writeFields(DScsv output) + { + output.addField("RemotePointerX"); + output.addField("RemotePointerY"); + } + } + + public class InputRemoteRollPitch : Input2D + { + public override string ToString() + { + return "Remote Roll/Pitch"; + } + + public override Vector3 getXYZ() + { + WiimoteState w = WiiUse.GetRemoteState(); + float dx = -MathHelper.Lerp(-1.0f, 1.0f, + MathHelper.Clamp((2 * w.pitch + 180) / 360, 0.0f, 1.0f)); + float dy = MathHelper.Lerp(-1.0f, 1.0f, + MathHelper.Clamp((2 * w.roll + 180) / 360, 0.0f, 1.0f)); + + setDifferentialXYZ(dx, dy, 0.0f); + return new Vector3(x, y, z); + } + + public override void Initialize(Vector3 position) + { + base.Initialize(position); + WiiUse.EnableMotionSensing(); + } + + public override void Finish() + { + WiiUse.DisableMotionSensing(); + base.Finish(); + } + + public override WiiType getInputEnum() { return WiiType.Remote; } + + public override void writeStatus(DScsv output) + { + Vector3 pos = getXYZ(); + WiimoteState w = WiiUse.GetRemoteState(); + output.setData("RemoteX", pos.X.ToString()); + output.setData("RemoteY", pos.Y.ToString()); + output.setData("RemotePitch", w.pitch.ToString()); + output.setData("RemoteRoll", w.roll.ToString()); + } + + public override void writeFields(DScsv output) + { + output.addField("RemoteX"); + output.addField("RemoteY"); + output.addField("RemotePitch"); + output.addField("RemoteRoll"); + } + } + public class InputNunchuckJoystick : Input2D + { + public override string ToString() + { + return "Nunchuck Joystick"; + } + + public override Vector3 getXYZ() + { + NunchuckState w = WiiUse.GetNunchuckState(); + float dx = MathHelper.Clamp( + (float)Math.Sqrt(2) * w.joyMagnitude * (float)Math.Sin(MathHelper.ToRadians(w.joyAngle)), + -1.0f, 1.0f); + float dy = MathHelper.Clamp( + (float)Math.Sqrt(2) * w.joyMagnitude * (float)Math.Cos(MathHelper.ToRadians(w.joyAngle)), + -1.0f, 1.0f); + + setDifferentialXYZ(dx, dy, 0.0f); + return new Vector3(x, y, z); + } + public override WiiType getInputEnum() { return WiiType.Nunchuck; } + + public override void writeStatus(DScsv output) + { + Vector3 pos = getXYZ(); + NunchuckState w = WiiUse.GetNunchuckState(); + output.setData("JoystickX", pos.X.ToString()); + output.setData("JoystickY", pos.Y.ToString()); + output.setData("JoystickAngle", w.joyAngle.ToString()); + output.setData("JoystickMagnitude", w.joyMagnitude.ToString()); + } + + public override void writeFields(DScsv output) + { + output.addField("JoystickX"); + output.addField("JoystickY"); + output.addField("JoystickAngle"); + output.addField("JoystickMagnitude"); + } + } + + public class InputNunchuckRollPitch : Input2D + { + public override string ToString() + { + return "Nunchuck Roll/Pitch"; + } + + public override Vector3 getXYZ() + { + NunchuckState w = WiiUse.GetNunchuckState(); + float dx = MathHelper.Lerp(-1.0f, 1.0f, + MathHelper.Clamp((2 * w.roll + 180) / 360, 0.0f, 1.0f)); + float dy = MathHelper.Lerp(-1.0f, 1.0f, + MathHelper.Clamp((2 * w.pitch + 180) / 360, 0.0f, 1.0f)); + + setDifferentialXYZ(dx, dy, 0.0f); + return new Vector3(x, y, z); + } + + public override void Initialize(Vector3 position) + { + base.Initialize(position); + WiiUse.EnableMotionSensing(); + } + + public override void Finish() + { + WiiUse.DisableMotionSensing(); + base.Finish(); + } + + public override WiiType getInputEnum() { return WiiType.Nunchuck; } + + public override void writeStatus(DScsv output) + { + Vector3 pos = getXYZ(); + NunchuckState w = WiiUse.GetNunchuckState(); + output.setData("NunchuckX", pos.X.ToString()); + output.setData("NunchuckY", pos.Y.ToString()); + output.setData("NunchuckPitch", w.pitch.ToString()); + output.setData("NunchuckRoll", w.roll.ToString()); + } + + public override void writeFields(DScsv output) + { + output.addField("NunchuckX"); + output.addField("NunchuckY"); + output.addField("NunchuckPitch"); + output.addField("NunchuckRoll"); + } + } + + public class InputRemote : Input3D + { + public override string ToString() + { + return "Remote Acceleration"; + } + + public override Vector3 getXYZ() + { + WiimoteState w = WiiUse.GetRemoteState(); + setDifferentialXYZ(w.accel.X, w.accel.Y, w.accel.Z); + return new Vector3(x, y, z); + } + + public override void Initialize(Vector3 position) + { + base.Initialize(position); + WiiUse.EnableMotionSensing(); + } + + public override void Finish() + { + WiiUse.DisableMotionSensing(); + base.Finish(); + } + + public override WiiType getInputEnum() { return WiiType.Remote; } + + public override void writeStatus(DScsv output) + { + Vector3 pos = getXYZ(); + output.setData("RemoteAccelX", pos.X.ToString()); + output.setData("RemoteAccelY", pos.Y.ToString()); + output.setData("RemoteAccelZ", pos.Z.ToString()); + } + + public override void writeFields(DScsv output) + { + output.addField("RemoteAccelX"); + output.addField("RemoteAccelY"); + output.addField("RemoteAccelZ"); + } + } + public class InputNunchuck : Input3D + { + public override string ToString() + { + return "Nunchuck Acceleration"; + } + + public override Vector3 getXYZ() + { + NunchuckState w = WiiUse.GetNunchuckState(); + setDifferentialXYZ(w.accel.X, w.accel.Y, w.accel.Z); + return new Vector3(x, y, z); + } + + public override void Initialize(Vector3 position) + { + base.Initialize(position); + WiiUse.EnableMotionSensing(); + } + + public override void Finish() + { + WiiUse.DisableMotionSensing(); + base.Finish(); + } + + public override WiiType getInputEnum() { return WiiType.Nunchuck; } + + public override void writeStatus(DScsv output) + { + Vector3 pos = getXYZ(); + output.setData("NunchuckAccelX", pos.X.ToString()); + output.setData("NunchuckAccelY", pos.Y.ToString()); + output.setData("NunchuckAccelZ", pos.Z.ToString()); + } + + public override void writeFields(DScsv output) + { + output.addField("NunchuckAccelX"); + output.addField("NunchuckAccelY"); + output.addField("NunchuckAccelZ"); + } + } +} diff --git a/InputHandling.cs b/InputHandling.cs new file mode 100644 index 0000000..74f7732 --- /dev/null +++ b/InputHandling.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace TheraWii +{ + public enum InputHandling + { + Absolute = 0, Differential + } + + public class InputHandlingNames + { + public static string[] InputHandlingStrings = new string[] { + "Absolute", + "Differential" + }; + } +} diff --git a/Line.cs b/Line.cs new file mode 100644 index 0000000..39427de --- /dev/null +++ b/Line.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; + +namespace TheraWii +{ + // A straight, single-segment line. + class Line + { + GraphicsDevice graphicsDevice; + VertexPositionColor[] pointList; + VertexBuffer vertexBuffer; + + public Line(GraphicsDevice gd, Vector3 start, Vector3 end, Color color) + { + graphicsDevice = gd; + pointList = new VertexPositionColor[2]; + pointList[0] = new VertexPositionColor(start, color); + pointList[1] = new VertexPositionColor(end, color); + // Initialize the vertex buffer, allocating memory for each vertex. + vertexBuffer = new VertexBuffer(graphicsDevice, + VertexPositionColor.SizeInBytes * (pointList.Length), + BufferUsage.None); + // Set the vertex buffer data to the array of vertices. + vertexBuffer.SetData(pointList); + } + + public void Draw() + { + graphicsDevice.DrawUserPrimitives( + PrimitiveType.LineList, + pointList, + 0, // vertex buffer offset to add to each element of the index buffer + 1 // number of vertices in pointList + ); + } + } +} diff --git a/Metric.cs b/Metric.cs new file mode 100644 index 0000000..e24dfee --- /dev/null +++ b/Metric.cs @@ -0,0 +1,90 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; + +namespace TheraWii +{ + [XmlInclude(typeof(TimeInRegion)), XmlInclude(typeof(TimeOutRegion)), + XmlInclude(typeof(TotalTime)), XmlInclude(typeof(CenterOfBalanceAverage)), + XmlInclude(typeof(CenterOfBalancePosition)), XmlInclude(typeof(Smoothness))] + public abstract class Metric + { + public static Metric[] GetPossibleMetrics() + { + return new Metric[] { + new TimeInRegion(), + new TimeOutRegion(), + new TotalTime(), + new CenterOfBalanceAverage(), + new CenterOfBalancePosition(), + new Smoothness() + }; + } + + public static int GetMetricIndex(Metric m) + { + if (m.GetType() == typeof(TimeInRegion)) + return 0; + else if (m.GetType() == typeof(TimeOutRegion)) + return 1; + else if (m.GetType() == typeof(TotalTime)) + return 2; + else if (m.GetType() == typeof(CenterOfBalanceAverage)) + return 3; + else if (m.GetType() == typeof(CenterOfBalancePosition)) + return 4; + else if (m.GetType() == typeof(Smoothness)) + return 5; + return 0; + } + } + + public class TimeInRegion : Metric + { + public override string ToString() + { + return "Time In Region"; + } + } + + public class TimeOutRegion : Metric + { + public override string ToString() + { + return "Time Out Region"; + } + } + + public class TotalTime : Metric + { + public override string ToString() + { + return "Center of Balance Position"; + } + } + + public class CenterOfBalanceAverage : Metric + { + public override string ToString() + { + return "Center of Balance Average"; + } + } + + public class CenterOfBalancePosition : Metric + { + public override string ToString() + { + return "Center of Balance Position"; + } + } + + public class Smoothness : Metric + { + public override string ToString() + { + return "Smoothness"; + } + } +} diff --git a/NunchuckState.cs b/NunchuckState.cs new file mode 100644 index 0000000..0449d17 --- /dev/null +++ b/NunchuckState.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; + +namespace TheraWii +{ + class NunchuckState : WiiControllerState + { + public ButtonState c; + public ButtonState z; + public float joyAngle; + public float joyMagnitude; + public float roll; + public float pitch; + public Vector3 accel; + + public NunchuckState() + { + accel = Vector3.Zero; + } + public void Initialize() + { + c = ButtonState.Released; + z = ButtonState.Released; + joyAngle = 0; + joyMagnitude = 0; + connected = false; + } + + public Boolean connected; + public Boolean isConnected() + { + return connected; + } + + internal NunchuckState Copy() + { + return (NunchuckState)this.MemberwiseClone(); + } + } +} diff --git a/PerformanceMetric.cs b/PerformanceMetric.cs new file mode 100644 index 0000000..7649061 --- /dev/null +++ b/PerformanceMetric.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; + +namespace TheraWii +{ + public enum PerformanceMetricType + { + TotalTime = 0, + TimeInRegion, + TimeOutRegion, + PathLength, + PathDistance, + PathEfficiency, + MotionArea, + LocationXAverage, + LocationYAverage, + LocationZAverage, + SpeedAverage + } + + public class PerformanceMetrics + { + public static string[] PerformanceMetricStrings = new string[] { + "Total Time", + "Time In Region", + "Time Out of Region", + "Path Length", + "Path Distance", + "Path Efficiency", + "Motion Area", + "Location X Average", + "Location Y Average", + "Location Z Average", + "Speed Average" + }; + + private const int numMetrics = 11; + + public float[] metrics; + public int primary; + + private Vector3 minPos, maxPos; + private float samples; + private Vector3 locationSum; + private Vector3 lastPos; + private Vector3 firstPos; + private bool gotFirstPos = false; + + public PerformanceMetrics() + { + metrics = new float[numMetrics]; + for (int i = 0; i < numMetrics; i++) + { + metrics[i] = 0.0f; + } + primary = 0; + minPos = new Vector3(0, 0, 0); + maxPos = new Vector3(0, 0, 0); + locationSum = new Vector3(0, 0, 0); + lastPos = new Vector3(0, 0, 0); + samples = 0; + } + + public void Update(GameTime gt, DimensionalTask t) + { + samples++; + Vector3 pos = t.Position; + + if (!gotFirstPos) + { + firstPos = pos; + gotFirstPos = true; + } + + // Times + metrics[(int)PerformanceMetricType.TotalTime] + += (float)gt.ElapsedGameTime.TotalSeconds; + if (t.IsInRegion()) + { + metrics[(int)PerformanceMetricType.TimeInRegion] + += (float)gt.ElapsedGameTime.TotalSeconds; + } + else + { + metrics[(int)PerformanceMetricType.TimeOutRegion] + += (float)gt.ElapsedGameTime.TotalSeconds; + } + + // Path Length + metrics[(int)PerformanceMetricType.PathLength] += (pos - lastPos).Length(); + + // Path Distance + metrics[(int)PerformanceMetricType.PathDistance] = (pos - firstPos).Length(); + + // Path Efficiency + metrics[(int)PerformanceMetricType.PathEfficiency] = + metrics[(int)PerformanceMetricType.PathDistance] / metrics[(int)PerformanceMetricType.PathLength]; + + // Motion Area + minPos.X = Math.Min(minPos.X, t.Position.X); + minPos.Y = Math.Min(minPos.Y, t.Position.Y); + minPos.Z = Math.Min(minPos.Z, t.Position.Z); + maxPos.X = Math.Max(maxPos.X, t.Position.X); + maxPos.Y = Math.Max(maxPos.Y, t.Position.Y); + maxPos.Z = Math.Max(maxPos.Z, t.Position.Z); + metrics[(int)PerformanceMetricType.MotionArea] = (maxPos.X - minPos.X) * (maxPos.Y - minPos.Y); + + // Location average + locationSum += pos; + Vector3 locationAvg = locationSum / samples; + metrics[(int)PerformanceMetricType.LocationXAverage] = locationAvg.X; + metrics[(int)PerformanceMetricType.LocationYAverage] = locationAvg.Y; + metrics[(int)PerformanceMetricType.LocationZAverage] = locationAvg.Z; + + // Speed Average + metrics[(int)PerformanceMetricType.SpeedAverage] = + metrics[(int)PerformanceMetricType.PathLength] / metrics[(int)PerformanceMetricType.TotalTime]; + + lastPos = pos; + } + + public void WriteOutput(DScsv output) + { + output.WriteLine("#Performance Metrics:"); + for (int i = 0; i < numMetrics; i++) + { + output.WriteLine(PerformanceMetricStrings[i] + "," + metrics[i]); + } + } + } +} diff --git a/Profile.cs b/Profile.cs new file mode 100644 index 0000000..8faf53e --- /dev/null +++ b/Profile.cs @@ -0,0 +1,196 @@ +using System; +using System.Collections.Generic; +using System.Xml.Serialization; +using System.Windows.Forms; +using System.Collections; +using System.IO; + +namespace TheraWii +{ + public class Profile : IComparable + { + public Profile() + { + Sessions = new List(); + } + + public void initialize(string name) + { + Name = name; + CreateDate = DateTime.Now; + System.IO.Directory.CreateDirectory(GetDataFolder()); + } + + public DateTime CreateDate; + public List Sessions; + public string Name; + + public ListViewItem getListViewItem() + { + ListViewItem a = new ListViewItem(Name); + a.SubItems.Add(CreateDate.ToShortDateString()); + a.SubItems.Add(Sessions.Count.ToString()); + a.Tag = this; + return a; + } + + public ListView.ListViewItemCollection getSessionList(ListView owner) + { + ListView.ListViewItemCollection colListVItem = new ListView.ListViewItemCollection(owner); + int i = 1; + ListViewItem t; + foreach (Session s in Sessions) + { + t = new ListViewItem(i.ToString()); + t.SubItems.AddRange(s.getSubItems()); + t.Tag = s; + colListVItem.Add(t); + i++; + } + return colListVItem; + } + + public void deleteSession(Session s) + { + s.delete(); + Sessions.Remove(s); + } + + public void delete() + { + try { System.IO.Directory.Delete(GetDataFolder(), true); } + catch (System.IO.DirectoryNotFoundException) { } + } + + public string GetDataFolder() + { + return Path.Combine(DataStorage.DATA_STORE_FOLDER, Name); + } + + // Updates Profile, Session, Folder, but not CSV filenames or CSV data + public void Rename(string newName) + { + string oldPath = GetDataFolder(); + Name = newName; + System.IO.Directory.Move(oldPath, GetDataFolder()); + foreach (Session s in Sessions) + { + s.profile = Name; + } + } + + public override string ToString() + { + return Name; + } + + public int CompareTo(Object o) + { + Profile p = (Profile)o; + if (this.Name.CompareTo(p.Name) < 0) + return -1; + else + return 1; + } + + public string[] GetAllTherapies() + { + List l = new List(); + foreach (Session s in Sessions) + { + if (!l.Contains(s.therapy)) + { + l.Add(s.therapy); + } + } + + return l.ToArray(); + } + + public string[] GetAllTasks(string therapy) + { + List l = new List(); + foreach (Session s in Sessions) + { + if (s.therapy == therapy) + { + foreach (TaskData t in s.TaskDatas) + { + if (!l.Contains(t.TaskName)) + { + l.Add(t.TaskName); + } + } + } + } + + return l.ToArray(); + } + + public PerformanceMetricType GetPrimaryMetric(string therapy, string task) + { + // Use last session + for (int i = Sessions.Count - 1; i >= 0; i--) + { + // That matches therapy + if (Sessions[i].therapy == therapy) + { + // Use first task + foreach (TaskData t in Sessions[i].TaskDatas) + { + // That matches task + if (t.TaskName == task) + { + return (PerformanceMetricType)t.Metrics.primary; + } + } + } + } + return PerformanceMetricType.TotalTime; + } + + public DataPoints GetMetricPoints(string therapy, string task, PerformanceMetricType metric) + { + List dates = new List(); + List points = new List(); + foreach (Session s in Sessions) + { + if (s.therapy == therapy) + { + float sum = 0; + float count = 0; + foreach (TaskData t in s.TaskDatas) + { + if (t.TaskName == task) + { + sum += t.Metrics.metrics[(int)metric]; + count++; + } + } + + if (count > 0) + { + dates.Add(s.createDate); + points.Add(sum / count); + } + } + } + return new DataPoints(dates.ToArray(), points.ToArray()); + } + + } + + public class DataPoints + { + public DateTime[] Xs; + public float[] Ys; + public DataPoints(DateTime[] xs, float[] ys) + { + Xs = xs; + Ys = ys; + } + } + + + +} \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..a746461 --- /dev/null +++ b/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace TheraWii +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FormMain()); + } + } +} \ No newline at end of file diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100755 index 0000000..a72a735 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("TheraWii")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TheraWii")] +[assembly: AssemblyCopyright("Copyright © 2008")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b4235003-0769-4fa9-8a60-fb9c60db3914")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100755 index 0000000..4607bba --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TheraWii.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TheraWii.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100755 index 0000000..c40a448 --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100755 index 0000000..c613b9c --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TheraWii.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings new file mode 100755 index 0000000..abf36c5 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/README.md b/README.md index 1e70d57..0afb23f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,32 @@ -therawii -======== - -Application that gives Physical Therapy clinicians and researchers the ability to use commodity motion capture devices to gather quantitative data about patient movement and create customized interactions. +NAME + TheraWii + http://www.cs.drexel.edu/~dpn52/Therawii + + Tim Chagnon + Joe Kokinda + Andrew Meinert + Don Naegely + +DESCRIPTION + There is an emerging trend toward using video games as a means of increasing + patient engagement in physical therapy. This trend is primarily driven by + the newest generation of consumer console systems which use motion-based + controls. However, clinical research into the efficacy of these systems is + hindered by the inability to automatically collect data from systems and + software which were not intended for this purpose. + + TheraWii a new piece of software that will give researchers the ability to + experiment and quantitatively assess the value of game-based therapy. This + software will provide an extensible framework for games or interactive + experiments as well as an example suite of activities. The key aspect of + this application will allow researchers to easily gather data from + motion-based input controls such as the Wii Remote. Various reporting + methods and analysis tools will be provided for the gathered data. + +REQUIREMENTS + Windows XP or Vista (32-bit) + Microsoft .NET 3.5 + Microsoft Chart Controls + Microsoft XNA Framework 3.0 + +Please see the User Manual for more detailed usage information. \ No newline at end of file diff --git a/Region.cs b/Region.cs new file mode 100644 index 0000000..8e8f1cb --- /dev/null +++ b/Region.cs @@ -0,0 +1,115 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using System.Xml.Serialization; +using Microsoft.Xna.Framework; + +namespace TheraWii +{ + public enum ShapeType { Rectangle, Ellipse, Cuboid, Ellipsoid, Hoop, NONE }; + public enum regPT { X, Y, Z }; + + public class Region + { + public ShapeType Shape = ShapeType.NONE; + public bool regionEnabled; + public SerializableDictionary rParams; + + public Region() + { + rParams = new SerializableDictionary(); + rParams.Add(regPT.X, new RegionParameter()); + rParams.Add(regPT.Y, new RegionParameter()); + rParams.Add(regPT.Z, new RegionParameter()); + + regionEnabled = false; + } + + public Region(Region r) + { + regionEnabled = r.regionEnabled; + rParams = new SerializableDictionary(); + foreach (regPT rPT in r.rParams.Keys) + { + rParams.Add(rPT, new RegionParameter(r.rParams[rPT])); + } + Shape = r.Shape; + } + + public override string ToString() + { + return "x_pos: " + rParams[regPT.X].cPos.ToString() + " y_pos: " + + rParams[regPT.Y].cPos.ToString() + " z_pos: " + + rParams[regPT.Z].cPos.ToString() + " x_size: " + + rParams[regPT.X].cSize.ToString() + " y_size: " + + rParams[regPT.Y].cSize.ToString() + " z_size: " + + rParams[regPT.Z].cSize.ToString(); + } + + public bool isInRegion(Vector3 pos) + { + switch (Shape) + { + case ShapeType.Rectangle: + case ShapeType.Hoop: + return isIn2DRect(pos); + + case ShapeType.Ellipse: + return isIn2DEllipse(pos); + + default: + return false; + } + } + + public bool isIn2DRect(Vector3 pos) + { + float halfWidth = rParams[regPT.X].cSize / 2; + float halfHeight = rParams[regPT.Y].cSize / 2; + float minX = rParams[regPT.X].cPos - halfWidth; + float maxX = rParams[regPT.X].cPos + halfWidth; + float minY = rParams[regPT.Y].cPos - halfHeight; + float maxY = rParams[regPT.Y].cPos + halfHeight; + + if (minX <= pos.X && pos.X <= maxX && + minY <= pos.Y && pos.Y <= maxY) + { + return true; + } + else + { + return false; + } + } + + public bool isIn2DEllipse(Vector3 pos) + { + double twoA = 0; + double eccentricity; + Vector3 center = new Vector3(rParams[regPT.X].cPos, rParams[regPT.Y].cPos, rParams[regPT.Z].cPos); + Vector3 c1, c2; + if (rParams[regPT.X].cSize >= rParams[regPT.Y].cSize) + { + twoA = rParams[regPT.X].cSize; + eccentricity = Math.Sqrt(1 - Math.Pow(rParams[regPT.Y].cSize / rParams[regPT.X].cSize, 2)); + float offset = (float)(eccentricity * twoA / 2); + c1 = new Vector3(center.X - offset, center.Y, center.Z); + c2 = new Vector3(center.X + offset, center.Y, center.Z); + } + else + { + twoA = rParams[regPT.Y].cSize; + eccentricity = Math.Sqrt(1 - Math.Pow(rParams[regPT.X].cSize / rParams[regPT.Y].cSize, 2)); + float offset = (float)(eccentricity * twoA / 2); + c1 = new Vector3(center.X, center.Y - offset, center.Z); + c2 = new Vector3(center.X, center.Y + offset, center.Z); + } + double d1, d2; + d1 = Math.Sqrt(Math.Pow(c1.X - pos.X, 2) + Math.Pow(c1.Y - pos.Y, 2)); + d2 = Math.Sqrt(Math.Pow(c2.X - pos.X, 2) + Math.Pow(c2.Y - pos.Y, 2)); + + return (d1 + d2) < twoA; + } + } +} diff --git a/RegionParameter.cs b/RegionParameter.cs new file mode 100644 index 0000000..a0ff573 --- /dev/null +++ b/RegionParameter.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace TheraWii +{ + public enum SpecifierLabel { Static, Dynamic, Random }; + public class RegionParameter + { + + public SpecifierLabel SL_pos; + public SpecifierLabel SL_size; + public float[] pos; + public float[] size; + public float cPos; + public float cSize; + + public SpecifierLabel sLabel; + + public RegionParameter() + { + pos = new float[2]; + size = new float[2]; + } + + public RegionParameter(RegionParameter rp) + { + SL_pos = rp.SL_pos; + SL_size = rp.SL_size; + pos = new float[rp.pos.Length]; + size = new float[rp.size.Length]; + rp.pos.CopyTo(pos, 0); + rp.size.CopyTo(size, 0); + cPos = rp.cPos; + cSize = rp.cSize; + sLabel = rp.sLabel; + } + } +} diff --git a/RepeatTask.cs b/RepeatTask.cs new file mode 100644 index 0000000..7d757fd --- /dev/null +++ b/RepeatTask.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Content; +using System.Xml.Serialization; + +namespace TheraWii +{ + public enum RepeatEndType { Repetitions, TimeLimit, Both } + [XmlInclude(typeof(Task2D)), XmlInclude(typeof(Task3D)), XmlInclude(typeof(DialogTask))] + public class RepeatTask : Task + { + public List tasks; + public RepeatEndType RepeatEndType = RepeatEndType.Repetitions; + public int TimeLimit, numRepeats, currTask, iterRepeat; + private GraphicsDeviceManager g; + private ContentManager c; + private SpriteBatch sb; + private int screenHeight, screenWidth; + private Session s; + private GameTime gt; + + public Task this[int index] + { + get { return tasks[index]; } + set { tasks[index] = value; } + } + + public override void Initialize( + GraphicsDeviceManager g, ContentManager c, SpriteBatch sb, + int screenHeight, int screenWidth, Session s, Vector3 position) + { + this.g = g; + this.c = c; + this.sb = sb; + this.screenHeight = screenHeight; + this.screenWidth = screenWidth; + this.s = s; + currTask = 0; currRep = 0; iterRepeat = 0; + foreach (Task t in tasks) + { + t.totalReps = this.numRepeats; + t.currRep = 0; + } + if (tasks.Count > 0) + tasks[0].Initialize(g, c, sb, screenHeight, screenWidth, s, position); + conditionMet = false; + endCondition.isNewExecution = true; + Position = position; + } + + public RepeatTask() + { + tasks = new List(); + numRepeats = 5; + TimeLimit = 30; + } + + public RepeatTask(RepeatTask rt) + { + Name = rt.Name; + numRepeats = rt.numRepeats; + TimeLimit = rt.TimeLimit; + RepeatEndType = rt.RepeatEndType; + endCondition = rt.endCondition.returnNew(); + tasks = new List(); + for (int i = 0; i < rt.tasks.Count; i++) + tasks.Add(rt.tasks[i]); + } + + public int Count + { + get + { + return tasks.Count; + } + } + + public override void Draw(GameTime gt) + { + tasks[currTask].Draw(gt); + } + + public override void Update(GameTime gt) + { + this.gt = gt; + // current rep of current task not complete, continue executing + if (!(tasks[currTask]).isComplete()) + { + tasks[currTask].Update(gt); + Position = tasks[currTask].Position; + } + else + { + Vector3 lastPosition = tasks[currTask].Position; + tasks[currTask].Finish(); + + if (currTask >= tasks.Count-1) + { + ++iterRepeat; + } + + if (iterRepeat < numRepeats) + { + currTask = (currTask + 1) % tasks.Count; + tasks[currTask].currRep = iterRepeat; + tasks[currTask].Initialize(g, c, sb, screenHeight, screenWidth, s, lastPosition); + } + + } + } + + public override void Finish() + { + if (iterRepeat < numRepeats) + { + tasks[currTask].Finish(); + } + } + + public override List getRequiredDevices() + { + List wtl = new List(); + if (tasks.Count > 0) + { + foreach (Task t in tasks) + { + List wtl2; + if ((wtl2 = t.getRequiredDevices()).Count > 0) + { + foreach (WiiType wt in wtl2) + { + if (!wtl.Contains(wt)) + wtl.Add(wt); + } + } + } + } + return wtl; + } + + public override string ToString() + { + return base.ToString() + " (Repeat)"; + } + + public override TreeNode GetTreeNode() + { + TreeNode n = new TreeNode(this.ToString()); + n.Tag = this; + for (int i = 0; i < tasks.Count; i++) + { + n.Nodes.Add(tasks[i].GetTreeNode()); + } + return n; + } + + public void addTask(Task t) + { + this.tasks.Add(t); + } + + public void removeTask(Task t) + { + this.tasks.Remove(t); + } + + public override Form GetTaskForm() + { + return new FormRepeatTask(this); + } + + public override bool isComplete() + { + if (endCondition.GetType() == typeof(Repeat_rEndCondition)) + return conditionMet = ((Repeat_rEndCondition)endCondition).isMet(iterRepeat); + else if (endCondition.GetType() == typeof(Repeat_tEndCondition)) + return conditionMet = ((Repeat_tEndCondition)endCondition).isMet(this.gt); + else if (endCondition.GetType() == typeof(Repeat_BothEndCondition)) + return conditionMet = ((Repeat_BothEndCondition)endCondition).isMet(iterRepeat, this.gt); + else return false; + } + } +} \ No newline at end of file diff --git a/SerializableDictionary.cs b/SerializableDictionary.cs new file mode 100644 index 0000000..f092601 --- /dev/null +++ b/SerializableDictionary.cs @@ -0,0 +1,131 @@ +using System; + + using System.Collections.Generic; + + using System.Text; + + using System.Xml.Serialization; + + + +[XmlRoot("dictionary")] + +public class SerializableDictionary + + : Dictionary, IXmlSerializable +{ + + #region IXmlSerializable Members + + public System.Xml.Schema.XmlSchema GetSchema() + { + + return null; + + } + + + + public void ReadXml(System.Xml.XmlReader reader) + { + + XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); + + XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); + + + + bool wasEmpty = reader.IsEmptyElement; + + reader.Read(); + + + + if (wasEmpty) + + return; + + + + while (reader.NodeType != System.Xml.XmlNodeType.EndElement) + { + + reader.ReadStartElement("item"); + + + + reader.ReadStartElement("key"); + + TKey key = (TKey)keySerializer.Deserialize(reader); + + reader.ReadEndElement(); + + + + reader.ReadStartElement("value"); + + TValue value = (TValue)valueSerializer.Deserialize(reader); + + reader.ReadEndElement(); + + + + this.Add(key, value); + + + + reader.ReadEndElement(); + + reader.MoveToContent(); + + } + + reader.ReadEndElement(); + + } + + + + public void WriteXml(System.Xml.XmlWriter writer) + { + + XmlSerializer keySerializer = new XmlSerializer(typeof(TKey)); + + XmlSerializer valueSerializer = new XmlSerializer(typeof(TValue)); + + + + foreach (TKey key in this.Keys) + { + + writer.WriteStartElement("item"); + + + + writer.WriteStartElement("key"); + + keySerializer.Serialize(writer, key); + + writer.WriteEndElement(); + + + + writer.WriteStartElement("value"); + + TValue value = this[key]; + + valueSerializer.Serialize(writer, value); + + writer.WriteEndElement(); + + + + writer.WriteEndElement(); + + } + + } +} + + #endregion + diff --git a/Session.cs b/Session.cs new file mode 100644 index 0000000..f037be3 --- /dev/null +++ b/Session.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.IO; + +namespace TheraWii +{ + public class Session + { + public string dataFile, profile, therapy; + public DateTime createDate; + public List TaskDatas; + + private DScsv csvOut; + + public Session() + { + TaskDatas = new List(); + } + + public void Initialize(Profile p, Therapy t) + { + therapy = t.ToString(); + profile = p.Name; + createDate = System.DateTime.Now; + string date = createDate.Year + "-" + + createDate.Month + "-" + + createDate.Day + " " + + createDate.Hour + "-" + + createDate.Minute + + + createDate.Second; + + dataFile = profile + "_" + therapy + "_" + date + ".csv"; + csvOut = new DScsv(); + createFile(); + } + + public void Finish() + { + // finish writing + csvOut.closeFile(); + } + + public DScsv GetCSV() + { + return csvOut; + } + + public void createFile() + { + csvOut.Initialize((Session)this); + //csvOut.closeFile(); + } + + public String[] getSubItems() + { + String[] subItems = new String[] {createDate.ToString(), therapy.ToString()}; + return subItems; + } + + public void delete() + { + string fullPath = GetDataFilePath(); + if (System.IO.File.Exists(fullPath)) + System.IO.File.Delete(fullPath); + } + + public string GetDataFilePath() + { + return Path.Combine( + Path.Combine(DataStorage.DATA_STORE_FOLDER, profile), + dataFile); + } + } +} \ No newline at end of file diff --git a/StringLogicalComparer.cs b/StringLogicalComparer.cs new file mode 100644 index 0000000..9922c5b --- /dev/null +++ b/StringLogicalComparer.cs @@ -0,0 +1,207 @@ +using System; +using System.Collections; +using System.Windows.Forms; + +namespace TheraWii +{ + class ListComparer : IComparer + { + private int col; + public ListComparer() + { + col = 0; + } + public ListComparer(int column) + { + col = column; + } + public int Compare(object x, object y) + { + int c = StringLogicalComparer.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text); + if (((ListViewItem)x).ListView.Sorting == SortOrder.Descending) + { + return c * -1; + } + return c; + } + } + + + public sealed class StringLogicalComparer : IComparer + { + private static readonly IComparer _default = new StringLogicalComparer(); + private static readonly IComparer _defaultZeroesFirst = new StringLogicalComparer(true); + private bool zeroesFirst = false; + + private StringLogicalComparer() + { } + + private StringLogicalComparer(bool zeroesFirst) + { + this.zeroesFirst = zeroesFirst; + } + + public static IComparer Default + { + get { return _default; } + } + + public static IComparer DefaultZeroesFirst + { + get { return _defaultZeroesFirst; } + } + + public int Compare(object x, object y) + { + if (null == x && null == y) return 0; + if (null == x) return -1; + if (null == y) return 1; + if (x is string && y is string) + return Compare((string)x, (string)y, zeroesFirst); + return Comparer.Default.Compare(x, y); + } + + public static int Compare(string s1, string s2) + { + return Compare(s1, s2, false); + } + + public static int Compare(string s1, string s2, bool zeroesFirst) + { + //get rid of special cases + if ((s1 == null) && (s2 == null)) return 0; + else if (s1 == null) return -1; + else if (s2 == null) return 1; + + if ((s1.Length <= 0) && (s2.Length <= 0)) return 0; + else if (s1.Length <= 0) return -1; + else if (s2.Length <= 0) return 1; + + //special case + bool sp1 = Char.IsLetterOrDigit(s1[0]); + bool sp2 = Char.IsLetterOrDigit(s2[0]); + if (sp1 && !sp2) return 1; + if (!sp1 && sp2) return -1; + + int i1 = 0, i2 = 0; //current index + int r = 0; // temp result + char c1, c2; + bool letter1, letter2; + + while (true) + { + c1 = s1[i1]; + c2 = s2[i2]; + sp1 = Char.IsDigit(c1); + sp2 = Char.IsDigit(c2); + if (!sp1 && !sp2) + { + letter1 = Char.IsLetter(c1); + letter2 = Char.IsLetter(c2); + + if (letter1 && letter2) + { + r = Char.ToUpper(c1).ToString().CompareTo(Char.ToUpper(c2).ToString()); + if (r != 0) return r; + } + else if (!letter1 && !letter2) + { + r = c1.CompareTo(c2); + if (r != 0) return r; + } + else if (!letter1 && letter2) + { + return -1; + } + else if (letter1 && !letter2) + { + return 1; + } + } + else if (sp1 && sp2) + { + r = CompareNum(s1, ref i1, s2, ref i2, zeroesFirst); + if (r != 0) return r; + } + else if (sp1) + { + return -1; + } + else if (sp2) + { + return 1; + } + i1++; + i2++; + if ((i1 >= s1.Length) && (i2 >= s2.Length)) + { + return 0; + } + else if (i1 >= s1.Length) + { + return -1; + } + else if (i2 >= s2.Length) + { + return 1; + } + } + } + + private static int CompareNum(string s1, ref int i1, string s2, ref int i2, bool zeroesFirst) + { + int nzStart1 = i1, nzStart2 = i2; // nz = non zero + int end1 = i1, end2 = i2; + + ScanNumEnd(s1, i1, ref end1, ref nzStart1); + ScanNumEnd(s2, i2, ref end2, ref nzStart2); + int start1 = i1; i1 = end1 - 1; + int start2 = i2; i2 = end2 - 1; + + if (zeroesFirst) + { + int zl1 = nzStart1 - start1; + int zl2 = nzStart2 - start2; + if (zl1 > zl2) return -1; + if (zl1 < zl2) return 1; + } + + int nzLength1 = end1 - nzStart1; + int nzLength2 = end2 - nzStart2; + + if (nzLength1 < nzLength2) return -1; + else if (nzLength1 > nzLength2) return 1; + + for (int j1 = nzStart1, j2 = nzStart2; j1 <= i1; j1++, j2++) + { + int r = s1[j1].CompareTo(s2[j2]); + if (r != 0) return r; + } + // the nz parts are equal + int length1 = end1 - start1; + int length2 = end2 - start2; + if (length1 == length2) return 0; + if (length1 > length2) return -1; + return 1; + } + + //lookahead + private static void ScanNumEnd(string s, int start, ref int end, ref int nzStart) + { + nzStart = start; + end = start; + bool countZeros = true; + while (Char.IsDigit(s, end)) + { + if (countZeros && s[end].Equals('0')) + { + nzStart++; + } + else countZeros = false; + end++; + if (end >= s.Length) break; + } + } + + }//EOC +} diff --git a/Task.cs b/Task.cs new file mode 100644 index 0000000..2e9e410 --- /dev/null +++ b/Task.cs @@ -0,0 +1,88 @@ +using System; +using System.Windows.Forms; +using System.Xml.Serialization; +using System.Collections.Generic; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework; + +namespace TheraWii +{ + [XmlInclude(typeof(DialogTask)), XmlInclude(typeof(RepeatTask)), + XmlInclude(typeof(Task2D)), XmlInclude(typeof(Task3D))] + public abstract class Task + { + //private string name; + protected bool conditionMet; + protected DScsv output; + public EndCondition endCondition; + public string Name; + public int totalReps, currRep; + + [XmlIgnore] + public Vector3 Position = Vector3.Zero; + + public abstract void Draw(GameTime gt); + public abstract List getRequiredDevices(); + + public Task returnNew() + { + if (this.GetType() == typeof(DialogTask)) + return new DialogTask((DialogTask)this); + else if (this.GetType() == typeof(RepeatTask)) + return new RepeatTask((RepeatTask)this); + else if (this.GetType() == typeof(Task2D)) + return new Task2D((Task2D)this); + else if (this.GetType() == typeof(Task3D)) + return new Task3D((Task3D)this); + else + return null; + } + + + + public virtual void Initialize( + GraphicsDeviceManager g, ContentManager c, SpriteBatch sb, + int screenHeight, int screenWidth, + Session s, Vector3 position) + { + conditionMet = false; + endCondition.isNewExecution = true; + Position = position; + output = s.GetCSV(); + output.startTask(this); + } + + public virtual void Finish() + { + } + + public virtual bool isComplete() + { + return conditionMet; + } + + public virtual void Update(GameTime gt) + { + if (!conditionMet) + conditionMet = endCondition.isMet(gt, new Region(), new Vector3()); + } + + public override string ToString() + { + return Name; + } + + public virtual TreeNode GetTreeNode() + { + TreeNode n = new TreeNode(this.ToString()); + n.Tag = this; + return n; + } + + public virtual Form GetTaskForm() + { + return new Form(); + } + } +} \ No newline at end of file diff --git a/Task2D.cs b/Task2D.cs new file mode 100644 index 0000000..f112690 --- /dev/null +++ b/Task2D.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.Xml.Serialization; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Content; +using Microsoft.Xna.Framework.Audio; + +namespace TheraWii +{ + public class Task2D : DimensionalTask + { + /* create both of these since we don't know what type of region, if any, we will need to draw */ + private Cuboid rectangle; + private Ellipsoid ellipse; + private Hoop hoop; + private Random rand; + + private SoundEffect swish; + + public Task2D() + { + additionalInput = new List(); + endCondition = new ButtonEndCondition(); + primaryInput = new InputBalanceBoard(); + regionEnabled = false; + rand = new Random(); + region = new Region(); + ((RegionParameter)region.rParams[regPT.Z]).pos = new float[2]{0,0}; + ((RegionParameter)region.rParams[regPT.Z]).size = new float[2]{0,0}; + } + + public Task2D(Task2D tk) + { + Name = "copy of " + tk.Name; + additionalInput = new List(tk.additionalInput); + endCondition = tk.endCondition.returnNew(); + primaryInput = tk.primaryInput.returnNew(); + regionEnabled = tk.regionEnabled; + rand = new Random(); + region = new Region(tk.region); + } + + + public override void Initialize( + GraphicsDeviceManager g, ContentManager c, SpriteBatch sb, + int screenHeight, int screenWidth, Session s, Vector3 position) + { + base.Initialize(g, c, sb, screenHeight, screenWidth, s, position); + // determine shape size position on parameter type and repetition. + int l, h; + foreach (RegionParameter r in region.rParams.Values) + { + // update current position x,y,z + if (r.SL_pos == SpecifierLabel.Static) + r.cPos = r.pos[1]; + else if (r.SL_pos == SpecifierLabel.Random) + { + l = (int)((r.pos[0] + 1) * 100); + h = (int)((r.pos[1] + 1) * 100); + r.cPos = ((float)rand.Next(l, h) / 100) - 1; + } + else if (r.SL_pos == SpecifierLabel.Dynamic) + { + if (currRep == 0) + r.cPos = r.pos[0]; + else if (currRep < totalReps) + r.cPos += (r.pos[1] - r.pos[0])/(totalReps-1); + } + // update current size x,y,z + if (r.SL_size == SpecifierLabel.Static) + r.cSize = r.size[1]; + else if (r.SL_size == SpecifierLabel.Random) + { + l = (int)((r.size[0]) * 100); + h = (int)((r.size[1]) * 100); + r.cSize = ((float)rand.Next(l, h) / 100); + } + else if (r.SL_size == SpecifierLabel.Dynamic) + { + if (currRep == 0) + r.cSize = r.size[0]; + else if (currRep < totalReps) + r.cSize += (r.size[1] - r.size[0]) / (totalReps-1); + } + // make sure no region is partially outside the coordinate system + if (region.Shape == ShapeType.Rectangle) + { + if (r.cPos - r.cSize / 2 < -1) + r.cPos += (-1 - (r.cPos - r.cSize / 2)); + else if (r.cPos + r.cSize / 2 > 1) + r.cPos -= (-1 + (r.cPos + r.cSize / 2)); + } + this.swish = c.Load("Sounds\\bbswish"); + } + + if (region.Shape == ShapeType.Rectangle) + { + rectangle = new Cuboid(g, + c, + new Vector3(((RegionParameter)region.rParams[regPT.X]).cPos, ((RegionParameter)region.rParams[regPT.Y]).cPos, 0.0f), + new Vector3(((RegionParameter)region.rParams[regPT.X]).cSize, ((RegionParameter)region.rParams[regPT.Y]).cSize, 0.0f), + Color.DarkBlue); + } + else if (region.Shape == ShapeType.Ellipse) + { + ellipse = new Ellipsoid(g, + c, + new Vector3(((RegionParameter)region.rParams[regPT.X]).cPos, ((RegionParameter)region.rParams[regPT.Y]).cPos, 0.0f), + new Vector3(((RegionParameter)region.rParams[regPT.X]).cSize/2, ((RegionParameter)region.rParams[regPT.Y]).cSize/2, 0.0f), + Color.DarkBlue); + } + else if (region.Shape == ShapeType.Hoop) + { + hoop = new Hoop(g, + c, + new Vector3(((RegionParameter)region.rParams[regPT.X]).cPos, ((RegionParameter)region.rParams[regPT.Y]).cPos, 0.0f), + new Vector3(((RegionParameter)region.rParams[regPT.X]).cSize, ((RegionParameter)region.rParams[regPT.Y]).cSize, 0.0f), + Color.DarkBlue); + } + } + + public override void Finish() + { + base.Finish(); + if (region.Shape == ShapeType.Hoop) + { + swish.Play(); + } + } + + public override void Draw(GameTime gt) + { + if (regionEnabled) + { + if (region.Shape == ShapeType.Rectangle) + { + rectangle.Draw(); + } + else if (region.Shape == ShapeType.Ellipse) + { + ellipse.Draw(); + } + else if (region.Shape == ShapeType.Hoop) + { + hoop.Draw(); + } + } + + // Draw cursor last + base.Draw(gt); + } + + public override string ToString() + { + return base.ToString() + " (2D Task)"; + } + + public override System.Windows.Forms.Form GetTaskForm() + { + return new Form2DTask(this); + } + } +} diff --git a/Task3D.cs b/Task3D.cs new file mode 100644 index 0000000..07a0f11 --- /dev/null +++ b/Task3D.cs @@ -0,0 +1,31 @@ +using System; +using System.Xml.Serialization; + +namespace TheraWii +{ + public class Task3D : DimensionalTask + { + public Task3D() + { + endCondition = new ButtonEndCondition(); + primaryInput = new InputBalanceBoard(); + region = new Region(); + inputHandling = InputHandling.Differential; + } + + public Task3D(Task3D t) + { + throw new NotImplementedException(); + } + + public override string ToString() + { + return base.ToString() + " (3D Task)"; + } + + public override System.Windows.Forms.Form GetTaskForm() + { + return new Form3DTask(this); + } + } +} diff --git a/TaskData.cs b/TaskData.cs new file mode 100644 index 0000000..f415b43 --- /dev/null +++ b/TaskData.cs @@ -0,0 +1,18 @@ +using System; + +namespace TheraWii +{ + public class TaskData + { + + public String TaskName; + public PerformanceMetrics Metrics; + + public TaskData() + { + Metrics = new PerformanceMetrics(); + } + + } +} + diff --git a/TheraWii.csproj b/TheraWii.csproj new file mode 100755 index 0000000..56513c2 --- /dev/null +++ b/TheraWii.csproj @@ -0,0 +1,320 @@ + + + Debug + AnyCPU + 9.0.30729 + 2.0 + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A} + WinExe + Properties + TheraWii + TheraWii + + + 2.0 + v3.5 + + + false + + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + logo.ico + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + true + + + + False + lib\Ionic.Zip.dll + + + + + + + + + + + + + + + + Form + + + FormAddInput.cs + + + Form + + + FormPerformance.cs + + + + + + + + Form + + + FormProfileChooser.cs + + + + + + + + + + + + + + + Form + + + FormNewProfile.cs + + + Form + + + FormNewTherapy.cs + + + + + + + + + Form + + + FormRepeatTask.cs + + + Form + + + Form3DTask.cs + + + Form + + + FormAbout.cs + + + Form + + + FormAddDevices.cs + + + Form + + + FormNewTask.cs + + + Form + + + FormSessionDetail.cs + + + Form + + + Form2DTask.cs + + + Form + + + FormMain.cs + + + + + + FormAddInput.cs + Designer + + + FormNewProfile.cs + Designer + + + Designer + FormNewTherapy.cs + + + FormPerformance.cs + Designer + + + Designer + FormProfileChooser.cs + + + FormRepeatTask.cs + Designer + + + Form3DTask.cs + Designer + + + Designer + FormAbout.cs + + + Designer + FormAddDevices.cs + + + Designer + FormNewTask.cs + + + Designer + FormSessionDetail.cs + + + Designer + Form2DTask.cs + + + Designer + FormMain.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + FormDialogTask.cs + Designer + + + True + Resources.resx + True + + + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + Form + + + FormDialogTask.cs + + + + + + + + + + + + + + False + .NET Framework Client Profile + false + + + False + .NET Framework 2.0 %28x86%29 + false + + + False + .NET Framework 3.0 %28x86%29 + false + + + False + .NET Framework 3.5 + false + + + False + .NET Framework 3.5 SP1 + true + + + False + Windows Installer 3.1 + true + + + + + + Always + + + + + + + + \ No newline at end of file diff --git a/TheraWii.sln b/TheraWii.sln new file mode 100755 index 0000000..f8eaa92 --- /dev/null +++ b/TheraWii.sln @@ -0,0 +1,42 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual C# Express 2008 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TheraWii", "TheraWii.csproj", "{AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Content", "Content\Content.contentproj", "{7536376D-BAEC-4BD1-B221-29613EDBB7CE}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Debug|x86.ActiveCfg = Debug|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Release|Any CPU.Build.0 = Release|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {AF1B3EB8-C095-4EDA-A1C4-F48B802AD34A}.Release|x86.ActiveCfg = Release|Any CPU + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Debug|Any CPU.ActiveCfg = Debug|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Debug|x86.ActiveCfg = Debug|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Debug|x86.Build.0 = Debug|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Release|Any CPU.ActiveCfg = Release|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Release|Mixed Platforms.Build.0 = Release|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Release|x86.ActiveCfg = Release|x86 + {7536376D-BAEC-4BD1-B221-29613EDBB7CE}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Therapy.cs b/Therapy.cs new file mode 100644 index 0000000..a4db228 --- /dev/null +++ b/Therapy.cs @@ -0,0 +1,201 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; +using System.Xml.Serialization; + +namespace TheraWii +{ + public class Therapy : IComparable + { + public string Name; + public RepeatTask tasks; + + public Therapy() + { + Name = "Unnamed Therapy"; + + //Creating root repeat task + tasks = new RepeatTask(); + tasks.Name = "root"; + tasks.numRepeats = 1; + tasks.RepeatEndType = RepeatEndType.Repetitions; + tasks.endCondition = new Repeat_rEndCondition(); + ((Repeat_rEndCondition)tasks.endCondition).Initialize(1); + } + + public Therapy(Therapy t) + { + Name = "copy of " + t.Name; + tasks = (RepeatTask)t.tasks.returnNew(); + } + + public override string ToString() + { + return Name; + } + + internal TreeNode[] GetTaskTreeNodes() + { + TreeNode[] nodes = new TreeNode[tasks.Count]; + for (int i = 0; i < tasks.Count; i++) + { + nodes[i] = tasks[i].GetTreeNode(); + } + return nodes; + } + + internal void removeTask(Task t) + { + tasks.removeTask(t); + } + + internal void addTask(Task t) + { + tasks.addTask(t); + } + + public List MoveUp(List path) + { + // path is a list of ints representing the node's position in the treelist + // the list is in reverse order - path[0] is the deepest index, path[count-1] the top index + // return the new path to the node so caller can reselect it + + Task selTask = this.tasks; + RepeatTask parTask = this.tasks; + RepeatTask grandParTask = this.tasks; + for (int i = path.Count - 1; i > -1; --i) + { + if (i == 1) + parTask = (RepeatTask)((RepeatTask)selTask).tasks[path[i]]; + else if (i == 2) + grandParTask = (RepeatTask)((RepeatTask)selTask).tasks[path[i]]; + + selTask = ((RepeatTask)selTask).tasks[path[i]]; + } + if (path[0] == 0) //maybe moving up + { + //already at the top of the root + if (parTask == this.tasks) + return path; + //move up a level + else + { + parTask.tasks.Remove(selTask); + path.RemoveAt(0); + grandParTask.tasks.Insert( grandParTask.tasks.IndexOf(parTask), selTask); + path[0] = grandParTask.tasks.IndexOf(selTask); + return path; + } + } + else + { + Task m = parTask[path[0] - 1]; + //move up into repeat task before selTask and add chain to path + if (m.GetType() == typeof(RepeatTask)) + { + parTask.tasks.Remove(selTask); + ((RepeatTask)m).tasks.Add(selTask); + path[0] = path[0] - 1; + path.Insert(0, ((RepeatTask)m).tasks.Count-1); + } + //swap position with task before selTask + else + { + parTask[path[0] - 1] = selTask; + parTask[path[0]] = m; + path[0] = path[0] - 1; + } + return path; + } + } + + public List MoveDown(List path) + { + // path is a list of ints representing the node's position in the treelist + // the list is in reverse order - path[0] is the deepest index, path[count-1] the top index + // return the new path to the node so caller can reselect it + + Task selTask = this.tasks; + RepeatTask parTask = this.tasks; + RepeatTask grandParTask = this.tasks; + for (int i = path.Count - 1; i > -1; --i) + { + if (i == 1) + parTask = (RepeatTask)((RepeatTask)selTask).tasks[path[i]]; + else if (i == 2) + grandParTask = (RepeatTask)((RepeatTask)selTask).tasks[path[i]]; + + selTask = ((RepeatTask)selTask).tasks[path[i]]; + } + if (path[0] == parTask.tasks.Count - 1) //maybe moving down + { + //already at the bottom of the root + if (parTask == this.tasks) + return path; + //move out of parent and below parent + else + { + parTask.tasks.Remove(selTask); + if (grandParTask.tasks.IndexOf(parTask) == grandParTask.tasks.Count - 1) + grandParTask.tasks.Add(selTask); + else + grandParTask.tasks.Insert(grandParTask.tasks.IndexOf(parTask) + 1, selTask); + + path.RemoveAt(0); + path[0] = grandParTask.tasks.IndexOf(selTask); + return path; + } + } + else + { + Task m = parTask[path[0] + 1]; + //move down into repeat task after selTask and add chain to path + if (m.GetType() == typeof(RepeatTask)) + { + parTask.tasks.Remove(selTask); + ((RepeatTask)m).tasks.Insert(0, selTask); + path.Insert(0, 0); + } + //swap position with task after selTask + else + { + parTask[path[0] + 1] = selTask; + parTask[path[0]] = m; + path[0] = path[0] + 1; + } + return path; + } + } + + internal List getRequiredDevices() + { + List wtl = new List(); + if (tasks.Count > 0) + { + foreach (Task t in tasks.tasks) + { + List wtl2; + if ((wtl2 = t.getRequiredDevices()).Count > 0) + { + foreach (WiiType wt in wtl2) + { + if (!wtl.Contains(wt)) + wtl.Add(wt); + } + } + } + } + return wtl; + } + + public int CompareTo(Object o) + { + Therapy t = (Therapy)o; + if (this.Name.CompareTo(t.Name) < 0) + return -1; + else + return 1; + } + } +} + diff --git a/WiiControllerState.cs b/WiiControllerState.cs new file mode 100644 index 0000000..1a09d1a --- /dev/null +++ b/WiiControllerState.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +using System.Text; + +namespace TheraWii +{ + interface WiiControllerState + { + Boolean isConnected(); + } +} diff --git a/WiiUse.cs b/WiiUse.cs new file mode 100644 index 0000000..66d8b8a --- /dev/null +++ b/WiiUse.cs @@ -0,0 +1,274 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Runtime.InteropServices; +using System.Threading; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework; + +namespace TheraWii +{ + class WiiUse + { + static IntPtr pWiimoteArray; + static IntPtr[] pWiimote; + static int remoteIdx; + static int nunchuckIdx; + static int balanceIdx; + static bool remoteConnected; + static bool nunchuckConnected; + static bool balanceConnected; + static WiimoteState remoteState; + static NunchuckState nunchuckState; + static BalanceBoardState balanceState; + static bool isConnected = false; + static int numConnected; + + const int numWiimotes = 2; + const int timeout = 5; + + public static int Connect() + { + if (!isConnected) + { + init_structs(); + numConnected = find(); + startupPolling(); + setupPointers(numConnected); + isConnected = true; + } + return numConnected; + } + + private static void init_structs() + { + pWiimoteArray = WiiUseC.wiiuse_init(numWiimotes); + pWiimote = new IntPtr[numWiimotes]; + IntPtr current = pWiimoteArray; + for (int i = 0; i < numWiimotes; i++) + { + pWiimote[i] = (IntPtr)Marshal.PtrToStructure(current, typeof(IntPtr)); + current = (IntPtr)((long)current + Marshal.SizeOf(current)); + } + } + + private static int find() + { + int found = WiiUseC.wiiuse_find(pWiimoteArray, numWiimotes, timeout); + WiiUseC.wiiuse_connect(pWiimoteArray, numWiimotes); + WiiUseC.wiiuse_set_leds(pWiimote[0], 0x10); + WiiUseC.wiiuse_set_leds(pWiimote[1], 0x10); + return found; + } + + private static void startupPolling() + { + for (int i = 0; i < 40; i++) + { + Poll(); + } + } + + private static void setupPointers(int num) + { + remoteConnected = false; + nunchuckConnected = false; + balanceConnected = false; + remoteState = new WiimoteState(); + nunchuckState = new NunchuckState(); + balanceState = new BalanceBoardState(); + + wiimote_t[] wms = MarshalWiimotes(); + for (int i = 0; i < num; i++) + { + if (wms[i].exp.type == WiiExpansion.EXP_NONE || wms[i].exp.type == WiiExpansion.EXP_NUNCHUK) + { + remoteConnected = true; + remoteIdx = i; + remoteState.connected = true; + } + + if (wms[i].exp.type == WiiExpansion.EXP_NUNCHUK) + { + nunchuckConnected = true; + nunchuckIdx = i; + nunchuckState.connected = true; + } + if (wms[i].exp.type == WiiExpansion.EXP_BALANCE) + { + balanceConnected = true; + balanceIdx = i; + balanceState.connected = true; + } + } + } + + public static void Disconnect() + { + if (isConnected) + { + remoteConnected = false; + nunchuckConnected = false; + balanceConnected = false; + remoteState.connected = false; + nunchuckState.connected = false; + balanceState.connected = false; + isConnected = false; + + // This calls wiiuse_disconnect as well + WiiUseC.wiiuse_cleanup(pWiimoteArray, numWiimotes); + } + } + + public static bool IsConnected(WiiType type) + { + switch (type) + { + case WiiType.Remote: + return remoteConnected; + case WiiType.Nunchuck: + return nunchuckConnected; + case WiiType.BalanceBoard: + return balanceConnected; + case WiiType.Mouse: + return true; + default: + return false; + } + } + + public static wiimote_t[] MarshalWiimotes() + { + wiimote_t[] wms = new wiimote_t[numWiimotes]; + for (int i = 0; i < numWiimotes; i++) + { + wms[i] = (wiimote_t)Marshal.PtrToStructure(pWiimote[i], typeof(wiimote_t)); + } + return wms; + } + + public static WIIUSE_EVENT_TYPE[] Poll() + { + WIIUSE_EVENT_TYPE[] returnEvents = new WIIUSE_EVENT_TYPE[numWiimotes]; + for (int i = 0; i < numWiimotes; i++) + { + returnEvents[i] = WIIUSE_EVENT_TYPE.WIIUSE_NONE; + } + + if (WiiUseC.wiiuse_poll(pWiimoteArray, numWiimotes) > 0) + { + /* + * This happens if something happened on any wiimote. + * So go through each one and check if anything happened. + */ + wiimote_t[] wms = MarshalWiimotes(); + for (int i = 0; i < numWiimotes; i++) + { + returnEvents[i] = wms[i].eventw; + if (remoteConnected && i == remoteIdx) + { + // Create Remote state from wiimote_t struct + updateRemote(wms[i]); + } + if (nunchuckConnected && i == nunchuckIdx) + { + // Create Nunchuck state from wiimote_t struct + updateNunchuck(wms[i]); + } + if (balanceConnected && i == balanceIdx) + { + // Create Balance state from wiimote_t struct + updateBalance(wms[i]); + } + } + } + + return returnEvents; + } + + private static void updateRemote(wiimote_t w) + { + remoteState.a = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_A) ? ButtonState.Pressed : ButtonState.Released; + remoteState.b = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_B) ? ButtonState.Pressed : ButtonState.Released; + remoteState.dDown = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_DOWN) ? ButtonState.Pressed : ButtonState.Released; + remoteState.dLeft = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_LEFT) ? ButtonState.Pressed : ButtonState.Released; + remoteState.dRight = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_RIGHT) ? ButtonState.Pressed : ButtonState.Released; + remoteState.dUp = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_UP) ? ButtonState.Pressed : ButtonState.Released; + remoteState.home = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_HOME) ? ButtonState.Pressed : ButtonState.Released; + remoteState.minus = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_MINUS) ? ButtonState.Pressed : ButtonState.Released; + remoteState.plus = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_PLUS) ? ButtonState.Pressed : ButtonState.Released; + remoteState.one = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_ONE) ? ButtonState.Pressed : ButtonState.Released; + remoteState.two = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_TWO) ? ButtonState.Pressed : ButtonState.Released; + remoteState.roll = w.orient.roll; + remoteState.pitch = w.orient.pitch; + remoteState.ir.x = MathHelper.Lerp(-1, 1, MathHelper.Clamp((float)w.ir.x / w.ir.vres[0], 0.0f, 1.0f)); + remoteState.ir.y = -MathHelper.Lerp(-1, 1, MathHelper.Clamp((float)w.ir.y / w.ir.vres[1], 0.0f, 1.0f)); + remoteState.ir.distance = w.ir.z; + remoteState.accel.X = w.gforce.x; + remoteState.accel.Y = w.gforce.y; + remoteState.accel.Z = w.gforce.z; + } + + private static void updateNunchuck(wiimote_t w) + { + nunchuckState.c = WiiUseC.IS_PRESSED(w, WiiUseC.NUNCHUK_BUTTON_C) ? ButtonState.Pressed : ButtonState.Released; + nunchuckState.z = WiiUseC.IS_PRESSED(w, WiiUseC.NUNCHUK_BUTTON_Z) ? ButtonState.Pressed : ButtonState.Released; + nunchuckState.roll = w.exp.nunchuk.orient.roll; + nunchuckState.pitch = w.exp.nunchuk.orient.pitch; + nunchuckState.joyAngle = w.exp.nunchuk.js.ang; + nunchuckState.joyMagnitude = w.exp.nunchuk.js.mag; + nunchuckState.accel.X = w.gforce.x; + nunchuckState.accel.Y = w.gforce.y; + nunchuckState.accel.Z = w.gforce.z; + + if (float.IsNaN(nunchuckState.joyAngle)) + { + nunchuckState.joyAngle = 0; + } + } + + private static void updateBalance(wiimote_t w) + { + balanceState.button = WiiUseC.IS_PRESSED(w, WiiUseC.WIIMOTE_BUTTON_A) ? ButtonState.Pressed : ButtonState.Released; + balanceState.frontLeft = w.exp.balance.feet.fl; + balanceState.frontRight = w.exp.balance.feet.fr; + balanceState.backLeft = w.exp.balance.feet.bl; + balanceState.backRight = w.exp.balance.feet.br; + } + + public static WiimoteState GetRemoteState() + { + return remoteState.Copy(); + } + + public static NunchuckState GetNunchuckState() + { + return nunchuckState.Copy(); + } + + public static BalanceBoardState GetBalanceBoardState() + { + return balanceState.Copy(); + } + + public static void EnableMotionSensing() + { + WiiUseC.wiiuse_motion_sensing(pWiimote[remoteIdx], 1); + } + + public static void DisableMotionSensing() + { + WiiUseC.wiiuse_motion_sensing(pWiimote[remoteIdx], 0); + } + + public static void EnableIR() + { + WiiUseC.wiiuse_set_ir(pWiimote[remoteIdx], 1); + } + + public static void DisableIR() + { + WiiUseC.wiiuse_set_ir(pWiimote[remoteIdx], 0); + } + } +} diff --git a/WiiUseC.cs b/WiiUseC.cs new file mode 100644 index 0000000..2a88943 --- /dev/null +++ b/WiiUseC.cs @@ -0,0 +1,495 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Runtime.InteropServices; + +namespace TheraWii +{ + ///* All the structures in the wiiuse.h header file are included below. Quite + // * a mess but I can't think of a better way to structure it */ + + /** + * @struct vec2b_t + * @brief Unsigned x,y byte vector. + */ + [StructLayout(LayoutKind.Sequential)] + public struct vec2b_t + { + public byte x, y; + }; + + /** + * @struct vec3b_t + * @brief Unsigned x,y,z byte vector. + */ + [StructLayout(LayoutKind.Sequential)] + public struct vec3b_t + { + public byte x, y, z; + }; + + /** + * @struct vec3f_t + * @brief Signed x,y,z float struct. + */ + [StructLayout(LayoutKind.Sequential)] + public struct vec3f_t + { + public float x, y, z; + }; + + /** + * @struct orient_t + * @brief Orientation struct. + * + * Yaw, pitch, and roll range from -180 to 180 degrees. + */ + [StructLayout(LayoutKind.Sequential)] + public struct orient_t + { + public float roll; /**< roll, this may be smoothed if enabled */ + public float pitch; /**< pitch, this may be smoothed if enabled */ + public float yaw; + + float a_roll; /**< absolute roll, unsmoothed */ + float a_pitch; /**< absolute pitch, unsmoothed */ + }; + + /** + * @struct gforce_t + * @brief Gravity force struct. + */ + [StructLayout(LayoutKind.Sequential)] + public struct gforce_t + { + public float x, y, z; + }; + + /** + * @struct accel_t + * @brief Accelerometer struct. For any device with an accelerometer. + */ + [StructLayout(LayoutKind.Sequential)] + public struct accel_t + { + vec3b_t cal_zero; /**< zero calibration */ + vec3b_t cal_g; /**< 1g difference around 0cal */ + + public float st_roll; /**< last smoothed roll value */ + public float st_pitch; /**< last smoothed roll pitch */ + public float st_alpha; /**< alpha value for smoothing [0-1] */ + }; + + /** + * @struct ir_dot_t + * @brief A single IR source. + */ + [StructLayout(LayoutKind.Sequential)] + public struct ir_dot_t + { + public byte visible; /**< if the IR source is visible */ + + public uint x; /**< interpolated X coordinate */ + public uint y; /**< interpolated Y coordinate */ + + short rx; /**< raw X coordinate (0-1023) */ + short ry; /**< raw Y coordinate (0-767) */ + + byte order; /**< increasing order by x-axis value */ + + byte size; /**< size of the IR dot (0-15) */ + }; + + /** + * @enum aspect_t + * @brief Screen aspect ratio. + */ + enum aspect_t + { + WIIUSE_ASPECT_4_3, + WIIUSE_ASPECT_16_9 + }; + /* IR correction types */ + enum ir_position_t + { + WIIUSE_IR_ABOVE, + WIIUSE_IR_BELOW + }; + + /** + * @struct ir_t + * @brief IR struct. Hold all data related to the IR tracking. + */ + [StructLayout(LayoutKind.Sequential)] + public struct ir_t + { + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] + public ir_dot_t[] dot; /**< IR dots */ + public byte num_dots; /**< number of dots at this time */ + + aspect_t aspect; /**< aspect ratio of the screen */ + + ir_position_t pos; /**< IR sensor bar position */ + + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] + public uint[] vres; /**< IR virtual screen resolution */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] + public int[] offset; /**< IR XY correction offset */ + public int state; /**< keeps track of the IR state */ + + public int ax; /**< absolute X coordinate */ + public int ay; /**< absolute Y coordinate */ + + public int x; /**< calculated X coordinate */ + public int y; /**< calculated Y coordinate */ + + public float distance; /**< pixel distance between first 2 dots*/ + public float z; /**< calculated distance */ + }; + + /** + * @struct joystick_t + * @brief Joystick calibration structure. + * + * The angle \a ang is relative to the positive y-axis into quadrant I + * and ranges from 0 to 360 degrees. So if the joystick is held straight + * upwards then angle is 0 degrees. If it is held to the right it is 90, + * down is 180, and left is 270. + * + * The magnitude \a mag is the distance from the center to where the + * joystick is being held. The magnitude ranges from 0 to 1. + * If the joystick is only slightly tilted from the center the magnitude + * will be low, but if it is closer to the outter edge the value will + * be higher. + */ + [StructLayout(LayoutKind.Sequential)] + public struct joystick_t + { + public vec2b_t max; /**< maximum joystick values */ + public vec2b_t min; /**< minimum joystick values */ + public vec2b_t center; /**< center joystick values */ + + public float ang; /**< angle the joystick is being held */ + public float mag; /**< magnitude of the joystick (range 0-1) */ + }; + + /** + * @struct nunchuk_t + * @brief Nunchuk expansion device. + */ + [StructLayout(LayoutKind.Sequential)] + public struct nunchuk_t + { + public accel_t accel_calib; /**< nunchuk accelerometer calibration */ + public joystick_t js; /**< joystick calibration */ + + public IntPtr flags; /**< options flag (points to wiimote_t.flags) */ + + public byte btns; /**< what buttons have just been pressed */ + public byte btns_held; /**< what buttons are being held down */ + public byte btns_released; /**< what buttons were just released this */ + + public float orient_threshold; /**< threshold for orient to generate an event */ + public int accel_threshold; /**< threshold for accel to generate an event */ + + public vec3b_t accel; /**< current raw acceleration data */ + public orient_t orient; /**< current orientation on each axis */ + public gforce_t gforce; /**< current gravity forces on each axis */ + }; + + /** + * @struct classic_ctrl_t + * @brief Classic controller expansion device. + */ + [StructLayout(LayoutKind.Sequential)] + public struct classic_ctrl_t + { + public short btns; /**< what buttons have just been pressed */ + public short btns_held; /**< what buttons are being held down */ + public short btns_released; /**< what buttons were just released this */ + + public float r_shoulder; /**< right shoulder button (range 0-1) */ + public float l_shoulder; /**< left shoulder button (range 0-1) */ + + public joystick_t ljs; /**< left joystick calibration */ + public joystick_t rjs; /**< right joystick calibration */ + }; + + /** + * @struct balance_feet_t + * @brief Balance Board expansion data from 4-feet. + */ + [StructLayout(LayoutKind.Sequential)] + public struct balance_feet_t + { + public float fl, fr, bl, br; /**< front-left, front-right, back-left, back-right */ + }; + + /** + * @struct balance_board_t + * @brief Balance Board expansion device. + */ + [StructLayout(LayoutKind.Sequential)] + public struct balance_board_t + { + public balance_feet_t feet; /**< weight on each foot, calibrated to kgs */ + balance_feet_t min; /**< calibration data */ + balance_feet_t center; /**< calibration data */ + balance_feet_t max; /**< calibration data */ + }; + + /* expansion codes */ + public enum WiiExpansion + { + EXP_NONE = 0, + EXP_NUNCHUK = 1, + EXP_CLASSIC = 2, + EXP_GUITAR_HERO_3 = 3, + EXP_BALANCE = 4 + } + + /** + * @struct expansion_t + * @brief Generic expansion device plugged into wiimote. + * + * TODO: How do we represent the C union in C#??? + */ + [StructLayout(LayoutKind.Explicit)] + public struct expansion_t + { + [FieldOffset(0)] + public WiiExpansion type; /**< type of expansion attached */ + + /* Union */ + [FieldOffset(sizeof(int))] + public nunchuk_t nunchuk; + [FieldOffset(sizeof(int))] + public classic_ctrl_t classic; + [FieldOffset(sizeof(int))] + public balance_board_t balance; + }; + + /** + * @enum win32_bt_stack_t + * @brief Available bluetooth stacks for Windows. + */ + public enum win_bt_stack_t + { + WIIUSE_STACK_UNKNOWN, + WIIUSE_STACK_MS, + WIIUSE_STACK_BLUESOLEIL + }; + + /** + * @struct wiimote_state_t + * @brief Significant data from the previous event. + */ + [StructLayout(LayoutKind.Sequential)] + public struct wiimote_state_t + { + /* expansion_t */ + float exp_ljs_ang; + float exp_rjs_ang; + float exp_ljs_mag; + float exp_rjs_mag; + ushort exp_btns; + orient_t exp_orient; + vec3b_t exp_accel; + float exp_r_shoulder; + float exp_l_shoulder; + + /* ir_t */ + int ir_ax; + int ir_ay; + float ir_distance; + + orient_t orient; + ushort btns; + + vec3b_t accel; + }; + + /** + * @enum WIIUSE_EVENT_TYPE + * @brief Events that wiiuse can generate from a poll. + */ + public enum WIIUSE_EVENT_TYPE + { + WIIUSE_NONE = 0, + WIIUSE_EVENT, + WIIUSE_STATUS, + WIIUSE_CONNECT, + WIIUSE_DISCONNECT, + WIIUSE_UNEXPECTED_DISCONNECT, + WIIUSE_READ_DATA, + WIIUSE_NUNCHUK_INSERTED, + WIIUSE_NUNCHUK_REMOVED, + WIIUSE_CLASSIC_CTRL_INSERTED, + WIIUSE_CLASSIC_CTRL_REMOVED, + WIIUSE_GUITAR_HERO_3_CTRL_INSERTED, + WIIUSE_GUITAR_HERO_3_CTRL_REMOVED, + WIIUSE_BALANCE_BOARD_INSERTED, + WIIUSE_BALANCE_BOARD_REMOVED + }; + + /** + * @struct wiimote_t + * @brief Wiimote structure. + * + * NOTE: The variable WIIUSE_EVENT_TYPE e is originally called WIIUSE_EVENT_TYPE event in wiiuse.h + * but event is a reserved keyword in C#. Hopefully changing this here will not cause a massive + * failure later. Also, dev_handle was originally of type HANDLE, but I read online it can be used + * as IntPtr so we'll go with that for now. Same goes for hid_overlap. + */ + [StructLayout(LayoutKind.Sequential)] + public struct wiimote_t + { + public int unid; /**< user specified id */ + private IntPtr dev_handle; /**< HID handle */ + private NativeOverlapped hid_overlap; /**< overlap handle */ + public win_bt_stack_t stack; /**< type of bluetooth stack to use */ + public int timeout; /**< read timeout */ + public byte normal_timeout; /**< normal timeout */ + public byte exp_timeout; /**< timeout for expansion handshake */ + public int state; /**< various state flags */ + public byte leds; /**< currently lit leds */ + public float battery_level; /**< battery level */ + public int flags; /**< options flag */ + public byte handshake_state; /**< the state of the connection handshake */ + public IntPtr read_req; /**< list of data read requests */ + public accel_t accel_calib; /**< wiimote accelerometer calibration */ + public expansion_t exp; /**< wiimote expansion device */ + public vec3b_t accel; /**< current raw acceleration data */ + public orient_t orient; /**< current orientation on each axis */ + public gforce_t gforce; /**< current gravity forces on each axis */ + public ir_t ir; /**< IR data */ + public ushort btns; /**< what buttons have just been pressed */ + public ushort btns_held; /**< what buttons are being held down */ + public ushort btns_released; /**< what buttons were just released this */ + public float orient_threshold; /**< threshold for orient to generate an event */ + public int accel_threshold; /**< threshold for accel to generate an event */ + public wiimote_state_t lstate; /**< last saved state */ + public WIIUSE_EVENT_TYPE eventw; /**< type of event that occured */ + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] + public byte[] event_buf; /**< event buffer */ + }; + /* End of the structures, should be able to use everything from the wiiuse.h file at this point + * since all the structs are defined(I hope) above. */ + + class WiiUseC + { + /* led bit masks */ + public const int WIIMOTE_LED_NONE = 0x00; + public const int WIIMOTE_LED_1 = 0x10; + public const int WIIMOTE_LED_2 = 0x20; + public const int WIIMOTE_LED_3 = 0x40; + public const int WIIMOTE_LED_4 = 0x80; + + /* button codes */ + public const int WIIMOTE_BUTTON_TWO = 0x0001; + public const int WIIMOTE_BUTTON_ONE = 0x0002; + public const int WIIMOTE_BUTTON_B = 0x0004; + public const int WIIMOTE_BUTTON_A = 0x0008; + public const int WIIMOTE_BUTTON_MINUS = 0x0010; + public const int WIIMOTE_BUTTON_ZACCEL_BIT6 = 0x0020; + public const int WIIMOTE_BUTTON_ZACCEL_BIT7 = 0x0040; + public const int WIIMOTE_BUTTON_HOME = 0x0080; + public const int WIIMOTE_BUTTON_LEFT = 0x0100; + public const int WIIMOTE_BUTTON_RIGHT = 0x0200; + public const int WIIMOTE_BUTTON_DOWN = 0x0400; + public const int WIIMOTE_BUTTON_UP = 0x0800; + public const int WIIMOTE_BUTTON_PLUS = 0x1000; + public const int WIIMOTE_BUTTON_ZACCEL_BIT4 = 0x2000; + public const int WIIMOTE_BUTTON_ZACCEL_BIT5 = 0x4000; + public const int WIIMOTE_BUTTON_UNKNOWN = 0x8000; + public const int WIIMOTE_BUTTON_ALL = 0x1F9F; + + /* nunchul button codes */ + public const int NUNCHUK_BUTTON_Z = 0x01; + public const int NUNCHUK_BUTTON_C = 0x02; + public const int NUNCHUK_BUTTON_ALL = 0x03; + + /* classic controller button codes */ + public const int CLASSIC_CTRL_BUTTON_UP = 0x0001; + public const int CLASSIC_CTRL_BUTTON_LEFT = 0x0002; + public const int CLASSIC_CTRL_BUTTON_ZR = 0x0004; + public const int CLASSIC_CTRL_BUTTON_X = 0x0008; + public const int CLASSIC_CTRL_BUTTON_A = 0x0010; + public const int CLASSIC_CTRL_BUTTON_Y = 0x0020; + public const int CLASSIC_CTRL_BUTTON_B = 0x0040; + public const int CLASSIC_CTRL_BUTTON_ZL = 0x0080; + public const int CLASSIC_CTRL_BUTTON_FULL_R = 0x0200; + public const int CLASSIC_CTRL_BUTTON_PLUS = 0x0400; + public const int CLASSIC_CTRL_BUTTON_HOME = 0x0800; + public const int CLASSIC_CTRL_BUTTON_MINUS = 0x1000; + public const int CLASSIC_CTRL_BUTTON_FULL_L = 0x2000; + public const int CLASSIC_CTRL_BUTTON_DOWN = 0x4000; + public const int CLASSIC_CTRL_BUTTON_RIGHT = 0x8000; + public const int CLASSIC_CTRL_BUTTON_ALL = 0xFEFF; + + /* guitar hero 3 button codes */ + public const int GUITAR_HERO_3_BUTTON_STRUM_UP = 0x0001; + public const int GUITAR_HERO_3_BUTTON_YELLOW = 0x0008; + public const int GUITAR_HERO_3_BUTTON_GREEN = 0x0010; + public const int GUITAR_HERO_3_BUTTON_BLUE = 0x0020; + public const int GUITAR_HERO_3_BUTTON_RED = 0x0040; + public const int GUITAR_HERO_3_BUTTON_ORANGE = 0x0080; + public const int GUITAR_HERO_3_BUTTON_PLUS = 0x0400; + public const int GUITAR_HERO_3_BUTTON_MINUS = 0x1000; + public const int GUITAR_HERO_3_BUTTON_STRUM_DOWN = 0x4000; + public const int GUITAR_HERO_3_BUTTON_ALL = 0xFEFF; + + + /* wiimote option flags */ + public const int WIIUSE_SMOOTHING = 0x01; + public const int WIIUSE_CONTINUOUS = 0x02; + public const int WIIUSE_ORIENT_THRESH = 0x04; + public const int WIIUSE_INIT_FLAGS = (WIIUSE_SMOOTHING | WIIUSE_ORIENT_THRESH); + + public const float WIIUSE_ORIENT_PRECISION = 100.0f; + + /* expansion codes */ + public const int EXP_NONE = 0; + public const int EXP_NUNCHUK = 1; + public const int EXP_CLASSIC = 2; + public const int EXP_GUITAR_HERO_3 = 3; + public const int EXP_BALANCE = 4; + + /** + * @brief Check if a button is pressed. + * @param dev Pointer to a wiimote_t or expansion structure. + * @param button The button you are interested in. + * @return 1 if the button is pressed, 0 if not. + */ + public static bool IS_PRESSED(wiimote_t dev, int button) { return ((dev.btns & button) == button); } + + /* try to import the dll and all its functions so we can use them here */ + [DllImport("wiiuse.dll")] + public static extern string wiiuse_version(); + + [DllImport("wiiuse.dll")] + public static extern IntPtr wiiuse_init(int wiimotes); + + [DllImport("wiiuse.dll")] + public static extern int wiiuse_find(IntPtr wm, int max_wiimotes, int timeout); + + [DllImport("wiiuse.dll")] + public static extern int wiiuse_connect(IntPtr wms, int wiimotes); + + [DllImport("wiiuse.dll")] + public static extern void wiiuse_set_leds(IntPtr wm, int leds); + + [DllImport("wiiuse.dll")] + public static extern void wiiuse_cleanup(IntPtr wm, int wiimotes); + + [DllImport("wiiuse.dll")] + public static extern int wiiuse_poll(IntPtr wms, int wiimotes); + + [DllImport("wiiuse.dll")] + public static extern void wiiuse_motion_sensing(IntPtr wm, int status); + + [DllImport("wiiuse.dll")] + public static extern void wiiuse_set_ir(IntPtr wm, int status); + } +} \ No newline at end of file diff --git a/WiimoteState.cs b/WiimoteState.cs new file mode 100644 index 0000000..34a09f3 --- /dev/null +++ b/WiimoteState.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Input; + +namespace TheraWii +{ + class WiimoteState : WiiControllerState + { + public ButtonState home; + public ButtonState plus; + public ButtonState minus; + public ButtonState dUp; + public ButtonState dRight; + public ButtonState dDown; + public ButtonState dLeft; + public ButtonState one; + public ButtonState two; + public ButtonState a; + public ButtonState b; + public IRState ir; + public float roll; + public float pitch; + public Vector3 accel; + + + public WiimoteState() + { + ir = new IRState(); + accel = Vector3.Zero; + } + + public void Initialize() + { + home = ButtonState.Released; + plus = ButtonState.Released; + minus = ButtonState.Released; + dUp = ButtonState.Released; + dRight = ButtonState.Released; + dDown = ButtonState.Released; + dLeft = ButtonState.Released; + one = ButtonState.Released; + two = ButtonState.Released; + a = ButtonState.Released; + b = ButtonState.Released; + ir = new IRState(); + connected = false; + } + public Boolean connected; + public Boolean isConnected() + { + return connected; + } + + internal WiimoteState Copy() + { + WiimoteState r = (WiimoteState)this.MemberwiseClone(); + r.ir = ir.Copy(); + return r; + } + } +} diff --git a/dataModel.xml b/dataModel.xml new file mode 100755 index 0000000..7268fb4 --- /dev/null +++ b/dataModel.xml @@ -0,0 +1,1176 @@ + + + true + + + Dynamic Balance Shift + + + false + 1 + + root + 0 + 0 + + + + false + TotalTime + 5 + false + + Dynamic Balance + 0 + 0 + This task will measure shifting of balance. + +Move the cursor to the shaded area and hold for +two seconds. This task will repeat multiple times +with successively smaller target areas. + + + + false + 5 + + Balance Shift + 0 + 0 + + + + false + TimeInRegion + 2 + false + + Left Area + 0 + 0 + + Rectangle + false + + + + X + + + + Static + Dynamic + + -1 + -0.7 + + + 0.5 + 0.1 + + 0 + 0 + Static + + + + + + Y + + + + Static + Dynamic + + 0 + 0 + + + 0.5 + 0.1 + + 0 + 0 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + TotalTime + true + + + + false + TimeInRegion + 2 + false + + Right Area + 0 + 0 + + Rectangle + false + + + + X + + + + Static + Dynamic + + 0 + 0.7 + + + 0.5 + 0.1 + + 0 + 0 + Static + + + + + + Y + + + + Static + Dynamic + + 0 + 0 + + + 0.5 + 0.1 + + 0 + 0 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + TotalTime + true + + + Repetitions + 30 + 5 + 0 + 0 + + + Repetitions + 30 + 1 + 0 + 0 + + + + Mouse Demo + + + true + 1 + + root + 0 + 0 + + + + true + + + Intro + 1 + 0 + This is an intro to the TheraWii program. + +On the following screen, try to keep the cursor in +the shaded area for 5 seconds. + + + + false + TimeInRegion + 5 + true + + Hold Position + 1 + 0 + + Rectangle + false + + + + X + + + + Static + Static + + 0 + -0.5 + + + 0.1 + 0.2 + + -0.3 + 0.2 + Static + + + + + + Y + + + + Static + Static + + 0 + 0.5 + + + 0.1 + 0.1 + + 0.5 + 0.1 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Differential + + TimeInRegion + true + + + + false + TotalTime + 5 + false + + Random Movement + 1 + 0 + Move the cursor to the shaded area and hold for +2 seconds. + + + + true + 5 + + Random + 1 + 0 + + + + false + TimeInRegion + 2 + true + + Random + 5 + 4 + + Ellipse + false + + + + X + + + + Random + Dynamic + + -0.8 + 0.8 + + + 0.5 + 0.1 + + 0.55 + 0.100000016 + Static + + + + + + Y + + + + Random + Dynamic + + -0.8 + 0.8 + + + 0.5 + 0.1 + + 0.88 + 0.100000016 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + TimeOutRegion + true + + + Repetitions + 30 + 5 + 0 + 5 + + + + false + TotalTime + 5 + false + + Dynamic Movement + 1 + 0 + Keep moving the cursor into the highlighted region. + + + + false + 10 + + Dynamic Movement + 1 + 0 + + + + false + TimeInRegion + 0.1 + true + + Dynamic 2D + 10 + 9 + + Rectangle + false + + + + X + + + + Dynamic + Static + + -0.8 + 0.8 + + + 0.1 + 0.1 + + 0.9 + 0.1 + Static + + + + + + Y + + + + Dynamic + Static + + -0.8 + 0.8 + + + 0.1 + 0.1 + + 0.9 + 0.1 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + TotalTime + true + + + Repetitions + 30 + 10 + 0 + 910 + + + Repetitions + 30 + 1 + 1 + 0 + + + + Random Positioning + + + false + 1 + + root + 0 + 0 + + + + false + TotalTime + 5 + false + + Random Position + 0 + 0 + This task will randomly place the target region +on screen. Move the cursor within the region +and hold for 2 seconds. + + + + false + 7 + + Random + 0 + 0 + + + + false + TimeInRegion + 2 + false + + Random Ellipse + 0 + 0 + + Ellipse + false + + + + X + + + + Random + Static + + -0.7 + 0.7 + + + 0.1 + 0.2 + + 0 + 0 + Static + + + + + + Y + + + + Random + Static + + -0.7 + 0.7 + + + 0.1 + 0.2 + + 0 + 0 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + PathEfficiency + true + + + Repetitions + 30 + 7 + 0 + 0 + + + Repetitions + 30 + 1 + 0 + 0 + + + + Sit to Stand + + + false + 1 + + root + 0 + 0 + + + + false + + + Begin + 0 + 0 + Begin in a seated position with your feet +resting on the Wii Balance Board. + +Try to stand keeping your center of balance steady. + + + + false + TimeInRegion + 2 + false + + Stand + 0 + 0 + + Rectangle + false + + + + X + + + + Static + Static + + 0 + 0 + + + 0.1 + 0.1 + + 0 + 0 + Static + + + + + + Y + + + + Static + Static + + 0 + 0 + + + 0.1 + 0.1 + + 0 + 0 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + PathEfficiency + true + + + Repetitions + 30 + 1 + 0 + 0 + + + + Static Balance + + + false + 1 + + root + 0 + 0 + + + + false + TotalTime + 5 + false + + Static Balance + 0 + 0 + The following task will measure your center +of balance. Try to hold the curor near the +center for 10 seconds. + + + + false + TotalTime + 10 + false + + Static Balance Task + 0 + 0 + + Rectangle + false + + + + X + + + + Static + Static + + 0 + 0 + + + 0.1 + 0.1 + + 0 + 0 + Static + + + + + + Y + + + + Static + Static + + 0 + 0 + + + 0.1 + 0.1 + + 0 + 0 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + MotionArea + false + + + Repetitions + 30 + 1 + 0 + 0 + + + + Time to Boundary + + + false + 1 + + root + 0 + 0 + + + + false + TotalTime + 5 + false + + Time to Boundary + 0 + 0 + This task will record time to boundary. + +Keep the cursor in the center region for 2 seconds. + +Then move the cursor to the new region as quickly as possible. + + + + false + TimeInRegion + 2 + false + + Center + 0 + 0 + + Rectangle + false + + + + X + + + + Static + Static + + 0 + 0 + + + 0.1 + 0.2 + + 0 + 0 + Static + + + + + + Y + + + + Static + Static + + 0 + 0 + + + 0.1 + 0.2 + + 0 + 0 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + TotalTime + true + + + + false + TimeInRegion + 0.1 + false + + Top Boundary + 0 + 0 + + Rectangle + false + + + + X + + + + Static + Static + + 0 + 0 + + + 0.1 + 1 + + 0 + 0 + Static + + + + + + Y + + + + Static + Static + + 0 + 0.8 + + + 0.1 + 0.1 + + 0 + 0 + Static + + + + + + Z + + + + Static + Static + + 0 + 0 + + + 0 + 0 + + 0 + 0 + Static + + + + + + + Absolute + + TimeOutRegion + true + + + Repetitions + 30 + 1 + 0 + 0 + + + + + \ No newline at end of file diff --git a/lib/Ionic.Zip.dll b/lib/Ionic.Zip.dll new file mode 100755 index 0000000..7b11577 Binary files /dev/null and b/lib/Ionic.Zip.dll differ diff --git a/licenseblurb.txt b/licenseblurb.txt new file mode 100755 index 0000000..b8a202e --- /dev/null +++ b/licenseblurb.txt @@ -0,0 +1,9 @@ +TheraWii is a software application that gives Physical Therapy clinicians and researchers the ability to use commodity motion capture devices to gather quantatative data about patient movement and create customized interactions. + +Copyright (C) 2014 Tim Chagnon, Andrew Meinert, Don Naegely, Joe Kokinda + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/logo.ico b/logo.ico new file mode 100755 index 0000000..9ebd41d Binary files /dev/null and b/logo.ico differ diff --git a/logo.png b/logo.png new file mode 100755 index 0000000..4e73ff3 Binary files /dev/null and b/logo.png differ diff --git a/wiiuse.dll b/wiiuse.dll new file mode 100755 index 0000000..d0b826d Binary files /dev/null and b/wiiuse.dll differ