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 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_chart2.hxx"
26
27 #include "SceneProperties.hxx"
28 #include "macros.hxx"
29 #include "ChartTypeHelper.hxx"
30 #include "ThreeDHelper.hxx"
31 #include <com/sun/star/beans/PropertyAttribute.hpp>
32 #include <com/sun/star/drawing/HomogenMatrix.hpp>
33 #include <com/sun/star/drawing/ShadeMode.hpp>
34 #include <com/sun/star/drawing/Direction3D.hpp>
35 #include <com/sun/star/drawing/ProjectionMode.hpp>
36 #include <com/sun/star/drawing/CameraGeometry.hpp>
37
38 // for F_PI
39 #include <tools/solar.h>
40
41 using namespace ::com::sun::star;
42
43 using ::com::sun::star::beans::Property;
44
45 namespace chart
46 {
47
AddPropertiesToVector(::std::vector<Property> & rOutProperties)48 void SceneProperties::AddPropertiesToVector(
49 ::std::vector< Property > & rOutProperties )
50 {
51 // transformation matrix
52 rOutProperties.push_back(
53 Property( C2U( "D3DTransformMatrix" ),
54 PROP_SCENE_TRANSF_MATRIX,
55 ::getCppuType( reinterpret_cast< const drawing::HomogenMatrix * >(0)),
56 beans::PropertyAttribute::BOUND
57 | beans::PropertyAttribute::MAYBEVOID
58 | beans::PropertyAttribute::MAYBEDEFAULT ));
59
60 // distance: deprecated ( this is not used by the chart view; it's only here for compatibility with old chart )
61 rOutProperties.push_back(
62 Property( C2U( "D3DSceneDistance" ),
63 PROP_SCENE_DISTANCE,
64 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
65 beans::PropertyAttribute::BOUND
66 | beans::PropertyAttribute::MAYBEVOID
67 | beans::PropertyAttribute::MAYBEDEFAULT ));
68
69 // focalLength: deprecated ( this is not used by the chart view; it's only here for compatibility with old chart )
70 rOutProperties.push_back(
71 Property( C2U( "D3DSceneFocalLength" ),
72 PROP_SCENE_FOCAL_LENGTH,
73 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
74 beans::PropertyAttribute::BOUND
75 | beans::PropertyAttribute::MAYBEVOID
76 | beans::PropertyAttribute::MAYBEDEFAULT ));
77
78 // shadowSlant
79 rOutProperties.push_back(
80 Property( C2U( "D3DSceneShadowSlant" ),
81 PROP_SCENE_SHADOW_SLANT,
82 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
83 beans::PropertyAttribute::BOUND
84 | beans::PropertyAttribute::MAYBEVOID
85 | beans::PropertyAttribute::MAYBEDEFAULT ));
86
87 // shadeMode
88 rOutProperties.push_back(
89 Property( C2U( "D3DSceneShadeMode" ),
90 PROP_SCENE_SHADE_MODE,
91 ::getCppuType( reinterpret_cast< const drawing::ShadeMode * >(0)),
92 beans::PropertyAttribute::BOUND
93 | beans::PropertyAttribute::MAYBEVOID
94 | beans::PropertyAttribute::MAYBEDEFAULT ));
95
96 // ambientColor
97 rOutProperties.push_back(
98 Property( C2U( "D3DSceneAmbientColor" ),
99 PROP_SCENE_AMBIENT_COLOR,
100 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
101 beans::PropertyAttribute::BOUND
102 | beans::PropertyAttribute::MAYBEVOID
103 | beans::PropertyAttribute::MAYBEDEFAULT ));
104
105 // lightingMode
106 rOutProperties.push_back(
107 Property( C2U( "D3DSceneTwoSidedLighting" ),
108 PROP_SCENE_TWO_SIDED_LIGHTING,
109 ::getBooleanCppuType(),
110 beans::PropertyAttribute::BOUND
111 | beans::PropertyAttribute::MAYBEVOID
112 | beans::PropertyAttribute::MAYBEDEFAULT ));
113
114 // camera geometry
115 rOutProperties.push_back(
116 Property( C2U( "D3DCameraGeometry" ),
117 PROP_SCENE_CAMERA_GEOMETRY,
118 ::getCppuType( reinterpret_cast< const drawing::CameraGeometry * >(0)),
119 beans::PropertyAttribute::BOUND
120 | beans::PropertyAttribute::MAYBEVOID
121 | beans::PropertyAttribute::MAYBEDEFAULT ));
122
123 // perspective
124 rOutProperties.push_back(
125 Property( C2U( "D3DScenePerspective" ),
126 PROP_SCENE_PERSPECTIVE,
127 ::getCppuType( reinterpret_cast< const drawing::ProjectionMode * >(0)),
128 beans::PropertyAttribute::BOUND
129 | beans::PropertyAttribute::MAYBEVOID
130 | beans::PropertyAttribute::MAYBEDEFAULT ));
131
132
133 // Light Sources
134 // -------------
135 // light source 1
136 rOutProperties.push_back(
137 Property( C2U( "D3DSceneLightColor1" ),
138 PROP_SCENE_LIGHT_COLOR_1,
139 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
140 beans::PropertyAttribute::BOUND
141 | beans::PropertyAttribute::MAYBEVOID
142 | beans::PropertyAttribute::MAYBEDEFAULT ));
143 rOutProperties.push_back(
144 Property( C2U( "D3DSceneLightDirection1" ),
145 PROP_SCENE_LIGHT_DIRECTION_1,
146 ::getCppuType( reinterpret_cast< const drawing::Direction3D * >(0)),
147 beans::PropertyAttribute::BOUND
148 | beans::PropertyAttribute::MAYBEVOID
149 | beans::PropertyAttribute::MAYBEDEFAULT ));
150 rOutProperties.push_back(
151 Property( C2U( "D3DSceneLightOn1" ),
152 PROP_SCENE_LIGHT_ON_1,
153 ::getBooleanCppuType(),
154 beans::PropertyAttribute::BOUND
155 | beans::PropertyAttribute::MAYBEVOID
156 | beans::PropertyAttribute::MAYBEDEFAULT ));
157 // light source 2
158 rOutProperties.push_back(
159 Property( C2U( "D3DSceneLightColor2" ),
160 PROP_SCENE_LIGHT_COLOR_2,
161 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
162 beans::PropertyAttribute::BOUND
163 | beans::PropertyAttribute::MAYBEVOID
164 | beans::PropertyAttribute::MAYBEDEFAULT ));
165 rOutProperties.push_back(
166 Property( C2U( "D3DSceneLightDirection2" ),
167 PROP_SCENE_LIGHT_DIRECTION_2,
168 ::getCppuType( reinterpret_cast< const drawing::Direction3D * >(0)),
169 beans::PropertyAttribute::BOUND
170 | beans::PropertyAttribute::MAYBEVOID
171 | beans::PropertyAttribute::MAYBEDEFAULT ));
172 rOutProperties.push_back(
173 Property( C2U( "D3DSceneLightOn2" ),
174 PROP_SCENE_LIGHT_ON_2,
175 ::getBooleanCppuType(),
176 beans::PropertyAttribute::BOUND
177 | beans::PropertyAttribute::MAYBEVOID
178 | beans::PropertyAttribute::MAYBEDEFAULT ));
179 // light source 3
180 rOutProperties.push_back(
181 Property( C2U( "D3DSceneLightColor3" ),
182 PROP_SCENE_LIGHT_COLOR_3,
183 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
184 beans::PropertyAttribute::BOUND
185 | beans::PropertyAttribute::MAYBEVOID
186 | beans::PropertyAttribute::MAYBEDEFAULT ));
187 rOutProperties.push_back(
188 Property( C2U( "D3DSceneLightDirection3" ),
189 PROP_SCENE_LIGHT_DIRECTION_3,
190 ::getCppuType( reinterpret_cast< const drawing::Direction3D * >(0)),
191 beans::PropertyAttribute::BOUND
192 | beans::PropertyAttribute::MAYBEVOID
193 | beans::PropertyAttribute::MAYBEDEFAULT ));
194 rOutProperties.push_back(
195 Property( C2U( "D3DSceneLightOn3" ),
196 PROP_SCENE_LIGHT_ON_3,
197 ::getBooleanCppuType(),
198 beans::PropertyAttribute::BOUND
199 | beans::PropertyAttribute::MAYBEVOID
200 | beans::PropertyAttribute::MAYBEDEFAULT ));
201 // light source 4
202 rOutProperties.push_back(
203 Property( C2U( "D3DSceneLightColor4" ),
204 PROP_SCENE_LIGHT_COLOR_4,
205 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
206 beans::PropertyAttribute::BOUND
207 | beans::PropertyAttribute::MAYBEVOID
208 | beans::PropertyAttribute::MAYBEDEFAULT ));
209 rOutProperties.push_back(
210 Property( C2U( "D3DSceneLightDirection4" ),
211 PROP_SCENE_LIGHT_DIRECTION_4,
212 ::getCppuType( reinterpret_cast< const drawing::Direction3D * >(0)),
213 beans::PropertyAttribute::BOUND
214 | beans::PropertyAttribute::MAYBEVOID
215 | beans::PropertyAttribute::MAYBEDEFAULT ));
216 rOutProperties.push_back(
217 Property( C2U( "D3DSceneLightOn4" ),
218 PROP_SCENE_LIGHT_ON_4,
219 ::getBooleanCppuType(),
220 beans::PropertyAttribute::BOUND
221 | beans::PropertyAttribute::MAYBEVOID
222 | beans::PropertyAttribute::MAYBEDEFAULT ));
223 // light source 5
224 rOutProperties.push_back(
225 Property( C2U( "D3DSceneLightColor5" ),
226 PROP_SCENE_LIGHT_COLOR_5,
227 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
228 beans::PropertyAttribute::BOUND
229 | beans::PropertyAttribute::MAYBEVOID
230 | beans::PropertyAttribute::MAYBEDEFAULT ));
231 rOutProperties.push_back(
232 Property( C2U( "D3DSceneLightDirection5" ),
233 PROP_SCENE_LIGHT_DIRECTION_5,
234 ::getCppuType( reinterpret_cast< const drawing::Direction3D * >(0)),
235 beans::PropertyAttribute::BOUND
236 | beans::PropertyAttribute::MAYBEVOID
237 | beans::PropertyAttribute::MAYBEDEFAULT ));
238 rOutProperties.push_back(
239 Property( C2U( "D3DSceneLightOn5" ),
240 PROP_SCENE_LIGHT_ON_5,
241 ::getBooleanCppuType(),
242 beans::PropertyAttribute::BOUND
243 | beans::PropertyAttribute::MAYBEVOID
244 | beans::PropertyAttribute::MAYBEDEFAULT ));
245 // light source 6
246 rOutProperties.push_back(
247 Property( C2U( "D3DSceneLightColor6" ),
248 PROP_SCENE_LIGHT_COLOR_6,
249 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
250 beans::PropertyAttribute::BOUND
251 | beans::PropertyAttribute::MAYBEVOID
252 | beans::PropertyAttribute::MAYBEDEFAULT ));
253 rOutProperties.push_back(
254 Property( C2U( "D3DSceneLightDirection6" ),
255 PROP_SCENE_LIGHT_DIRECTION_6,
256 ::getCppuType( reinterpret_cast< const drawing::Direction3D * >(0)),
257 beans::PropertyAttribute::BOUND
258 | beans::PropertyAttribute::MAYBEVOID
259 | beans::PropertyAttribute::MAYBEDEFAULT ));
260 rOutProperties.push_back(
261 Property( C2U( "D3DSceneLightOn6" ),
262 PROP_SCENE_LIGHT_ON_6,
263 ::getBooleanCppuType(),
264 beans::PropertyAttribute::BOUND
265 | beans::PropertyAttribute::MAYBEVOID
266 | beans::PropertyAttribute::MAYBEDEFAULT ));
267 // light source 7
268 rOutProperties.push_back(
269 Property( C2U( "D3DSceneLightColor7" ),
270 PROP_SCENE_LIGHT_COLOR_7,
271 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
272 beans::PropertyAttribute::BOUND
273 | beans::PropertyAttribute::MAYBEVOID
274 | beans::PropertyAttribute::MAYBEDEFAULT ));
275 rOutProperties.push_back(
276 Property( C2U( "D3DSceneLightDirection7" ),
277 PROP_SCENE_LIGHT_DIRECTION_7,
278 ::getCppuType( reinterpret_cast< const drawing::Direction3D * >(0)),
279 beans::PropertyAttribute::BOUND
280 | beans::PropertyAttribute::MAYBEVOID
281 | beans::PropertyAttribute::MAYBEDEFAULT ));
282 rOutProperties.push_back(
283 Property( C2U( "D3DSceneLightOn7" ),
284 PROP_SCENE_LIGHT_ON_7,
285 ::getBooleanCppuType(),
286 beans::PropertyAttribute::BOUND
287 | beans::PropertyAttribute::MAYBEVOID
288 | beans::PropertyAttribute::MAYBEDEFAULT ));
289 // light source 8
290 rOutProperties.push_back(
291 Property( C2U( "D3DSceneLightColor8" ),
292 PROP_SCENE_LIGHT_COLOR_8,
293 ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
294 beans::PropertyAttribute::BOUND
295 | beans::PropertyAttribute::MAYBEVOID
296 | beans::PropertyAttribute::MAYBEDEFAULT ));
297 rOutProperties.push_back(
298 Property( C2U( "D3DSceneLightDirection8" ),
299 PROP_SCENE_LIGHT_DIRECTION_8,
300 ::getCppuType( reinterpret_cast< const drawing::Direction3D * >(0)),
301 beans::PropertyAttribute::BOUND
302 | beans::PropertyAttribute::MAYBEVOID
303 | beans::PropertyAttribute::MAYBEDEFAULT ));
304 rOutProperties.push_back(
305 Property( C2U( "D3DSceneLightOn8" ),
306 PROP_SCENE_LIGHT_ON_8,
307 ::getBooleanCppuType(),
308 beans::PropertyAttribute::BOUND
309 | beans::PropertyAttribute::MAYBEVOID
310 | beans::PropertyAttribute::MAYBEDEFAULT ));
311 }
312
AddDefaultsToMap(::chart::tPropertyValueMap & rOutMap)313 void SceneProperties::AddDefaultsToMap(
314 ::chart::tPropertyValueMap & rOutMap )
315 {
316 // Identity Matrix
317 drawing::HomogenMatrix aMtx;
318 aMtx.Line1.Column1 = aMtx.Line2.Column2 =
319 aMtx.Line3.Column3 = aMtx.Line4.Column4 = 1.0;
320 aMtx.Line1.Column2 = aMtx.Line1.Column3 = aMtx.Line1.Column4 =
321 aMtx.Line2.Column1 = aMtx.Line2.Column3 = aMtx.Line2.Column4 =
322 aMtx.Line3.Column1 = aMtx.Line3.Column2 = aMtx.Line3.Column4 =
323 aMtx.Line4.Column1 = aMtx.Line4.Column2 = aMtx.Line4.Column3 = 0.0;
324
325 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_TRANSF_MATRIX, aMtx );
326 ::chart::PropertyHelper::setPropertyValueDefault< sal_Int32 >( rOutMap, PROP_SCENE_DISTANCE, 4200 );
327 ::chart::PropertyHelper::setPropertyValueDefault< sal_Int32 >( rOutMap, PROP_SCENE_FOCAL_LENGTH, 8000 );
328
329 // PROP_SCENE_SHADOW_SLANT;
330 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_SHADE_MODE, drawing::ShadeMode_SMOOTH );
331
332 ::chart::PropertyHelper::setPropertyValueDefault< sal_Int32 >(
333 rOutMap, PROP_SCENE_AMBIENT_COLOR, ChartTypeHelper::getDefaultAmbientLightColor(ThreeDLookScheme_Simple,0));
334
335 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_TWO_SIDED_LIGHTING, true );
336
337 drawing::Position3D vrp( 0.0, 0.0, 1.0 );
338 drawing::Direction3D vpn( 0.0, 0.0, 1.0 );
339 drawing::Direction3D vup( 0.0, 1.0, 0.0 );
340 drawing::CameraGeometry aDefaultCameraGeometry( vrp, vpn, vup );
341
342 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_CAMERA_GEOMETRY, aDefaultCameraGeometry );
343 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_PERSPECTIVE, drawing::ProjectionMode_PERSPECTIVE );
344
345 // Light Sources
346 // -------------
347 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_ON_1, false );
348 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_ON_2, true );
349 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_ON_3, false );
350 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_ON_4, false );
351 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_ON_5, false );
352 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_ON_6, false );
353 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_ON_7, false );
354 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_ON_8, false );
355
356 uno::Any aDefaultLightDirection( uno::makeAny( drawing::Direction3D( 0.0, 0.0, 1.0 ) ) );
357 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_DIRECTION_1, aDefaultLightDirection );
358 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_DIRECTION_2, ChartTypeHelper::getDefaultSimpleLightDirection(0));
359 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_DIRECTION_3, aDefaultLightDirection );
360 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_DIRECTION_4, aDefaultLightDirection );
361 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_DIRECTION_5, aDefaultLightDirection );
362 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_DIRECTION_6, aDefaultLightDirection );
363 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_DIRECTION_7, aDefaultLightDirection );
364 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_DIRECTION_8, aDefaultLightDirection );
365
366 uno::Any aDefaultLightColor;
367 aDefaultLightColor <<= ChartTypeHelper::getDefaultDirectLightColor(ThreeDLookScheme_Simple,0);
368 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_COLOR_1, aDefaultLightColor );
369 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_COLOR_2, aDefaultLightColor );
370 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_COLOR_3, aDefaultLightColor );
371 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_COLOR_4, aDefaultLightColor );
372 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_COLOR_5, aDefaultLightColor );
373 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_COLOR_6, aDefaultLightColor );
374 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_COLOR_7, aDefaultLightColor );
375 ::chart::PropertyHelper::setPropertyValueDefault( rOutMap, PROP_SCENE_LIGHT_COLOR_8, aDefaultLightColor );
376 }
377
378 } // namespace chart
379