--- /dev/null
+// Copyright (C) 2006 Erik Dahlberg
+//
+// 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
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// LSystem3D is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with LSystem3D; if not, write to the Free Software
+// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+
+
+#include <iostream>
+#include <string>
+
+#include "lsystemparameters.h"
+
+using namespace std;
+
+
+
+/**
+ * Constructor
+ */
+LSystemParameters::LSystemParameters()
+{
+}
+
+
+
+/**
+ * Destructor
+ */
+LSystemParameters::~LSystemParameters()
+{
+}
+
+
+
+/**
+ * Load parameters from xml file
+ * @param lsystem put parameters into this l-system
+ * @param path path to xml file
+ */
+void LSystemParameters::load(LindenmayerSystem *lsystem, string path)
+{
+ if (lsystem)
+ {
+ try
+ {
+ // load
+ loadFromDisk(path);
+
+ // axiom
+ findChild("axiom");
+ lsystem->setAxiom(getString());
+
+ // rules
+ if (findChild("rule"))
+ {
+ do
+ {
+ lsystem->setRule(getAttribute("name"), getString());
+ } while (findNextChild());
+ }
+
+ // angle
+ findChild("angle");
+ lsystem->setAngle(getNumber());
+
+ // iterations
+ findChild("iterations");
+ lsystem->setNumIterations((int)getNumber());
+ }
+ catch (xmlpp::exception e)
+ {
+ cerr << "LSystemParameters::load(): " << e.what() << endl;
+ }
+ }
+ else
+ {
+ cerr << "invalid lsystem" << endl;
+ }
+}
+
+
+
+/**
+ * Save parameters to xml file
+ * @param lsystem get parameters from this l-system
+ * @param path path to xml file
+ */
+void LSystemParameters::save(LindenmayerSystem *lsystem, string path)
+{
+ if (lsystem && !lsystem->getAxiom().empty() && !lsystem->getRules().empty())
+ {
+ // new document with root node
+ createDocumentWithRoot("lsystem");
+
+ // axiom
+ addChildToRoot("axiom");
+ addString(lsystem->getAxiom());
+
+ // rules
+ map<string,string> rules = lsystem->getRules();
+ map<string,string>::iterator currentRule;
+ for (currentRule = rules.begin(); currentRule != rules.end(); currentRule++)
+ {
+ addChildToRoot("rule");
+ addString(currentRule->second);
+ addAttribute("name", currentRule->first);
+ }
+
+ // angle
+ addChildToRoot("angle");
+ addNumber(lsystem->getAngle());
+
+ // iterations
+ addChildToRoot("iterations");
+ addNumber(lsystem->getNumIterations());
+
+ // save
+ saveToDisk(path);
+ }
+ else
+ {
+ cerr << "invalid lsystem" << endl;
+ }
+}