/******************************************************************/ /* This file is part of the homework assignments for CSCI-427/527 */ /* at The College of William & Mary and authored by Pieter Peers. */ /* No part of this file, whether altered or in original form, can */ /* be distributed or used outside the context of CSCI-427/527 */ /* without consent of either the College of William & Mary or */ /* Pieter Peers. */ /******************************************************************/ #ifndef _BOUNDINGBOX_H_ #define _BOUNDINGBOX_H_ #include #include "ray.h" #include "vec3d.h" #include "transformation3d.h" class boundingBox { public: ///////////////// // Constructor // ///////////////// boundingBox(void); boundingBox(const vec3d& lfb, const vec3d& rbt); boundingBox(const boundingBox& bb); ////////////// // Operator // ////////////// boundingBox& operator=(const boundingBox& src); boundingBox& operator+=(const boundingBox& bb); boundingBox& operator+=(const vec3d& point); boundingBox operator+(const boundingBox& bb) const; ///////////// // Methods // ///////////// bool isHit(const ray& r) const; vec3d center(void) const; vec3d corner(bool left, bool front, bool bottom) const; ////////////// // Mutators // ////////////// boundingBox& transform(const transformation3d& t); boundingBox& inverseTransform(const transformation3d& t); ///////////// // Friends // ///////////// friend void swap(boundingBox& a, boundingBox& b) { a._swap(b); } friend boundingBox transform(const boundingBox& bb, const transformation3d& t) { return boundingBox(bb).transform(t); } friend boundingBox inverseTransform(const boundingBox& bb, const transformation3d& t) { return boundingBox(bb).inverseTransform(t); } friend std::ostream& operator<<(std::ostream& s, const boundingBox& bb) { s << bb._lfb << " - " << bb._rbt; return s; } private: ///////////////////// // Private Methods // ///////////////////// void _swap(boundingBox& bb); void _assign(const boundingBox& bb); ////////////////// // Data Members // ////////////////// vec3d _lfb, _rbt; }; #endif /* _BOUNDINGBOX_H_ */