lib/collada/collada.ex

defmodule COLLADA do
    @moduledoc """
    Provide funtions related to COLLADA .dae file import geomertries
    """

    import SweetXml

    @doc """
        import robot(collada) file
        TODO: develop information model for robot.
    ## Parameters

        - path: COLLDA file path

    ## Examples

        iex> {:ok, xmldoc} =import_robot("/test/irb6640.dae")

    """
    @spec import_robot(String) :: {:ok, binary()}
    def import_robot(path) do
        {:ok, xmldoc} =File.read(Path.join(File.cwd!,path))
        #docmap = XmlToMap.naive_map(xmldoc)

        #robotmap = docmap["COLLADA"]["#content"]["library_visual_scenes"]["#content"]["visual_scene"]["#content"]["node"]

       #robot = %{name: robotmap["-name"]}

        #basemap = robotmap["#content"] 

        #baselink = %{name: basemap["name"],translate: basemap["node"]["#content"]["translate"], rotate: basemap["node"]["#content"]["rotate"]}

        
    end

    # import enviroment(collada) to enviroment type

    def import_env do
        
    end


    def get_geometries(xmldoc) do
        result = xmldoc |> xpath(
            ~x'//library_geometries/geometry'l,
            name: ~x'./@id',
            positions: ~x'./mesh/source/float_array/text()'s,
            triangles: ~x'./mesh/triangles/p/text()'s,
            offset: ~x'./mesh/triangles/input/@offset'i,
            set: ~x'./mesh/triangles/input/@set'i
        )

        geometries = result 
        |> Enum.map(fn map -> 
                        pos_list = String.split(map[:positions]) 
                        pos_list_f = pos_list 
                                    |> Enum.map(fn s -> Float.parse(s) |> elem(0) end) 
                        map = %{map | positions: pos_list_f}
                        tri_list = String.split(map[:triangles])
                        tri_list_d = tri_list 
                                    |> Enum.map(fn s -> Integer.parse(s) |> elem(0) end) 
                        map = %{map | triangles: tri_list_d}
                    end)
    end
end