Author: alg Date: Wed Aug 22 14:17:43 2012 New Revision: 1376067 URL: http://svn.apache.org/viewvc?rev=1376067&view=rev Log: #120569# Corrected 3D object creations
Modified: incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape3d.cxx Modified: incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape3d.cxx URL: http://svn.apache.org/viewvc/incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape3d.cxx?rev=1376067&r1=1376066&r2=1376067&view=diff ============================================================================== --- incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape3d.cxx (original) +++ incubator/ooo/trunk/main/svx/source/customshapes/EnhancedCustomShape3d.cxx Wed Aug 22 14:17:43 2012 @@ -393,7 +393,9 @@ SdrObject* EnhancedCustomShape3d::Create } Rectangle aBoundRect2d; - SdrObjListIter aIter( *pShape2d, IM_DEEPWITHGROUPS ); + SdrObjListIter aIter( *pShape2d, IM_DEEPNOGROUPS ); + const bool bMultipleSubObjects(aIter.Count() > 1); + while( aIter.IsMore() ) { const SdrObject* pNext = aIter.Next(); @@ -405,20 +407,35 @@ SdrObject* EnhancedCustomShape3d::Create if ( pNext->ISA( SdrPathObj ) ) { - const SfxItemSet& rSet = pNext->GetMergedItemSet(); - const drawinglayer::attribute::SdrLineAttribute aLine( - drawinglayer::primitive2d::createNewSdrLineAttribute(rSet)); - bool bNeedToConvertToContour(0.0 <= aLine.getWidth() || 0.0 != aLine.getFullDotDashLen()); + const SfxItemSet& rSet = pNext->GetMergedItemSet(); + bool bNeedToConvertToContour(false); - if(!bNeedToConvertToContour && !aLine.isDefault()) + // do conversion only for single line objects; for all others a fill and a + // line object get created. When we have fill, we want no line. That line has + // always been there, but since it was never converted to contour, it kept + // invisible (all this 'hidden' logic should be migrated to primitives). + if(!bMultipleSubObjects) { - const drawinglayer::attribute::SdrLineStartEndAttribute aLineStartEnd( - drawinglayer::primitive2d::createNewSdrLineStartEndAttribute(rSet, aLine.getWidth())); + const XFillStyle eStyle(((XFillStyleItem&)(rSet.Get(XATTR_FILLSTYLE))).GetValue()); - if((aLineStartEnd.getStartWidth() && aLineStartEnd.isStartActive()) - || (aLineStartEnd.getEndWidth() && aLineStartEnd.isEndActive())) + if(XFILL_NONE == eStyle) { - bNeedToConvertToContour = true; + const drawinglayer::attribute::SdrLineAttribute aLine( + drawinglayer::primitive2d::createNewSdrLineAttribute(rSet)); + + bNeedToConvertToContour = (0.0 < aLine.getWidth() || 0.0 != aLine.getFullDotDashLen()); + + if(!bNeedToConvertToContour && !aLine.isDefault()) + { + const drawinglayer::attribute::SdrLineStartEndAttribute aLineStartEnd( + drawinglayer::primitive2d::createNewSdrLineStartEndAttribute(rSet, aLine.getWidth())); + + if((aLineStartEnd.getStartWidth() && aLineStartEnd.isStartActive()) + || (aLineStartEnd.getEndWidth() && aLineStartEnd.isEndActive())) + { + bNeedToConvertToContour = true; + } + } } } @@ -434,12 +451,23 @@ SdrObject* EnhancedCustomShape3d::Create if(aPolyPoly.isClosed()) { // correct item properties from line to fill style - aLocalSet.Put(XLineWidthItem(0)); - aLocalSet.Put(XLineStyleItem(XLINE_NONE)); - aLocalSet.Put(XFillColorItem(XubString(), ((const XLineColorItem&)(aLocalSet.Get(XATTR_LINECOLOR))).GetColorValue())); - aLocalSet.Put(XFillStyleItem(XFILL_SOLID)); - aLocalSet.Put(XFillTransparenceItem(((const XLineTransparenceItem&)(aLocalSet.Get(XATTR_LINETRANSPARENCE))).GetValue())); - aLocalFillStyle = XFILL_SOLID; + if(eShadeMode == drawing::ShadeMode_DRAFT) + { + // for draft, create wireframe with fixed line width + aLocalSet.Put(XLineStyleItem(XLINE_SOLID)); + aLocalSet.Put(XLineWidthItem(40)); + aLocalFillStyle = XFILL_NONE; + } + else + { + // switch from line to fill, copy line attr to fill attr (color, transparence) + aLocalSet.Put(XLineWidthItem(0)); + aLocalSet.Put(XLineStyleItem(XLINE_NONE)); + aLocalSet.Put(XFillColorItem(XubString(), ((const XLineColorItem&)(aLocalSet.Get(XATTR_LINECOLOR))).GetColorValue())); + aLocalSet.Put(XFillStyleItem(XFILL_SOLID)); + aLocalSet.Put(XFillTransparenceItem(((const XLineTransparenceItem&)(aLocalSet.Get(XATTR_LINETRANSPARENCE))).GetValue())); + aLocalFillStyle = XFILL_SOLID; + } } else {