package openGL.Model.box
--
--  Provides an abstract model of a box.
--
is
   type Item is abstract new Model.item with private;

   type Side is (Front, Rear,
                 Upper, Lower,
                 Left,  Right);

   function Size (Self : in Item) return Vector_3;



private

   type Item is abstract new Model.item with
      record
         Size : Vector_3;
      end record;


   type site_Id is ( Left_Lower_Front, Right_Lower_Front,
                    Right_Upper_Front,  Left_Upper_Front,
                    Right_Lower_Rear,   Left_Lower_Rear,
                     Left_Upper_Rear,  Right_Upper_Rear);

   type Sites is array (site_Id) of Site;


   front_Normal : constant Vector_3 := [ 0.0,  0.0,  1.0];
   rear_Normal  : constant Vector_3 := [ 0.0,  0.0, -1.0];
   upper_Normal : constant Vector_3 := [ 0.0,  1.0,  0.0];
   lower_Normal : constant Vector_3 := [ 0.0, -1.0,  0.0];
   left_Normal  : constant Vector_3 := [-1.0,  0.0,  0.0];
   right_Normal : constant Vector_3 := [ 1.0,  0.0,  0.0];

   function vertex_Sites (Self : in Item'Class) return Sites;

end openGL.Model.box;
