Update ooo320-m1
[ooovba.git] / chart2 / source / view / main / Linear3DTransformation.cxx
blob925db1b1b0aa137e02f8ac7549c27af9952e414a
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: Linear3DTransformation.cxx,v $
10 * $Revision: 1.6.44.1 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_chart2.hxx"
33 #include "Linear3DTransformation.hxx"
34 #include <algorithm>
36 using namespace ::com::sun::star;
38 using ::com::sun::star::uno::Sequence;
39 using ::com::sun::star::uno::RuntimeException;
41 namespace chart
44 Linear3DTransformation::Linear3DTransformation( const drawing::HomogenMatrix& rHomMatrix, bool bSwapXAndY )
45 : m_Matrix(rHomMatrix)
46 , m_bSwapXAndY(bSwapXAndY)
49 Linear3DTransformation::~Linear3DTransformation()
52 // ____ XTransformation ____
53 Sequence< double > SAL_CALL Linear3DTransformation::transform(
54 const Sequence< double >& rSourceValues )
55 throw (RuntimeException,
56 lang::IllegalArgumentException)
58 double fX = rSourceValues[0];
59 double fY = rSourceValues[1];
60 double fZ = rSourceValues[2];
61 if(m_bSwapXAndY)
62 std::swap(fX,fY);
63 Sequence< double > aNewVec(3);
64 double fZwi;
66 fZwi = m_Matrix.Line1.Column1 * fX
67 + m_Matrix.Line1.Column2 * fY
68 + m_Matrix.Line1.Column3 * fZ
69 + m_Matrix.Line1.Column4;
70 aNewVec[0] = fZwi;
72 fZwi = m_Matrix.Line2.Column1 * fX
73 + m_Matrix.Line2.Column2 * fY
74 + m_Matrix.Line2.Column3 * fZ
75 + m_Matrix.Line2.Column4;
76 aNewVec[1] = fZwi;
78 fZwi = m_Matrix.Line3.Column1 * fX
79 + m_Matrix.Line3.Column2 * fY
80 + m_Matrix.Line3.Column3 * fZ
81 + m_Matrix.Line3.Column4;
82 aNewVec[2] = fZwi;
84 fZwi = m_Matrix.Line4.Column1 * fX
85 + m_Matrix.Line4.Column2 * fY
86 + m_Matrix.Line4.Column3 * fZ
87 + m_Matrix.Line4.Column4;
88 if(fZwi != 1.0 && fZwi != 0.0)
90 aNewVec[0] /= fZwi;
91 aNewVec[1] /= fZwi;
92 aNewVec[2] /= fZwi;
94 return aNewVec;
97 sal_Int32 SAL_CALL Linear3DTransformation::getSourceDimension()
98 throw (RuntimeException)
100 return 3;
103 sal_Int32 SAL_CALL Linear3DTransformation::getTargetDimension()
104 throw (RuntimeException)
106 return 3;
110 } // namespace chart