13 #ifndef hifi_Extents_h
14 #define hifi_Extents_h
16 #include <glm/glm.hpp>
17 #include <glm/gtx/component_wise.hpp>
20 #include "StreamUtils.h"
21 #include "GLMHelpers.h"
29 Extents(
const glm::vec3& minimum,
const glm::vec3& maximum) : minimum(minimum), maximum(maximum) {}
30 Extents(
const AABox& box) { reset(); add(box); }
37 void addExtents(
const Extents& extents);
41 void add(
const AABox& box);
45 void addPoint(
const glm::vec3& point);
49 bool containsPoint(
const glm::vec3& point)
const;
52 bool isEmpty()
const {
return minimum == maximum; }
53 bool isValid()
const {
return !((minimum == Vectors::MAX) && (maximum == Vectors::MIN)); }
57 void shiftBy(
const glm::vec3& delta) { minimum += delta; maximum += delta; }
60 void rotate(
const glm::quat& rotation);
63 void scale(
float scale) { minimum *= scale; maximum *= scale; }
64 void scale(
const glm::vec3& scale) { minimum *= scale; maximum *= scale; }
67 void transform(
const Transform& transform);
69 glm::vec3 size()
const {
return maximum - minimum; }
70 float largestDimension()
const {
return glm::compMax(size()); }
73 Extents getRotated(
const glm::quat& rotation)
const {
74 Extents temp(minimum, maximum);
75 temp.rotate(rotation);
79 glm::vec3 minimum{ Vectors::MAX };
80 glm::vec3 maximum{ Vectors::MIN };
83 inline QDebug operator<<(QDebug debug,
const Extents& extents) {
85 << extents.minimum <<
" ) to ("
86 << extents.maximum <<
") size: ("
87 << (extents.maximum - extents.minimum) <<
")"