From ad547a6b5986815fda458221149728d9d9ab1d87 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 25 Feb 2021 19:22:25 +0000 Subject: restore Build,TODO from r57911 git-svn-id: svn://tug.org/texlive/trunk@57915 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/utils/asymptote/bbox3.h | 197 +++++++++++++++++++++++++++++++++++ 1 file changed, 197 insertions(+) create mode 100644 Build/source/utils/asymptote/bbox3.h (limited to 'Build/source/utils/asymptote/bbox3.h') diff --git a/Build/source/utils/asymptote/bbox3.h b/Build/source/utils/asymptote/bbox3.h new file mode 100644 index 00000000000..e2428f8c001 --- /dev/null +++ b/Build/source/utils/asymptote/bbox3.h @@ -0,0 +1,197 @@ +/***** + * bbox3.h + * Andy Hammerlindl 2002/06/06 + * + * Stores a rectangle that encloses a drawing object. + *****/ + +#ifndef BBOX3_H +#define BBOX3_H + +#include "triple.h" + +// For CYGWIN +#undef near +#undef far + +namespace camp { + +// The box that encloses a path +struct bbox3 { + bool empty; + double left; + double bottom; + double near; + double right; + double top; + double far; + + // Start bbox3 about the origin + bbox3() + : empty(true), left(0.0), bottom(0.0), near(0.0), + right(0.0), top(0.0), far(0.0) + { + } + + bbox3(double left, double bottom, double near, + double right, double top, double far) + : empty(false), left(left), bottom(bottom), near(near), + right(right), top(top), far(far) + { + } + + // Start a bbox3 with a point + bbox3(double x, double y, double z) + : empty(false), left(x), bottom(y), near(z), right(x), top(y), far(z) + { + } + + // Start a bbox3 with a point + bbox3(const triple& v) + : empty(false), left(v.getx()), bottom(v.gety()), near(v.getz()), + right(v.getx()), top(v.gety()), far(v.getz()) + { + } + + // Start a bbox3 with 2 points + bbox3(const triple& m, const triple& M) + : empty(false), + left(m.getx()), bottom(m.gety()), near(m.getz()), + right(M.getx()), top(M.gety()), far(M.getz()) + { + } + + // Add a point to a bbox3 + void add(const triple& v) + { + const double x = v.getx(), y = v.gety(), z = v.getz(); + add(x,y,z); + } + void add(double x, double y, double z) + { + if (empty) { + left = right = x; + top = bottom = y; + near = far = z; + empty = false; + } + else { + if(x < left) + left = x; + else if(x > right) + right = x; + if(y < bottom) + bottom = y; + else if(y > top) + top = y; + if(z < near) + near = z; + else if(z > far) + far = z; + } + } + + // Add a point to a nonempty bbox3 + void addnonempty(double x, double y, double z) + { + if(x < left) + left = x; + else if(x > right) + right = x; + if(y < bottom) + bottom = y; + else if(y > top) + top = y; + if(z < near) + near = z; + else if(z > far) + far = z; + } + + // Add (x,y) pair to a nonempty bbox3 + void addnonempty(pair v) + { + double x=v.getx(); + if(x < left) + left = x; + else if(x > right) + right = x; + double y=v.gety(); + if(y < bottom) + bottom = y; + else if(y > top) + top = y; + } + + // Add a point to a nonempty bbox3 + void addnonempty(const triple& v) + { + addnonempty(v.getx(),v.gety(),v.getz()); + } + + // Add a point to a nonempty bbox, updating bounding times + void addnonempty(const triple& v, bbox3& times, double t) + { + double x = v.getx(), y = v.gety(), z = v.getz(); + + if(x < left) { + left = x; + times.left = t; + } + else if(x > right) { + right = x; + times.right = t; + } + if(y < bottom) { + bottom = y; + times.bottom = t; + } + else if(y > top) { + top = y; + times.top = t; + } + if(z < near) { + near = z; + times.near=t; + } + else if(z > far) { + far = z; + times.far=t; + } + } + + bbox3 operator+= (const triple& v) + { + add(v); + return *this; + } + + triple Min() const { + return triple(left,bottom,near); + } + + triple Max() const { + return triple(right,top,far); + } + + pair Min2() const { + return pair(left,bottom); + } + + pair Max2() const { + return pair(right,top); + } + + friend ostream& operator << (ostream& out, const bbox3& b) + { + out << "Min " << b.Min() << " Max " << b.Max(); + return out; + } + +}; + +} // namespace camp + +GC_DECLARE_PTRFREE(camp::bbox3); + +#endif -- cgit v1.2.3