00001 #include "BboxDrawArray.h" 00002 00003 using namespace X3DTK; 00004 using namespace std; 00005 00006 BboxDrawArray::BboxDrawArray() 00007 : h(0.1f) 00008 { 00009 MFVec3f vertexArray(8); 00010 vertexArray[0] = SFVec3f(-1.0f, -1.0f, -1.0f); 00011 vertexArray[1] = SFVec3f(1.0f, -1.0f, -1.0f); 00012 vertexArray[2] = SFVec3f(1.0f, 1.0f, -1.0f); 00013 vertexArray[3] = SFVec3f(-1.0f, 1.0f, -1.0f); 00014 vertexArray[4] = SFVec3f(-1.0f, -1.0f, 1.0f); 00015 vertexArray[5] = SFVec3f(1.0f, -1.0f, 1.0f); 00016 vertexArray[6] = SFVec3f(1.0f, 1.0f, 1.0f); 00017 vertexArray[7] = SFVec3f(-1.0f, 1.0f, 1.0f); 00018 00019 unsigned int k = 0; 00020 for (MFVec3f::const_iterator it = vertexArray.begin(); it != vertexArray.end(); ++it) 00021 { 00022 SFVec3f vx, vy, vz; 00023 SFVec3f dx(1.0f, 0.0f, 0.0f), dy(0.0f, 1.0f, 0.0f), dz(0.0f, 0.0f, 1.0f); 00024 SFVec3f v = *it; 00025 _bboxVertexArray.push_back(v); 00026 unsigned int ko = k; 00027 00028 if (v.x < 0.0f) 00029 vx = v + h*dx; 00030 else 00031 vx = v - h*dx; 00032 _bboxVertexArray.push_back(vx); 00033 _bboxIndexArray.push_back(ko); 00034 ++k; 00035 _bboxIndexArray.push_back(k); 00036 00037 00038 if (v.y < 0.0f) 00039 vy = v + h*dy; 00040 else 00041 vy = v - h*dy; 00042 _bboxVertexArray.push_back(vy); 00043 _bboxIndexArray.push_back(ko); 00044 ++k; 00045 _bboxIndexArray.push_back(k); 00046 00047 if (v.z < 0.0f) 00048 vz = v + h*dz; 00049 else 00050 vz = v - h*dz; 00051 _bboxVertexArray.push_back(vz); 00052 _bboxIndexArray.push_back(ko); 00053 ++k; 00054 _bboxIndexArray.push_back(k); 00055 ++k; 00056 } 00057 } 00058 00059 unsigned int BboxDrawArray::getBboxSize() const 00060 { 00061 return _bboxIndexArray.size(); 00062 } 00063 00064 const void *BboxDrawArray::getBboxVertexArrayAddress() const 00065 { 00066 return &_bboxVertexArray.front(); 00067 } 00068 00069 const unsigned int *BboxDrawArray::getBboxIndexArrayAddress() const 00070 { 00071 return &_bboxIndexArray.front(); 00072 }