X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flindenmayersystem.h;h=77c8ec0ec2832934b3854d23c9a113fac1c6eaed;hb=HEAD;hp=efadab9a31aa785c94ae1350faec03008159feec;hpb=dd73b028a74ef8b57569c3e76751481d2124e491;p=lsystem3d.git diff --git a/src/lindenmayersystem.h b/src/lindenmayersystem.h index efadab9..77c8ec0 100644 --- a/src/lindenmayersystem.h +++ b/src/lindenmayersystem.h @@ -1,6 +1,6 @@ // Copyright (C) 2006 Erik Dahlberg // -// This file is part of LSystem3d. +// This file is part of LSystem3D. // // LSystem3D is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -22,25 +22,27 @@ #ifndef LINDENMAYERSYSTEM_H #define LINDENMAYERSYSTEM_H -#include #include #include "model.h" #include "turtle.h" +#include "rule.h" +#include "ruleset.h" using namespace std; /** - * Lindenmayer System + * Lindenmayer system generator */ class LindenmayerSystem { public: + /** * Constructor - * @param model the model for generation + * @param model empty model */ LindenmayerSystem(Model *model); @@ -49,18 +51,34 @@ public: */ ~LindenmayerSystem(); + + /** + * Clear all parameters + */ + void clear(); + + /** + * Generate L-system data + */ + void generate(); + + /** + * Render L-system data + */ + void render(); + + /** * Set the initial rule (the axiom) * @param axiom the axiom */ - void setAxiom(string axiom); + void setAxiom(Rule axiom); /** * Set one rule - * @param name rule name * @param rule the rule */ - void setRule(string name, string rule); + void setRule(Rule rule); /** * Set the turn/pitch/roll angle @@ -69,22 +87,35 @@ public: void setAngle(double degrees); /** - * Set the number of iterations - * @param numIterations number of iterations + * Set recursion depth + * @param depth depth of recursion + */ + void setDepth(int depth); + + /** + * Set initial segment diameter + * @param diameter the diameter */ - void setNumIterations(int numIterations); + void setDiameter(double diameter); + + /** + * Set segment diameter factor + * @param diameterFactor the diameter factor + */ + void setDiameterFactor(double diameterFactor); + /** * Get the initial rule (the axiom) * @return the axiom */ - string getAxiom(); + Rule getAxiom(); /** * Get all rules * @return the rules */ - map getRules(); + RuleSet getRules(); /** * Get the turn/pitch/roll angle @@ -93,45 +124,40 @@ public: double getAngle(); /** - * Get the number of iterations - * @return number of iterations + * Get recursion depth + * @return depth of recursion */ - int getNumIterations(); + int getDepth(); /** - * Generate l-system data + * Get initial segment diameter + * @return the diameter */ - void generate(); + double getDiameter(); + + /** + * Get segment diameter factor + * @return the diameter factor + */ + double getDiameterFactor(); protected: /** - * Walk through the rule string for specified number of levels + * Recursively apply the replacement rules * @param rule the rule - * @param level current iteration level + * @param level recursion level */ void recursiveWalk(string rule, int level); - /** - * Verify and preprocess one rule string - * @param ruleOrAxiom the rule - * @return the preprocessed rule - */ - string verifyAndPreprocessRule(string ruleOrAxiom); - - /** - * Unpreprocess one rule string - * @param ruleOrAxiom the rule - * @return the unpreprocessed rule - */ - string unpreprocessRule(string ruleOrAxiom); // Parameters - string _axiom; - map _rules; // TODO: use unsorted container? - int _numIterations; + Rule _axiom; + RuleSet _rules; + int _depth; + double _segmentDiameter; - Model *_model; // The model for generation + Model *_model; // The active model Turtle *_turtle; // The rendering turtle };