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 CHART2_THREEDHELPER_HXX
25 #define CHART2_THREEDHELPER_HXX
26 
27 #include <com/sun/star/chart2/XDiagram.hpp>
28 #include <com/sun/star/drawing/CameraGeometry.hpp>
29 #include <com/sun/star/drawing/ShadeMode.hpp>
30 #include "charttoolsdllapi.hxx"
31 
32 //.............................................................................
33 namespace chart
34 {
35 //.............................................................................
36 
37 //-----------------------------------------------------------------------------
38 /**
39 */
40 
41 enum ThreeDLookScheme
42 {
43     ThreeDLookScheme_Simple,
44     ThreeDLookScheme_Realistic,
45     ThreeDLookScheme_Unknown
46 };
47 
48 enum CuboidPlanePosition
49 {
50     CuboidPlanePosition_Left,
51     CuboidPlanePosition_Right,
52     CuboidPlanePosition_Top,
53     CuboidPlanePosition_Bottom,
54     CuboidPlanePosition_Front,
55     CuboidPlanePosition_Back
56 };
57 
58 class OOO_DLLPUBLIC_CHARTTOOLS ThreeDHelper
59 {
60 public:
61 
62     /** Returns the default camera geometry that is set in the Diagram CTOR.
63         This is not the property default!
64 
65         @todo deprecate the hard set camera geometry and use the property
66               default
67      */
68     static ::com::sun::star::drawing::CameraGeometry getDefaultCameraGeometry( bool bPie=false );
69 
70     static void getRotationAngleFromDiagram(
71         const ::com::sun::star::uno::Reference<
72             ::com::sun::star::beans::XPropertySet >& xSceneProperties
73             , double& rfXAngleRad, double& rfYAngleRad, double& rfZAngleRad );
74     static void setRotationAngleToDiagram(
75         const ::com::sun::star::uno::Reference<
76             ::com::sun::star::beans::XPropertySet >& xSceneProperties
77             , double fXAngleRad, double fYAngleRad, double fZAngleRad );
78 
79     static void getRotationFromDiagram(
80         const ::com::sun::star::uno::Reference<
81             ::com::sun::star::beans::XPropertySet >& xSceneProperties
82             , sal_Int32& rnHorizontalAngleDegree, sal_Int32& rnVerticalAngleDegree );
83     static void setRotationToDiagram(
84         const ::com::sun::star::uno::Reference<
85             ::com::sun::star::beans::XPropertySet >& xSceneProperties
86             , sal_Int32 nHorizontalAngleDegree, sal_Int32 nVerticalYAngleDegree );
87 
88     static void switchRightAngledAxes( const ::com::sun::star::uno::Reference<
89             ::com::sun::star::beans::XPropertySet >& xSceneProperties
90             , sal_Bool bRightAngledAxes, bool bRotateLights=true );
91 
92     static void adaptRadAnglesForRightAngledAxes( double& rfXAngleRad, double& rfYAngleRad );
93     static double getXDegreeAngleLimitForRightAngledAxes();
94     static double getYDegreeAngleLimitForRightAngledAxes();
95     static double getValueClippedToRange( double fValue, const double& fPositivLimit );
96 
97     static void convertElevationRotationDegToXYZAngleRad(
98         sal_Int32 nElevationDeg, sal_Int32 nRotationDeg
99         , double& rfXAngleRad, double& rfYAngleRad, double& rfZAngleRad );
100 
101     SAL_DLLPRIVATE static void convertXYZAngleRadToElevationRotationDeg(
102         sal_Int32& rnElevationDeg, sal_Int32& rnRotationDeg
103         , double fXRad, double fYRad, double fZRad );
104 
105     static double getCameraDistance(
106         const ::com::sun::star::uno::Reference<
107             ::com::sun::star::beans::XPropertySet >& xSceneProperties );
108     static void setCameraDistance(
109         const ::com::sun::star::uno::Reference<
110             ::com::sun::star::beans::XPropertySet >& xSceneProperties
111             , double fCameraDistance );
112     SAL_DLLPRIVATE static void ensureCameraDistanceRange( double& rfCameraDistance );
113     SAL_DLLPRIVATE static void getCameraDistanceRange( double& rfMinimumDistance, double& rfMaximumDistance );
114 
115     static double CameraDistanceToPerspective( double fCameraDistance );
116     static double PerspectiveToCameraDistance( double fPerspective );
117 
118     static void set3DSettingsToDefault( const ::com::sun::star::uno::Reference<
119             ::com::sun::star::beans::XPropertySet >& xSceneProperties );
120     static void setDefaultRotation( const ::com::sun::star::uno::Reference<
121             ::com::sun::star::beans::XPropertySet >& xSceneProperties );
122     static void setDefaultIllumination( const ::com::sun::star::uno::Reference<
123             ::com::sun::star::beans::XPropertySet >& xSceneProperties );
124 
125     static void setDefaultRotation( const ::com::sun::star::uno::Reference<
126             ::com::sun::star::beans::XPropertySet >& xSceneProperties, bool bPieOrDonut );
127 
128     static CuboidPlanePosition getAutomaticCuboidPlanePositionForStandardLeftWall( const ::com::sun::star::uno::Reference<
129             ::com::sun::star::beans::XPropertySet >& xSceneProperties );
130     static CuboidPlanePosition getAutomaticCuboidPlanePositionForStandardBackWall(const ::com::sun::star::uno::Reference<
131             ::com::sun::star::beans::XPropertySet >& xSceneProperties );
132     static CuboidPlanePosition getAutomaticCuboidPlanePositionForStandardBottom(const ::com::sun::star::uno::Reference<
133             ::com::sun::star::beans::XPropertySet >& xSceneProperties );
134 
135     static ThreeDLookScheme detectScheme( const ::com::sun::star::uno::Reference<
136             ::com::sun::star::chart2::XDiagram >& xDiagram );
137     static void setScheme( const ::com::sun::star::uno::Reference<
138             ::com::sun::star::chart2::XDiagram >& xDiagram
139             , ThreeDLookScheme aScheme );
140 
141     //sal_Int32 nRoundedEdges:  <0 or >100 -> mixed state
142     //sal_Int32 nObjectLines:  0->no lines; 1->all lines on; other->mixed state
143 
144     static void getRoundedEdgesAndObjectLines( const ::com::sun::star::uno::Reference<
145             ::com::sun::star::chart2::XDiagram >& xDiagram
146             , sal_Int32& rnRoundedEdges, sal_Int32& rnObjectLines );
147     static void setRoundedEdgesAndObjectLines( const ::com::sun::star::uno::Reference<
148             ::com::sun::star::chart2::XDiagram >& xDiagram
149             , sal_Int32 nRoundedEdges, sal_Int32 nObjectLines );
150 };
151 
152 //.............................................................................
153 } //namespace chart
154 //.............................................................................
155 #endif
156