#HGAMK      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJ (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe  wavefront An element holds a value along with the user-defined object s name (if any), the associated groups, the used material and the smoothing group the element belongs to (if any). Those values can be used to sort the data per object or per group and to lookup materials.(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafeg  wavefrontA face gathers several  1 to build up faces. It has a least three vertices  wavefront&A face index is a triplet of indices.   vi vti vni, is a face that indexes the locations with vi, the texture coordinates with vti and the normals with vni. An index set to K means no information. That is, if vni == K , then that  ( doesn t have a normal associated with.    (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe wavefront#A line index is a pair of indices.  vi vti. vi references the locations and vti& indexes the texture coordinates. If vti == K , then that 3 doesn t have texture coordinates associated with.(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe" wavefront`A location is a 4-floating vector. You can access to its components by pattern matching on them: * let Location x y z w = Location 1 2 3 4  That type is strict and unboxed."#'&%$"#'&%$(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe * wavefront^A normal is a 3-floating vector. You can access to its components by pattern matching on them: + let Normal nx ny nz = Normal 0.1 0.2 0.3  That type is strict and unboxed.*+.-,*+.-,(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe$1 wavefrontxA point is a single index that references the locations. It s a canonical type that truly represents a polygonal point.123123(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe)b6 wavefrontlA texture coordinate is a 3D-floating vector. You can access to its components by pattern matching on them: , let TexCoord r s t = TexCoord 0.1 0.2 0.3  That type is strcit and unboxed.67:9867:98 (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe+L wavefront A stream of M.#LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmn (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableSafe6o wavefrontNThe lexer context. The result of lexing a stream of tokens is this exact type.p wavefront Locations.q wavefrontTexture coordinates.r wavefrontNormals.s wavefrontPoints.t wavefrontLines.u wavefrontFaces.v wavefrontCurrent object.w wavefrontCurrent groups.x wavefrontCurrent material.y wavefrontMaterial libraries.z wavefrontCurrent smoothing group.{ wavefront The empty od. Such a context exists at the beginning of the token stream and gets altered as we consume tokens.| wavefront4The lexer function, consuming tokens and yielding a o.o}zyxwvutsrqp{|~(C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone:? wavefront Locations.@ wavefrontTexture coordinates.A wavefrontNormals.B wavefrontPoints.C wavefrontLines.D wavefrontFaces.E wavefrontMaterial libraries. =>EDCBA@?FG =>EDCBA@?FG (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNone=J wavefront Extract a =% from a Wavefront OBJ formatted file.JJ (C) 2015 Dimitri SabadieBSD3+Dimitri Sabadie <dimitri.sabadie@gmail.com> experimentalportableNoneg?5 "#$%&'*+,-.1236789:=>?@ABCDEJ4"#$%&'6789:*+,-.123 =>?@ABCDE    !"##$%&'()**+,-./011234567789:;;<=>?@AABCDEFGHIJKL MNOP Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~  t wavefront-0.7.1.4-inplaceCodec.Wavefront.ElementCodec.Wavefront.FaceCodec.Wavefront.LineCodec.Wavefront.LocationCodec.Wavefront.NormalCodec.Wavefront.PointCodec.Wavefront.TexCoordCodec.Wavefront.ObjectCodec.Wavefront.IOCodec.Wavefront.TokenCodec.Wavefront.LexerCodec.WavefrontElementelObjectelGroupselMtlelSmoothingGroupelValue $fEqElement $fShowElementFace FaceIndex faceLocIndexfaceTexCoordIndex faceNorIndexQuadTriangle $fEqFaceIndex$fShowFaceIndex$fEqFace $fShowFaceLine lineIndexA lineIndexB LineIndex lineLocIndexlineTexCoordIndex $fEqLineIndex$fShowLineIndex$fEqLine $fShowLineLocationlocXlocYlocZlocW $fEqLocation$fShowLocationNormalnorXnorYnorZ $fEqNormal $fShowNormalPoint pointLocIndex $fEqPoint $fShowPointTexCoord texcoordR texcoordS texcoordT $fEqTexCoord$fShowTexCoord WavefrontOBJ objLocations objTexCoords objNormals objPointsobjLinesobjFaces objMtlLibsctxtToWavefrontOBJ fromDList$fEqWavefrontOBJ$fShowWavefrontOBJfromFilebase GHC.MaybeNothing TokenStreamTokenTknS TknUseMtl TknMtlLibTknOTknGTknFTknLTknPTknVTTknVNTknVtokenize analyseResult cleanupTokenslocationnormaltexCoordpointslinesfacegroupsobjectmtllibusemtlsmoothingGroupcomment slashThenElseeolname spacedName skipHSpacefloatuntilEndCtxt ctxtLocations ctxtTexCoords ctxtNormals ctxtPoints ctxtLines ctxtFacesctxtCurrentObjectctxtCurrentGroupsctxtCurrentMtl ctxtMtlLibsctxtCurrentSmoothingGroup emptyCtxtlexerprepareElement