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