21std::array<Vector3<T>, 8> 
getCorners( 
const Box<Vector3<T>> & box );
 
   31    using Vb = 
typename VTraits::template ChangeBaseType<bool>; 
 
   51    template <typename VV = V, typename std::enable_if_t<VectorTraits<VV>::supportNoInit, 
int> = 0>
 
   53    template <typename VV = V, typename std::enable_if_t<!VectorTraits<VV>::supportNoInit, 
int> = 0>
 
  113        for ( 
int i = 0; i < 
elements; ++i )
 
 
  121        for ( 
int i = 0; i < 
elements; ++i )
 
 
  131        for ( 
int i = 0; i < 
elements; ++i )
 
 
  141        for ( 
int i = 0; i < 
elements; ++i )
 
 
  150        for ( 
int i = 0; i < 
elements; ++i )
 
 
  161        for ( 
int i = 0; i < 
elements; ++i )
 
 
  169        for ( 
int i = 0; i < 
elements; ++i )
 
 
  181        for ( 
int i = 0; i < 
elements; ++i )
 
 
  196        for ( 
int i = 0; i < 
elements; ++i )
 
 
  208        for ( 
int i = 0; i < 
elements; ++i )
 
 
  227        T minDist = std::numeric_limits<T>::max();
 
  231        for ( 
auto dim = 0; dim < 
elements; ++dim )
 
  233            for ( 
const auto& border : { 
min, 
max } )
 
 
  253        return Box( 
min - expansion, 
max + expansion );
 
 
  261        for ( 
int i = 0; i < 
elements; ++i )
 
 
  272        { 
return !( *
this == a ); }
 
 
 
  278    assert( box.valid() );
 
 
  295    assert( box.valid() );
 
 
  311    auto maxCorner = minCorner;
 
  312    for ( 
auto & v : maxCorner )
 
  316        dot( n, box.
corner( minCorner ) ),
 
  317        dot( n, box.
corner( maxCorner ) )
 
 
  343    return box.
max.x - box.
min.x;
 
 
  350    return box.
max.y - box.
min.y;
 
 
  357    return box.
max.z - box.
min.z;
 
 
  368    auto boxDiag = box.
max - box.min;
 
  369    std::pair<float, int> ps[es];
 
  370    for ( 
int i = 0; i < es; ++i )
 
  371        ps[i] = { boxDiag[i], i };
 
  374    for ( 
int i = 0; i + 1 < es; ++i )
 
  375        for ( 
int j = i + 1; j < es; ++j )
 
  377                std::swap( ps[i], ps[j] );
 
  380    for ( 
int i = 0; i < es; ++i )
 
  381        res[i] = ps[i].second;
 
 
  386template<
size_t I, 
typename V>
 
  387constexpr const V& 
get( 
const Box<V>& box ) 
noexcept { 
return box[int( 
I )]; }
 
  388template<
size_t I, 
typename V>
 
  389constexpr       V& 
get(       
Box<V>& box ) 
noexcept { 
return box[int( 
I )]; }
 
  398template<
size_t I, 
typename V>
 
  399struct tuple_element<
I, 
MR::
Box<V>> { 
using type = V; };
 
  402struct tuple_size<
MR::
Box<V>> : integral_constant<size_t, 2> {};
 
auto width(const Box< V > &box)
returns size along x axis
Definition MRMesh/MRBox.h:341
 
constexpr const V & get(const Box< V > &box) noexcept
get<0> returns min, get<1> returns max
Definition MRMesh/MRBox.h:387
 
std::array< Vector3< T >, 8 > getCorners(const Box< Vector3< T > > &box)
returns all corners of given box
Definition MRMesh/MRBox.h:276
 
auto findSortedBoxDims(const Box< V > &box) -> typename VectorTraits< V >::template ChangeBaseType< int >
Definition MRMesh/MRBox.h:365
 
auto height(const Box< V > &box)
returns size along y axis
Definition MRMesh/MRBox.h:348
 
auto depth(const Box< V > &box)
returns size along z axis
Definition MRMesh/MRBox.h:355
 
Box< V > transformed(const Box< V > &box, const AffineXf< V > &xf)
find the tightest box enclosing this one after transformation
Definition MRMesh/MRBox.h:323
 
MinMax< typename Box< V >::T > getTouchPlanes(const Box< V > &box, const V &n)
Definition MRMesh/MRBox.h:308
 
Definition MRCameraOrientationPlugin.h:8
 
constexpr T sqr(T x) noexcept
squared value
Definition MRMesh/MRMeshFwd.h:754
 
Box
Definition MRMesh/MRMeshFwd.h:390
 
constexpr NoInit noInit
Definition MRMesh/MRMeshFwd.h:91
 
I
Definition MRMesh/MRMeshFwd.h:130
 
Definition MRMesh/MRAffineXf.h:21
 
Box given by its min- and max- corners.
Definition MRMesh/MRBox.h:26
 
Box(const V &min, const V &max)
Definition MRMesh/MRBox.h:42
 
typename VTraits::BaseType T
Definition MRMesh/MRBox.h:29
 
void include(const V &pt)
minimally increases the box to include given point
Definition MRMesh/MRBox.h:119
 
typename VTraits::template ChangeBaseType< bool > Vb
Definition MRMesh/MRBox.h:31
 
V getBoxClosestPointTo(const V &pt) const
returns closest point in the box to given point
Definition MRMesh/MRBox.h:157
 
T getDistanceSq(const Box &b) const
Definition MRMesh/MRBox.h:192
 
T diagonal() const
computes length from min to max
Definition MRMesh/MRBox.h:106
 
void include(const Box &b)
minimally increases the box to include another box
Definition MRMesh/MRBox.h:129
 
V getProjection(const V &pt) const
Definition MRMesh/MRBox.h:221
 
Box expanded(const V &expansion) const
decreases min and increased max on given value
Definition MRMesh/MRBox.h:250
 
V max
Definition MRMesh/MRBox.h:34
 
Box insignificantlyExpanded() const
decreases min and increases max to their closest representable value
Definition MRMesh/MRBox.h:257
 
static Vb getMaxBoxCorner(const V &n)
Definition MRMesh/MRBox.h:97
 
V corner(const Vb &c) const
Definition MRMesh/MRBox.h:77
 
V center() const
computes center of the box
Definition MRMesh/MRBox.h:72
 
T getDistanceSq(const V &pt) const
Definition MRMesh/MRBox.h:204
 
V size() const
computes size of the box in all dimensions
Definition MRMesh/MRBox.h:103
 
static Vb getMinBoxCorner(const V &n)
Definition MRMesh/MRBox.h:87
 
bool intersects(const Box &b) const
checks whether this box intersects or touches given box
Definition MRMesh/MRBox.h:167
 
static constexpr int elements
Definition MRMesh/MRBox.h:30
 
T volume() const
computes the volume of this box
Definition MRMesh/MRBox.h:109
 
static Box fromMinAndSize(const V &min, const V &size)
Definition MRMesh/MRBox.h:60
 
Box()
create invalid box by default
Definition MRMesh/MRBox.h:41
 
const V & operator[](int e) const
min/max access by 0/1 index
Definition MRMesh/MRBox.h:37
 
bool operator!=(const Box &a) const
Definition MRMesh/MRBox.h:271
 
V min
Definition MRMesh/MRBox.h:34
 
Box intersection(const Box &b) const
computes intersection between this and other box
Definition MRMesh/MRBox.h:178
 
bool contains(const Box &otherbox) const
checks whether given box is fully inside (the surfaces may touch) of this box
Definition MRMesh/MRBox.h:148
 
bool contains(const V &pt) const
checks whether given point is inside (including the surface) of this box
Definition MRMesh/MRBox.h:139
 
Box & intersect(const Box &b)
Definition MRMesh/MRBox.h:188
 
Box(const Box< U > &a)
Definition MRMesh/MRBox.h:58
 
bool valid() const
true if the box contains at least one point
Definition MRMesh/MRBox.h:63
 
Box(NoInit)
skip initialization of min/max
Definition MRMesh/MRBox.h:52
 
bool operator==(const Box &a) const
Definition MRMesh/MRBox.h:269
 
Definition MRMesh/MRMeshFwd.h:90
 
Definition MRVector2.h:28
 
T x
Definition MRVector2.h:34
 
Definition MRMesh/MRVector3.h:29
 
T x
Definition MRMesh/MRVector3.h:35
 
Definition MRMesh/MRVectorTraits.h:15
 
static constexpr int size
Definition MRMesh/MRVectorTraits.h:19
 
static constexpr auto && getElem(int i, U &&value)
Definition MRMesh/MRVectorTraits.h:29
 
static constexpr bool supportNoInit
Definition MRMesh/MRVectorTraits.h:20
 
T BaseType
Definition MRMesh/MRVectorTraits.h:18