with
     float_Math.Geometry.d3.Modeller.Forge;

package body openGL.IO.lat_long_Radius
is

   function to_Model (math_Model : access Geometry_3d.a_Model) return IO.Model
   is
      site_Count   : constant long_Index_t  := long_Index_t (math_Model.site_Count);
      coord_Count  : constant long_Index_t  := 0; --get_coord_Count;                        -- TODO: Add texturing.
      normal_Count : constant long_Index_t  := 0; --collada_Normals'Length   / 3;           -- TODO: Add lighting.

      the_Sites    : constant many_Sites_view    := new many_Sites   (1 .. site_Count);
      the_Normals  : constant many_Normals_view  := new many_Normals (1 .. normal_Count);
      the_Coords   :          many_Coords_view;

      the_Faces    :          IO.Faces_view := new IO.Faces (1 .. 50_000);
      face_Count   :          long_Index_t  := 0;

   begin
      if coord_Count > 0
      then
         the_Coords := new many_Coordinates_2D (1 .. coord_Count);
      end if;

      for i in 1 .. Integer (site_Count)
      loop
         the_Sites (long_Index_t (i)) := math_Model.Sites (i);
      end loop;


      --  Primitives
      --
      declare
         the_Vertices : Vertices (1 .. long_Index_t (math_Model.tri_Count * 3));
         Start        : long_Index_t;
         the_Face     : IO.Face;
      begin
         for i in math_Model.Triangles'Range
         loop
            Start := long_Index_t ((i - 1) * 3  +  1);

            the_Vertices (Start    ) := (site_Id => long_Index_t (math_Model.Triangles (i) (1)),  others => 0);
            the_Vertices (Start + 1) := (site_Id => long_Index_t (math_Model.Triangles (i) (2)),  others => 0);
            the_Vertices (Start + 2) := (site_Id => long_Index_t (math_Model.Triangles (i) (3)),  others => 0);

            the_Face := (Triangle,
                         the_Vertices (Start .. Start + 2));

            face_Count             := face_Count + 1;
            the_Faces (face_Count) := the_Face;
         end loop;
      end;

      declare
         used_Faces : constant IO.Faces_view := new IO.Faces' (the_Faces (1 .. face_Count));
      begin
         free (the_Faces);

         return (Sites   => the_Sites,
                 Coords  => the_Coords,
                 Normals => the_Normals,
                 Weights => null,
                 Faces   => used_Faces);
      end;
   end to_Model;



   function to_Model (model_File : in String) return IO.Model
   is
      use float_Math.Geometry.d3.Modeller.Forge;

      the_math_Model : aliased Geometry_3d.a_Model := mesh_Model_from (Model => polar_Model_from (model_File));
   begin
      return to_Model (the_math_Model'Access);
   end to_Model;


end openGL.IO.lat_long_Radius;
