public FloorList Upslope(float radius, float startTheta, float endTheta)
 {
     Vector3 startPosition = (Last.RightForward + Last.LeftForward) / 2f;
     Vector3 center = startPosition + Vector3.up * radius;
     Vector3 right = (Last.RightForward - Last.LeftForward).normalized;
     Floor floor = new OrbitXInsideFloor (center, right, Vector3.up, Last.Width, radius, 50, startTheta, endTheta);
     Last.Next = floor;
     floor.Prev = Last;
     Last = floor;
     floor.Order = floor.Prev.Order + 1;
     return this;
 }
    public FloorList Cup(float radius)
    {
        Vector3 startPosition = (Last.RightForward + Last.LeftForward) / 2f;

        Vector3 right = (Last.RightForward - Last.LeftForward).normalized;
        Vector3 up = -Vector3.Cross (right, Vector3.up).normalized;
        Vector3 center = startPosition + up * radius;
        Floor floor = new OrbitXInsideFloor (center, right, Vector3.up, Last.Width, radius, 50, 0, -Mathf.PI);
        Last.Next = floor;
        floor.Prev = Last;
        Last = floor;
        floor.Order = floor.Prev.Order + 1;
        return this;
    }