From e0a3b4650f92a39fed428c26c1e137767fffa15c Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Tue, 11 Jun 2019 17:29:21 -0400 Subject: Sabadie: Started free-form geometry support. --- src/Codec/Wavefront/FreeForm.hs | 10 ++++++++++ src/Codec/Wavefront/Lexer.hs | 10 ++++++++++ src/Codec/Wavefront/Object.hs | 10 ++++++++++ wavefront-obj.cabal | 1 + 4 files changed, 31 insertions(+) create mode 100644 src/Codec/Wavefront/FreeForm.hs diff --git a/src/Codec/Wavefront/FreeForm.hs b/src/Codec/Wavefront/FreeForm.hs new file mode 100644 index 0000000..4e418a7 --- /dev/null +++ b/src/Codec/Wavefront/FreeForm.hs @@ -0,0 +1,10 @@ +module Codec.Wavefront.FreeForm where + +data Curve = Curve + deriving (Eq,Show) + +data EmbeddedCurve = EmbeddedCurve + deriving (Eq,Show) + +data Surface = Surface + deriving (Eq,Show) diff --git a/src/Codec/Wavefront/Lexer.hs b/src/Codec/Wavefront/Lexer.hs index 77ecb35..ea32e2a 100644 --- a/src/Codec/Wavefront/Lexer.hs +++ b/src/Codec/Wavefront/Lexer.hs @@ -14,6 +14,7 @@ module Codec.Wavefront.Lexer where import Codec.Wavefront.Element import Codec.Wavefront.Face +import Codec.Wavefront.FreeForm import Codec.Wavefront.Line import Codec.Wavefront.Location import Codec.Wavefront.Normal @@ -42,6 +43,12 @@ data Ctxt = Ctxt { , ctxtLines :: DList (Element Line) -- |Faces. , ctxtFaces :: DList (Element Face) + -- |Curves. + , ctxtCurves :: DList (Element Curve) + -- |Curves on surfaces. + , ctxtEmbeddedCurves :: DList (Element EmbeddedCurve) + -- |Surfaces. + , ctxtSurfaces :: DList (Element Surface) -- |Current object. , ctxtCurrentObject :: Maybe Text -- |Current groups. @@ -65,6 +72,9 @@ emptyCtxt = Ctxt { , ctxtPoints = empty , ctxtLines = empty , ctxtFaces = empty + , ctxtCurves = empty + , ctxtEmbeddedCurves = empty + , ctxtSurfaces = empty , ctxtCurrentObject = Nothing , ctxtCurrentGroups = ["default"] , ctxtCurrentMtl = Nothing diff --git a/src/Codec/Wavefront/Object.hs b/src/Codec/Wavefront/Object.hs index 26d85c2..65c062e 100644 --- a/src/Codec/Wavefront/Object.hs +++ b/src/Codec/Wavefront/Object.hs @@ -13,6 +13,7 @@ module Codec.Wavefront.Object where import Codec.Wavefront.Element import Codec.Wavefront.Face +import Codec.Wavefront.FreeForm import Codec.Wavefront.Lexer ( Ctxt(..) ) import Codec.Wavefront.Line import Codec.Wavefront.Location @@ -38,6 +39,12 @@ data WavefrontOBJ = WavefrontOBJ { , objLines :: Vector (Element Line) -- |Faces. , objFaces :: Vector (Element Face) + -- |Curves. + , objCurves :: Vector (Element Curve) + -- |Curves on surfaces. + , objEmbeddedCurves :: Vector (Element EmbeddedCurve) + -- |Surfaces. + , objSurfaces :: Vector (Element Surface) -- |Material libraries. , objMtlLibs :: Vector Text } deriving (Eq,Show) @@ -51,6 +58,9 @@ ctxtToWavefrontOBJ ctxt = WavefrontOBJ { , objPoints = fromDList (ctxtPoints ctxt) , objLines = fromDList (ctxtLines ctxt) , objFaces = fromDList (ctxtFaces ctxt) + , objCurves = fromDList (ctxtCurves ctxt) + , objEmbeddedCurves = fromDList (ctxtEmbeddedCurves ctxt) + , objSurfaces = fromDList (ctxtSurfaces ctxt) , objMtlLibs = fromDList (ctxtMtlLibs ctxt) } diff --git a/wavefront-obj.cabal b/wavefront-obj.cabal index 2a0532c..717ab5f 100644 --- a/wavefront-obj.cabal +++ b/wavefront-obj.cabal @@ -46,6 +46,7 @@ library , Codec.Wavefront.Normal , Codec.Wavefront.Point , Codec.Wavefront.Face + , Codec.Wavefront.FreeForm , Codec.Wavefront.Token -- other-modules: other-extensions: ForeignFunctionInterface -- cgit v1.2.3