diff options
author | 53hornet <53hornet@gmail.com> | 2019-02-02 23:33:15 -0500 |
---|---|---|
committer | 53hornet <53hornet@gmail.com> | 2019-02-02 23:33:15 -0500 |
commit | db072ad4dc181eca5a1458656b130beb43f475bf (patch) | |
tree | a3c03c7f5497cb70503e2486662fa85cfb53415a /hw6/src/sceneIO_core.cpp | |
download | csci427-master.tar.xz csci427-master.zip |
Diffstat (limited to 'hw6/src/sceneIO_core.cpp')
-rw-r--r-- | hw6/src/sceneIO_core.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/hw6/src/sceneIO_core.cpp b/hw6/src/sceneIO_core.cpp new file mode 100644 index 0000000..123287e --- /dev/null +++ b/hw6/src/sceneIO_core.cpp @@ -0,0 +1,99 @@ +/******************************************************************/ +/* This file is part of the homework assignments for CSCI-427/527 */ +/* at The College of William & Mary and authored by Pieter Peers. */ +/* No part of this file, whether altered or in original form, can */ +/* be distributed or used outside the context of CSCI-427/527 */ +/* without consent of either the College of William & Mary or */ +/* Pieter Peers. */ +/******************************************************************/ +#include <string> +#include <cstdlib> + +#include "sceneIO_core.h" +#include "errorMessage.h" + +color getColor(const XMLNode& node, const std::string& name, const color& default_value) +{ + std::string value = node.attribute(name); + + // if defined, process.. + if(value != "") + { + color result; + int s = sscanf(value.c_str(), "%f %f %f", &result.r, &result.g, &result.b); + + // check if only 1 value is given or 3. + if(s == 1) return color(result.r, result.r, result.r); + else if(s == 3) return result; + else errorMessage("Failed to parse color value (%s)", value.c_str()); + } + + // else return default + return default_value; +} + + +vec3d getVec3d(const XMLNode& node, const std::string& name, const vec3d& default_value) +{ + std::string value = node.attribute(name); + + // if defined, process.. + if(value != "") + { + vec3d result; + int s = sscanf(value.c_str(), "%f %f %f", &result.x, &result.y, &result.z); + + // check if only 1 value is given or 3. + if(s == 1) return vec3d(result.x, result.x, result.x); + else if(s == 3) return result; + else errorMessage("Failed to parse vec3d value (%s)", value.c_str()); + } + + // else return default + return default_value; +} + + +vec2d getVec2d(const XMLNode& node, const std::string& name, const vec2d& default_value) +{ + std::string value = node.attribute(name); + + // if defined, process.. + if(value != "") + { + vec2d result; + int s = sscanf(value.c_str(), "%f %f", &result.x, &result.y); + + // check if only 1 value is given or 2. + if(s == 1) return vec2d(result.x, result.x); + else if(s == 2) return result; + else errorMessage("Failed to parse vec2d value (%s)", value.c_str()); + } + + // else returnd default + return default_value; +} + + +std::string getString(const XMLNode& node, const std::string& name, const std::string& default_value) +{ + std::string value = node.attribute(name); + if(value != "") return std::string(value); + else return default_value; +} + + +float getFloat(const XMLNode& node, const std::string& name, float default_value) +{ + std::string value = node.attribute(name); +if(value != "") return atof(value.c_str()); + else return default_value; +} + + +unsigned int getInteger(const XMLNode& node, const std::string& name, unsigned int default_value) +{ + std::string value = node.attribute(name); +if(value != "") return atoi(value.c_str()); + else return default_value; +} |