1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
-----------------------------------------------------------------------------
-- |
-- Copyright : (C) 2015 Dimitri Sabadie
-- License : BSD3
--
-- Maintainer : Dimitri Sabadie <dimitri.sabadie@gmail.com>
-- Stability : experimental
-- Portability : portable
--
-----------------------------------------------------------------------------
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 {
-- |Locations.
objLocations :: Vector Location
-- |Texture coordinates.
, objTexCoords :: Vector TexCoord
-- |Normals.
, objNormals :: Vector Normal
-- |Parameter-space coordinates.
, objParamCoords :: Vector ParamCoord
-- |Points.
, objPoints :: Vector (Element Point)
-- |Lines.
, objLines :: Vector (Element Line)
-- |Faces.
, objFaces :: Vector (Element Face)
-- |Material libraries.
, objMtlLibs :: Vector Text
} deriving (Eq,Show)
ctxtToWavefrontOBJ :: Ctxt -> WavefrontOBJ
ctxtToWavefrontOBJ ctxt = WavefrontOBJ {
objLocations = fromDList (snd $ ctxtLocations ctxt)
, objTexCoords = fromDList (snd $ ctxtTexCoords ctxt)
, objNormals = fromDList (snd $ ctxtNormals ctxt)
, objParamCoords = fromDList (snd $ ctxtParamCoords 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
|