00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef __HOM_Vector3_h__
00017 #define __HOM_Vector3_h__
00018
00019 #include "HOM_API.h"
00020 #include "HOM_Defines.h"
00021 #include "HOM_Errors.h"
00022 #include "HOM_Module.h"
00023 #include <UT/UT_Vector3.h>
00024 #include <vector>
00025 #include <stdexcept>
00026 class HOM_Matrix4;
00027 class HOM_Vector4;
00028 class HOM_Matrix3;
00029
00030 SWIGOUT(%rename(Vector3) HOM_Vector3;)
00031
00032 class HOM_API HOM_Vector3
00033 {
00034 public:
00035 HOM_Vector3() throw(HOM_Error)
00036 : myVector3(0.0f, 0.0f, 0.0f)
00037 { HOM_CONSTRUCT_OBJECT(this) }
00038
00039 HOM_Vector3(float x, float y, float z) throw(HOM_Error)
00040 : myVector3(x, y, z)
00041 { HOM_CONSTRUCT_OBJECT(this) }
00042
00043 SWIGOUT(%ignore HOM_Vector3(const UT_Vector3&);)
00044 HOM_Vector3(const UT_Vector3 &vector3) throw(HOM_Error)
00045 : myVector3(vector3)
00046 { HOM_CONSTRUCT_OBJECT(this) }
00047
00048 HOM_Vector3(const std::vector<float> &sequence)
00049 throw(HOM_InvalidSize, HOM_Error)
00050 {
00051 HOM_CONSTRUCT_OBJECT(this)
00052 setTo(sequence);
00053 }
00054
00055 HOM_Vector3(HOM_Vector4 &vector4) throw(HOM_Error);
00056
00057 ~HOM_Vector3()
00058 { HOM_DESTRUCT_OBJECT(this) }
00059
00060 bool operator==(HOM_Vector3 &vector3)
00061 { return myVector3 == vector3.myVector3; }
00062
00063 bool operator!=(HOM_Vector3 &vector3)
00064 { return myVector3 != vector3.myVector3; }
00065
00066 bool isAlmostEqual(HOM_Vector3 &vector3, float tolerance=0.00001);
00067
00068
00069 bool almostEqual(HOM_Vector3 &vector3, float tolerance=0.00001)
00070 { return isAlmostEqual(vector3, 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 3; }
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_Vector3 &operator=(const HOM_Vector3& vector3)
00090 {
00091 myVector3 = vector3.myVector3;
00092 return *this;
00093 }
00094
00095 HOM_Vector3 __add__(HOM_Vector3 &vector3)
00096 { return HOM_Vector3(myVector3 + vector3.myVector3); }
00097 HOM_Vector3 __sub__(HOM_Vector3 &vector3)
00098 { return HOM_Vector3(myVector3 - vector3.myVector3); }
00099 HOM_Vector3 __neg__()
00100 { return HOM_Vector3(-myVector3); }
00101 HOM_Vector3 __mul__(float scalar)
00102 { return HOM_Vector3(myVector3 * scalar); }
00103 HOM_Vector3 __rmul__(float scalar)
00104 { return HOM_Vector3(myVector3 * scalar); }
00105 HOM_Vector3 __mul__(HOM_Matrix4 &matrix4);
00106
00107 HOM_Vector3 normalized();
00108 float length()
00109 { return myVector3.length(); }
00110 float lengthSquared()
00111 { return myVector3.length2(); }
00112
00113
00114 SWIGOUT(%newobject matrixToRotateTo;)
00115 HOM_Matrix4 *matrixToRotateTo(HOM_Vector3 &vector3);
00116
00117
00118 float distanceTo(HOM_Vector3 &vector3);
00119 float angleTo(HOM_Vector3 &vector3);
00120
00121 float dot(HOM_Vector3 &vector3)
00122 { return myVector3.dot(vector3.myVector3); }
00123 HOM_Vector3 cross(HOM_Vector3 &vector3)
00124 { return ::cross(myVector3, vector3.myVector3); }
00125
00126
00127 SWIGOUT(%ignore myVector3;)
00128 UT_Vector3 myVector3;
00129 };
00130
00131 #endif