1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #include <svx/sdr/primitive3d/sdrattributecreator3d.hxx> 29*cdf0e10cSrcweir #include <svx/svx3ditems.hxx> 30*cdf0e10cSrcweir #include <svl/itemset.hxx> 31*cdf0e10cSrcweir #include <com/sun/star/drawing/NormalsKind.hpp> 32*cdf0e10cSrcweir #include <com/sun/star/drawing/TextureProjectionMode.hpp> 33*cdf0e10cSrcweir #include <com/sun/star/drawing/TextureKind2.hpp> 34*cdf0e10cSrcweir #include <com/sun/star/drawing/TextureMode.hpp> 35*cdf0e10cSrcweir #include <svx/xflclit.hxx> 36*cdf0e10cSrcweir #include <drawinglayer/attribute/materialattribute3d.hxx> 37*cdf0e10cSrcweir #include <drawinglayer/attribute/sdrobjectattribute3d.hxx> 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir namespace drawinglayer 42*cdf0e10cSrcweir { 43*cdf0e10cSrcweir namespace primitive2d 44*cdf0e10cSrcweir { 45*cdf0e10cSrcweir attribute::Sdr3DObjectAttribute* createNewSdr3DObjectAttribute(const SfxItemSet& rSet) 46*cdf0e10cSrcweir { 47*cdf0e10cSrcweir // get NormalsKind 48*cdf0e10cSrcweir ::com::sun::star::drawing::NormalsKind aNormalsKind(::com::sun::star::drawing::NormalsKind_SPECIFIC); 49*cdf0e10cSrcweir const sal_uInt16 nNormalsValue(((const Svx3DNormalsKindItem&)rSet.Get(SDRATTR_3DOBJ_NORMALS_KIND)).GetValue()); 50*cdf0e10cSrcweir 51*cdf0e10cSrcweir if(1L == nNormalsValue) 52*cdf0e10cSrcweir { 53*cdf0e10cSrcweir aNormalsKind = ::com::sun::star::drawing::NormalsKind_FLAT; 54*cdf0e10cSrcweir } 55*cdf0e10cSrcweir else if(2L == nNormalsValue) 56*cdf0e10cSrcweir { 57*cdf0e10cSrcweir aNormalsKind = ::com::sun::star::drawing::NormalsKind_SPHERE; 58*cdf0e10cSrcweir } 59*cdf0e10cSrcweir 60*cdf0e10cSrcweir // get NoermalsInvert flag 61*cdf0e10cSrcweir const bool bInvertNormals(((const Svx3DNormalsInvertItem&)rSet.Get(SDRATTR_3DOBJ_NORMALS_INVERT)).GetValue()); 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir // get TextureProjectionX 64*cdf0e10cSrcweir ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionX(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC); 65*cdf0e10cSrcweir const sal_uInt16 nTextureValueX(((const Svx3DTextureProjectionXItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_PROJ_X)).GetValue()); 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir if(1L == nTextureValueX) 68*cdf0e10cSrcweir { 69*cdf0e10cSrcweir aTextureProjectionX = ::com::sun::star::drawing::TextureProjectionMode_PARALLEL; 70*cdf0e10cSrcweir } 71*cdf0e10cSrcweir else if(2L == nTextureValueX) 72*cdf0e10cSrcweir { 73*cdf0e10cSrcweir aTextureProjectionX = ::com::sun::star::drawing::TextureProjectionMode_SPHERE; 74*cdf0e10cSrcweir } 75*cdf0e10cSrcweir 76*cdf0e10cSrcweir // get TextureProjectionY 77*cdf0e10cSrcweir ::com::sun::star::drawing::TextureProjectionMode aTextureProjectionY(::com::sun::star::drawing::TextureProjectionMode_OBJECTSPECIFIC); 78*cdf0e10cSrcweir const sal_uInt16 nTextureValueY(((const Svx3DTextureProjectionYItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_PROJ_Y)).GetValue()); 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir if(1L == nTextureValueY) 81*cdf0e10cSrcweir { 82*cdf0e10cSrcweir aTextureProjectionY = ::com::sun::star::drawing::TextureProjectionMode_PARALLEL; 83*cdf0e10cSrcweir } 84*cdf0e10cSrcweir else if(2L == nTextureValueY) 85*cdf0e10cSrcweir { 86*cdf0e10cSrcweir aTextureProjectionY = ::com::sun::star::drawing::TextureProjectionMode_SPHERE; 87*cdf0e10cSrcweir } 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir // get DoubleSided flag 90*cdf0e10cSrcweir const bool bDoubleSided(((const Svx3DDoubleSidedItem&)rSet.Get(SDRATTR_3DOBJ_DOUBLE_SIDED)).GetValue()); 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir // get Shadow3D flag 93*cdf0e10cSrcweir const bool bShadow3D(((const Svx3DShadow3DItem&)rSet.Get(SDRATTR_3DOBJ_SHADOW_3D)).GetValue()); 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir // get TextureFilter flag 96*cdf0e10cSrcweir const bool bTextureFilter(((const Svx3DTextureFilterItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_FILTER)).GetValue()); 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir // get texture kind 99*cdf0e10cSrcweir // TextureKind: 1 == Base3DTextureLuminance, 2 == Base3DTextureIntensity, 3 == Base3DTextureColor 100*cdf0e10cSrcweir ::com::sun::star::drawing::TextureKind2 aTextureKind(::com::sun::star::drawing::TextureKind2_LUMINANCE); 101*cdf0e10cSrcweir const sal_uInt16 nTextureKind(((const Svx3DTextureKindItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_KIND)).GetValue()); 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir if(2 == nTextureKind) 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir aTextureKind = ::com::sun::star::drawing::TextureKind2_INTENSITY; 106*cdf0e10cSrcweir } 107*cdf0e10cSrcweir else if(3 == nTextureKind) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir aTextureKind = ::com::sun::star::drawing::TextureKind2_COLOR; 110*cdf0e10cSrcweir } 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir // get texture mode 113*cdf0e10cSrcweir // TextureMode: 1 == Base3DTextureReplace, 2 == Base3DTextureModulate, 3 == Base3DTextureBlend 114*cdf0e10cSrcweir ::com::sun::star::drawing::TextureMode aTextureMode(::com::sun::star::drawing::TextureMode_REPLACE); 115*cdf0e10cSrcweir const sal_uInt16 nTextureMode(((const Svx3DTextureModeItem&)rSet.Get(SDRATTR_3DOBJ_TEXTURE_MODE)).GetValue()); 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir if(2 == nTextureMode) 118*cdf0e10cSrcweir { 119*cdf0e10cSrcweir aTextureMode = ::com::sun::star::drawing::TextureMode_MODULATE; 120*cdf0e10cSrcweir } 121*cdf0e10cSrcweir else if(3 == nTextureMode) 122*cdf0e10cSrcweir { 123*cdf0e10cSrcweir aTextureMode = ::com::sun::star::drawing::TextureMode_BLEND; 124*cdf0e10cSrcweir } 125*cdf0e10cSrcweir 126*cdf0e10cSrcweir // get object color 127*cdf0e10cSrcweir const ::basegfx::BColor aObjectColor(((const XFillColorItem&)rSet.Get(XATTR_FILLCOLOR)).GetColorValue().getBColor()); 128*cdf0e10cSrcweir 129*cdf0e10cSrcweir // get specular color 130*cdf0e10cSrcweir const ::basegfx::BColor aSpecular(((const Svx3DMaterialSpecularItem&)rSet.Get(SDRATTR_3DOBJ_MAT_SPECULAR)).GetValue().getBColor()); 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir // get emissive color 133*cdf0e10cSrcweir const ::basegfx::BColor aEmission(((const Svx3DMaterialEmissionItem&)rSet.Get(SDRATTR_3DOBJ_MAT_EMISSION)).GetValue().getBColor()); 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir // get specular intensity 136*cdf0e10cSrcweir sal_uInt16 nSpecularIntensity(((const Svx3DMaterialSpecularIntensityItem&)rSet.Get(SDRATTR_3DOBJ_MAT_SPECULAR_INTENSITY)).GetValue()); 137*cdf0e10cSrcweir 138*cdf0e10cSrcweir if(nSpecularIntensity > 128) 139*cdf0e10cSrcweir { 140*cdf0e10cSrcweir nSpecularIntensity = 128; 141*cdf0e10cSrcweir } 142*cdf0e10cSrcweir 143*cdf0e10cSrcweir // get reduced line geometry 144*cdf0e10cSrcweir const bool bReducedLineGeometry(((const Svx3DReducedLineGeometryItem&)rSet.Get(SDRATTR_3DOBJ_REDUCED_LINE_GEOMETRY)).GetValue()); 145*cdf0e10cSrcweir 146*cdf0e10cSrcweir // prepare material 147*cdf0e10cSrcweir attribute::MaterialAttribute3D aMaterial(aObjectColor, aSpecular, aEmission, nSpecularIntensity); 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir return new attribute::Sdr3DObjectAttribute( 150*cdf0e10cSrcweir aNormalsKind, aTextureProjectionX, aTextureProjectionY, 151*cdf0e10cSrcweir aTextureKind, aTextureMode, aMaterial, 152*cdf0e10cSrcweir bInvertNormals, bDoubleSided, bShadow3D, bTextureFilter, bReducedLineGeometry); 153*cdf0e10cSrcweir } 154*cdf0e10cSrcweir } // end of namespace primitive2d 155*cdf0e10cSrcweir } // end of namespace sdr 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 158*cdf0e10cSrcweir // eof 159