summaryrefslogtreecommitdiff
path: root/svx/source/unodraw/unoshap2.cxx
diff options
context:
space:
mode:
authorArmin Le Grand <Armin.Le.Grand@cib.de>2018-06-28 19:48:59 +0200
committerArmin Le Grand <Armin.Le.Grand@cib.de>2018-07-02 18:03:44 +0200
commit36bade04d3780bc54c51b46bb0b63e69789658a5 (patch)
treec4465bf33aa2cda65511a2c094688522e9c9b43a /svx/source/unodraw/unoshap2.cxx
parent942f1056b51e53358d42ff8da8a1bbdce9ba5303 (diff)
tdf106792 Get rid of SvxShapePolyPolygonBezier
SvxShapePolyPolygonBezier was an implementation for the UNO Shape group of polygons with bezier parts (filled/unfilled/ closed/open), e.g. com.sun.star.drawing.OpenBezierShape. It was differing from SvxShapePolyPolygon just by supporting drawing::PolyPolygonBezierCoords instead of the simple drawing::PointSequenceSequence and some details. This leads to problems - the ShapeType *does change* e.g. when you edit a non-bezier Shape in Draw/Impress and change parts to curve (also when closing, see ShapeTypes above). This is why SvxShape::getShapeType() already detects this identifier by using thze internal ShapePolyType (e.g. OBJ_PATHLINE). So there is no reason to have two separate UNO API imple- mentations for sthe same type of SvxShape at all. Get rid of the extra one and unify this implementation detail. Also cleaned up double basegfx tooling for conversions of UNO API Poly/bezier data and B2DPolygon. Adapted test for "tdf113946.docx", see comment there. Adapted test for "tdf90097.rtf", see comment there. Also needed to use the Linux values, also check comment there. Adapted test for "tdf105127.docx", see comment there. Adapted test for "tdf85232.docx", see comment there. Had to fic a problem with test for "tdf96674.docx"- the adaption of the RotateAngle for line objects goes havoc together with the UNO API when scaling is involved. That old aGeo rotate stuff just kills the existing rotation due to numerical inprecise stuff. The UNP API - in trying not just to apply a rptation, but manipulate the existing one then goes wrong in not re-getting the current rotation value anymore. ARGH! This is the original reason for the ols tdf#96674 task - i doubt that the additional code to make a line not exactly hor/ver is needed. Checked and it is not needed, thus removed the change from tdf#96674 in shape.cxx. Change-Id: I2bb8d4cfe33fee3671f3dad60e5c18609a394f9d Reviewed-on: https://gerrit.libreoffice.org/56614 Tested-by: Jenkins Reviewed-by: Armin Le Grand <Armin.Le.Grand@cib.de>
Diffstat (limited to 'svx/source/unodraw/unoshap2.cxx')
-rw-r--r--svx/source/unodraw/unoshap2.cxx323
1 files changed, 112 insertions, 211 deletions
diff --git a/svx/source/unodraw/unoshap2.cxx b/svx/source/unodraw/unoshap2.cxx
index 9de0da13904f..4aad6e1ec6ee 100644
--- a/svx/source/unodraw/unoshap2.cxx
+++ b/svx/source/unodraw/unoshap2.cxx
@@ -29,6 +29,7 @@
#include <com/sun/star/style/ParagraphAdjust.hpp>
#include <com/sun/star/drawing/PointSequenceSequence.hpp>
#include <com/sun/star/drawing/PointSequence.hpp>
+#include <com/sun/star/drawing/PolygonKind.hpp>
#include <com/sun/star/graphic/XGraphic.hpp>
#include <o3tl/any.hxx>
#include <tools/urlobj.hxx>
@@ -59,7 +60,7 @@
#include <basegfx/polygon/b2dpolygon.hxx>
#include <basegfx/point/b2dpoint.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
-#include <basegfx/utils/unotools.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
#include <com/sun/star/awt/XBitmap.hpp>
#include <svx/svdograf.hxx>
#include <sfx2/docfile.hxx>
@@ -916,59 +917,50 @@ SvxShapeCircle::~SvxShapeCircle() throw()
{
}
-SvxShapePolyPolygon::SvxShapePolyPolygon( SdrObject* pObj , drawing::PolygonKind eNew )
-: SvxShapeText( pObj, getSvxMapProvider().GetMap(SVXMAP_POLYPOLYGON), getSvxMapProvider().GetPropertySet(SVXMAP_POLYPOLYGON, SdrObject::GetGlobalDrawObjectItemPool()) )
-, mePolygonKind( eNew )
+//////////////////////////////////////////////////////////////////////////////
+
+SvxShapePolyPolygon::SvxShapePolyPolygon(
+ SdrObject* pObj)
+: SvxShapeText(
+ pObj,
+ getSvxMapProvider().GetMap(SVXMAP_POLYPOLYGON),
+ getSvxMapProvider().GetPropertySet(SVXMAP_POLYPOLYGON, SdrObject::GetGlobalDrawObjectItemPool()))
{
}
-
SvxShapePolyPolygon::~SvxShapePolyPolygon() throw()
{
}
-basegfx::B2DPolyPolygon ImplSvxPointSequenceSequenceToB2DPolyPolygon( const drawing::PointSequenceSequence* pOuterSequence) throw()
+bool SvxShapePolyPolygon::setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const css::uno::Any& rValue )
{
- basegfx::B2DPolyPolygon aRetval;
-
- // get pointer to internal sequences
- const drawing::PointSequence* pInnerSequence = pOuterSequence->getConstArray();
- const drawing::PointSequence* pInnerSeqEnd = pInnerSequence + pOuterSequence->getLength();
-
- for(;pInnerSequence != pInnerSeqEnd; ++pInnerSequence)
+ switch( pProperty->nWID )
{
- // prepare new polygon
- basegfx::B2DPolygon aNewPolygon;
-
- // get pointer to arrays
- const awt::Point* pArray = pInnerSequence->getConstArray();
- const awt::Point* pArrayEnd = pArray + pInnerSequence->getLength();
-
- for(;pArray != pArrayEnd;++pArray)
+ case OWN_ATTR_VALUE_POLYPOLYGONBEZIER:
+ {
+ if( auto s = o3tl::tryAccess<drawing::PolyPolygonBezierCoords>(rValue) )
{
- aNewPolygon.append(basegfx::B2DPoint(pArray->X, pArray->Y));
- }
+ basegfx::B2DPolyPolygon aNewPolyPolygon(
+ basegfx::utils::UnoPolyPolygonBezierCoordsToB2DPolyPolygon(*s));
- // check for closed state flag
- basegfx::utils::checkClosed(aNewPolygon);
+ // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
+ ForceMetricToItemPoolMetric(aNewPolyPolygon);
- // add new subpolygon
- aRetval.append(aNewPolygon);
+ SetPolygon(aNewPolyPolygon);
+ return true;
+ }
+ break;
}
-
- return aRetval;
-}
-
-
-bool SvxShapePolyPolygon::setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const css::uno::Any& rValue )
-{
- switch( pProperty->nWID )
- {
case OWN_ATTR_VALUE_POLYPOLYGON:
{
if( auto s = o3tl::tryAccess<drawing::PointSequenceSequence>(rValue) )
{
- basegfx::B2DPolyPolygon aNewPolyPolygon(ImplSvxPointSequenceSequenceToB2DPolyPolygon(s));
+ basegfx::B2DPolyPolygon aNewPolyPolygon(
+ basegfx::utils::UnoPointSequenceSequenceToB2DPolyPolygon(*s));
+
+ // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
+ ForceMetricToItemPoolMetric(aNewPolyPolygon);
+
SetPolygon(aNewPolyPolygon);
return true;
}
@@ -976,7 +968,10 @@ bool SvxShapePolyPolygon::setPropertyValueImpl( const OUString& rName, const Sfx
}
case OWN_ATTR_BASE_GEOMETRY:
{
- if( auto s = o3tl::tryAccess<drawing::PointSequenceSequence>(rValue) )
+ drawing::PointSequenceSequence aPointSequenceSequence;
+ drawing::PolyPolygonBezierCoords aPolyPolygonBezierCoords;
+
+ if( rValue >>= aPointSequenceSequence)
{
if( HasSdrObject() )
{
@@ -984,7 +979,7 @@ bool SvxShapePolyPolygon::setPropertyValueImpl( const OUString& rName, const Sfx
basegfx::B2DHomMatrix aNewHomogenMatrix;
GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
- aNewPolyPolygon = ImplSvxPointSequenceSequenceToB2DPolyPolygon(s);
+ aNewPolyPolygon = basegfx::utils::UnoPointSequenceSequenceToB2DPolyPolygon(aPointSequenceSequence);
// tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
// Need to adapt aNewPolyPolygon from 100thmm to app-specific
@@ -994,6 +989,23 @@ bool SvxShapePolyPolygon::setPropertyValueImpl( const OUString& rName, const Sfx
}
return true;
}
+ else if( rValue >>= aPolyPolygonBezierCoords)
+ {
+ if( HasSdrObject() )
+ {
+ basegfx::B2DPolyPolygon aNewPolyPolygon;
+ basegfx::B2DHomMatrix aNewHomogenMatrix;
+
+ GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
+ aNewPolyPolygon = basegfx::utils::UnoPolyPolygonBezierCoordsToB2DPolyPolygon(aPolyPolygonBezierCoords);
+
+ // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
+ ForceMetricToItemPoolMetric(aNewPolyPolygon);
+
+ GetSdrObject()->TRSetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
+ }
+ return true;
+ }
break;
}
case OWN_ATTR_VALUE_POLYGON:
@@ -1015,8 +1027,12 @@ bool SvxShapePolyPolygon::setPropertyValueImpl( const OUString& rName, const Sfx
// check for closed state flag
basegfx::utils::checkClosed(aNewPolygon);
+ // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
+ basegfx::B2DPolyPolygon aNewPolyPolygon(aNewPolygon);
+ ForceMetricToItemPoolMetric(aNewPolyPolygon);
+
// set polygon
- SetPolygon(basegfx::B2DPolyPolygon(aNewPolygon));
+ SetPolygon(aNewPolyPolygon);
return true;
}
break;
@@ -1028,61 +1044,35 @@ bool SvxShapePolyPolygon::setPropertyValueImpl( const OUString& rName, const Sfx
throw lang::IllegalArgumentException();
}
-void B2DPolyPolygonToSvxPointSequenceSequence( const basegfx::B2DPolyPolygon& rPolyPoly, drawing::PointSequenceSequence& rRetval )
+bool SvxShapePolyPolygon::getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty,
+ css::uno::Any& rValue )
{
- if( static_cast<sal_uInt32>(rRetval.getLength()) != rPolyPoly.count() )
- rRetval.realloc( rPolyPoly.count() );
-
- // get pointer to external arrays
- drawing::PointSequence* pOuterSequence = rRetval.getArray();
-
- for(sal_uInt32 a(0); a < rPolyPoly.count(); a++)
+ switch( pProperty->nWID )
{
- // get single polygon
- const basegfx::B2DPolygon aPoly(rPolyPoly.getB2DPolygon(a));
-
- // #i75974# take closed state into account, the API polygon still uses the old closed definition
- // with last/first point are identical (cannot hold information about open polygons with identical
- // first and last point, though)
- const sal_uInt32 nPointCount(aPoly.count());
- const bool bIsClosed(aPoly.isClosed());
-
- // create space in arrays
- pOuterSequence->realloc(bIsClosed ? nPointCount + 1 : nPointCount);
-
- // get pointer to arrays
- awt::Point* pInnerSequence = pOuterSequence->getArray();
+ case OWN_ATTR_VALUE_POLYPOLYGONBEZIER:
+ {
+ // pack a tools::PolyPolygon in a struct tools::PolyPolygon
+ basegfx::B2DPolyPolygon aPolyPoly(GetPolygon());
- for(sal_uInt32 b(0); b < nPointCount; b++)
- {
- const basegfx::B2DPoint aPoint(aPoly.getB2DPoint(b));
- *pInnerSequence = awt::Point( basegfx::fround(aPoint.getX()), basegfx::fround(aPoint.getY()) );
- pInnerSequence++;
- }
+ // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
+ ForceMetricTo100th_mm(aPolyPoly);
- // #i75974# copy first point
- if(bIsClosed)
- {
- *pInnerSequence = *pOuterSequence->getArray();
- }
+ drawing::PolyPolygonBezierCoords aRetval;
+ basegfx::utils::B2DPolyPolygonToUnoPolyPolygonBezierCoords(aPolyPoly, aRetval);
- pOuterSequence++;
+ rValue <<= aRetval;
+ break;
}
-}
-
-
-bool SvxShapePolyPolygon::getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty,
- css::uno::Any& rValue )
-{
- switch( pProperty->nWID )
- {
case OWN_ATTR_VALUE_POLYPOLYGON:
{
// pack a tools::PolyPolygon in a struct tools::PolyPolygon
- const basegfx::B2DPolyPolygon& rPolyPoly = GetPolygon();
- drawing::PointSequenceSequence aRetval( rPolyPoly.count() );
+ basegfx::B2DPolyPolygon aPolyPoly(GetPolygon());
+
+ // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
+ ForceMetricTo100th_mm(aPolyPoly);
- B2DPolyPolygonToSvxPointSequenceSequence( rPolyPoly, aRetval );
+ drawing::PointSequenceSequence aRetval( aPolyPoly.count() );
+ basegfx::utils::B2DPolyPolygonToUnoPointSequenceSequence(aPolyPoly, aRetval);
rValue <<= aRetval;
break;
@@ -1090,38 +1080,46 @@ bool SvxShapePolyPolygon::getPropertyValueImpl( const OUString& rName, const Sfx
case OWN_ATTR_BASE_GEOMETRY:
{
// pack a tools::PolyPolygon in struct PolyPolygon
- basegfx::B2DPolyPolygon aNewPolyPolygon;
+ basegfx::B2DPolyPolygon aPolyPoly;
basegfx::B2DHomMatrix aNewHomogenMatrix;
if(HasSdrObject())
{
- GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
+ GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aPolyPoly);
// tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
- // Need to adapt aNewPolyPolygon from app-specific to 100thmm
- ForceMetricTo100th_mm(aNewPolyPolygon);
+ ForceMetricTo100th_mm(aPolyPoly);
}
- drawing::PointSequenceSequence aRetval(aNewPolyPolygon.count());
- B2DPolyPolygonToSvxPointSequenceSequence(aNewPolyPolygon, aRetval);
- rValue <<= aRetval;
+ if(aPolyPoly.areControlPointsUsed())
+ {
+ drawing::PolyPolygonBezierCoords aRetval;
+ basegfx::utils::B2DPolyPolygonToUnoPolyPolygonBezierCoords(aPolyPoly, aRetval);
+ rValue <<= aRetval;
+ }
+ else
+ {
+ drawing::PointSequenceSequence aRetval(aPolyPoly.count());
+ basegfx::utils::B2DPolyPolygonToUnoPointSequenceSequence(aPolyPoly, aRetval);
+ rValue <<= aRetval;
+ }
break;
}
case OWN_ATTR_VALUE_POLYGON:
{
// pack a tools::PolyPolygon in a struct tools::PolyPolygon
- const basegfx::B2DPolyPolygon& rPolyPoly = GetPolygon();
+ basegfx::B2DPolyPolygon aPolyPoly(GetPolygon());
- sal_Int32 nCount = 0;
- if( rPolyPoly.count() > 0 )
- nCount = rPolyPoly.getB2DPolygon(0).count();
+ // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
+ ForceMetricTo100th_mm(aPolyPoly);
+ const sal_Int32 nCount(0 == aPolyPoly.count() ? 0 : aPolyPoly.getB2DPolygon(0).count());
drawing::PointSequence aRetval( nCount );
if( nCount > 0 )
{
// get single polygon
- const basegfx::B2DPolygon aPoly(rPolyPoly.getB2DPolygon(0));
+ const basegfx::B2DPolygon aPoly(aPolyPoly.getB2DPolygon(0));
// get pointer to arrays
awt::Point* pSequence = aRetval.getArray();
@@ -1138,7 +1136,7 @@ bool SvxShapePolyPolygon::getPropertyValueImpl( const OUString& rName, const Sfx
}
case OWN_ATTR_VALUE_POLYGONKIND:
{
- rValue <<= mePolygonKind;
+ rValue <<= GetPolygonKind();
break;
}
default:
@@ -1148,129 +1146,30 @@ bool SvxShapePolyPolygon::getPropertyValueImpl( const OUString& rName, const Sfx
return true;
}
-
-void SvxShapePolyPolygon::SetPolygon(const basegfx::B2DPolyPolygon& rNew)
+drawing::PolygonKind SvxShapePolyPolygon::GetPolygonKind() const
{
::SolarMutexGuard aGuard;
+ drawing::PolygonKind aRetval(drawing::PolygonKind_LINE);
if(HasSdrObject())
- static_cast<SdrPathObj*>(GetSdrObject())->SetPathPoly(rNew);
-}
-
-
-basegfx::B2DPolyPolygon SvxShapePolyPolygon::GetPolygon() const throw()
-{
- ::SolarMutexGuard aGuard;
-
- if(HasSdrObject())
- {
- return static_cast<SdrPathObj*>(GetSdrObject())->GetPathPoly();
- }
- else
- {
- return basegfx::B2DPolyPolygon();
- }
-}
-
-SvxShapePolyPolygonBezier::SvxShapePolyPolygonBezier(SdrObject* pObj , drawing::PolygonKind eNew)
- : SvxShapeText(pObj, getSvxMapProvider().GetMap(SVXMAP_POLYPOLYGONBEZIER), getSvxMapProvider().GetPropertySet(SVXMAP_POLYPOLYGONBEZIER, SdrObject::GetGlobalDrawObjectItemPool()))
- , mePolygonKind(eNew)
-{
-}
-
-SvxShapePolyPolygonBezier::~SvxShapePolyPolygonBezier() throw()
-{
-}
-
-bool SvxShapePolyPolygonBezier::setPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, const css::uno::Any& rValue )
-{
- switch( pProperty->nWID )
- {
- case OWN_ATTR_VALUE_POLYPOLYGONBEZIER:
- {
- if( auto s = o3tl::tryAccess<drawing::PolyPolygonBezierCoords>(rValue) )
- {
- basegfx::B2DPolyPolygon aNewPolyPolygon(
- basegfx::unotools::polyPolygonBezierToB2DPolyPolygon(*s));
- SetPolygon(aNewPolyPolygon);
- return true;
- }
- break;
- }
- case OWN_ATTR_BASE_GEOMETRY:
{
- if( auto s = o3tl::tryAccess<drawing::PolyPolygonBezierCoords>(rValue) )
+ switch(GetSdrObject()->GetObjIdentifier())
{
- if( HasSdrObject() )
- {
- basegfx::B2DPolyPolygon aNewPolyPolygon;
- basegfx::B2DHomMatrix aNewHomogenMatrix;
-
- GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
- aNewPolyPolygon = basegfx::unotools::polyPolygonBezierToB2DPolyPolygon(*s);
-
- // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
- // Need to adapt aNewPolyPolygon from 100thmm to app-specific
- ForceMetricToItemPoolMetric(aNewPolyPolygon);
-
- GetSdrObject()->TRSetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
- }
- return true;
+ case OBJ_POLY: aRetval = drawing::PolygonKind_POLY; break;
+ case OBJ_PLIN: aRetval = drawing::PolygonKind_PLIN; break;
+ case OBJ_SPLNLINE:
+ case OBJ_PATHLINE: aRetval = drawing::PolygonKind_PATHLINE; break;
+ case OBJ_SPLNFILL:
+ case OBJ_PATHFILL: aRetval = drawing::PolygonKind_PATHFILL; break;
+ case OBJ_FREELINE: aRetval = drawing::PolygonKind_FREELINE; break;
+ case OBJ_FREEFILL: aRetval = drawing::PolygonKind_FREEFILL; break;
}
- break;
- }
- default:
- return SvxShapeText::setPropertyValueImpl( rName, pProperty, rValue );
}
- throw IllegalArgumentException();
-}
-
-
-bool SvxShapePolyPolygonBezier::getPropertyValueImpl( const OUString& rName, const SfxItemPropertySimpleEntry* pProperty, css::uno::Any& rValue )
-{
- switch( pProperty->nWID )
- {
- case OWN_ATTR_VALUE_POLYPOLYGONBEZIER:
- {
- // pack a tools::PolyPolygon in a struct tools::PolyPolygon
- const basegfx::B2DPolyPolygon& rPolyPoly = GetPolygon();
- drawing::PolyPolygonBezierCoords aRetval;
- basegfx::unotools::b2DPolyPolygonToPolyPolygonBezier(rPolyPoly, aRetval);
-
- rValue <<= aRetval;
- break;
- }
- case OWN_ATTR_BASE_GEOMETRY:
- {
- // pack a tools::PolyPolygon in a struct tools::PolyPolygon
- basegfx::B2DPolyPolygon aNewPolyPolygon;
- basegfx::B2DHomMatrix aNewHomogenMatrix;
- GetSdrObject()->TRGetBaseGeometry(aNewHomogenMatrix, aNewPolyPolygon);
-
- // tdf#117145 metric of SdrModel is app-specific, metric of UNO API is 100thmm
- // Need to adapt aNewPolyPolygon from app-specific to 100thmm
- ForceMetricTo100th_mm(aNewPolyPolygon);
-
- drawing::PolyPolygonBezierCoords aRetval;
- basegfx::unotools::b2DPolyPolygonToPolyPolygonBezier(aNewPolyPolygon, aRetval);
-
- rValue <<= aRetval;
- break;
- }
- case OWN_ATTR_VALUE_POLYGONKIND:
- {
- rValue <<= mePolygonKind;
- break;
- }
- default:
- return SvxShapeText::getPropertyValueImpl( rName, pProperty, rValue );
- }
- return true;
+ return aRetval;
}
-
-void SvxShapePolyPolygonBezier::SetPolygon(const basegfx::B2DPolyPolygon& rNew)
+void SvxShapePolyPolygon::SetPolygon(const basegfx::B2DPolyPolygon& rNew)
{
::SolarMutexGuard aGuard;
@@ -1279,7 +1178,7 @@ void SvxShapePolyPolygonBezier::SetPolygon(const basegfx::B2DPolyPolygon& rNew)
}
-basegfx::B2DPolyPolygon SvxShapePolyPolygonBezier::GetPolygon() const throw()
+basegfx::B2DPolyPolygon SvxShapePolyPolygon::GetPolygon() const throw()
{
::SolarMutexGuard aGuard;
@@ -1293,6 +1192,8 @@ basegfx::B2DPolyPolygon SvxShapePolyPolygonBezier::GetPolygon() const throw()
}
}
+//////////////////////////////////////////////////////////////////////////////
+
SvxGraphicObject::SvxGraphicObject(SdrObject* pObj)
: SvxShapeText( pObj, getSvxMapProvider().GetMap(SVXMAP_GRAPHICOBJECT), getSvxMapProvider().GetPropertySet(SVXMAP_GRAPHICOBJECT, SdrObject::GetGlobalDrawObjectItemPool()) )
{