xref: /AOO41X/main/basegfx/inc/basegfx/range/b3ibox.hxx (revision ce9c7ef7bd056b6da7d6eeebb749fbf2160d647b)
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 
33 namespace basegfx
34 {
35     class B3IBox
36     {
37         BasicBox            maRangeX;
38         BasicBox            maRangeY;
39         BasicBox            maRangeZ;
40 
41     public:
B3IBox()42         B3IBox()
43         {
44         }
45 
B3IBox(const B3ITuple & rTuple)46         explicit B3IBox(const B3ITuple& rTuple) :
47             maRangeX(rTuple.getX()),
48             maRangeY(rTuple.getY()),
49             maRangeZ(rTuple.getZ())
50         {
51         }
52 
B3IBox(sal_Int32 x1,sal_Int32 y1,sal_Int32 z1,sal_Int32 x2,sal_Int32 y2,sal_Int32 z2)53         B3IBox(sal_Int32 x1,
54                sal_Int32 y1,
55                sal_Int32 z1,
56                sal_Int32 x2,
57                sal_Int32 y2,
58                sal_Int32 z2) :
59             maRangeX(x1),
60             maRangeY(y1),
61             maRangeZ(z1)
62         {
63             maRangeX.expand(x2);
64             maRangeY.expand(y2);
65             maRangeZ.expand(z2);
66         }
67 
B3IBox(const B3ITuple & rTuple1,const B3ITuple & rTuple2)68         B3IBox(const B3ITuple& rTuple1,
69                const B3ITuple& rTuple2) :
70             maRangeX(rTuple1.getX()),
71             maRangeY(rTuple1.getY()),
72             maRangeZ(rTuple1.getZ())
73         {
74             expand(rTuple2);
75         }
76 
B3IBox(const B3IBox & rBox)77         B3IBox(const B3IBox& rBox) :
78             maRangeX(rBox.maRangeX),
79             maRangeY(rBox.maRangeY),
80             maRangeZ(rBox.maRangeZ)
81         {
82         }
83 
isEmpty() const84         bool isEmpty() const
85         {
86             return maRangeX.isEmpty() || maRangeY.isEmpty() || maRangeZ.isEmpty();
87         }
88 
reset()89         void reset()
90         {
91             maRangeX.reset();
92             maRangeY.reset();
93             maRangeZ.reset();
94         }
95 
operator ==(const B3IBox & rBox) const96         bool operator==( const B3IBox& rBox ) const
97         {
98             return (maRangeX == rBox.maRangeX
99                 && maRangeY == rBox.maRangeY
100                 && maRangeZ == rBox.maRangeZ);
101         }
102 
operator !=(const B3IBox & rBox) const103         bool operator!=( const B3IBox& rBox ) const
104         {
105             return (maRangeX != rBox.maRangeX
106                 || maRangeY != rBox.maRangeY
107                 || maRangeZ != rBox.maRangeZ);
108         }
109 
operator =(const B3IBox & rBox)110         void operator=(const B3IBox& rBox)
111         {
112             maRangeX = rBox.maRangeX;
113             maRangeY = rBox.maRangeY;
114             maRangeZ = rBox.maRangeZ;
115         }
116 
getMinX() const117         sal_Int32 getMinX() const
118         {
119             return maRangeX.getMinimum();
120         }
121 
getMinY() const122         sal_Int32 getMinY() const
123         {
124             return maRangeY.getMinimum();
125         }
126 
getMinZ() const127         sal_Int32 getMinZ() const
128         {
129             return maRangeZ.getMinimum();
130         }
131 
getMaxX() const132         sal_Int32 getMaxX() const
133         {
134             return maRangeX.getMaximum();
135         }
136 
getMaxY() const137         sal_Int32 getMaxY() const
138         {
139             return maRangeY.getMaximum();
140         }
141 
getMaxZ() const142         sal_Int32 getMaxZ() const
143         {
144             return maRangeZ.getMaximum();
145         }
146 
getWidth() const147         sal_Int64 getWidth() const
148         {
149             return maRangeX.getRange();
150         }
151 
getHeight() const152         sal_Int64 getHeight() const
153         {
154             return maRangeY.getRange();
155         }
156 
getDepth() const157         sal_Int64 getDepth() const
158         {
159             return maRangeZ.getRange();
160         }
161 
getMinimum() const162         B3IPoint getMinimum() const
163         {
164             return B3IPoint(
165                 maRangeX.getMinimum(),
166                 maRangeY.getMinimum(),
167                 maRangeZ.getMinimum()
168                 );
169         }
170 
getMaximum() const171         B3IPoint getMaximum() const
172         {
173             return B3IPoint(
174                 maRangeX.getMaximum(),
175                 maRangeY.getMaximum(),
176                 maRangeZ.getMaximum()
177                 );
178         }
179 
getRange() const180         B3I64Tuple getRange() const
181         {
182             return B3I64Tuple(
183                 maRangeX.getRange(),
184                 maRangeY.getRange(),
185                 maRangeZ.getRange()
186                 );
187         }
188 
getCenter() const189         B3DPoint getCenter() const
190         {
191             return B3DPoint(
192                 maRangeX.getCenter(),
193                 maRangeY.getCenter(),
194                 maRangeZ.getCenter()
195                 );
196         }
197 
isInside(const B3ITuple & rTuple) const198         bool isInside(const B3ITuple& rTuple) const
199         {
200             return (
201                 maRangeX.isInside(rTuple.getX())
202                 && maRangeY.isInside(rTuple.getY())
203                 && maRangeZ.isInside(rTuple.getZ())
204                 );
205         }
206 
isInside(const B3IBox & rBox) const207         bool isInside(const B3IBox& rBox) const
208         {
209             return (
210                 maRangeX.isInside(rBox.maRangeX)
211                 && maRangeY.isInside(rBox.maRangeY)
212                 && maRangeZ.isInside(rBox.maRangeZ)
213                 );
214         }
215 
overlaps(const B3IBox & rBox) const216         bool overlaps(const B3IBox& rBox) const
217         {
218             return (
219                 maRangeX.overlaps(rBox.maRangeX)
220                 && maRangeY.overlaps(rBox.maRangeY)
221                 && maRangeZ.overlaps(rBox.maRangeZ)
222                 );
223         }
224 
expand(const B3ITuple & rTuple)225         void expand(const B3ITuple& rTuple)
226         {
227             maRangeX.expand(rTuple.getX());
228             maRangeY.expand(rTuple.getY());
229             maRangeZ.expand(rTuple.getZ());
230         }
231 
expand(const B3IBox & rBox)232         void expand(const B3IBox& rBox)
233         {
234             maRangeX.expand(rBox.maRangeX);
235             maRangeY.expand(rBox.maRangeY);
236             maRangeZ.expand(rBox.maRangeZ);
237         }
238 
intersect(const B3IBox & rBox)239         void intersect(const B3IBox& rBox)
240         {
241             maRangeX.intersect(rBox.maRangeX);
242             maRangeY.intersect(rBox.maRangeY);
243             maRangeZ.intersect(rBox.maRangeZ);
244         }
245 
grow(sal_Int32 nValue)246         void grow(sal_Int32 nValue)
247         {
248             maRangeX.grow(nValue);
249             maRangeY.grow(nValue);
250             maRangeZ.grow(nValue);
251         }
252     };
253 } // end of namespace basegfx
254 
255 #endif /* _BGFX_RANGE_B3IBOX_HXX */
256