// Prepare & Draw the axis and cube
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);

            viewMatrix = Matrix.CreateViewMatrix(r, phi, theta);

            modelMatrix = Matrix.Translate(position) * (Matrix.Rotate(rotation) * (Matrix.Scale(scale)));

            Prepare(cube.vb, modelMatrix);
            cube.Draw(e.Graphics, vb);

            Prepare(x_axis.vb, Matrix.Identity());
            x_axis.Draw(e.Graphics, vb);

            Prepare(y_axis.vb, Matrix.Identity());
            y_axis.Draw(e.Graphics, vb);

            Prepare(z_axis.vb, Matrix.Identity());
            z_axis.Draw(e.Graphics, vb);

            label1.Text = "Scale: " + scale + "   S/s";
            label2.Text = "TransX: " + position.x + "   Left/Right";
            label3.Text = "TransY: " + position.y + "   Up/Down";
            label4.Text = "TransZ: " + position.z + "   PgDn/PgUp";
            label5.Text = "RotX: " + rotation.x + "   x/X";
            label6.Text = "RotY: " + rotation.y + "   y/Y";
            label7.Text = "RotZ: " + rotation.z + "   z/Z";

            label8.Text  = "r: " + r + "   r/R";
            label9.Text  = "d: " + d + "   d/D";
            label10.Text = "phi: " + phi + "   p/P";
            label11.Text = "theta: " + theta + "   t/T";

            label12.Text = "Phase: " + phase;
        }