diff options
Diffstat (limited to 'dep/g3dlite/include/G3D/SplineExtrapolationMode.h')
-rw-r--r-- | dep/g3dlite/include/G3D/SplineExtrapolationMode.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/dep/g3dlite/include/G3D/SplineExtrapolationMode.h b/dep/g3dlite/include/G3D/SplineExtrapolationMode.h new file mode 100644 index 00000000000..b5cdc6fb81c --- /dev/null +++ b/dep/g3dlite/include/G3D/SplineExtrapolationMode.h @@ -0,0 +1,94 @@ +/** + \file G3D/SplineExtrapolationMode.h + + \maintainer Michael Mara, http://graphics.cs.williams.edu + + \created 2013-01-24 + \edited 2013-01-24 + + Copyright 2000-2013, Morgan McGuire. + All rights reserved. + */ + +#ifndef G3D_SplineExtrapolationMode_h +#define G3D_SplineExtrapolationMode_h + +#include "G3D/platform.h" +#include "G3D/enumclass.h" + + +namespace G3D { + +/** + Describes the behavior of G3D::Spline, etc. when accessing a time outside of the control point range. + + Refer to these as scoped enums, e.g., <code>SplineExtrapolationMode m = SplineExtrapolationMode::CLAMP;</code>. + + Uses the "Intelligent Enum" design pattern + http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4001/ + */ +class SplineExtrapolationMode { +public: + /** Don't use this enum; use SplineExtrapolationMode instances instead. */ + enum Value { + CYCLIC, + LINEAR, + CLAMP + }; + Value value; +private: + + static const char* toString(int i, Value& v) { + static const char* str[] = {"CYCLIC", "LINEAR", "CLAMP", NULL}; + static const Value val[] = {CYCLIC, LINEAR, CLAMP}; + const char* s = str[i]; + if (s) { + v = val[i]; + } + return s; + } + +public: + + G3D_DECLARE_ENUM_CLASS_METHODS(SplineExtrapolationMode); +}; + + + + +/** + Describes the behavior of G3D::Spline + */ +class SplineInterpolationMode { +public: + /** Don't use this enum; use SplineExtrapolationMode instances instead. */ + enum Value { + LINEAR, + CUBIC + }; + Value value; +private: + + static const char* toString(int i, Value& v) { + static const char* str[] = {"LINEAR", "CUBIC", NULL}; + static const Value val[] = {LINEAR, CUBIC}; + const char* s = str[i]; + if (s) { + v = val[i]; + } + return s; + } + +public: + + G3D_DECLARE_ENUM_CLASS_METHODS(SplineInterpolationMode); + +}; + + +} // namespace G3D + +G3D_DECLARE_ENUM_CLASS_HASHCODE(G3D::SplineExtrapolationMode); +G3D_DECLARE_ENUM_CLASS_HASHCODE(G3D::SplineInterpolationMode); + +#endif |