### Blame view

stim/visualization/aaboundingbox.h 1.68 KB
 ```1 2 3 4 5 6 7 8``` `````` #ifndef STIM_AABB #define STIM_AABB namespace stim{ /// This class describes a structure for an axis-aligned bounding box template< typename T > `````` `9` `````` class aaboundingbox{ `````` ```10 11 12``` `````` public: bool set; //has the bounding box been set to include any points? `````` ```13 14``` `````` stim::vec3 A; //minimum point in the bounding box stim::vec3 B; //maximum point in the bounding box `````` `15` `````` `````` `16` `````` aaboundingbox(){ //constructor generates an empty bounding box `````` ```17 18 19 20 21 22 23``` `````` set = false; } /// Test if a point is inside of the bounding box and returns true if it is. /// @param p is the point to be tested `````` `24` `````` bool test(stim::vec3 p){ `````` ```25 26 27 28 29 30 31 32 33 34 35``` `````` for(unsigned d = 0; d < p.size(); p++){ //for each dimension if(p[d] < A[d]) return false; //if the point is less than the minimum bound, return false if(p[d] > B[d]) return false; //if the point is greater than the max bound, return false } return true; } /// Expand the bounding box to include the specified point. /// @param p is the point to be included `````` `36` `````` void expand(stim::vec3 p){ `````` ```37 38 39 40 41 42 43 44 45 46 47 48 49``` `````` if(!set){ //if the bounding box is empty, fill it with the current point A = B = p; set = true; } for(unsigned d = 0; d < p.size(); d++){ //for each dimension if(p[d] < A[d]) A[d] = p[d]; //expand the bounding box as necessary if(p[d] > B[d]) B[d] = p[d]; } } /// Return the center point of the bounding box as a stim::vec `````` `50` `````` stim::vec3 center(){ `````` ```51 52 53 54``` `````` return (B + A) * 0.5; } /// Return the size of the bounding box as a stim::vec `````` `55` `````` stim::vec3 size(){ `````` ```56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72``` `````` return (B - A); } /// Generate a string for the bounding box std::string str(){ std::stringstream ss; ss<"<