diff options
Diffstat (limited to 'svx/source/msfilter/msashape3d.cxx')
-rw-r--r-- | svx/source/msfilter/msashape3d.cxx | 564 |
1 files changed, 0 insertions, 564 deletions
diff --git a/svx/source/msfilter/msashape3d.cxx b/svx/source/msfilter/msashape3d.cxx deleted file mode 100644 index 092ccadc36..0000000000 --- a/svx/source/msfilter/msashape3d.cxx +++ /dev/null @@ -1,564 +0,0 @@ -/************************************************************************* - * - * 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: msashape3d.cxx,v $ - * $Revision: 1.13.226.1 $ - * - * 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. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_svx.hxx" -#include <msashape3d.hxx> -#include <tools/poly.hxx> -#include <svditer.hxx> -#include <svx/svdobj.hxx> -#include <svtools/poolitem.hxx> -#include <svtools/itemset.hxx> -#include <svx/xfillit0.hxx> -#include <svx/xit.hxx> -#include <svx/xbtmpit.hxx> -#include <svx/xflclit.hxx> -#include <svx/svdopath.hxx> -#include <svx/svdogrp.hxx> -#include <svx/svdpage.hxx> -#include <svx/polysc3d.hxx> -#include <svx/svddef.hxx> -#include <svx/svx3ditems.hxx> -#include <svx/extrud3d.hxx> -#include <svx/xflbmtit.hxx> -#include <vcl/svapp.hxx> -#include <svx/xlnclit.hxx> - -#define ITEMVALUE(ItemSet,Id,Cast) ((const Cast&)(ItemSet).Get(Id)).GetValue() - -double SvxMSDffCustomShape3D::Fix16ToAngle( sal_Int32 nFixAngle ) -{ - double fAngle = 0.0; - if ( nFixAngle ) - { - fAngle = nFixAngle; - fAngle /= 65536.0; - } - return fAngle; -} - -SvxMSDffCustomShape3D::Transformation2D::Transformation2D( const DffPropSet& rPropSet, const Rectangle& rSnapRect ) : - aCenter( rSnapRect.Center() ) -{ - bParallel = ( rPropSet.GetPropertyValue( DFF_Prop_fc3DFillHarsh, 0 ) & 4 ) != 0; - if ( bParallel ) - { - fSkewAngle = Fix16ToAngle( rPropSet.GetPropertyValue( DFF_Prop_c3DSkewAngle, sal::static_int_cast< UINT32 >( -135 * 65536 ) ) ) * F_PI180; - nSkewAmount = rPropSet.GetPropertyValue( DFF_Prop_c3DSkewAmount, 50 ); - } - else - { - fZScreen = 0.0; - fViewPointOriginX = ((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DOriginX, 32768 )) * rSnapRect.GetWidth()) / 65536.0; - fViewPointOriginY = ((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DOriginY, (sal_uInt32)-32768 )) * rSnapRect.GetHeight()) / 65536.0; - fViewPoint.setX((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DXViewpoint, 1250000 )) / 360); // 360 emu = 0,01 mm - fViewPoint.setY((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DYViewpoint, (sal_uInt32)-1250000 )) / 360); - fViewPoint.setZ((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DZViewpoint, (sal_uInt32)-9000000 )) / 360); - } -} - -basegfx::B3DPolygon SvxMSDffCustomShape3D::Transformation2D::ApplySkewSettings( const basegfx::B3DPolygon& rPoly3D ) -{ - basegfx::B3DPolygon aRetval; - sal_uInt32 j; - - for ( j = 0L; j < rPoly3D.count(); j++ ) - { - const basegfx::B3DPoint aPoint(rPoly3D.getB3DPoint(j)); - const double fDepth(-( aPoint.getZ() * nSkewAmount ) / 100.0); - const basegfx::B3DPoint aNewPoint( - aPoint.getX() + (fDepth * cos( fSkewAngle )), - aPoint.getY() - ( fDepth * sin( fSkewAngle )), - aPoint.getZ()); - aRetval.append(aNewPoint); - } - - return aRetval; -} - -Point SvxMSDffCustomShape3D::Transformation2D::Transform2D( const basegfx::B3DPoint& rPoint3D ) -{ - Point aPoint2D; - if ( bParallel ) - { - aPoint2D.X() = (sal_Int32)rPoint3D.getX(); - aPoint2D.Y() = (sal_Int32)rPoint3D.getY(); - } - else - { - double fX = rPoint3D.getX() - fViewPointOriginX; - double fY = rPoint3D.getY() - fViewPointOriginY; - double f = ( fZScreen - fViewPoint.getZ() ) / ( rPoint3D.getZ() - fViewPoint.getZ() ); - aPoint2D.X() = (sal_Int32)(( fX - fViewPoint.getX() ) * f + fViewPoint.getX() + fViewPointOriginX ); - aPoint2D.Y() = (sal_Int32)(( fY - fViewPoint.getY() ) * f + fViewPoint.getY() + fViewPointOriginY ); - } - aPoint2D.Move( aCenter.X(), aCenter.Y() ); - return aPoint2D; -} - -basegfx::B3DPoint SvxMSDffCustomShape3D::Rotate( const basegfx::B3DPoint& rPoint, const double x, const double y, const double z ) -{ - basegfx::B3DPoint aRetval(rPoint); - basegfx::B3DPoint aPoint( rPoint ); - - // rotation z axis - aRetval.setX(aPoint.getX() * cos( z ) + aPoint.getY() * sin( z )); - aRetval.setY(-( aPoint.getX() * sin( z ) ) + aPoint.getY() * cos( z )); - - // rotation y axis - aPoint = aRetval; - aRetval.setX(aPoint.getX() * cos( y ) + aPoint.getZ() * sin( y )); - aRetval.setZ(-( aPoint.getX() * sin( y ) ) + aPoint.getZ() * cos( y )); - - // rotation x axis - aPoint = aRetval; - aRetval.setY(aPoint.getY() * cos( x ) + aPoint.getZ() * sin( x )); - aRetval.setZ(-( aPoint.getY() * sin( x ) ) + aPoint.getZ() * cos( x )); - - return aRetval; -} - -//basegfx::B3DPolyPolygon SvxMSDffCustomShape3D::Rotate( const basegfx::B3DPolyPolygon& rPolyPoly3D, const basegfx::B3DPoint& rOrigin, const double x, const double y, const double z ) -//{ -// basegfx::B3DPolyPolygon aRetval; -// sal_uInt32 i, j; -// -// for( i = 0L; i < rPolyPoly3D.count(); i++ ) -// { -// const basegfx::B3DPolygon aPoly3D(rPolyPoly3D.getB3DPolygon(i)); -// basegfx::B3DPolygon rNewPoly; -// -// for( j = 0L; j < aPoly3D.count(); j++ ) -// { -// basegfx::B3DPoint aPoint(aPoly3D.getB3DPoint(j)); -// -// aPoint -= rOrigin; -// aPoint = Rotate( aPoint, x, y, z ); -// aPoint += rOrigin; -// -// rNewPoly.append(aPoint); -// } -// -// aRetval.append(rNewPoly); -// } -// -// return aRetval; -//} - -SdrObject* SvxMSDffCustomShape3D::Create3DObject( const SdrObject* pObj, const DffPropSet& rPropSet, - SfxItemSet& aSet, Rectangle& rSnapRect, sal_uInt32 nSpFlags ) -{ - SdrObject* pRet = NULL; - std::vector< E3dCompoundObject* > aPlaceholderObjectList; - - double fExtrusionBackward = (double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DExtrudeBackward, 457200 )) / 360.0; // in emus - double fExtrusionForward = (double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DExtrudeForward, 0 )) / 360.0; - double fDepth = fExtrusionBackward - fExtrusionForward; - if ( fDepth < 1.0 ) - fDepth = 1.0; - ProjectionType eProjectionType( rPropSet.GetPropertyValue( DFF_Prop_fc3DFillHarsh, 0 ) & 4 ? PR_PARALLEL : PR_PERSPECTIVE ); - - // pObj Umwandeln in Szene mit 3D Objekt - E3dDefaultAttributes a3DDefaultAttr; - a3DDefaultAttr.SetDefaultLatheCharacterMode( TRUE ); - a3DDefaultAttr.SetDefaultExtrudeCharacterMode( TRUE ); - - E3dScene* pScene = new E3dPolyScene( a3DDefaultAttr ); - - sal_Bool bSceneHasObjects ( sal_False ); - sal_Bool bUseTwoFillStyles( sal_False ); - - MSO_3DRenderMode eRenderMode( (MSO_3DRenderMode)rPropSet.GetPropertyValue( DFF_Prop_c3DRenderMode, mso_FullRender ) ); - XFillStyle eFillStyle( ITEMVALUE( aSet, XATTR_FILLSTYLE, XFillStyleItem ) ); - pScene->SetMergedItem( Svx3DShadeModeItem( 0 ) ); - aSet.Put( Svx3DPercentDiagonalItem( 0 ) ); - aSet.Put( Svx3DTextureModeItem( 1 ) ); - if ( eRenderMode == mso_Wireframe ) - { - aSet.Put( XLineStyleItem( XLINE_SOLID ) ); - aSet.Put( XFillStyleItem ( XFILL_NONE ) ); - aSet.Put( Svx3DDoubleSidedItem( TRUE ) ); - } - else - { - aSet.Put( XLineStyleItem( XLINE_NONE ) ); - if ( eFillStyle == XFILL_NONE ) - aSet.Put( XFillStyleItem( XFILL_SOLID ) ); - else if ( ( eFillStyle == XFILL_BITMAP ) || ( eFillStyle == XFILL_GRADIENT ) ) - bUseTwoFillStyles = sal_True; - } - const SdrObject* pNext = NULL; - SdrObjListIter* pIter = NULL; - if ( pObj->IsGroupObject() ) - { - pIter = new SdrObjListIter( *pObj, IM_DEEPWITHGROUPS ); - if ( pIter->IsMore() ) - pNext = pIter->Next(); - } - else - pNext = pObj; - while ( pNext ) - { - const SfxItemSet& rNextItemSet = pNext->GetMergedItemSet(); - - sal_Bool bIsPlaceholderObject = (((XFillStyleItem&)rNextItemSet.Get( XATTR_FILLSTYLE )).GetValue() == XFILL_NONE ) - && (((XLineStyleItem&)rNextItemSet.Get( XATTR_LINESTYLE )).GetValue() == XLINE_NONE ); - - SdrObject* pNewObj = pNext->ConvertToPolyObj( FALSE, FALSE ); - SdrPathObj* pPath = PTR_CAST( SdrPathObj, pNewObj ); - if( pPath ) - { - const basegfx::B2DPolyPolygon aPolyPolygon(pPath->GetPathPoly()); - E3dCompoundObject* p3DObj = new E3dExtrudeObj( a3DDefaultAttr, aPolyPolygon, bUseTwoFillStyles ? 1 : fDepth ); - p3DObj->NbcSetLayer( pObj->GetLayer() ); - p3DObj->SetMergedItemSet( aSet ); - if ( bIsPlaceholderObject ) - aPlaceholderObjectList.push_back( p3DObj ); - else if ( bUseTwoFillStyles ) - { - Bitmap aFillBmp; - sal_Bool bFillBmpTile = ((XFillBmpTileItem&)p3DObj->GetMergedItem( XATTR_FILLBMP_TILE )).GetValue(); - if ( bFillBmpTile ) - { - const XFillBitmapItem& rBmpItm = (XFillBitmapItem&)p3DObj->GetMergedItem( XATTR_FILLBITMAP ); - const XOBitmap& rXOBmp = rBmpItm.GetBitmapValue(); - aFillBmp = rXOBmp.GetBitmap(); - Size aLogicalSize = aFillBmp.GetPrefSize(); - if ( aFillBmp.GetPrefMapMode() == MAP_PIXEL ) - aLogicalSize = Application::GetDefaultDevice()->PixelToLogic( aLogicalSize, MAP_100TH_MM ); - else - aLogicalSize = OutputDevice::LogicToLogic( aLogicalSize, aFillBmp.GetPrefMapMode(), MAP_100TH_MM ); - aLogicalSize.Width() *= 5; ;// :-( nice scaling, look at engine3d/obj3d.cxx - aLogicalSize.Height() *= 5; - aFillBmp.SetPrefSize( aLogicalSize ); - aFillBmp.SetPrefMapMode( MAP_100TH_MM ); - p3DObj->SetMergedItem( XFillBitmapItem( String(), aFillBmp ) ); - } - else - { - Rectangle aBoundRect( PolyPolygon(aPolyPolygon).GetBoundRect() ); - if ( rSnapRect != aBoundRect ) - { - const XFillBitmapItem& rBmpItm = (XFillBitmapItem&)p3DObj->GetMergedItem( XATTR_FILLBITMAP ); - const XOBitmap& rXOBmp = rBmpItm.GetBitmapValue(); - aFillBmp = rXOBmp.GetBitmap(); - Size aBmpSize( aFillBmp.GetSizePixel() ); - double fXScale = (double)aBoundRect.GetWidth() / (double)rSnapRect.GetWidth(); - double fYScale = (double)aBoundRect.GetHeight() / (double)rSnapRect.GetHeight(); - - Point aPt( (sal_Int32)( (double)( aBoundRect.Left() - rSnapRect.Left() )* (double)aBmpSize.Width() / (double)rSnapRect.GetWidth() ), - (sal_Int32)( (double)( aBoundRect.Top() - rSnapRect.Top() ) * (double)aBmpSize.Height() / (double)rSnapRect.GetHeight() ) ); - Size aSize( (sal_Int32)( aBmpSize.Width() * fXScale ), - (sal_Int32)( aBmpSize.Height() * fYScale ) ); - Rectangle aCropRect( aPt, aSize ); - aFillBmp.Crop( aCropRect ); - p3DObj->SetMergedItem( XFillBitmapItem( String(), aFillBmp ) ); - } - } - pScene->Insert3DObj( p3DObj ); - p3DObj = new E3dExtrudeObj( a3DDefaultAttr, pPath->GetPathPoly(), fDepth ); - p3DObj->NbcSetLayer( pObj->GetLayer() ); - p3DObj->SetMergedItemSet( aSet ); - p3DObj->SetMergedItem( XFillStyleItem( XFILL_SOLID ) ); - p3DObj->SetMergedItem( Svx3DCloseFrontItem( sal_False ) ); - p3DObj->SetMergedItem( Svx3DCloseBackItem( sal_False ) ); - pScene->Insert3DObj( p3DObj ); - p3DObj = new E3dExtrudeObj( a3DDefaultAttr, pPath->GetPathPoly(), 1 ); - p3DObj->NbcSetLayer( pObj->GetLayer() ); - p3DObj->SetMergedItemSet( aSet ); - basegfx::B3DHomMatrix aFrontTransform( p3DObj->GetTransform() ); - aFrontTransform.translate( 0.0, 0.0, fDepth ); - p3DObj->NbcSetTransform( aFrontTransform ); - if ( ( eFillStyle == XFILL_BITMAP ) && !aFillBmp.IsEmpty() ) - p3DObj->SetMergedItem( XFillBitmapItem( String(), aFillBmp ) ); - } - else if ( eFillStyle == XFILL_NONE ) - { - XLineColorItem& rLineColor = (XLineColorItem&)p3DObj->GetMergedItem( XATTR_LINECOLOR ); - p3DObj->SetMergedItem( XFillColorItem( String(), rLineColor.GetColorValue() ) ); - p3DObj->SetMergedItem( Svx3DDoubleSidedItem( sal_True ) ); - p3DObj->SetMergedItem( Svx3DCloseFrontItem( sal_False ) ); - p3DObj->SetMergedItem( Svx3DCloseBackItem( sal_False ) ); - } - pScene->Insert3DObj( p3DObj ); - bSceneHasObjects = sal_True; - } - SdrObject::Free( pNewObj ); - pNext = NULL; - if ( pIter && pIter->IsMore() ) - pNext = pIter->Next(); - } - delete pIter; - - if ( bSceneHasObjects ) // is the SdrObject properly converted - { - // then we can change the return value - pRet = pScene; - - // Kameraeinstellungen, Perspektive ... - Camera3D& rCamera = (Camera3D&)pScene->GetCamera(); - const basegfx::B3DRange& rVolume = pScene->GetBoundVolume(); - pScene->NbcSetSnapRect( rSnapRect ); - - // InitScene replacement - double fW(rVolume.getWidth()); - double fH(rVolume.getHeight()); - - rCamera.SetAutoAdjustProjection( FALSE ); - rCamera.SetViewWindow( -fW / 2, - fH / 2, fW, fH); - basegfx::B3DPoint aLookAt( 0.0, 0.0, 0.0 ); - basegfx::B3DPoint aCamPos( 0.0, 0.0, 100.0 ); - - rCamera.SetDefaults( basegfx::B3DPoint( 0.0, 0.0, 100.0 ), aLookAt, 100.0 ); - rCamera.SetPosAndLookAt( aCamPos, aLookAt ); - rCamera.SetFocalLength( 1.0 ); - rCamera.SetProjection( eProjectionType ); - pScene->SetCamera( rCamera ); - pScene->SetRectsDirty(); - - double fViewPointOriginX = ((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DOriginX, 32768 )) * rSnapRect.GetWidth()) / 65536.0; - double fViewPointOriginY = ((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DOriginY, (sal_uInt32)-32768 )) * rSnapRect.GetHeight()) / 65536.0; - - basegfx::B3DHomMatrix aNewTransform( pScene->GetTransform() ); - Point aCenter( rSnapRect.Center() ); - aNewTransform.translate( -aCenter.X(), aCenter.Y(), -pScene->GetBoundVolume().getDepth() ); - double fXRotate = Fix16ToAngle( rPropSet.GetPropertyValue( DFF_Prop_c3DXRotationAngle, 0 ) ); - double fYRotate = Fix16ToAngle( rPropSet.GetPropertyValue( DFF_Prop_c3DYRotationAngle, 0 ) ); - double fZRotate = Fix16ToAngle( rPropSet.GetPropertyValue( DFF_Prop_Rotation, 0 ) ); - if ( fZRotate != 0.0 ) - { - aNewTransform.rotate(0.0, 0.0, -fZRotate * F_PI180 ); - } - if ( nSpFlags & SP_FFLIPH ) - { - aNewTransform.scale( -1.0, 0.0, 0.0 ); - } - if ( nSpFlags & SP_FFLIPV ) - { - aNewTransform.scale(0.0, -1.0, 0.0 ); - } - if( fYRotate != 0.0 ) - { - aNewTransform.rotate( 0.0, -fYRotate * F_PI180, 0.0 ); - } - if( fXRotate != 0.0 ) - { - aNewTransform.rotate( -fXRotate * F_PI180, 0.0, 0.0 ); - } - if ( eProjectionType == PR_PARALLEL ) - { - sal_Int32 nSkewAmount = rPropSet.GetPropertyValue( DFF_Prop_c3DSkewAmount, 50 ); - if ( nSkewAmount ) - { - sal_Int32 nSkewAngle = ((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DSkewAngle, sal::static_int_cast< UINT32 >( -135 * 65536 ) ) ) >> 16; - - double fAlpha( (double)nSkewAngle * F_PI180 ); - double fInvTanBeta( (double)nSkewAmount / 100.0 ); - if(fInvTanBeta) - { - aNewTransform.shearXY( - fInvTanBeta * cos(fAlpha), - fInvTanBeta * sin(fAlpha)); - } - } - } - else - { - aNewTransform.translate( -fViewPointOriginX, fViewPointOriginY, 0.0 ); - // now set correct camera position -// double fViewPointOriginX = ((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DOriginX, 32768 )) * rSnapRect.GetWidth()) / 65536.0; -// double fViewPointOriginY = ((double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DOriginY, (sal_uInt32)-32768 )) * rSnapRect.GetHeight()) / 65536.0; - double fViewPointX = (double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DXViewpoint, 1250000 )) / 360; - double fViewPointY = (double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DYViewpoint,(sal_uInt32)-1250000 )) / 360; - double fViewPointZ = (double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DZViewpoint,(sal_uInt32)-9000000 )) / 360; - - basegfx::B3DPoint aNewLookAt( fViewPointX, -fViewPointY, 0 ); - basegfx::B3DPoint aNewCamPos( fViewPointX, -fViewPointY, -fViewPointZ ); - rCamera.SetPosAndLookAt( aNewCamPos, aNewLookAt ); - pScene->SetCamera( rCamera ); - } - pScene->NbcSetTransform( aNewTransform ); - - /////////// - // light // - /////////// - double fAmbientIntensity = ((double)rPropSet.GetPropertyValue( DFF_Prop_c3DAmbientIntensity, 22178 )) / 65536.0; - - sal_Int32 nLightX = ((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DKeyX, 50000 )) / 360; - sal_Int32 nLightY = - ((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DKeyY, 0 )) / 360; - sal_Int32 nLightZ = - ((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DKeyZ, 10000 )) / 360; - if ( !nLightZ ) - nLightZ = 1; - double fLightIntensity = ((double)rPropSet.GetPropertyValue( DFF_Prop_c3DKeyIntensity, 43712 )) / 65536.0; -// sal_Bool bLightHarsh = ( rPropSet.GetPropertyValue( DFF_Prop_fc3DFillHarsh, 0 ) & 2 ) != 0; - - sal_Int32 nLight2X = ((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DFillX, (sal_uInt32)-50000 )) / 360; - sal_Int32 nLight2Y = - ((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DFillY, 0 )) / 360; - sal_Int32 nLight2Z = - ((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DFillZ, 10000 )) / 360; - if ( !nLight2Z ) - nLight2Z = -1; - double fLight2Intensity = ((double)rPropSet.GetPropertyValue( DFF_Prop_c3DFillIntensity, 43712 )) / 65536.0; -// sal_Bool bLight2Harsh = ( rPropSet.GetPropertyValue( DFF_Prop_fc3DFillHarsh, 0 ) & 1 ) != 0; -// sal_Bool bLightFace = ( rPropSet.GetPropertyValue( DFF_Prop_fc3DLightFace, 0 ) & 1 ) != 0; - - sal_uInt16 nAmbientColor = (sal_uInt16)( fAmbientIntensity * 255.0 ); - if ( nAmbientColor > 255 ) - nAmbientColor = 255; - Color aGlobalAmbientColor( (sal_uInt8)nAmbientColor, (sal_uInt8)nAmbientColor, (sal_uInt8)nAmbientColor ); - pScene->SetMergedItem( Svx3DAmbientcolorItem( aGlobalAmbientColor ) ); - - sal_uInt8 nSpotLight1 = (sal_uInt8)( fLightIntensity * 255.0 ); - basegfx::B3DVector aSpotLight1( (double)nLightX, (double)nLightY, (double)nLightZ ); - aSpotLight1.normalize(); - pScene->SetMergedItem( Svx3DLightOnOff1Item( sal_True ) ); - Color aAmbientSpot1Color( nSpotLight1, nSpotLight1, nSpotLight1 ); - pScene->SetMergedItem( Svx3DLightcolor1Item( aAmbientSpot1Color ) ); - pScene->SetMergedItem( Svx3DLightDirection1Item( aSpotLight1 ) ); - - sal_uInt8 nSpotLight2 = (sal_uInt8)( fLight2Intensity * 255.0 ); - basegfx::B3DVector aSpotLight2( (double)nLight2X, (double)nLight2Y, (double)nLight2Z ); - aSpotLight2.normalize(); - pScene->SetMergedItem( Svx3DLightOnOff2Item( sal_True ) ); - Color aAmbientSpot2Color( nSpotLight2, nSpotLight2, nSpotLight2 ); - pScene->SetMergedItem( Svx3DLightcolor2Item( aAmbientSpot2Color ) ); - pScene->SetMergedItem( Svx3DLightDirection2Item( aSpotLight2 ) ); - - if ( nLightX || nLightY ) - { - sal_uInt8 nSpotLight3 = 70; - basegfx::B3DVector aSpotLight3( 0.0, 0.0, 1.0 ); - pScene->SetMergedItem( Svx3DLightOnOff3Item( sal_True ) ); - Color aAmbientSpot3Color( nSpotLight3, nSpotLight3, nSpotLight3 ); - pScene->SetMergedItem( Svx3DLightcolor3Item( aAmbientSpot3Color ) ); - pScene->SetMergedItem( Svx3DLightDirection3Item( aSpotLight3 ) ); - } - - double fSpecular = ((double)rPropSet.GetPropertyValue( DFF_Prop_c3DSpecularAmt, 0 )) / 65536.0; -// double fDiffuse = ((double)rPropSet.GetPropertyValue( DFF_Prop_c3DDiffuseAmt, 0 )) / 65536.0; -// double fShininess = ((double)rPropSet.GetPropertyValue( DFF_Prop_c3DShininess, 0 )) / 65536.0; - - sal_uInt16 nItensity = 25; - Color aSpecularCol( COL_BLACK ); - if ( fSpecular == 0.0 ) - { - aSpecularCol = Color( 51, 51, 51 ); - } - else if ( fSpecular > 1.2 ) - { - aSpecularCol = Color( 128, 128, 128 ); - } - pScene->SetMergedItem( Svx3DMaterialSpecularItem( aSpecularCol ) ); - pScene->SetMergedItem( Svx3DMaterialSpecularIntensityItem( nItensity ) ); - - pScene->SetModel( pObj->GetModel() ); - pRet->SetSnapRect( CalculateNewSnapRect( rSnapRect, rPropSet ) ); - - // removing placeholder objects - std::vector< E3dCompoundObject* >::iterator aObjectListIter( aPlaceholderObjectList.begin() ); - while ( aObjectListIter != aPlaceholderObjectList.end() ) - { - pScene->Remove3DObj( *aObjectListIter ); - delete *aObjectListIter++; - } - } - else - delete pScene; - return pRet; -} - -Rectangle SvxMSDffCustomShape3D::CalculateNewSnapRect( const Rectangle& rOriginalSnapRect, const DffPropSet& rPropSet ) -{ - const Point aCenter( rOriginalSnapRect.Center() ); - //double fExtrusionBackward = (double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DExtrudeBackward, 457200 )) / 360.0; - double fExtrusionForward = (double)((sal_Int32)rPropSet.GetPropertyValue( DFF_Prop_c3DExtrudeForward, 0 )) / 360.0; - sal_uInt32 i; - - // creating initial bound volume ( without rotation. skewing.and camera ) - basegfx::B3DPolygon aBoundVolume; - const Polygon aPolygon( rOriginalSnapRect ); - - for ( i = 0L; i < 4L; i++ ) - { - aBoundVolume.append(basegfx::B3DPoint( - aPolygon[ (sal_uInt16)i ].X() - aCenter.X(), - aPolygon[ (sal_uInt16)i ].Y() - aCenter.Y(), - fExtrusionForward)); - } - - for ( ; i < 8L; i++ ) - { - aBoundVolume.append(basegfx::B3DPoint( - aPolygon[ (sal_uInt16)i ].X() - aCenter.X(), - aPolygon[ (sal_uInt16)i ].Y() - aCenter.Y(), - fExtrusionForward)); - } - - basegfx::B3DPoint aRotateCenter; - aRotateCenter.setX(0.0); - aRotateCenter.setY(0.0); - aRotateCenter.setZ(rPropSet.GetPropertyValue( DFF_Prop_c3DRotationCenterZ, 0 ) / 360); - - // double XCenterInGUnits = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationCenterX, 0 ); - // double YCenterInGUnits = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationCenterY, 0 ); - - // sal_Int32 nRotationXAxisInProz = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationAxisX, 100 ); - // sal_Int32 nRotationYAxisInProz = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationAxisY, 0 ); - // sal_Int32 nRotationZAxisInProz = rPropSet.GetPropertyValue( DFF_Prop_c3DRotationAxisZ, 0 ); - - double fXRotate = Fix16ToAngle( rPropSet.GetPropertyValue( DFF_Prop_c3DXRotationAngle, 0 ) ) * F_PI180; - double fYRotate = Fix16ToAngle( rPropSet.GetPropertyValue( DFF_Prop_c3DYRotationAngle, 0 ) ) * F_PI180; - double fZRotate = -Fix16ToAngle( rPropSet.GetPropertyValue( DFF_Prop_Rotation, 0 ) ) * F_PI180; - // double fRotationAngle = Fix16ToAngle( rPropSet.GetPropertyValue( DFF_Prop_c3DRotationAngle, 0 ) ); // * F_PI180; - - for( i = 0; i < 8; i++ ) // rotating bound volume - { - basegfx::B3DPoint aPoint(aBoundVolume.getB3DPoint(i)); - aPoint -= aRotateCenter; - aPoint = Rotate( aPoint, fXRotate, fYRotate, fZRotate ); - aPoint += aRotateCenter; - aBoundVolume.setB3DPoint(i, aPoint); - } - - Transformation2D aTransformation2D( rPropSet, rOriginalSnapRect ); - if ( aTransformation2D.IsParallel() ) - { - aBoundVolume = aTransformation2D.ApplySkewSettings( aBoundVolume ); - } - - Polygon aTransformed( 8 ); - for ( i = 0L; i < 8L; i++ ) - { - aTransformed[ (sal_uInt16)i ] = aTransformation2D.Transform2D( aBoundVolume.getB3DPoint(i) ); - } - - return aTransformed.GetBoundRect(); -} - -// eof |