Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <srs_env_model/but_server/objtree/filter.h>
00029
00030 namespace objtree
00031 {
00032
00038 FilterBox::FilterBox(const Box &box) :
00039 m_box(box)
00040 {
00041 }
00042
00048 bool FilterBox::filter(const Box &dim) const
00049 {
00050 if(dim.x > m_box.x+m_box.w || dim.x+dim.w < m_box.x
00051 || dim.y > m_box.y+m_box.h || dim.y+dim.h < m_box.y
00052 || dim.z > m_box.z+m_box.d || dim.z+dim.d < m_box.z)
00053 {
00054 return false;
00055 }
00056
00057 return true;
00058 }
00059
00070 FilterPlane::FilterPlane(float posX, float posY, float posZ, float vecX, float vecY, float vecZ)
00071 {
00072 m_posX = posX;
00073 m_posY = posY;
00074 m_posZ = posZ;
00075
00076 m_vecX = vecX;
00077 m_vecY = vecY;
00078 m_vecZ = vecZ;
00079 }
00080
00086 bool FilterPlane::filter(const Box &dim) const
00087 {
00088 float pointX = dim.x, pointY = dim.y, pointZ = dim.z;
00089
00090 if(m_vecX >= 0.0f) pointX += dim.w;
00091 if(m_vecY >= 0.0f) pointY += dim.h;
00092 if(m_vecZ >= 0.0f) pointZ += dim.d;
00093
00094 float d = m_vecX*m_posX+m_vecY*m_posY+m_vecZ*m_posZ;
00095
00096 if(pointX*m_vecX+pointY*m_vecY+pointZ*m_vecZ > d)
00097 {
00098 return true;
00099 }
00100
00101 return false;
00102 }
00103
00109 bool FilterZero::filter(const Box &dim) const
00110 {
00111 return true;
00112 }
00113
00122 FilterSphere::FilterSphere(float x, float y, float z, float radius) :
00123 m_x(x), m_y(y), m_z(z), m_radiusSquare(radius*radius)
00124 {
00125 }
00126
00132 bool FilterSphere::filter(const Box &dim) const
00133 {
00134 float nearX, nearY, nearZ;
00135
00136 if(m_x < dim.x) nearX = dim.x;
00137 else if(m_x > dim.x+dim.w) nearX = dim.x+dim.w;
00138 else nearX = m_x;
00139
00140 if(m_y < dim.y) nearY = dim.y;
00141 else if(m_y > dim.y+dim.h) nearY = dim.y+dim.h;
00142 else nearY = m_y;
00143
00144 if(m_z < dim.z) nearZ = dim.z;
00145 else if(m_z > dim.z+dim.d) nearZ = dim.z+dim.d;
00146 else nearZ = m_z;
00147
00148 float xDist = m_x-nearX;
00149 float yDist = m_y-nearY;
00150 float zDist = m_z-nearZ;
00151
00152 if(xDist*xDist+yDist*yDist+zDist*zDist <= m_radiusSquare)
00153 {
00154 return true;
00155 }
00156
00157
00158 return false;
00159 }
00160
00161 }
srs_env_model
Author(s): Vit Stancl (stancl@fit.vutbr.cz), Tomas Lokaj, Jan Gorig, Michal Spanel (spanel@fit.vutbr.cz)
autogenerated on Sun Jan 5 2014 11:50:48