public override void Load(ContentManager content)
        {
            graphics = SceneManager.GraphicsDevice;
            camera   = new Camera3D();

            effect = new BasicEffect(graphics);
            effect.VertexColorEnabled = true;

            rasterizer          = new RasterizerState();
            rasterizer.FillMode = FillMode.WireFrame;
            rasterizer.CullMode = CullMode.None;

            InitJoints();

            base.Load(content);

            var panel = new Panel(new Rectangle(10, 10, 300, 500));

            jointAngleText = new TextBlock("A", 0, 0);
            goalText       = new TextBlock("A", 0, 30);
            sizeText       = new TextBlock(baseJoint.Size().ToString(), 0, 60);

            panel.AddChildren(jointAngleText, goalText, sizeText);

            Gui.BaseContainer.AddChildren(
                panel
                );
        }
        private void InitGui()
        {
            var panelW = 700;
            var panelH = 450;

            var panel      = new Panel(new Rectangle(WIDTH / 2 - panelW / 2, HEIGHT / 2 - panelH / 2, panelW, panelH));
            var exitButton = new Button("Return to Menu", 10, 360);

            exitButton.Clicked += (s, e) => Exit();

            panel.AddChildren(new TextBlock(
                                  "Welcome to the Inverse Kinematics Demo!\n\n" +
                                  "General Controls for Demos-\n" +
                                  "  Left Click: Move the goal position.\n" +
                                  "  Spacebar: Run one IK iteration per frame (Demo 1 just runs 1 iteration)\n" +
                                  "  Shift+Spacebar: Run IK iterations until a solution is found (or a max is reached).\n" +
                                  "  Escape: Exits the individual demo, or the entire program (on the menu screen)\n\n" +
                                  "Notes-\n" +
                                  "  Descriptions for each demo can be found in the report.\n" +
                                  "  Live Demo is for the presentation only. No written documentation is provided.\n" +
                                  "  Some code is unused (like PseudoMatrix). This is from either testing or deprecation.\n" +
                                  "  Press Escape to return to the main menu!\n\n" +
                                  "Program by Alexander Pabst",
                                  10, 10),

                              exitButton);

            Gui.BaseContainer.AddChildren(panel);
        }
        private void InitGui()
        {
            var panel = new Panel(new Rectangle(0, 0, 300, 500));

            jointCountG = new TextBlock("", 0, 30);

            panel.AddChildren(new TextBlock("3D IK Example", 0, 0),
                              jointCountG);

            Gui.BaseContainer.AddChildren(panel);
        }
        public override void Load(ContentManager content)
        {
            base.Load(content);

            var panelW = 400;
            var panelH = 450;

            var panel = new Panel(new Rectangle(WIDTH / 2 - panelW / 2, HEIGHT / 2 - panelH / 2, panelW, panelH));

            panel.AddChildren(new TextBlock("Inverse Kinematics Demos", 10, 0));

            var instructionButton = new Button("Instructions", 10, 60);

            instructionButton.Clicked += (s, e) => SceneManager.AddScene(new InstructionScene());

            var comparisonButton = new Button("Comparison Inverse Kinematics Demo", 10, 120);

            comparisonButton.Clicked += (s, e) => SceneManager.AddScene(new ComparisonScene());

            var angleLimitButton = new Button("Angle Limit Inverse Kinematics Demo", 10, 170);

            angleLimitButton.Clicked += (s, e) => SceneManager.AddScene(new AngleLimitScene());

            var varianceButton = new Button("Variance Inverse Kinematics Demo", 10, 220);

            varianceButton.Clicked += (s, e) => SceneManager.AddScene(new VarianceScene());

            var constraintButton = new Button("Constraint Inverse Kinematics Demo", 10, 270);

            constraintButton.Clicked += (s, e) => SceneManager.AddScene(new ConstraintScene());

            var ik2dButton = new Button("Live Demo Only", 10, 340);

            ik2dButton.Clicked += (s, e) => SceneManager.AddScene(new IK2D());

            panel.AddChildren(instructionButton, ik2dButton, comparisonButton, angleLimitButton, varianceButton, constraintButton);
            Gui.BaseContainer.AddChildren(panel);
        }