module Codec.Wavefront.Object where
import Codec.Wavefront.Element
import Codec.Wavefront.Face
import Codec.Wavefront.Lexer ( Ctxt(..) )
import Codec.Wavefront.Line
import Codec.Wavefront.Location
import Codec.Wavefront.Normal
import Codec.Wavefront.Point
import Codec.Wavefront.TexCoord
import Data.DList ( DList, toList )
import Data.Text ( Text )
import Data.Vector ( Vector, fromList )
data WavefrontOBJ = WavefrontOBJ {
objLocations :: Vector Location
, objTexCoords :: Vector TexCoord
, objNormals :: Vector Normal
, objPoints :: Vector (Element Point)
, objLines :: Vector (Element Line)
, objFaces :: Vector (Element Face)
, objMtlLibs :: Vector Text
} deriving (Eq,Show)
ctxtToWavefrontOBJ :: Ctxt -> WavefrontOBJ
ctxtToWavefrontOBJ ctxt = WavefrontOBJ {
objLocations = fromDList (ctxtLocations ctxt)
, objTexCoords = fromDList (ctxtTexCoords ctxt)
, objNormals = fromDList (ctxtNormals ctxt)
, objPoints = fromDList (ctxtPoints ctxt)
, objLines = fromDList (ctxtLines ctxt)
, objFaces = fromDList (ctxtFaces ctxt)
, objMtlLibs = fromDList (ctxtMtlLibs ctxt)
}
fromDList :: DList a -> Vector a
fromDList = fromList . toList