00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00021
00022
00023 #ifndef H_SPK_LINE
00024 #define H_SPK_LINE
00025
00026 #include "Core/SPK_Zone.h"
00027
00028 namespace SPK
00029 {
00042 class SPK_PREFIX Line : public Zone
00043 {
00044 SPK_IMPLEMENT_REGISTERABLE(Line)
00045
00046 public :
00047
00049
00051
00057 Line(const Vector3D& p0 = Vector3D(0.0f,0.0f,0.0f),const Vector3D& p1 = Vector3D(0.0f,0.0f,0.0f));
00058
00065 static Line* create(const Vector3D& p0 = Vector3D(0.0f,0.0f,0.0f),const Vector3D& p1 = Vector3D(0.0f,0.0f,0.0f));
00066
00068
00070
00071 void setPosition(const Vector3D& v);
00072
00078 void setBounds(const Vector3D& p0,const Vector3D& p1);
00079
00081
00083
00090 const Vector3D& getBound(size_t index) const;
00091
00098 const Vector3D& getTransformedBound(size_t index) const;
00099
00101
00103
00112 void pushBound(const Vector3D& bound);
00113
00114 virtual void generatePosition(Particle& particle,bool full) const;
00115 virtual bool contains(const Vector3D& v) const;
00116 virtual bool intersects(const Vector3D& v0,const Vector3D& v1,Vector3D* intersection,Vector3D* normal) const;
00117 virtual void moveAtBorder(Vector3D& v,bool inside) const;
00118 virtual Vector3D computeNormal(const Vector3D& point) const;
00119
00120 protected :
00121
00122 virtual void innerUpdateTransform();
00123
00124 private :
00125
00126 Vector3D bounds[2];
00127 Vector3D tBounds[2];
00128
00129 Vector3D tDist;
00130
00131 void computeDist();
00132 void computePosition();
00133 };
00134
00135
00136 inline Line* Line::create(const Vector3D& p0,const Vector3D& p1)
00137 {
00138 Line* obj = new Line(p0,p1);
00139 registerObject(obj);
00140 return obj;
00141 }
00142
00143 inline const Vector3D& Line::getBound(size_t index) const
00144 {
00145 return bounds[index];
00146 }
00147
00148 inline const Vector3D& Line::getTransformedBound(size_t index) const
00149 {
00150 return tBounds[index];
00151 }
00152
00153 inline bool Line::contains(const Vector3D& v) const
00154 {
00155 return false;
00156 }
00157
00158 inline bool Line::intersects(const Vector3D& v0,const Vector3D& v1,Vector3D* intersection,Vector3D* normal) const
00159 {
00160 return false;
00161 }
00162
00163 inline void Line::moveAtBorder(Vector3D& v,bool inside) const {}
00164
00165 inline void Line::computeDist()
00166 {
00167 tDist = tBounds[1] - tBounds[0];
00168 }
00169
00170 inline void Line::computePosition()
00171 {
00172 Zone::setPosition((bounds[0] + bounds[1]) * 0.5f);
00173 }
00174 }
00175
00176 #endif