[Libreoffice-commits] core.git: svx/source
Armin Le Grand
alg at apache.org
Mon Sep 9 11:57:07 PDT 2013
svx/source/customshapes/EnhancedCustomShape3d.cxx | 40 ++++++++++++++--------
1 file changed, 27 insertions(+), 13 deletions(-)
New commits:
commit e79f590e94dce54b54cd50b9cc851785b5221cb0
Author: Armin Le Grand <alg at apache.org>
Date: Mon Sep 9 12:23:48 2013 +0000
Resolves: #i122777# Corrected texture mapping for 3D CustomShapes
(cherry picked from commit d747eabca2eab1032fd16257c9a502eaaa98c5d4)
Change-Id: I19139af9e9530214d581720963da6739afd1b987
diff --git a/svx/source/customshapes/EnhancedCustomShape3d.cxx b/svx/source/customshapes/EnhancedCustomShape3d.cxx
index 7ab4577..c2d5187 100644
--- a/svx/source/customshapes/EnhancedCustomShape3d.cxx
+++ b/svx/source/customshapes/EnhancedCustomShape3d.cxx
@@ -364,7 +364,11 @@ SdrObject* EnhancedCustomShape3d::Create3DObject( const SdrObject* pShape2d, con
// #116336#
// If shapes are mirrored once (mirroring two times correct geometry again)
// double-sided at the object and two-sided-lighting at the scene need to be set.
- if((bIsMirroredX && !bIsMirroredY) || (!bIsMirroredX && bIsMirroredY))
+ //
+ // #i122777# Also use double sided for two fill styles since there several 3d objects get
+ // created with a depth of 0; one of them is the backside which needs double-sided to
+ // get visible
+ if(bUseTwoFillStyles || (bIsMirroredX && !bIsMirroredY) || (!bIsMirroredX && bIsMirroredY))
{
aSet.Put( Svx3DDoubleSidedItem( sal_True ) );
pScene->GetProperties().SetObjectItem( Svx3DTwoSidedLightingItem( sal_True ) );
@@ -483,7 +487,9 @@ SdrObject* EnhancedCustomShape3d::Create3DObject( const SdrObject* pShape2d, con
const Rectangle aBoundRect(basegfx::fround(aTempRange.getMinX()), basegfx::fround(aTempRange.getMinY()), basegfx::fround(aTempRange.getMaxX()), basegfx::fround(aTempRange.getMaxY()));
aBoundRect2d.Union( aBoundRect );
- E3dCompoundObject* p3DObj = new E3dExtrudeObj( a3DDefaultAttr, aPolyPoly, bUseTwoFillStyles ? 10 : fDepth );
+ // #i122777# depth 0 is okay for planes when using double-sided
+ E3dCompoundObject* p3DObj = new E3dExtrudeObj( a3DDefaultAttr, aPolyPoly, bUseTwoFillStyles ? 0 : fDepth );
+
p3DObj->NbcSetLayer( pShape2d->GetLayer() );
p3DObj->SetMergedItemSet( aLocalSet );
if ( bIsPlaceholderObject )
@@ -496,16 +502,21 @@ SdrObject* EnhancedCustomShape3d::Create3DObject( const SdrObject* pShape2d, con
{
const XFillBitmapItem& rBmpItm = (XFillBitmapItem&)p3DObj->GetMergedItem(XATTR_FILLBITMAP);
aFillBmp = rBmpItm.GetGraphicObject().GetGraphic().GetBitmapEx();
- 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(), Graphic(aFillBmp)));
+
+ // #i122777# old adaption of FillStyle bitmap size to 5-times the original size; this is not needed
+ // anymore and was used in old times to male the fill look better when converting to 3D. Removed
+ // from regular 3D objects for some time, also needs to be removed from CustomShapes
+ //
+ //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(), Graphic(aFillBmp)));
}
else
{
@@ -536,7 +547,10 @@ SdrObject* EnhancedCustomShape3d::Create3DObject( const SdrObject* pShape2d, con
p3DObj->SetMergedItem( Svx3DCloseFrontItem( sal_False ) );
p3DObj->SetMergedItem( Svx3DCloseBackItem( sal_False ) );
pScene->Insert3DObj( p3DObj );
- p3DObj = new E3dExtrudeObj( a3DDefaultAttr, aPolyPoly, 10 );
+
+ // #i122777# depth 0 is okay for planes when using double-sided
+ p3DObj = new E3dExtrudeObj( a3DDefaultAttr, aPolyPoly, 0 );
+
p3DObj->NbcSetLayer( pShape2d->GetLayer() );
p3DObj->SetMergedItemSet( aLocalSet );
More information about the Libreoffice-commits
mailing list