25 minX(DBL_MAX),minY(DBL_MAX),minZ(DBL_MAX),
26 maxX(-DBL_MAX),maxY(-DBL_MAX),maxZ(-DBL_MAX)
33 explicit Bbox3(
const std::vector<Point3>& vPoints)
35 minX(DBL_MAX),minY(DBL_MAX),minZ(DBL_MAX),
36 maxX(-DBL_MAX),maxY(-DBL_MAX),maxZ(-DBL_MAX)
56 bool add(
const std::vector<Point3>& vPoints)
58 if(vPoints.empty())
return false;
63 vPoints[0].xyz(minX,minY,minZ);
64 vPoints[0].xyz(maxX,maxY,maxZ);
65 for(
size_t i=1;i<vPoints.size();++i)
67 treatPointForValidBox(vPoints[i]);
73 double oldMinX(minX),oldMinY(minY),oldMinZ(minZ),oldMaxX(maxX),oldMaxY(maxY),oldMaxZ(maxZ);
74 for(
size_t i=0;i<vPoints.size();++i)
76 treatPointForValidBox(vPoints[i]);
101 double oldMinX(minX),oldMinY(minY),oldMinZ(minZ),oldMaxX(maxX),oldMaxY(maxY),oldMaxZ(maxZ);
102 treatPointForValidBox(p);
116 p.
xyz(minX,minY,minZ);
117 p.
xyz(maxX,maxY,maxZ);
125 void enlargeBounds(
double factor)
130 double addValX=factor*getRangeX()/2.0;
131 double addValY=factor*getRangeY()/2.0;
132 double addValZ=factor*getRangeZ()/2.0;
150 if(b.minX<minX) minX=b.minX;
151 if(b.maxX>maxX) maxX=b.maxX;
152 if(b.minY<minY) minY=b.minY;
153 if(b.maxY>maxY) maxY=b.maxY;
154 if(b.minZ<minZ) minZ=b.minZ;
155 if(b.maxZ>maxZ) maxZ=b.maxZ;
165 return Point3(minX,minY,minZ);
173 return Point3(maxX,maxY,maxZ);
183 if(minX<minZ)
return minX;
188 if(minY<minZ)
return minY;
200 if(maxX>maxZ)
return maxX;
205 if(maxY>maxZ)
return maxY;
239 double range0=getRangeX();
240 double range1=getRangeY();
241 double range2=getRangeZ();
242 if(range0>range1) std::swap(range0,range1);
243 if(range1>range2) std::swap(range1,range2);
274 std::cout<<
"Bbox3: ("<<minX<<
","<<minY<<
","<<minZ<<
") -> ("<<maxX<<
","<<maxY<<
","<<maxZ<<
")"<<std::endl;
279 inline void treatPointForValidBox(
const Point3& p)
284 else if(x>maxX) maxX=x;
286 else if(y>maxY) maxY=y;
288 else if(z>maxZ) maxZ=z;
290 double minX,minY,minZ;
291 double maxX,maxY,maxZ;
294 friend std::ostream &operator<<(std::ostream &stream,
Bbox3& pC);
298 inline std::ostream &operator<<(std::ostream &stream,
Bbox3& pC)
300 stream<<
"Bbox3: ("<<pC.minX<<
","<<pC.minY<<
","<<pC.minZ<<
") -> ("<<pC.maxX<<
","<<pC.maxY<<
","<<pC.maxZ<<
"), rangeX="<<pC.
getRangeX()<<
", rangeY="<<pC.
getRangeY()<<
", rangeZ="<<pC.
getRangeZ();
double getMinX() const
Get the minimal x coordinate.
Definition: Bbox3.h:249
double getMaxRange() const
Get the maximum range.
Definition: Bbox3.h:237
double getMaxZ() const
Get the maximal z coordinate.
Definition: Bbox3.h:269
double getMinZ() const
Get the minimal z coordinate.
Definition: Bbox3.h:257
Vertex.
Definition: Point3.h:32
double getRangeY() const
Get the y-range.
Definition: Bbox3.h:221
Point3 getMaxPoint()
Get the maximum corner.
Definition: Bbox3.h:171
void xyz(double &x_, double &y_, double &z_) const
Access all coordinates at once.
bool isValid()
Check if the bounding box is valid.
Definition: Bbox3.h:46
double getMaxY() const
Get the maximal y coordinate.
Definition: Bbox3.h:265
Bbox3(const std::vector< Point3 > &vPoints)
Constructor.
Definition: Bbox3.h:33
Axis-aligned minimal 3D bounding box.
Definition: Bbox3.h:13
double getMaxCoord()
Get the largest coordinate.
Definition: Bbox3.h:196
double getMinY() const
Get the minimal y coordinate.
Definition: Bbox3.h:253
Point3 getMinPoint()
Get the minimum corner.
Definition: Bbox3.h:163
bool add(const std::vector< Point3 > &vPoints)
Add points to the bounding box.
Definition: Bbox3.h:56
double getMaxX() const
Get the maximal x coordinate.
Definition: Bbox3.h:261
Bbox3 operator+(Bbox3 &b)
Add another bounding box.
Definition: Bbox3.h:148
double getRangeZ() const
Get the z-range.
Definition: Bbox3.h:229
Bbox3()
Constructor.
Definition: Bbox3.h:23
double getMinCoord()
Get the smallest coordinate.
Definition: Bbox3.h:179
bool add(const Point3 &p)
Add a point to the bounding box.
Definition: Bbox3.h:97
double getRangeX() const
Get the x-range.
Definition: Bbox3.h:213