xref: /trunk/main/basegfx/source/range/b3drange.cxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_basegfx.hxx"
30 #include <basegfx/range/b3drange.hxx>
31 #include <basegfx/range/b3irange.hxx>
32 #include <basegfx/numeric/ftools.hxx>
33 #include <basegfx/matrix/b3dhommatrix.hxx>
34 
35 namespace basegfx
36 {
37 	B3DRange::B3DRange(const B3IRange& rRange) :
38         maRangeX(),
39         maRangeY(),
40         maRangeZ()
41     {
42         if( !rRange.isEmpty() )
43         {
44             maRangeX = rRange.getMinX();
45             maRangeY = rRange.getMinY();
46             maRangeZ = rRange.getMinZ();
47 
48             maRangeX.expand( rRange.getMaxX() );
49             maRangeY.expand( rRange.getMaxY() );
50             maRangeZ.expand( rRange.getMaxZ() );
51         }
52     }
53 
54 	void B3DRange::transform(const B3DHomMatrix& rMatrix)
55 	{
56 		if(!isEmpty() && !rMatrix.isIdentity())
57 		{
58 			const B3DRange aSource(*this);
59 			reset();
60 			expand(rMatrix * B3DPoint(aSource.getMinX(), aSource.getMinY(), aSource.getMinZ()));
61 			expand(rMatrix * B3DPoint(aSource.getMaxX(), aSource.getMinY(), aSource.getMinZ()));
62 			expand(rMatrix * B3DPoint(aSource.getMinX(), aSource.getMaxY(), aSource.getMinZ()));
63 			expand(rMatrix * B3DPoint(aSource.getMaxX(), aSource.getMaxY(), aSource.getMinZ()));
64 			expand(rMatrix * B3DPoint(aSource.getMinX(), aSource.getMinY(), aSource.getMaxZ()));
65 			expand(rMatrix * B3DPoint(aSource.getMaxX(), aSource.getMinY(), aSource.getMaxZ()));
66 			expand(rMatrix * B3DPoint(aSource.getMinX(), aSource.getMaxY(), aSource.getMaxZ()));
67 			expand(rMatrix * B3DPoint(aSource.getMaxX(), aSource.getMaxY(), aSource.getMaxZ()));
68 		}
69 	}
70 
71 	B3IRange fround(const B3DRange& rRange )
72 	{
73 		return rRange.isEmpty() ?
74             B3IRange() :
75             B3IRange(fround(rRange.getMinX()),
76                      fround(rRange.getMinY()),
77                      fround(rRange.getMinZ()),
78                      fround(rRange.getMaxX()),
79                      fround(rRange.getMaxY()),
80                      fround(rRange.getMaxZ()));
81 	}
82 
83 } // end of namespace basegfx
84 
85 // eof
86