Cortex  10.0.0-a4
BoxTraits.h
1 //
3 // Copyright (c) 2007, Image Engine Design Inc. All rights reserved.
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 //
12 // * Redistributions in binary form must reproduce the above copyright
13 // notice, this list of conditions and the following disclaimer in the
14 // documentation and/or other materials provided with the distribution.
15 //
16 // * Neither the name of Image Engine Design nor the names of any
17 // other contributors to this software may be used to endorse or
18 // promote products derived from this software without specific prior
19 // written permission.
20 //
21 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
22 // IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23 // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
25 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 //
34 
35 #ifndef IE_COREMAYA_BOXTRAITS_H
36 #define IE_COREMAYA_BOXTRAITS_H
37 
38 #include "OpenEXR/ImathLimits.h"
39 
40 #include "IECore/BoxTraits.h"
41 #include "IECoreMaya/VectorTraits.h"
42 
43 #include "maya/MBoundingBox.h"
44 
45 namespace IECore
46 {
47 
48 template<>
49 struct BoxTraits<MBoundingBox>
50 {
51  typedef MPoint BaseType;
52 
54  static MBoundingBox create( const MPoint &min, const MPoint &max )
55  {
56  return MBoundingBox( min, max );
57  }
58 
60  static MPoint min( const MBoundingBox& box )
61  {
62  return box.min();
63  }
64 
66  static MPoint max( const MBoundingBox& box )
67  {
68  return box.max();
69  }
70 
72  static MPoint size( const MBoundingBox& box )
73  {
74  return MPoint( box.width(), box.height(), box.depth() );
75  }
76 
78  static MPoint center( const MBoundingBox& box )
79  {
80  return box.center();
81  }
82 
84  static bool isEmpty( const MBoundingBox& box )
85  {
86  return box.width() * box.height() * box.depth() <= Imath::limits<double>::epsilon() ;
87  }
88 
90  static void makeEmpty( MBoundingBox& box )
91  {
92  box.clear();
93 
94  assert( isEmpty(box) );
95  }
96 
98  static void extendBy( MBoundingBox& box, const MPoint& p )
99  {
100  box.expand( p );
101 
102  assert( intersects( box, p ) );
103  }
104 
106  static void extendBy( MBoundingBox& box, const MBoundingBox& box2 )
107  {
108  box.expand( box2 );
109 
110  assert( intersects( box, box2 ) );
111  }
112 
114  static bool intersects( const MBoundingBox& box, const MPoint& p )
115  {
116  return box.contains( p );
117  }
118 
120  static bool intersects( const MBoundingBox& box, const MBoundingBox& box2 )
121  {
122  assert( box.intersects( box2 ) == box2.intersects( box ) );
123 
124  return box.intersects( box2 );
125  }
126 };
127 
128 } // namespace IECore
129 
130 #endif // IE_COREMAYA_BOXTRAITS_H
static BaseType min(const T &box)
Return the box's minimum corner point.
Definition: BoxTraits.h:76
static BaseType max(const T &box)
Return the box's maximum corner point.
Definition: BoxTraits.h:82
static T create()
Create an empty box.
Definition: BoxTraits.h:70
static void makeEmpty(T &box)
Modify the box such that it is considered to be empty.
Definition: BoxTraits.h:104
This namespace contains all components of the core library.
Definition: AddSmoothSkinningInfluencesOp.h:43
static bool isEmpty(const T &box)
Return true if the box is considered to be empty.
Definition: BoxTraits.h:98