00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __HOM_Vector4_h__
00017 #define __HOM_Vector4_h__
00018
00019 #include "HOM_API.h"
00020 #include "HOM_Defines.h"
00021 #include "HOM_Errors.h"
00022 #include "HOM_Module.h"
00023 #include "HOM_Vector3.h"
00024 #include "HOM_Matrix4.h"
00025 #include <UT/UT_Vector4.h>
00026 #include <vector>
00027 #include <stdexcept>
00028 class HOM_Vector4;
00029
00030 SWIGOUT(%rename(Vector4) HOM_Vector4;)
00031
00032 class HOM_API HOM_Vector4
00033 {
00034 public:
00035 HOM_Vector4() throw(HOM_Error)
00036 : myVector4(0.0f, 0.0f, 0.0f, 0.0f)
00037 { HOM_CONSTRUCT_OBJECT(this) }
00038
00039 HOM_Vector4(float x, float y, float z, float w) throw(HOM_Error)
00040 : myVector4(x, y, z, w)
00041 { HOM_CONSTRUCT_OBJECT(this) }
00042
00043 SWIGOUT(%ignore HOM_Vector4(const UT_Vector4&);)
00044 HOM_Vector4(const UT_Vector4 &vector4) throw(HOM_Error)
00045 : myVector4(vector4)
00046 { HOM_CONSTRUCT_OBJECT(this) }
00047
00048 HOM_Vector4(const std::vector<float> &sequence)
00049 throw(HOM_InvalidSize, HOM_Error)
00050 {
00051 HOM_CONSTRUCT_OBJECT(this)
00052 setTo(sequence);
00053 }
00054
00055 HOM_Vector4(HOM_Vector3 &vector3) throw(HOM_Error);
00056
00057 ~HOM_Vector4()
00058 { HOM_DESTRUCT_OBJECT(this) }
00059
00060 bool operator==(HOM_Vector4 &vector4)
00061 { return myVector4 == vector4.myVector4; }
00062
00063 bool operator!=(HOM_Vector4 &vector4)
00064 { return myVector4 != vector4.myVector4; }
00065
00066 bool isAlmostEqual(HOM_Vector4 &vector4, float tolerance=0.00001);
00067
00068
00069 bool almostEqual(HOM_Vector4 &vector4, float tolerance=0.00001)
00070 { return isAlmostEqual(vector4, tolerance); }
00071
00072 int __hash__();
00073 std::string __str__();
00074 std::string __repr__();
00075
00076 float __getitem__(int index) throw(std::out_of_range);
00077 void __setitem__(int index, float value) throw(std::out_of_range);
00078 int __len__()
00079 { return 4; }
00080
00081
00082
00083 SWIGOUT(%ignore operator[];)
00084 float &operator[](int index) throw(std::out_of_range);
00085
00086 void setTo(const std::vector<float> &sequence) throw(HOM_InvalidSize);
00087
00088 SWIGOUT(%ignore operator=;)
00089 HOM_Vector4 &operator=(const HOM_Vector4& vector4)
00090 {
00091 myVector4 = vector4.myVector4;
00092 return *this;
00093 }
00094
00095 HOM_Vector4 __add__(HOM_Vector4 &vector4)
00096 { return HOM_Vector4(myVector4 + vector4.myVector4); }
00097 HOM_Vector4 __sub__(HOM_Vector4 &vector4)
00098 { return HOM_Vector4(myVector4 - vector4.myVector4); }
00099 HOM_Vector4 __mul__(float scalar)
00100 { return HOM_Vector4(myVector4 * scalar); }
00101 HOM_Vector4 __rmul__(float scalar)
00102 { return HOM_Vector4(myVector4 * scalar); }
00103 HOM_Vector4 __mul__(HOM_Matrix4 &matrix4);
00104
00105 HOM_Vector4 normalized();
00106 float length()
00107 { return myVector4.length(); }
00108 float lengthSquared()
00109 { return myVector4.length2(); }
00110
00111 float dot(HOM_Vector4 &vector4)
00112 { return myVector4.dot(vector4.myVector4); }
00113
00114
00115 SWIGOUT(%ignore myVector4;)
00116 UT_Vector4 myVector4;
00117 };
00118
00119 #endif