00001 #ifndef X3DTK_SFVEC2F_H 00002 #define X3DTK_SFVEC2F_H 00003 00004 #include "Platform.h" 00005 00006 #include <math.h> 00007 #include <iostream> 00008 00009 namespace X3DTK { 00010 00011 class SFString; 00012 class SFPoint2f; 00013 00022 class SFVec2f 00023 { 00024 public: 00026 float x; 00028 float y; 00029 00031 SFVec2f(); 00033 SFVec2f(float x, float y); 00035 SFVec2f(const SFVec2f &v); 00037 SFVec2f &operator= (const SFVec2f &v); 00039 SFVec2f &operator+= (const SFVec2f &v); 00041 SFVec2f &operator-= (const SFVec2f &v); 00043 explicit SFVec2f(const SFString &s); 00045 explicit SFVec2f(const SFPoint2f &P); 00046 00048 friend bool operator== (const SFVec2f &v1, const SFVec2f &v2); 00050 friend bool operator!= (const SFVec2f &v1, const SFVec2f &v2); 00052 friend SFVec2f operator+ (const SFVec2f &v1, const SFVec2f &v2); 00054 friend SFVec2f operator- (const SFVec2f &v1, const SFVec2f &v2); 00056 friend SFVec2f operator- (const SFVec2f &v); 00058 friend float operator* (const SFVec2f &v1, const SFVec2f &v2); 00060 friend SFVec2f operator* (const float a, const SFVec2f &v); 00062 float norm() const; 00064 SFVec2f normalize(); 00066 SFVec2f normalized() const; 00068 inline float *f_data() {return &x;}; 00070 inline const float *f_data() const {return &x;}; 00072 inline operator float *() {return &x;}; 00074 inline operator const float *() const {return &x;}; 00076 SFString toSFString() const; 00077 00079 static const SFVec2f null; 00080 }; 00081 00082 } 00083 00084 #endif