32 using Vb =
typename VTraits::template ChangeBaseType<bool>;
52 template <typename VV = V, typename std::enable_if_t<VectorTraits<VV>::supportNoInit,
int> = 0>
54 template <typename VV = V, typename std::enable_if_t<!VectorTraits<VV>::supportNoInit,
int> = 0>
116 for (
int i = 0; i <
elements; ++i )
124 for (
int i = 0; i <
elements; ++i )
134 for (
int i = 0; i <
elements; ++i )
144 for (
int i = 0; i <
elements; ++i )
153 for (
int i = 0; i <
elements; ++i )
164 for (
int i = 0; i <
elements; ++i )
172 for (
int i = 0; i <
elements; ++i )
184 for (
int i = 0; i <
elements; ++i )
199 for (
int i = 0; i <
elements; ++i )
211 for (
int i = 0; i <
elements; ++i )
230 T minDist = std::numeric_limits<T>::max();
234 for (
auto dim = 0; dim <
elements; ++dim )
236 for (
const auto& border : {
min,
max } )
256 return Box(
min - expansion,
max + expansion );
264 for (
int i = 0; i <
elements; ++i )
275 {
return !( *
this == a ); }
279 return s << box.
min <<
'\n' << box.
max;
284 return s >> box.
min >> box.
max;
291 assert( box.valid() );
294 Vector3<T>{ box.min.x, box.min.y, box.min.z },
295 Vector3<T>{ box.max.x, box.min.y, box.min.z },
296 Vector3<T>{ box.min.x, box.max.y, box.min.z },
297 Vector3<T>{ box.max.x, box.max.y, box.min.z },
298 Vector3<T>{ box.min.x, box.min.y, box.max.z },
299 Vector3<T>{ box.max.x, box.min.y, box.max.z },
300 Vector3<T>{ box.min.x, box.max.y, box.max.z },
308 assert( box.valid() );
324 auto maxCorner = minCorner;
325 for (
auto & v : maxCorner )
356 return box.
max.x - box.
min.x;
363 return box.
max.y - box.
min.y;
370 return box.
max.z - box.
min.z;
381 auto boxDiag = box.max - box.min;
382 std::pair<float, int> ps[es];
383 for (
int i = 0; i < es; ++i )
384 ps[i] = { boxDiag[i], i };
387 for (
int i = 0; i + 1 < es; ++i )
388 for (
int j = i + 1; j < es; ++j )
390 std::swap( ps[i], ps[j] );
393 for (
int i = 0; i < es; ++i )
394 res[i] = ps[i].second;
399template<
size_t I,
typename V>
400constexpr const V&
get(
const Box<V>& box )
noexcept {
return box[int(
I )]; }
401template<
size_t I,
typename V>
402constexpr V&
get(
Box<V>& box )
noexcept {
return box[int(
I )]; }
411template<
size_t I,
typename V>
412struct tuple_element<
I, MR::
Box<V>> {
using type = V; };
415struct tuple_size<MR::
Box<V>> : integral_constant<size_t, 2> {};
auto width(const Box< V > &box)
returns size along x axis
Definition MRBox.h:354
constexpr const V & get(const Box< V > &box) noexcept
get<0> returns min, get<1> returns max
Definition MRBox.h:400
std::array< Vector3< T >, 8 > getCorners(const Box< Vector3< T > > &box)
returns all corners of given box
Definition MRBox.h:289
auto findSortedBoxDims(const Box< V > &box) -> typename VectorTraits< V >::template ChangeBaseType< int >
Definition MRBox.h:378
auto height(const Box< V > &box)
returns size along y axis
Definition MRBox.h:361
auto depth(const Box< V > &box)
returns size along z axis
Definition MRBox.h:368
Box< V > transformed(const Box< V > &box, const AffineXf< V > &xf)
find the tightest box enclosing this one after transformation
Definition MRBox.h:336
MinMax< typename Box< V >::T > getTouchPlanes(const Box< V > &box, const V &n)
Definition MRBox.h:321
constexpr T sqr(T x) noexcept
squared value
Definition MRMeshFwd.h:763
Box< T > MinMax
Definition MRMeshFwd.h:417
Box
Definition MRMeshFwd.h:397
auto dot(const Matrix2< T > &a, const Matrix2< T > &b) -> decltype(dot(a.x, b.x))
double-dot product: x = a : b
Definition MRMatrix2.h:142
static constexpr int size
Definition MRVectorTraits.h:22
class MRMESH_CLASS I
Definition MRMeshFwd.h:137
static constexpr auto && getElem(int i, U &&value)
Definition MRVectorTraits.h:32
static constexpr bool supportNoInit
Definition MRVectorTraits.h:23
constexpr NoInit noInit
Definition MRMeshFwd.h:98
V BaseType
Definition MRVectorTraits.h:21
only for bindings generation
Definition MRCameraOrientationPlugin.h:8
Definition MRAffineXf.h:26
Box given by its min- and max- corners.
Definition MRBox.h:27
friend std::ostream & operator<<(std::ostream &s, const Box< T > &box)
Definition MRBox.h:277
Box(const T &min, const T &max)
Definition MRBox.h:43
typename VTraits::BaseType T
Definition MRBox.h:30
void include(const T &pt)
Definition MRBox.h:122
typename VTraits::template ChangeBaseType< bool > Vb
Definition MRBox.h:32
T getBoxClosestPointTo(const T &pt) const
Definition MRBox.h:160
T getDistanceSq(const Box &b) const
Definition MRBox.h:195
T diagonal() const
Definition MRBox.h:109
void include(const Box &b)
Definition MRBox.h:132
VectorTraits< Vb > VbTraits
if V is Vector3<T> then Vb is Vector3b
Definition MRBox.h:33
T getProjection(const T &pt) const
Definition MRBox.h:224
Box expanded(const T &expansion) const
Definition MRBox.h:253
T max
Definition MRBox.h:35
Box insignificantlyExpanded() const
Definition MRBox.h:260
static Vb getMaxBoxCorner(const T &n)
Definition MRBox.h:100
T corner(const Vb &c) const
Definition MRBox.h:80
T center() const
Definition MRBox.h:75
T getDistanceSq(const T &pt) const
Definition MRBox.h:207
T size() const
Definition MRBox.h:106
VectorTraits< V > VTraits
Definition MRBox.h:29
static Vb getMinBoxCorner(const T &n)
Definition MRBox.h:90
bool intersects(const Box &b) const
Definition MRBox.h:170
static constexpr int elements
Definition MRBox.h:31
T volume() const
Definition MRBox.h:112
static Box fromMinAndSize(const T &min, const T &size)
Definition MRBox.h:63
Box()
create invalid box by default
Definition MRBox.h:42
MR_REQUIRES_IF_SUPPORTED(!std::is_same_v< T, U >) explicit Box(const Box< U > &a)
Definition MRBox.h:60
const V & operator[](int e) const
min/max access by 0/1 index
Definition MRBox.h:38
bool operator!=(const Box &a) const
Definition MRBox.h:274
T min
Definition MRBox.h:35
Box intersection(const Box &b) const
Definition MRBox.h:181
friend std::istream & operator>>(std::istream &s, Box< T > &box)
Definition MRBox.h:282
bool contains(const Box &otherbox) const
Definition MRBox.h:151
bool contains(const T &pt) const
Definition MRBox.h:142
Box & intersect(const Box &b)
Definition MRBox.h:191
bool valid() const
Definition MRBox.h:66
Box(NoInit)
Definition MRBox.h:53
bool operator==(const Box &a) const
Definition MRBox.h:272
Definition MRMeshFwd.h:97
Definition MRVector2.h:29
Definition MRVector3.h:33
Common traits for (mathematical) vectors.
Definition MRVectorTraits.h:18