diff options
Diffstat (limited to 'dep/g3dlite/source/Vector3int32.cpp')
-rw-r--r-- | dep/g3dlite/source/Vector3int32.cpp | 83 |
1 files changed, 79 insertions, 4 deletions
diff --git a/dep/g3dlite/source/Vector3int32.cpp b/dep/g3dlite/source/Vector3int32.cpp index 3bd8e9f2bc2..a4867ba01c0 100644 --- a/dep/g3dlite/source/Vector3int32.cpp +++ b/dep/g3dlite/source/Vector3int32.cpp @@ -4,7 +4,7 @@ @author Morgan McGuire, http://graphics.cs.williams.edu @created 2008-07-01 - @edited 2008-07-01 + @edited 2010-10-20 */ #include "G3D/platform.h" @@ -15,13 +15,76 @@ #include "G3D/BinaryInput.h" #include "G3D/BinaryOutput.h" #include "G3D/format.h" +#include "G3D/Vector2int32.h" +#include "G3D/Vector2int16.h" +#include "G3D/Any.h" namespace G3D { +Vector3int32 iFloor(const Vector3& v) { + return Vector3int32(iFloor(v.x), iFloor(v.y), iFloor(v.z)); +} + +Vector3int32::Vector3int32(const Any& any) { + *this = Vector3int32(); + any.verifyNameBeginsWith("Vector3int32", "Point3int32"); + + switch (any.type()) { + case Any::TABLE: + + for (Any::AnyTable::Iterator it = any.table().begin(); it.isValid(); ++it) { + const std::string& key = toLower(it->key); + + if (key == "x") { + x = it->value; + } else if (key == "y") { + y = it->value; + } else if (key == "z") { + z = it->value; + } else { + any.verify(false, "Illegal key: " + it->key); + } + } + break; + + case Any::ARRAY: + + (void)any.name(); + if (any.size() == 1) { + x = y = z = any[0]; + } else { + any.verifySize(3); + x = any[0]; + y = any[1]; + z = any[2]; + } + break; + + default: + any.verify(false, "Bad Vector3int32 constructor"); + } +} + + +Any Vector3int32::toAny() const { + Any a(Any::ARRAY, "Vector3int32"); + a.append(x, y, z); + return a; +} + Vector3int32::Vector3int32(const class Vector3& v) { - x = (int32)iFloor(v.x + 0.5); - y = (int32)iFloor(v.y + 0.5); - z = (int32)iFloor(v.z + 0.5); + x = (int32)(v.x + 0.5); + y = (int32)(v.y + 0.5); + z = (int32)(v.z + 0.5); +} + +Vector3int32::Vector3int32(const class Vector2int32& v, int _z) : x(v.x), y(v.y), z(_z) {} + +Vector3int32::Vector3int32(const class Vector2int16& v, int _z) : x(v.x), y(v.y), z(_z) {} + + +Vector3int32 Vector3int32::truncate(const class Vector3& v) { + return Vector3int32(int32(v.x), int32(v.y), int32(v.z)); } @@ -54,4 +117,16 @@ std::string Vector3int32::toString() const { return G3D::format("(%d, %d, %d)", x, y, z); } +//---------------------------------------------------------------------------- +// 2-char swizzles + +Vector2int32 Vector3int32::xx() const { return Vector2int32 (x, x); } +Vector2int32 Vector3int32::yx() const { return Vector2int32 (y, x); } +Vector2int32 Vector3int32::zx() const { return Vector2int32 (z, x); } +Vector2int32 Vector3int32::xy() const { return Vector2int32 (x, y); } +Vector2int32 Vector3int32::yy() const { return Vector2int32 (y, y); } +Vector2int32 Vector3int32::zy() const { return Vector2int32 (z, y); } +Vector2int32 Vector3int32::xz() const { return Vector2int32 (x, z); } +Vector2int32 Vector3int32::yz() const { return Vector2int32 (y, z); } +Vector2int32 Vector3int32::zz() const { return Vector2int32 (z, z); } } |