diff options
author | Vladimir Glazounov <vg@openoffice.org> | 2008-08-19 22:16:58 +0000 |
---|---|---|
committer | Vladimir Glazounov <vg@openoffice.org> | 2008-08-19 22:16:58 +0000 |
commit | 93952c90c0cf50cc1df80849e3ff0777fd5c0c87 (patch) | |
tree | 3ca6092a0b4af16e5dbb6fe7fcdb1355e9087425 /svx/source/sdr | |
parent | 0785fdfe6cedcfd37e60f52d587c7205f370d95c (diff) |
INTEGRATION: CWS aw033 (1.1.2); FILE ADDED
2008/08/19 16:46:30 cl 1.1.2.10: fixed license files
2008/05/27 14:50:00 aw 1.1.2.9: #i39532# changes DEV300 m12 resync corrections
2008/03/19 04:33:36 aw 1.1.2.8: #i39532# chart adaptions for 3D
2008/03/13 08:56:12 aw 1.1.2.7: #i39532# chart improvements
2007/08/13 15:34:34 aw 1.1.2.6: #i39532# changes after resync
2006/10/19 11:00:09 aw 1.1.2.5: #i39532# primitive
2006/09/27 16:41:05 aw 1.1.2.4: #i39532# changes after resync to m185
2006/08/09 17:15:56 aw 1.1.2.3: #i39532#
2006/05/16 14:35:18 aw 1.1.2.2: handish adaptions after resync
2006/05/12 12:35:17 aw 1.1.2.1: code for primitive support
Diffstat (limited to 'svx/source/sdr')
-rw-r--r-- | svx/source/sdr/primitive3d/sdrattributecreator3d.cxx | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/svx/source/sdr/primitive3d/sdrattributecreator3d.cxx b/svx/source/sdr/primitive3d/sdrattributecreator3d.cxx new file mode 100644 index 0000000000..9538cba1b5 --- /dev/null +++ b/svx/source/sdr/primitive3d/sdrattributecreator3d.cxx @@ -0,0 +1,159 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2008 by Sun Microsystems, Inc. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * $RCSfile: sdrattributecreator3d.cxx,v $ + * + * $Revision: 1.2 $ + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +#include <svx/sdr/primitive3d/sdrattributecreator3d.hxx> +#include <svx/svx3ditems.hxx> +#include <svtools/itemset.hxx> +#include <com/sun/star/drawing/NormalsKind.hpp> +#include <com/sun/star/drawing/TextureProjectionMode.hpp> +#include <drawinglayer/attribute/sdrattribute3d.hxx> +#include <svx/xflclit.hxx> + +////////////////////////////////////////////////////////////////////////////// + +namespace drawinglayer +{ + namespace primitive2d + { + attribute::Sdr3DObjectAttribute* createNewSdr3DObjectAttribute(const SfxItemSet& rSet) + { + // get NormalsKind + ::com::sun::star::drawing::NormalsKind aNormalsKind(::com::sun::star::drawing::NormalsKind_SPECIFIC); + const sal_uInt16 nNormalsValue(((const Svx3DNormalsKindItem&)rSet.Get(SDRATTR_3DOBJ_NORMALS_KIND)).GetValue()); + + if(1L == nNormalsValue) + { + aNormalsKind = ::com::sun::star::drawing::NormalsKind_FLAT; + } + else if(2L == nNormalsValue) + { + aNormalsKind = ::com::sun::star::drawing::NormalsKind_SPHERE; + } + + // get NoermalsInvert flag + const bool bInvertNormals(((const Svx3DNormalsInvertItem&)rSet.Get(SDRATTR_3DOBJ_NORMALS_INVERT)).GetValue()); + + // get TextureProjectionX + ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionX(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC); + const sal_uInt16 nTextureValueX(((const Svx3DTextureProjectionXItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_PROJ_X)).GetValue()); + + if(1L == nTextureValueX) + { + aTextureProjectionX = ::com::sun::star::drawing::TextureProjectionMode_PARALLEL; + } + else if(2L == nTextureValueX) + { + aTextureProjectionX = ::com::sun::star::drawing::TextureProjectionMode_SPHERE; + } + + // get TextureProjectionY + ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionY(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC); + const sal_uInt16 nTextureValueY(((const Svx3DTextureProjectionYItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_PROJ_Y)).GetValue()); + + if(1L == nTextureValueY) + { + aTextureProjectionY = ::com::sun::star::drawing::TextureProjectionMode_PARALLEL; + } + else if(2L == nTextureValueY) + { + aTextureProjectionY = ::com::sun::star::drawing::TextureProjectionMode_SPHERE; + } + + // get DoubleSided flag + const bool bDoubleSided(((const Svx3DDoubleSidedItem&)rSet.Get(SDRATTR_3DOBJ_DOUBLE_SIDED)).GetValue()); + + // get Shadow3D flag + const bool bShadow3D(((const Svx3DShadow3DItem&)rSet.Get(SDRATTR_3DOBJ_SHADOW_3D)).GetValue()); + + // get TextureFilter flag + const bool bTextureFilter(((const Svx3DTextureFilterItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_FILTER)).GetValue()); + + // get texture kind + // TextureKind: 1 == Base3DTextureLuminance, 2 == Base3DTextureIntensity, 3 == Base3DTextureColor + ::com::sun::star::drawing::TextureKind2 aTextureKind(::com::sun::star::drawing::TextureKind2_LUMINANCE); + const sal_uInt16 nTextureKind(((const Svx3DTextureKindItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_KIND)).GetValue()); + + if(2 == nTextureKind) + { + aTextureKind = ::com::sun::star::drawing::TextureKind2_INTENSITY; + } + else if(3 == nTextureKind) + { + aTextureKind = ::com::sun::star::drawing::TextureKind2_COLOR; + } + + // get texture mode + // TextureMode: 1 == Base3DTextureReplace, 2 == Base3DTextureModulate, 3 == Base3DTextureBlend + ::com::sun::star::drawing::TextureMode aTextureMode(::com::sun::star::drawing::TextureMode_REPLACE); + const sal_uInt16 nTextureMode(((const Svx3DTextureModeItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_MODE)).GetValue()); + + if(2 == nTextureMode) + { + aTextureMode = ::com::sun::star::drawing::TextureMode_MODULATE; + } + else if(3 == nTextureMode) + { + aTextureMode = ::com::sun::star::drawing::TextureMode_BLEND; + } + + // get object color + const ::basegfx::BColor aObjectColor(((const XFillColorItem&)rSet.Get(XATTR_FILLCOLOR)).GetColorValue().getBColor()); + + // get specular color + const ::basegfx::BColor aSpecular(((const Svx3DMaterialSpecularItem&)rSet.Get(SDRATTR_3DOBJ_MAT_SPECULAR)).GetValue().getBColor()); + + // get emissive color + const ::basegfx::BColor aEmission(((const Svx3DMaterialEmissionItem&)rSet.Get(SDRATTR_3DOBJ_MAT_EMISSION)).GetValue().getBColor()); + + // get specular intensity + sal_uInt16 nSpecularIntensity(((const Svx3DMaterialSpecularIntensityItem&)rSet.Get(SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY)).GetValue()); + + if(nSpecularIntensity > 128) + { + nSpecularIntensity = 128; + } + + // get reduced line geometry + const bool bReducedLineGeometry(((const Svx3DReducedLineGeometryItem&)rSet.Get(SDRATTR_3DOBJ_REDUCED_LINE_GEOMETRY)).GetValue()); + + // prepare material + attribute::MaterialAttribute3D aMaterial(aObjectColor, aSpecular, aEmission, nSpecularIntensity); + + return new attribute::Sdr3DObjectAttribute( + aNormalsKind, aTextureProjectionX, aTextureProjectionY, + aTextureKind, aTextureMode, aMaterial, + bInvertNormals, bDoubleSided, bShadow3D, bTextureFilter, bReducedLineGeometry); + } + } // end of namespace primitive2d +} // end of namespace sdr + +////////////////////////////////////////////////////////////////////////////// +// eof |