Add AddBranch to Grammar
authorJoachim Breitner <mail@joachim-breitner.de>
Sun, 19 Apr 2009 11:04:27 +0000 (13:04 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Sun, 19 Apr 2009 11:04:27 +0000 (13:04 +0200)
src/Lseed/Grammar.hs
src/Lseed/Grammar/Compile.hs
src/main.hs

index b126d23..caa49c1 100644 (file)
@@ -1,6 +1,8 @@
 -- | Grammer-like representation for a plant genome
 module Lseed.Grammar where
 
+import Lseed.Data
+
 -- | A complete grammar file
 type GrammarFile = [ GrammarRule ]
 
@@ -53,7 +55,7 @@ data Condition
         
 data GrammarAction
        = SetLength LengthDescr (Maybe UserTag)
--- TODO        | AddBranch Double Angle (Maybe (UserTag, UserTag, UserTag))
+       | AddBranch Double Angle Double (Maybe (UserTag, UserTag, UserTag))
        deriving (Read,Show)
 
 data LengthDescr = Absolute Double
index 12b4266..42a3e5c 100644 (file)
@@ -34,6 +34,8 @@ conformsTo (Stipe () l _) = go
 grToLAction :: GrammarAction -> Plant () -> LRuleAction
 grToLAction (SetLength ld _) (Stipe () l _)
        = EnlargeStipe (calcLengthDescr ld l)
+grToLAction (AddBranch frac angle length _) (Stipe () l _)
+       = ForkStipe frac [(angle, length)]
 
 -- | Length reductions are silenty turned into no-ops
 calcLengthDescr :: LengthDescr -> Double -> Double
index bacf16a..41519b5 100644 (file)
@@ -120,10 +120,10 @@ testGarden2 =
 testLSystem1 = compileGrammarFile [
        GrammarRule "" 1 1 (Always True) (SetLength (Additional 1) Nothing)
        ]
-testLSystem2 = [
-       (\(Stipe () l _) -> Just (2, EnlargeStipe (l+2))),
-       (\(Stipe () l _) -> Just (1, ForkStipe (0.5) [(pi/4,1)])),
-       (\(Stipe () l _) -> Just (1, ForkStipe (1) [(-pi/4,1)]))
+testLSystem2 = compileGrammarFile [
+       GrammarRule "Grow" 1 2 (Always True) (SetLength (Additional 2) Nothing),
+       GrammarRule "Branch Left" 1 1 (Always True) (AddBranch (0.5) (pi/4) 1 Nothing),
+       GrammarRule "Branch Right" 1 1 (Always True) (AddBranch 1 (-pi/4) 1 Nothing)
        ]
 testLSystem3 = [
        (\(Stipe () l _) -> Just (1, EnlargeStipe (l+2))),