home *** CD-ROM | disk | FTP | other *** search
- /*
- * BoundingBox.C - methods for class BoundingBox.
- *
- * Copyright (C) 1992, Christoph Streit (streit@iam.unibe.ch)
- * University of Berne, Switzerland
- * All rights reserved.
- *
- * This software may be freely copied, modified, and redistributed
- * provided that this copyright notice is preserved on all copies.
- *
- * You may not distribute this software, in whole or in part, as part of
- * any commercial product without the express consent of the authors.
- *
- * There is no warranty or other guarantee of fitness of this software
- * for any purpose. It is provided solely "as is".
- *
- */
-
- #include <values.h>
- #include "BoundingBox.h"
- #include "TransMatrix.h"
-
- //___________________________________________________________ BoundingBox
-
- BoundingBox::BoundingBox()
- : vmin(MAXDOUBLE, MAXDOUBLE, MAXDOUBLE), vmax(-MAXDOUBLE, -MAXDOUBLE, -MAXDOUBLE)
- {}
-
- BoundingBox BoundingBox::transform(const TransMatrix& tmat) const
- {
- BoundingBox retval;
-
- retval.expand(Vector(vmin[0], vmin[1], vmin[2])*tmat);
- retval.expand(Vector(vmax[0], vmin[1], vmin[2])*tmat);
- retval.expand(Vector(vmax[0], vmax[1], vmin[2])*tmat);
- retval.expand(Vector(vmin[0], vmax[1], vmin[2])*tmat);
- retval.expand(Vector(vmin[0], vmin[1], vmax[2])*tmat);
- retval.expand(Vector(vmax[0], vmin[1], vmax[2])*tmat);
- retval.expand(Vector(vmax[0], vmax[1], vmax[2])*tmat);
- retval.expand(Vector(vmin[0], vmax[1], vmax[2])*tmat);
-
- return retval;
- }
-
- void BoundingBox::expand(const Vector& v)
- {
- if (v[0] < vmin[0]) vmin[0] = v[0]; if (v[0] > vmax[0]) vmax[0] = v[0];
- if (v[1] < vmin[1]) vmin[1] = v[1]; if (v[1] > vmax[1]) vmax[1] = v[1];
- if (v[2] < vmin[2]) vmin[2] = v[2]; if (v[2] > vmax[2]) vmax[2] = v[2];
- }
-
- void BoundingBox::expand(const BoundingBox& b)
- {
- expand(b.vmin);
- expand(b.vmax);
- }
-
- ostream& operator<<(ostream& os, const BoundingBox& b)
- {
- return os << "{ min" << b.vmin << ", max" << b.vmax << " }";
- }
-
-