xref: /trunk/main/basegfx/inc/basegfx/range/b3ibox.hxx (revision b63233d8)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _BGFX_RANGE_B3IBOX_HXX
25 #define _BGFX_RANGE_B3IBOX_HXX
26 
27 #include <basegfx/point/b3ipoint.hxx>
28 #include <basegfx/point/b3dpoint.hxx>
29 #include <basegfx/tuple/b3ituple.hxx>
30 #include <basegfx/tuple/b3i64tuple.hxx>
31 #include <basegfx/range/basicbox.hxx>
32 #include <basegfx/basegfxdllapi.h>
33 
34 namespace basegfx
35 {
36 	class BASEGFX_DLLPUBLIC B3IBox
37 	{
38 		BasicBox			maRangeX;
39 		BasicBox			maRangeY;
40 		BasicBox			maRangeZ;
41 
42 	public:
B3IBox()43 		B3IBox()
44 		{
45 		}
46 
B3IBox(const B3ITuple & rTuple)47 		explicit B3IBox(const B3ITuple& rTuple) :
48 			maRangeX(rTuple.getX()),
49 			maRangeY(rTuple.getY()),
50 			maRangeZ(rTuple.getZ())
51 		{
52 		}
53 
B3IBox(sal_Int32 x1,sal_Int32 y1,sal_Int32 z1,sal_Int32 x2,sal_Int32 y2,sal_Int32 z2)54 		B3IBox(sal_Int32 x1,
55                sal_Int32 y1,
56                sal_Int32 z1,
57                sal_Int32 x2,
58                sal_Int32 y2,
59                sal_Int32 z2) :
60 			maRangeX(x1),
61 			maRangeY(y1),
62 			maRangeZ(z1)
63 		{
64 			maRangeX.expand(x2);
65 			maRangeY.expand(y2);
66 			maRangeZ.expand(z2);
67 		}
68 
B3IBox(const B3ITuple & rTuple1,const B3ITuple & rTuple2)69 		B3IBox(const B3ITuple& rTuple1,
70                const B3ITuple& rTuple2) :
71 			maRangeX(rTuple1.getX()),
72 			maRangeY(rTuple1.getY()),
73 			maRangeZ(rTuple1.getZ())
74 		{
75             expand(rTuple2);
76 		}
77 
B3IBox(const B3IBox & rBox)78 		B3IBox(const B3IBox& rBox) :
79 			maRangeX(rBox.maRangeX),
80 			maRangeY(rBox.maRangeY),
81 			maRangeZ(rBox.maRangeZ)
82 		{
83 		}
84 
isEmpty() const85 		bool isEmpty() const
86 		{
87 			return maRangeX.isEmpty() || maRangeY.isEmpty() || maRangeZ.isEmpty();
88 		}
89 
reset()90 		void reset()
91 		{
92 			maRangeX.reset();
93 			maRangeY.reset();
94 			maRangeZ.reset();
95 		}
96 
operator ==(const B3IBox & rBox) const97 		bool operator==( const B3IBox& rBox ) const
98 		{
99 			return (maRangeX == rBox.maRangeX
100 				&& maRangeY == rBox.maRangeY
101 				&& maRangeZ == rBox.maRangeZ);
102 		}
103 
operator !=(const B3IBox & rBox) const104 		bool operator!=( const B3IBox& rBox ) const
105 		{
106 			return (maRangeX != rBox.maRangeX
107 				|| maRangeY != rBox.maRangeY
108 				|| maRangeZ != rBox.maRangeZ);
109 		}
110 
operator =(const B3IBox & rBox)111 		void operator=(const B3IBox& rBox)
112 		{
113 			maRangeX = rBox.maRangeX;
114 			maRangeY = rBox.maRangeY;
115 			maRangeZ = rBox.maRangeZ;
116 		}
117 
getMinX() const118         sal_Int32 getMinX() const
119         {
120             return maRangeX.getMinimum();
121         }
122 
getMinY() const123         sal_Int32 getMinY() const
124         {
125             return maRangeY.getMinimum();
126         }
127 
getMinZ() const128         sal_Int32 getMinZ() const
129         {
130             return maRangeZ.getMinimum();
131         }
132 
getMaxX() const133         sal_Int32 getMaxX() const
134         {
135             return maRangeX.getMaximum();
136         }
137 
getMaxY() const138         sal_Int32 getMaxY() const
139         {
140             return maRangeY.getMaximum();
141         }
142 
getMaxZ() const143         sal_Int32 getMaxZ() const
144         {
145             return maRangeZ.getMaximum();
146         }
147 
getWidth() const148         sal_Int64 getWidth() const
149         {
150             return maRangeX.getRange();
151         }
152 
getHeight() const153         sal_Int64 getHeight() const
154         {
155             return maRangeY.getRange();
156         }
157 
getDepth() const158         sal_Int64 getDepth() const
159         {
160             return maRangeZ.getRange();
161         }
162 
getMinimum() const163 		B3IPoint getMinimum() const
164 		{
165 			return B3IPoint(
166 				maRangeX.getMinimum(),
167 				maRangeY.getMinimum(),
168 				maRangeZ.getMinimum()
169 				);
170 		}
171 
getMaximum() const172 		B3IPoint getMaximum() const
173 		{
174 			return B3IPoint(
175 				maRangeX.getMaximum(),
176 				maRangeY.getMaximum(),
177 				maRangeZ.getMaximum()
178 				);
179 		}
180 
getRange() const181 		B3I64Tuple getRange() const
182 		{
183 			return B3I64Tuple(
184 				maRangeX.getRange(),
185 				maRangeY.getRange(),
186 				maRangeZ.getRange()
187 				);
188 		}
189 
getCenter() const190 		B3DPoint getCenter() const
191 		{
192 			return B3DPoint(
193 				maRangeX.getCenter(),
194 				maRangeY.getCenter(),
195 				maRangeZ.getCenter()
196 				);
197 		}
198 
isInside(const B3ITuple & rTuple) const199 		bool isInside(const B3ITuple& rTuple) const
200 		{
201 			return (
202 				maRangeX.isInside(rTuple.getX())
203 				&& maRangeY.isInside(rTuple.getY())
204 				&& maRangeZ.isInside(rTuple.getZ())
205 				);
206 		}
207 
isInside(const B3IBox & rBox) const208 		bool isInside(const B3IBox& rBox) const
209 		{
210 			return (
211 				maRangeX.isInside(rBox.maRangeX)
212 				&& maRangeY.isInside(rBox.maRangeY)
213 				&& maRangeZ.isInside(rBox.maRangeZ)
214 				);
215 		}
216 
overlaps(const B3IBox & rBox) const217 		bool overlaps(const B3IBox& rBox) const
218 		{
219 			return (
220 				maRangeX.overlaps(rBox.maRangeX)
221 				&& maRangeY.overlaps(rBox.maRangeY)
222 				&& maRangeZ.overlaps(rBox.maRangeZ)
223 				);
224 		}
225 
expand(const B3ITuple & rTuple)226 		void expand(const B3ITuple& rTuple)
227 		{
228 			maRangeX.expand(rTuple.getX());
229 			maRangeY.expand(rTuple.getY());
230 			maRangeZ.expand(rTuple.getZ());
231 		}
232 
expand(const B3IBox & rBox)233 		void expand(const B3IBox& rBox)
234 		{
235 			maRangeX.expand(rBox.maRangeX);
236 			maRangeY.expand(rBox.maRangeY);
237 			maRangeZ.expand(rBox.maRangeZ);
238 		}
239 
intersect(const B3IBox & rBox)240 		void intersect(const B3IBox& rBox)
241 		{
242 			maRangeX.intersect(rBox.maRangeX);
243 			maRangeY.intersect(rBox.maRangeY);
244 			maRangeZ.intersect(rBox.maRangeZ);
245 		}
246 
grow(sal_Int32 nValue)247 		void grow(sal_Int32 nValue)
248 		{
249 			maRangeX.grow(nValue);
250 			maRangeY.grow(nValue);
251 			maRangeZ.grow(nValue);
252 		}
253 	};
254 } // end of namespace basegfx
255 
256 #endif /* _BGFX_RANGE_B3IBOX_HXX */
257