You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by al...@apache.org on 2013/10/29 15:11:46 UTC

svn commit: r1536730 [3/5] - in /openoffice/trunk/main: basegfx/inc/basegfx/polygon/ basegfx/source/inc/ basegfx/source/polygon/ basegfx/source/tools/ basegfx/test/ canvas/source/tools/ sd/source/core/ sdext/source/pdfimport/test/ sdext/source/pdfimpor...

Modified: openoffice/trunk/main/basegfx/test/boxclipper.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/basegfx/test/boxclipper.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/basegfx/test/boxclipper.cxx (original)
+++ openoffice/trunk/main/basegfx/test/boxclipper.cxx Tue Oct 29 14:11:45 2013
@@ -175,7 +175,7 @@ public:
         B2DPolyPolygon randomPoly;
         tools::importFromSvgD(
             randomPoly,
-            rtl::OUString::createFromAscii(randomSvg));
+            rtl::OUString::createFromAscii(randomSvg), false, 0);
         std::for_each(randomPoly.begin(),
                       randomPoly.end(),
                       boost::bind(
@@ -243,16 +243,14 @@ public:
         B2DPolyPolygon aTmp1;
         CPPUNIT_ASSERT_MESSAGE(sName, 
                                tools::importFromSvgD(
-                                   aTmp1,
-                                   rtl::OUString::createFromAscii(sSvg)));
+                                   aTmp1, rtl::OUString::createFromAscii(sSvg), false, 0));
 
         const rtl::OUString aSvg=
-            tools::exportToSvgD(toTest.solveCrossovers());
+            tools::exportToSvgD(toTest.solveCrossovers(), , true, true, false);
         B2DPolyPolygon aTmp2;
         CPPUNIT_ASSERT_MESSAGE(sName,
                                tools::importFromSvgD(
-                                   aTmp2,
-                                   aSvg));
+                                   aTmp2, aSvg, false, 0));
 
         CPPUNIT_ASSERT_MESSAGE(
             sName,
@@ -303,7 +301,7 @@ public:
 #if defined(VERBOSE)
         fprintf(stderr, "%s - svg:d=\"%s\"\n", 
                 pName, rtl::OUStringToOString(
-                    basegfx::tools::exportToSvgD(rPoly),
+                    basegfx::tools::exportToSvgD(rPoly, , true, true, false),
                     RTL_TEXTENCODING_UTF8).getStr() );
 #endif
     }
@@ -347,15 +345,14 @@ public:
         fprintf(stderr, "%s input      - svg:d=\"%s\"\n", 
                 pName, rtl::OUStringToOString(
                     basegfx::tools::exportToSvgD(
-                        genericClip),
+                        genericClip, , true, true, false),
                     RTL_TEXTENCODING_UTF8).getStr() );
 #endif
 
         const B2DPolyPolygon boxClipResult=rRange.solveCrossovers();
         const rtl::OUString boxClipSvg(
             basegfx::tools::exportToSvgD(
-                normalizePoly(
-                    boxClipResult)));
+                normalizePoly(boxClipResult)), true, true, false);
 #if defined(VERBOSE)
         fprintf(stderr, "%s boxclipper - svg:d=\"%s\"\n", 
                 pName, rtl::OUStringToOString(
@@ -366,8 +363,7 @@ public:
         genericClip = tools::solveCrossovers(genericClip);
         const rtl::OUString genericClipSvg(
             basegfx::tools::exportToSvgD(
-                normalizePoly(
-                    genericClip)));
+                normalizePoly(genericClip)), true, true, false);
 #if defined(VERBOSE)
         fprintf(stderr, "%s genclipper - svg:d=\"%s\"\n", 
                 pName, rtl::OUStringToOString(

Modified: openoffice/trunk/main/basegfx/test/clipstate.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/basegfx/test/clipstate.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/basegfx/test/clipstate.cxx (original)
+++ openoffice/trunk/main/basegfx/test/clipstate.cxx Tue Oct 29 14:11:45 2013
@@ -107,23 +107,21 @@ public:
 #if defined(VERBOSE)
         fprintf(stderr, "%s - svg:d=\"%s\"\n", 
                 sName, rtl::OUStringToOString(
-                    basegfx::tools::exportToSvgD(toTest.getClipPoly()),
+                    basegfx::tools::exportToSvgD(toTest.getClipPoly(), true, true, false),
                     RTL_TEXTENCODING_UTF8).getStr() );
 #endif
 
         B2DPolyPolygon aTmp1;
         CPPUNIT_ASSERT_MESSAGE(sName, 
                                tools::importFromSvgD(
-                                   aTmp1,
-                                   rtl::OUString::createFromAscii(sSvg)));
+                                   aTmp1, rtl::OUString::createFromAscii(sSvg), false, 0));
 
         const rtl::OUString aSvg=
-            tools::exportToSvgD(toTest.getClipPoly());
+            tools::exportToSvgD(toTest.getClipPoly(), true, true, false);
         B2DPolyPolygon aTmp2;
         CPPUNIT_ASSERT_MESSAGE(sName,
                                tools::importFromSvgD(
-                                   aTmp2,
-                                   aSvg));
+                                   aTmp2, aSvg, false, 0));
 
         CPPUNIT_ASSERT_MESSAGE(
             sName,
@@ -153,8 +151,7 @@ public:
 
         B2DPolyPolygon aTmp1;
         tools::importFromSvgD(
-            aTmp1,
-            rtl::OUString::createFromAscii(unionSvg));
+            aTmp1, rtl::OUString::createFromAscii(unionSvg), false, 0);
 
         aMixedClip.intersectPolyPolygon(aTmp1);
         aMixedClip.subtractRange(B2DRange(-20,-150,20,0));

Modified: openoffice/trunk/main/basegfx/test/genericclipper.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/basegfx/test/genericclipper.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/basegfx/test/genericclipper.cxx (original)
+++ openoffice/trunk/main/basegfx/test/genericclipper.cxx Tue Oct 29 14:11:45 2013
@@ -91,12 +91,12 @@ public:
         fprintf(stderr, "%s input LHS - svg:d=\"%s\"\n", 
                 pName, rtl::OUStringToOString(
                     basegfx::tools::exportToSvgD(
-                        aSelfIntersect),
+                        aSelfIntersect, true, true, false),
                     RTL_TEXTENCODING_UTF8).getStr() );
         fprintf(stderr, "%s input RHS - svg:d=\"%s\"\n", 
                 pName, rtl::OUStringToOString(
                     basegfx::tools::exportToSvgD(
-                        aRect),
+                        aRect, true, true, false),
                     RTL_TEXTENCODING_UTF8).getStr() );
 #endif
 
@@ -106,14 +106,14 @@ public:
 #if defined(VERBOSE)
         fprintf(stderr, "%s - svg:d=\"%s\"\n", 
                 pName, rtl::OUStringToOString(
-                    basegfx::tools::exportToSvgD(aRes),
+                    basegfx::tools::exportToSvgD(aRes, true, true, false),
                     RTL_TEXTENCODING_UTF8).getStr() );
 #endif
 
         rtl::OUString aValid=rtl::OUString::createFromAscii(pValidSvgD);
 
         CPPUNIT_ASSERT_MESSAGE(pName,
-                               basegfx::tools::exportToSvgD(aRes) == aValid);
+                               basegfx::tools::exportToSvgD(aRes, true, true, false) == aValid);
     }
 
     void validateOr()

Modified: openoffice/trunk/main/canvas/source/tools/surfaceproxy.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/canvas/source/tools/surfaceproxy.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/canvas/source/tools/surfaceproxy.cxx (original)
+++ openoffice/trunk/main/canvas/source/tools/surfaceproxy.cxx Tue Oct 29 14:11:45 2013
@@ -156,11 +156,11 @@ namespace canvas
         OSL_TRACE( "Original clip polygon: %s\n"
                    "Triangulated polygon: %s\n",
                    rtl::OUStringToOString(
-                       basegfx::tools::exportToSvgD( rClipPoly ),
+                       basegfx::tools::exportToSvgD( rClipPoly, true, true, false ),
                        RTL_TEXTENCODING_ASCII_US).getStr(),
                    rtl::OUStringToOString(
                        basegfx::tools::exportToSvgD( 
-                           basegfx::B2DPolyPolygon(rTriangulatedPolygon) ),
+                           basegfx::B2DPolyPolygon(rTriangulatedPolygon), true, true, false ),
                        RTL_TEXTENCODING_ASCII_US).getStr() );
 #endif
 

Modified: openoffice/trunk/main/sd/source/core/CustomAnimationEffect.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sd/source/core/CustomAnimationEffect.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/sd/source/core/CustomAnimationEffect.cxx (original)
+++ openoffice/trunk/main/sd/source/core/CustomAnimationEffect.cxx Tue Oct 29 14:11:45 2013
@@ -1706,7 +1706,7 @@ SdrPathObj* CustomAnimationEffect::creat
 void CustomAnimationEffect::updateSdrPathObjFromPath( SdrPathObj& rPathObj )
 {
 	::basegfx::B2DPolyPolygon xPolyPoly;
-	if( ::basegfx::tools::importFromSvgD( xPolyPoly, getPath() ) )
+	if( ::basegfx::tools::importFromSvgD( xPolyPoly, getPath(), true, 0 ) )
 	{
 		SdrObject* pObj = GetSdrObjectFromXShape( getTargetShape() );
 		if( pObj )
@@ -1762,7 +1762,7 @@ void CustomAnimationEffect::updatePathFr
 		}
 	}
 
-	setPath( ::basegfx::tools::exportToSvgD( xPolyPoly ) );
+	setPath( ::basegfx::tools::exportToSvgD( xPolyPoly, true, true, true) );
 }
 
 // ====================================================================

Modified: openoffice/trunk/main/sdext/source/pdfimport/test/tests.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sdext/source/pdfimport/test/tests.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/sdext/source/pdfimport/test/tests.cxx (original)
+++ openoffice/trunk/main/sdext/source/pdfimport/test/tests.cxx Tue Oct 29 14:11:45 2013
@@ -246,7 +246,7 @@ namespace
 
                 const char* sExportString = "m53570 7650-35430 24100";
                 CPPUNIT_ASSERT_MESSAGE( "Stroke is m535.7 518.5-354.3-241",
-                                        basegfx::tools::exportToSvgD( aPath ).compareToAscii(sExportString) == 0 );
+                                        basegfx::tools::exportToSvgD( aPath, true, true, false ).compareToAscii(sExportString) == 0 );
 
                 m_bGreenStrokeSeen = true;
             }
@@ -270,7 +270,7 @@ namespace
 
                 const char* sExportString = "m49890 5670.00000000001-35430 24090";
                 CPPUNIT_ASSERT_MESSAGE( "Stroke is m49890 5670.00000000001-35430 24090",
-                                        basegfx::tools::exportToSvgD( aPath ).compareToAscii(sExportString) == 0 );
+                                        basegfx::tools::exportToSvgD( aPath, true, true, false ).compareToAscii(sExportString) == 0 );
 
                 m_bDashedLineSeen = true;
             }
@@ -328,7 +328,7 @@ namespace
             const char* sExportString = "m12050 49610c-4310 0-7800-3490-7800-7800 0-4300 "
                 "3490-7790 7800-7790 4300 0 7790 3490 7790 7790 0 4310-3490 7800-7790 7800z";
             CPPUNIT_ASSERT_MESSAGE( "Stroke is a 4-bezier circle",
-                                    basegfx::tools::exportToSvgD( aPath ).compareToAscii(sExportString) == 0 );
+                                    basegfx::tools::exportToSvgD( aPath, true, true, false ).compareToAscii(sExportString) == 0 );
 
             m_bRedCircleSeen = true;
         }

Modified: openoffice/trunk/main/sdext/source/pdfimport/tree/drawtreevisiting.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sdext/source/pdfimport/tree/drawtreevisiting.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/sdext/source/pdfimport/tree/drawtreevisiting.cxx (original)
+++ openoffice/trunk/main/sdext/source/pdfimport/tree/drawtreevisiting.cxx Tue Oct 29 14:11:45 2013
@@ -358,7 +358,7 @@ void DrawXmlEmitter::visit( PolyPolyElem
     aBuf.append( sal_Unicode(' ') );
     aBuf.append( convPx2mmPrec2(elem.h)*100.0 );
     aProps[ USTR( "svg:viewBox" ) ] = aBuf.makeStringAndClear();
-    aProps[ USTR( "svg:d" ) ]       = basegfx::tools::exportToSvgD( elem.PolyPoly );
+    aProps[ USTR( "svg:d" ) ]       = basegfx::tools::exportToSvgD( elem.PolyPoly, true, true, false );
     
     m_rEmitContext.rEmitter.beginTag( "draw:path", aProps );
     m_rEmitContext.rEmitter.endTag( "draw:path" );

Modified: openoffice/trunk/main/sdext/source/pdfimport/tree/writertreevisiting.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/sdext/source/pdfimport/tree/writertreevisiting.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/sdext/source/pdfimport/tree/writertreevisiting.cxx (original)
+++ openoffice/trunk/main/sdext/source/pdfimport/tree/writertreevisiting.cxx Tue Oct 29 14:11:45 2013
@@ -281,7 +281,7 @@ void WriterXmlEmitter::visit( PolyPolyEl
     aBuf.append( sal_Unicode(' ') );
     aBuf.append( convPx2mmPrec2(elem.h)*100.0 );
     aProps[ USTR( "svg:viewBox" ) ] = aBuf.makeStringAndClear();
-    aProps[ USTR( "svg:d" ) ]       = basegfx::tools::exportToSvgD( elem.PolyPoly );
+    aProps[ USTR( "svg:d" ) ]       = basegfx::tools::exportToSvgD( elem.PolyPoly, true, true, false );
     
     m_rEmitContext.rEmitter.beginTag( "draw:path", aProps );
     m_rEmitContext.rEmitter.endTag( "draw:path" );

Modified: openoffice/trunk/main/slideshow/source/engine/animationfactory.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/slideshow/source/engine/animationfactory.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/slideshow/source/engine/animationfactory.cxx (original)
+++ openoffice/trunk/main/slideshow/source/engine/animationfactory.cxx Tue Oct 29 14:11:45 2013
@@ -234,7 +234,7 @@ namespace slideshow
 
                     ::basegfx::B2DPolyPolygon aPolyPoly;
                     
-                    ENSURE_OR_THROW( ::basegfx::tools::importFromSvgD( aPolyPoly, rSVGDPath ),
+                    ENSURE_OR_THROW( ::basegfx::tools::importFromSvgD( aPolyPoly, rSVGDPath, false, 0 ),
                                       "PathAnimation::PathAnimation(): failed to parse SVG:d path" );
                     ENSURE_OR_THROW( aPolyPoly.count() == 1,
                                       "PathAnimation::PathAnimation(): motion path consists of multiple/zero polygon(s)" );

Modified: openoffice/trunk/main/svgio/inc/svgio/svgreader/svgpathnode.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/inc/svgio/svgreader/svgpathnode.hxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/inc/svgio/svgreader/svgpathnode.hxx (original)
+++ openoffice/trunk/main/svgio/inc/svgio/svgreader/svgpathnode.hxx Tue Oct 29 14:11:45 2013
@@ -25,6 +25,7 @@
 #include <svgio/svgiodllapi.h>
 #include <svgio/svgreader/svgnode.hxx>
 #include <svgio/svgreader/svgstyleattributes.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -36,12 +37,13 @@ namespace svgio
         {
         private:
             /// use styles
-            SvgStyleAttributes          maSvgStyleAttributes;
+            SvgStyleAttributes                  maSvgStyleAttributes;
 
             /// variable scan values, dependent of given XAttributeList
-            basegfx::B2DPolyPolygon*    mpPolyPolygon;
-            basegfx::B2DHomMatrix*      mpaTransform;
-            SvgNumber                   maPathLength;
+            basegfx::B2DPolyPolygon*            mpPolyPolygon;
+            basegfx::B2DHomMatrix*              mpaTransform;
+            SvgNumber                           maPathLength;
+            basegfx::tools::PointIndexSet       maHelpPointIndices;
 
         public:
             SvgPathNode(

Modified: openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx (original)
+++ openoffice/trunk/main/svgio/inc/svgio/svgreader/svgstyleattributes.hxx Tue Oct 29 14:11:45 2013
@@ -26,6 +26,7 @@
 #include <svgio/svgreader/svgpaint.hxx>
 #include <svgio/svgreader/svgnode.hxx>
 #include <vcl/vclenum.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
 
 //////////////////////////////////////////////////////////////////////////////
 // predefines
@@ -253,7 +254,8 @@ namespace svgio
                 const SvgMarkerNode& rMarker) const;
             void add_markers(
                 const basegfx::B2DPolyPolygon& rPath, 
-                drawinglayer::primitive2d::Primitive2DSequence& rTarget) const;
+                drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+                const basegfx::tools::PointIndexSet* pHelpPointIndices) const;
 
         public:
             /// local attribute scanner
@@ -265,7 +267,8 @@ namespace svgio
                 drawinglayer::primitive2d::Primitive2DSequence& rSource) const;
             void add_path(
                 const basegfx::B2DPolyPolygon& rPath, 
-                drawinglayer::primitive2d::Primitive2DSequence& rTarget) const;
+                drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+                const basegfx::tools::PointIndexSet* pHelpPointIndices) const;
             void add_postProcess(
                 drawinglayer::primitive2d::Primitive2DSequence& rTarget, 
                 const drawinglayer::primitive2d::Primitive2DSequence& rSource, 

Modified: openoffice/trunk/main/svgio/source/svgreader/svgcirclenode.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgcirclenode.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgcirclenode.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgcirclenode.cxx Tue Oct 29 14:11:45 2013
@@ -141,7 +141,7 @@ namespace svgio
 
                     drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
 
-                    pStyle->add_path(basegfx::B2DPolyPolygon(aPath), aNewTarget);
+                    pStyle->add_path(basegfx::B2DPolyPolygon(aPath), aNewTarget, 0);
 
                     if(aNewTarget.hasElements())
                     {

Modified: openoffice/trunk/main/svgio/source/svgreader/svgellipsenode.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgellipsenode.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgellipsenode.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgellipsenode.cxx Tue Oct 29 14:11:45 2013
@@ -156,7 +156,7 @@ namespace svgio
 
                     drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
 
-                    pStyle->add_path(basegfx::B2DPolyPolygon(aPath), aNewTarget);
+                    pStyle->add_path(basegfx::B2DPolyPolygon(aPath), aNewTarget, 0);
                     
                     if(aNewTarget.hasElements())
                     {

Modified: openoffice/trunk/main/svgio/source/svgreader/svglinenode.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svglinenode.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svglinenode.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svglinenode.cxx Tue Oct 29 14:11:45 2013
@@ -152,7 +152,7 @@ namespace svgio
 
                     drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
 
-                    pStyle->add_path(basegfx::B2DPolyPolygon(aPath), aNewTarget);
+                    pStyle->add_path(basegfx::B2DPolyPolygon(aPath), aNewTarget, 0);
                     
                     if(aNewTarget.hasElements())
                     {

Modified: openoffice/trunk/main/svgio/source/svgreader/svgpathnode.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgpathnode.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgpathnode.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgpathnode.cxx Tue Oct 29 14:11:45 2013
@@ -75,7 +75,7 @@ namespace svgio
                 {
                     basegfx::B2DPolyPolygon aPath;
                     
-                    if(basegfx::tools::importFromSvgD(aPath, aContent))
+                    if(basegfx::tools::importFromSvgD(aPath, aContent, false, &maHelpPointIndices))
                     {
                         if(aPath.count())
                         {
@@ -120,7 +120,7 @@ namespace svgio
             {
                 drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
 
-                pStyle->add_path(*getPath(), aNewTarget);
+                pStyle->add_path(*getPath(), aNewTarget, &maHelpPointIndices);
 
                 if(aNewTarget.hasElements())
                 {

Modified: openoffice/trunk/main/svgio/source/svgreader/svgpolynode.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgpolynode.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgpolynode.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgpolynode.cxx Tue Oct 29 14:11:45 2013
@@ -25,6 +25,7 @@
 #include <svgio/svgreader/svgpolynode.hxx>
 #include <basegfx/polygon/b2dpolygon.hxx>
 #include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
 
 //////////////////////////////////////////////////////////////////////////////
 
@@ -77,7 +78,7 @@ namespace svgio
                 case SVGTokenPoints:
                 {
                     basegfx::B2DPolygon aPath;
-                    
+
                     if(basegfx::tools::importFromSvgPoints(aPath, aContent))
                     {
                         if(aPath.count())
@@ -117,7 +118,7 @@ namespace svgio
             {
                 drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
 
-                pStyle->add_path(basegfx::B2DPolyPolygon(*getPolygon()), aNewTarget);
+                pStyle->add_path(basegfx::B2DPolyPolygon(*getPolygon()), aNewTarget, 0);
 
                 if(aNewTarget.hasElements())
                 {

Modified: openoffice/trunk/main/svgio/source/svgreader/svgrectnode.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgrectnode.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgrectnode.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgrectnode.cxx Tue Oct 29 14:11:45 2013
@@ -213,7 +213,7 @@ namespace svgio
 
                     drawinglayer::primitive2d::Primitive2DSequence aNewTarget;
 
-                    pStyle->add_path(basegfx::B2DPolyPolygon(aPath), aNewTarget);
+                    pStyle->add_path(basegfx::B2DPolyPolygon(aPath), aNewTarget, 0);
 
                     if(aNewTarget.hasElements())
                     {

Modified: openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx (original)
+++ openoffice/trunk/main/svgio/source/svgreader/svgstyleattributes.cxx Tue Oct 29 14:11:45 2013
@@ -838,7 +838,8 @@ namespace svgio
 
         void SvgStyleAttributes::add_markers(
             const basegfx::B2DPolyPolygon& rPath,
-            drawinglayer::primitive2d::Primitive2DSequence& rTarget) const
+            drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+            const basegfx::tools::PointIndexSet* pHelpPointIndices) const
         {
             // try to access linked markers
             const SvgMarkerNode* pStart = accessMarkerStartXLink();
@@ -897,6 +898,18 @@ namespace svgio
                                     pNeeded = pMid;
                                 }
 
+                                if(pHelpPointIndices && !pHelpPointIndices->empty())
+                                {
+                                    const basegfx::tools::PointIndexSet::const_iterator aFound(
+                                        pHelpPointIndices->find(basegfx::tools::PointIndex(a, b)));
+
+                                    if(aFound != pHelpPointIndices->end())
+                                    {
+                                        // this point is a pure helper point; do not create a marker for it
+                                        continue;
+                                    }
+                                }
+
                                 if(!pNeeded)
                                 {
                                     // no marker needs to be created for this point
@@ -1008,7 +1021,8 @@ namespace svgio
 
         void SvgStyleAttributes::add_path(
             const basegfx::B2DPolyPolygon& rPath, 
-            drawinglayer::primitive2d::Primitive2DSequence& rTarget) const
+            drawinglayer::primitive2d::Primitive2DSequence& rTarget,
+            const basegfx::tools::PointIndexSet* pHelpPointIndices) const
         {
             if(!rPath.count())
             {
@@ -1066,7 +1080,7 @@ namespace svgio
                 SVGTokenLine == mrOwner.getType())          // line
             {
                 // try to add markers
-                add_markers(rPath, rTarget);
+                add_markers(rPath, rTarget, pHelpPointIndices);
             }
         }
 

Modified: openoffice/trunk/main/xmloff/inc/xexptran.hxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/xmloff/inc/xexptran.hxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/xmloff/inc/xexptran.hxx (original)
+++ openoffice/trunk/main/xmloff/inc/xexptran.hxx Tue Oct 29 14:11:45 2013
@@ -115,83 +115,22 @@ public:
 
 class SdXMLImExViewBox
 {
-	rtl::OUString				msString;
-	sal_Int32					mnX;
-	sal_Int32					mnY;
-	sal_Int32					mnW;
-	sal_Int32					mnH;
+    rtl::OUString				msString;
+    double                      mfX;
+    double                      mfY;
+    double                      mfW;
+    double                      mfH;
 
 public:
-	SdXMLImExViewBox(sal_Int32 nX = 0L, sal_Int32 nY = 0L, sal_Int32 nW = 1000L, sal_Int32 nH = 1000L);
-	SdXMLImExViewBox(const rtl::OUString& rNew, const SvXMLUnitConverter& rConv);
+    SdXMLImExViewBox(double fX = 0.0, double fY = 0.0, double fW = 1000.0, double fH = 1000.0);
+    SdXMLImExViewBox(const rtl::OUString& rNew, const SvXMLUnitConverter& rConv);
 
-	sal_Int32 GetX() const { return mnX; }
-	sal_Int32 GetY() const { return mnY; }
-	sal_Int32 GetWidth() const { return mnW; }
-	sal_Int32 GetHeight() const { return mnH; }
-	const rtl::OUString& GetExportString();
+    double GetX() const { return mfX; }
+    double GetY() const { return mfY; }
+    double GetWidth() const { return mfW; }
+    double GetHeight() const { return mfH; }
+    const rtl::OUString& GetExportString();
 };
 
-//////////////////////////////////////////////////////////////////////////////
-
-class SdXMLImExPointsElement
-{
-	rtl::OUString				msString;
-	com::sun::star::drawing::PointSequenceSequence	maPoly;
-
-public:
-	SdXMLImExPointsElement(com::sun::star::drawing::PointSequence* pPoints, 
-		const SdXMLImExViewBox& rViewBox,
-		const com::sun::star::awt::Point& rObjectPos,
-		const com::sun::star::awt::Size& rObjectSize,
-		// #96328#
-		const bool bClosed = true);
-	SdXMLImExPointsElement(const rtl::OUString& rNew, 
-		const SdXMLImExViewBox& rViewBox,
-		const com::sun::star::awt::Point& rObjectPos,
-		const com::sun::star::awt::Size& rObjectSize,
-		const SvXMLUnitConverter& rConv);
-
-	const rtl::OUString& GetExportString() const { return msString; }
-	const com::sun::star::drawing::PointSequenceSequence& GetPointSequenceSequence() const { return maPoly; }
-};
-
-//////////////////////////////////////////////////////////////////////////////
-
-class SdXMLImExSvgDElement
-{
-	rtl::OUString					msString;
-	const SdXMLImExViewBox&			mrViewBox;
-	bool							mbIsClosed;
-	bool							mbIsCurve;
-
-	sal_Int32						mnLastX;
-	sal_Int32						mnLastY;
-
-	com::sun::star::drawing::PointSequenceSequence		maPoly;
-	com::sun::star::drawing::FlagSequenceSequence		maFlag;
-
-public:
-	SdXMLImExSvgDElement(const SdXMLImExViewBox& rViewBox);
-	SdXMLImExSvgDElement(const rtl::OUString& rNew, 
-		const SdXMLImExViewBox& rViewBox,
-		const com::sun::star::awt::Point& rObjectPos,
-		const com::sun::star::awt::Size& rObjectSize,
-		const SvXMLUnitConverter& rConv);
-
-	void AddPolygon(
-		com::sun::star::drawing::PointSequence* pPoints, 
-		com::sun::star::drawing::FlagSequence* pFlags,
-		const com::sun::star::awt::Point& rObjectPos,
-		const com::sun::star::awt::Size& rObjectSize,
-		bool bClosed = false, bool bRelative = true);
-
-	const rtl::OUString& GetExportString() const { return msString; }
-	bool IsClosed() const { return mbIsClosed; }
-	bool IsCurve() const { return mbIsCurve; }
-	const com::sun::star::drawing::PointSequenceSequence& GetPointSequenceSequence() const { return maPoly; }
-	const com::sun::star::drawing::FlagSequenceSequence& GetFlagSequenceSequence() const { return maFlag; }
-};
-
-
 #endif	//  _XEXPTRANSFORM_HXX
+// eof

Modified: openoffice/trunk/main/xmloff/source/draw/XMLImageMapContext.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/xmloff/source/draw/XMLImageMapContext.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/xmloff/source/draw/XMLImageMapContext.cxx (original)
+++ openoffice/trunk/main/xmloff/source/draw/XMLImageMapContext.cxx Tue Oct 29 14:11:45 2013
@@ -19,25 +19,18 @@
  * 
  *************************************************************/
 
-
-
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_xmloff.hxx"
 #include "XMLImageMapContext.hxx"
 #include <rtl/ustrbuf.hxx>
 #include <com/sun/star/uno/Reference.h>
 #include <com/sun/star/beans/XPropertySet.hpp>
-#ifndef _COM_SUN_STAR_BEANS_XPROPERTYSETINFO_HPP
 #include <com/sun/star/beans/XPropertySetInfo.hpp>
-#endif
 #include <com/sun/star/xml/sax/XAttributeList.hpp>
 #include <com/sun/star/container/XIndexContainer.hpp>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/drawing/PointSequenceSequence.hpp>
-
-#ifndef _COM_SUN_STAR_DOCUMENT_XEVENTSSUPPLIER_HPP
 #include <com/sun/star/document/XEventsSupplier.hpp>
-#endif
 #include <com/sun/star/awt/Rectangle.hpp>
 #include <xmloff/xmltoken.hxx>
 #include <xmloff/xmlimp.hxx>
@@ -50,7 +43,8 @@
 #include <xmloff/XMLEventsImportContext.hxx>
 #include "XMLStringBufferImportContext.hxx"
 #include <tools/debug.hxx>
-
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
 
 using namespace ::com::sun::star;
 using namespace ::xmloff::token;
@@ -506,33 +500,30 @@ void XMLImageMapPolygonContext::ProcessA
 	bValid = bViewBoxOK && bPointsOK;
 }
 
-void XMLImageMapPolygonContext::Prepare(
-	Reference<XPropertySet> & rPropertySet)
+void XMLImageMapPolygonContext::Prepare(Reference<XPropertySet> & rPropertySet)
 {
-	// process view box
-	SdXMLImExViewBox aViewBox(sViewBoxString, 
-							  GetImport().GetMM100UnitConverter());
-
-	// get polygon sequence
-	awt::Point aPoint(aViewBox.GetX(), aViewBox.GetY());
-	awt::Size aSize(aViewBox.GetWidth(), aViewBox.GetHeight());
-	SdXMLImExPointsElement aPoints( sPointsString, aViewBox, aPoint, aSize,
-									GetImport().GetMM100UnitConverter() );
-	PointSequenceSequence aPointSeqSeq = aPoints.GetPointSequenceSequence();
-
-	// only use first element of sequence-sequence
-	if (aPointSeqSeq.getLength() > 0)
-	{
-		Any aAny;
-		aAny <<= aPointSeqSeq[0];
-		rPropertySet->setPropertyValue(sPolygon, aAny);
-	}
+    // process view box
+    SdXMLImExViewBox aViewBox(sViewBoxString, GetImport().GetMM100UnitConverter());
 
-	// parent properties
-	XMLImageMapObjectContext::Prepare(rPropertySet);
-}
+    // get polygon sequence
+    basegfx::B2DPolygon aPolygon;
 
+    if(basegfx::tools::importFromSvgPoints(aPolygon, sPointsString))
+    {
+        if(aPolygon.count())
+        {
+            com::sun::star::drawing::PointSequence aPointSequence;
+            uno::Any aAny;
+
+            basegfx::tools::B2DPolygonToUnoPointSequence(aPolygon, aPointSequence);
+            aAny <<= aPointSequence;
+            rPropertySet->setPropertyValue(sPolygon, aAny);
+        }
+    }
 
+    // parent properties
+    XMLImageMapObjectContext::Prepare(rPropertySet);
+}
 
 class XMLImageMapCircleContext : public XMLImageMapObjectContext
 {

Modified: openoffice/trunk/main/xmloff/source/draw/XMLImageMapExport.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/xmloff/source/draw/XMLImageMapExport.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/xmloff/source/draw/XMLImageMapExport.cxx (original)
+++ openoffice/trunk/main/xmloff/source/draw/XMLImageMapExport.cxx Tue Oct 29 14:11:45 2013
@@ -19,8 +19,6 @@
  * 
  *************************************************************/
 
-
-
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_xmloff.hxx"
 #include "XMLImageMapExport.hxx"
@@ -32,10 +30,7 @@
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
 #include <com/sun/star/container/XIndexContainer.hpp>
-
-#ifndef _COM_SUN_STAR_DOCUMENT_XEVENTSSUPPLIER_HPP
 #include <com/sun/star/document/XEventsSupplier.hpp>
-#endif
 #include <com/sun/star/awt/Rectangle.hpp>
 #include <com/sun/star/awt/Point.hpp>
 #include <com/sun/star/awt/Size.hpp>
@@ -46,8 +41,8 @@
 #include <xmloff/XMLEventExport.hxx>
 #include <xmloff/xmluconv.hxx>
 #include "xexptran.hxx"
-
-
+#include <basegfx/polygon/b2dpolygon.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
 
 using namespace ::com::sun::star;
 using namespace ::xmloff::token;
@@ -322,61 +317,43 @@ void XMLImageMapExport::ExportCircle(
 						  aBuffer.makeStringAndClear() );
 }
 
-void XMLImageMapExport::ExportPolygon(
-	const Reference<XPropertySet> & rPropertySet)
+void XMLImageMapExport::ExportPolygon(const Reference<XPropertySet> & rPropertySet)
 {
-	// polygons get exported as bounding box, viewbox, and coordinate
-	// pair sequence. The bounding box is always the entire image.
-
-	// get polygon point sequence
-	Any aAny = rPropertySet->getPropertyValue(msPolygon);
-	PointSequence aPoly;
-	aAny >>= aPoly;
-
-	// get bounding box (assume top-left to be 0,0)
-	sal_Int32 nWidth = 0;
-	sal_Int32 nHeight = 0;
-	sal_Int32 nLength = aPoly.getLength();
-	const struct awt::Point* pPointPtr = aPoly.getConstArray();
-	for	( sal_Int32 i = 0; i < nLength; i++ )
-	{
-		sal_Int32 nPolyX = pPointPtr->X;
-		sal_Int32 nPolyY = pPointPtr->Y;
-
-		if ( nPolyX > nWidth )
-			nWidth = nPolyX;
-		if ( nPolyY > nHeight )
-			nHeight = nPolyY;
-
-		pPointPtr++;
-	}
-	DBG_ASSERT(nWidth > 0, "impossible Polygon found");
-	DBG_ASSERT(nHeight > 0, "impossible Polygon found");
+    // polygons get exported as bounding box, viewbox, and coordinate
+    // pair sequence. The bounding box is always the entire image.
 
-	// parameters svg:x, svg:y, svg:width, svg:height
-	OUStringBuffer aBuffer;
-	mrExport.GetMM100UnitConverter().convertMeasure(aBuffer, 0);
-	mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_X,
-						  aBuffer.makeStringAndClear() );
-	mrExport.GetMM100UnitConverter().convertMeasure(aBuffer, 0);
-	mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_Y,
-						  aBuffer.makeStringAndClear() );
-	mrExport.GetMM100UnitConverter().convertMeasure(aBuffer, nWidth);
-	mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_WIDTH, 
-						  aBuffer.makeStringAndClear() );
-	mrExport.GetMM100UnitConverter().convertMeasure(aBuffer, nHeight);
-	mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_HEIGHT, 
-						  aBuffer.makeStringAndClear() );
+    // get polygon point sequence
+    Any aAny = rPropertySet->getPropertyValue(msPolygon);
+    PointSequence aPoly;
+    aAny >>= aPoly;
+
+    const basegfx::B2DPolygon aPolygon(
+        basegfx::tools::UnoPointSequenceToB2DPolygon(
+            aPoly));
+    const basegfx::B2DRange aPolygonRange(aPolygon.getB2DRange());
+
+    // parameters svg:x, svg:y, svg:width, svg:height
+    OUStringBuffer aBuffer;
+
+    mrExport.GetMM100UnitConverter().convertMeasure(aBuffer, 0);
+    mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_X, aBuffer.makeStringAndClear() );
+    mrExport.GetMM100UnitConverter().convertMeasure(aBuffer, 0);
+    mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_Y, aBuffer.makeStringAndClear() );
+    mrExport.GetMM100UnitConverter().convertMeasure(aBuffer, basegfx::fround(aPolygonRange.getWidth()));
+    mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_WIDTH, aBuffer.makeStringAndClear() );
+    mrExport.GetMM100UnitConverter().convertMeasure(aBuffer, basegfx::fround(aPolygonRange.getHeight()));
+    mrExport.AddAttribute( XML_NAMESPACE_SVG, XML_HEIGHT, aBuffer.makeStringAndClear() );
+
+    // svg:viewbox
+    SdXMLImExViewBox aViewBox(0.0, 0.0, aPolygonRange.getWidth(), aPolygonRange.getHeight());
+    mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_VIEWBOX, aViewBox.GetExportString());
+
+    // export point sequence
+    const ::rtl::OUString aPointString(
+        basegfx::tools::exportToSvgPoints(
+            aPolygon));
 
-	// svg:viewbox
-	SdXMLImExViewBox aViewBox(0, 0, nWidth, nHeight);
-	mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_VIEWBOX,
-				aViewBox.GetExportString());
-
-	// export point sequence
-	awt::Point aPoint(0, 0);
-	awt::Size aSize(nWidth, nHeight);
-	SdXMLImExPointsElement aPoints( &aPoly, aViewBox, aPoint, aSize );
-	mrExport.AddAttribute( XML_NAMESPACE_DRAW, XML_POINTS,
-						  aPoints.GetExportString());
+    mrExport.AddAttribute(XML_NAMESPACE_DRAW, XML_POINTS, aPointString);
 }
+
+// eof

Modified: openoffice/trunk/main/xmloff/source/draw/shapeexport2.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/xmloff/source/draw/shapeexport2.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/xmloff/source/draw/shapeexport2.cxx (original)
+++ openoffice/trunk/main/xmloff/source/draw/shapeexport2.cxx Tue Oct 29 14:11:45 2013
@@ -19,8 +19,6 @@
  * 
  *************************************************************/
 
-
-
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_xmloff.hxx"
 #include "unointerfacetouniqueidentifiermapper.hxx"
@@ -35,10 +33,7 @@
 #include <com/sun/star/drawing/HomogenMatrix3.hpp>
 #include <com/sun/star/media/ZoomLevel.hpp>
 #include "anim.hxx"
-
-#ifndef _XMLOFF_SHAPEEXPORT_HXX
 #include <xmloff/shapeexport.hxx>
-#endif
 #include "sdpropls.hxx"
 #include <tools/debug.hxx>
 #include <tools/urlobj.hxx>
@@ -50,10 +45,14 @@
 #include <tools/gen.hxx>		// FRound
 #include <xmloff/xmltoken.hxx>
 #include <xmloff/nmspmap.hxx>
-
 #include "xmloff/xmlnmspe.hxx"
 #include <basegfx/matrix/b2dhommatrix.hxx>
 #include <basegfx/tuple/b2dtuple.hxx>
+#include <basegfx/matrix/b2dhommatrixtools.hxx>
+#include <basegfx/point/b2dpoint.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
+#include <basegfx/polygon/b2dpolygontools.hxx>
 
 using ::rtl::OUString;
 using ::rtl::OUStringBuffer;
@@ -1014,116 +1013,87 @@ void XMLShapeExport::ImpExportPolygonSha
 
 		sal_Bool bCreateNewline( (nFeatures & SEF_EXPORT_NO_WS) == 0 ); // #86116#/#92210#
 
-		if(bBezier)
-		{
-			// get PolygonBezier
-			uno::Any aAny( xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Geometry"))) );
-            drawing::PolyPolygonBezierCoords* pSourcePolyPolygon =
-				(drawing::PolyPolygonBezierCoords*)aAny.getValue();
-
-			if(pSourcePolyPolygon && pSourcePolyPolygon->Coordinates.getLength())
-			{
-				sal_Int32 nOuterCnt(pSourcePolyPolygon->Coordinates.getLength());
-				drawing::PointSequence* pOuterSequence = pSourcePolyPolygon->Coordinates.getArray();
-				drawing::FlagSequence*  pOuterFlags = pSourcePolyPolygon->Flags.getArray();
-
-				if(pOuterSequence && pOuterFlags)
-				{
-					// prepare svx:d element export
-					SdXMLImExSvgDElement aSvgDElement(aViewBox);
-
-					for(sal_Int32 a(0L); a < nOuterCnt; a++)
-					{
-						drawing::PointSequence* pSequence = pOuterSequence++;
-						drawing::FlagSequence* pFlags = pOuterFlags++;
-
-						if(pSequence && pFlags)
-						{
-							aSvgDElement.AddPolygon(pSequence, pFlags,
-								aPoint, aSize, bClosed);
-						}
-					}
-
-					// write point array
-					mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_D, aSvgDElement.GetExportString());
-				}
-
-				// write object now
-				SvXMLElementExport aOBJ(mrExport, XML_NAMESPACE_DRAW, XML_PATH, bCreateNewline, sal_True);
-
-				ImpExportDescription( xShape ); // #i68101#
-				ImpExportEvents( xShape );
-				ImpExportGluePoints( xShape );
-				ImpExportText( xShape );
-			}
-		}
-		else
-		{
-			// get non-bezier polygon
-			uno::Any aAny( xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Geometry"))) );
-			drawing::PointSequenceSequence* pSourcePolyPolygon = (drawing::PointSequenceSequence*)aAny.getValue();
-
-			if(pSourcePolyPolygon && pSourcePolyPolygon->getLength())
-			{
-				sal_Int32 nOuterCnt(pSourcePolyPolygon->getLength());
-
-				if(1L == nOuterCnt && !bBezier)
-				{
-					// simple polygon shape, can be written as svg:points sequence
-					drawing::PointSequence* pSequence = pSourcePolyPolygon->getArray();
-					if(pSequence)
-					{
-						SdXMLImExPointsElement aPoints(pSequence, aViewBox, aPoint, aSize,
-							// #96328#
-							bClosed);
-
-						// write point array
-						mrExport.AddAttribute(XML_NAMESPACE_DRAW, XML_POINTS, aPoints.GetExportString());
-					}
-
-					// write object now
-					SvXMLElementExport aOBJ(mrExport, XML_NAMESPACE_DRAW,
-						bClosed ? XML_POLYGON : XML_POLYLINE , bCreateNewline, sal_True);
-
-					ImpExportDescription( xShape ); // #i68101#
-					ImpExportEvents( xShape );
-					ImpExportGluePoints( xShape );
-					ImpExportText( xShape );
-				}
-				else
-				{
-					// polypolygon or bezier, needs to be written as a svg:path sequence
-					drawing::PointSequence* pOuterSequence = pSourcePolyPolygon->getArray();
-					if(pOuterSequence)
-					{
-						// prepare svx:d element export
-						SdXMLImExSvgDElement aSvgDElement(aViewBox);
-
-						for(sal_Int32 a(0L); a < nOuterCnt; a++)
-						{
-							drawing::PointSequence* pSequence = pOuterSequence++;
-							if(pSequence)
-							{
-								aSvgDElement.AddPolygon(pSequence, 0L, aPoint,
-									aSize, bClosed);
-							}
-						}
+        if(bBezier)
+        {
+            // get PolygonBezier
+            uno::Any aAny( xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Geometry"))) );
+            const basegfx::B2DPolyPolygon aPolyPolygon(
+                basegfx::tools::UnoPolyPolygonBezierCoordsToB2DPolyPolygon(*(drawing::PolyPolygonBezierCoords*)aAny.getValue()));
 
-						// write point array
-						mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_D, aSvgDElement.GetExportString());
-					}
+            if(aPolyPolygon.count())
+            {
+                // complex polygon shape, write as svg:d
+                const ::rtl::OUString aPolygonString(
+                    basegfx::tools::exportToSvgD(
+                        aPolyPolygon,
+                        true,       // bUseRelativeCoordinates
+                        false,      // bDetectQuadraticBeziers: not used in old, but maybe activated now
+                        true));     // bHandleRelativeNextPointCompatible
+
+                // write point array
+                mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_D, aPolygonString);
+
+                // write object now
+                SvXMLElementExport aOBJ(
+                    mrExport, 
+                    XML_NAMESPACE_DRAW, 
+                    XML_PATH, 
+                    bCreateNewline, 
+                    sal_True);
+            }
+        }
+        else
+        {
+            // get non-bezier polygon
+            uno::Any aAny( xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("Geometry"))) );
+            const basegfx::B2DPolyPolygon aPolyPolygon(
+                basegfx::tools::UnoPointSequenceSequenceToB2DPolyPolygon(*(drawing::PointSequenceSequence*)aAny.getValue()));
 
-					// write object now
-					SvXMLElementExport aOBJ(mrExport, XML_NAMESPACE_DRAW, XML_PATH, bCreateNewline, sal_True);
+            if(!aPolyPolygon.areControlPointsUsed() && 1 == aPolyPolygon.count())
+            {
+                // simple polygon shape, can be written as svg:points sequence
+                const basegfx::B2DPolygon aPolygon(aPolyPolygon.getB2DPolygon(0));
+                const ::rtl::OUString aPointString(basegfx::tools::exportToSvgPoints(aPolygon));
+
+                // write point array
+                mrExport.AddAttribute(XML_NAMESPACE_DRAW, XML_POINTS, aPointString);
+
+                // write object now
+                SvXMLElementExport aOBJ(
+                    mrExport, 
+                    XML_NAMESPACE_DRAW, 
+                    aPolygon.isClosed() ? XML_POLYGON : XML_POLYLINE, 
+                    bCreateNewline, 
+                    sal_True);
+            }
+            else
+            {
+                // complex polygon shape, write as svg:d
+                const ::rtl::OUString aPolygonString(
+                    basegfx::tools::exportToSvgD(
+                        aPolyPolygon,
+                        true,       // bUseRelativeCoordinates
+                        false,      // bDetectQuadraticBeziers: not used in old, but maybe activated now
+                        true));     // bHandleRelativeNextPointCompatible
+
+                // write point array
+                mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_D, aPolygonString);
+
+                // write object now
+                SvXMLElementExport aOBJ(
+                    mrExport, 
+                    XML_NAMESPACE_DRAW, 
+                    XML_PATH, 
+                    bCreateNewline, 
+                    sal_True);
+            }
+        }
 
-					ImpExportDescription( xShape ); // #i68101#
-					ImpExportEvents( xShape );
-					ImpExportGluePoints( xShape );
-					ImpExportText( xShape );
-				}
-			}
-		}
-	}
+        ImpExportDescription( xShape ); // #i68101#
+        ImpExportEvents( xShape );
+        ImpExportGluePoints( xShape );
+        ImpExportText( xShape );
+    }
 }
 
 //////////////////////////////////////////////////////////////////////////////
@@ -1463,43 +1433,24 @@ void XMLShapeExport::ImpExportConnectorS
 		}
 	}
 
-	if( xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("PolyPolygonBezier") ) ) >>= aAny )
-	{
-		// get PolygonBezier
-		drawing::PolyPolygonBezierCoords* pSourcePolyPolygon =
-			(drawing::PolyPolygonBezierCoords*)aAny.getValue();
-
-		if(pSourcePolyPolygon && pSourcePolyPolygon->Coordinates.getLength())
-		{
-			sal_Int32 nOuterCnt(pSourcePolyPolygon->Coordinates.getLength());
-			drawing::PointSequence* pOuterSequence = pSourcePolyPolygon->Coordinates.getArray();
-			drawing::FlagSequence*  pOuterFlags = pSourcePolyPolygon->Flags.getArray();
-
-			if(pOuterSequence && pOuterFlags)
-			{
-				// prepare svx:d element export
-				awt::Point aPoint( 0, 0 );
-				awt::Size aSize( 1, 1 );
-				SdXMLImExViewBox aViewBox( 0, 0, 1, 1 );
-				SdXMLImExSvgDElement aSvgDElement(aViewBox);
-
-				for(sal_Int32 a(0L); a < nOuterCnt; a++)
-				{
-					drawing::PointSequence* pSequence = pOuterSequence++;
-					drawing::FlagSequence* pFlags = pOuterFlags++;
-
-					if(pSequence && pFlags)
-					{
-						aSvgDElement.AddPolygon(pSequence, pFlags,
-							aPoint, aSize, sal_False );
-					}
-				}
+    if( xProps->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM("PolyPolygonBezier") ) ) >>= aAny )
+    {
+        // get PolygonBezier
+        drawing::PolyPolygonBezierCoords* pSourcePolyPolygon = (drawing::PolyPolygonBezierCoords*)aAny.getValue();
 
-				// write point array
-				mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_D, aSvgDElement.GetExportString());
-			}
-		}
-	}
+        if(pSourcePolyPolygon && pSourcePolyPolygon->Coordinates.getLength())
+        {
+            const basegfx::B2DPolyPolygon aPolyPolygon(
+                basegfx::tools::UnoPolyPolygonBezierCoordsToB2DPolyPolygon(
+                    *pSourcePolyPolygon));
+            const ::rtl::OUString aPolygonString(
+                basegfx::tools::exportToSvgD(
+                    aPolyPolygon,
+                    true,           // bUseRelativeCoordinates
+                    false,          // bDetectQuadraticBeziers: not used in old, but maybe activated now
+                    true));         // bHandleRelativeNextPointCompatible
+        }
+    }
 
 	// write connector shape. Add Export later.
 	sal_Bool bCreateNewline( (nFeatures & SEF_EXPORT_NO_WS) == 0 ); // #86116#/#92210#

Modified: openoffice/trunk/main/xmloff/source/draw/shapeexport3.cxx
URL: http://svn.apache.org/viewvc/openoffice/trunk/main/xmloff/source/draw/shapeexport3.cxx?rev=1536730&r1=1536729&r2=1536730&view=diff
==============================================================================
--- openoffice/trunk/main/xmloff/source/draw/shapeexport3.cxx (original)
+++ openoffice/trunk/main/xmloff/source/draw/shapeexport3.cxx Tue Oct 29 14:11:45 2013
@@ -19,10 +19,9 @@
  * 
  *************************************************************/
 
-
-
 // MARKER(update_precomp.py): autogen include statement, do not remove
 #include "precompiled_xmloff.hxx"
+
 #include <com/sun/star/drawing/HomogenMatrix.hpp>
 #include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
 #include <com/sun/star/drawing/ProjectionMode.hpp>
@@ -32,10 +31,7 @@
 #include <com/sun/star/drawing/CameraGeometry.hpp>
 #include <com/sun/star/drawing/DoubleSequence.hpp>
 #include <tools/gen.hxx>
-
-#ifndef _XMLOFF_SHAPEEXPORT_HXX
 #include <xmloff/shapeexport.hxx>
-#endif
 #include "sdpropls.hxx"
 #include <tools/debug.hxx>
 #include <rtl/ustrbuf.hxx>
@@ -44,8 +40,12 @@
 #include "xexptran.hxx"
 #include <xmloff/xmltoken.hxx>
 #include <basegfx/vector/b3dvector.hxx>
-
-#include "xmloff/xmlnmspe.hxx"
+#include <xmloff/xmlnmspe.hxx>
+#include <basegfx/polygon/b3dpolypolygon.hxx>
+#include <basegfx/polygon/b3dpolypolygontools.hxx>
+#include <basegfx/matrix/b3dhommatrix.hxx>
+#include <basegfx/polygon/b2dpolypolygon.hxx>
+#include <basegfx/polygon/b2dpolypolygontools.hxx>
 
 using ::rtl::OUString;
 using ::rtl::OUStringBuffer;
@@ -198,104 +198,45 @@ void XMLShapeExport::ImpExport3DShape(
 			case XmlShapeTypeDraw3DLatheObject:
 			case XmlShapeTypeDraw3DExtrudeObject:
 			{
-				// write special 3DLathe/3DExtrude attributes
-				aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DPolyPolygon3D")));
-				drawing::PolyPolygonShape3D xPolyPolygon3D;
-				aAny >>= xPolyPolygon3D;
-
-				// look for maximal values
-				double fXMin = 0;
-				double fXMax = 0;
-				double fYMin = 0;
-				double fYMax = 0;
-				sal_Bool bInit(sal_False);
-				sal_Int32 nOuterSequenceCount(xPolyPolygon3D.SequenceX.getLength());
-				drawing::DoubleSequence* pInnerSequenceX = xPolyPolygon3D.SequenceX.getArray();
-				drawing::DoubleSequence* pInnerSequenceY = xPolyPolygon3D.SequenceY.getArray();
-
-				sal_Int32 a;
-                for (a = 0; a < nOuterSequenceCount; a++)
-				{
-					sal_Int32 nInnerSequenceCount(pInnerSequenceX->getLength());
-					double* pArrayX = pInnerSequenceX->getArray();
-					double* pArrayY = pInnerSequenceY->getArray();
-
-					for(sal_Int32 b(0L); b < nInnerSequenceCount; b++)
-					{
-						double fX = *pArrayX++;
-						double fY = *pArrayY++;
-
-						if(bInit)
-						{
-							if(fX > fXMax)
-								fXMax = fX;
-
-							if(fX < fXMin)
-								fXMin = fX;
-
-							if(fY > fYMax)
-								fYMax = fY;
-
-							if(fY < fYMin)
-								fYMin = fY;
-						}
-						else
-						{
-							fXMin = fXMax = fX;
-							fYMin = fYMax = fY;
-							bInit = sal_True;
-						}
-					}
-
-					pInnerSequenceX++;
-					pInnerSequenceY++;
-				}
-
-				// export ViewBox
-				awt::Point aMinPoint(FRound(fXMin), FRound(fYMin));
-				awt::Size aMaxSize(FRound(fXMax) - aMinPoint.X, FRound(fYMax) - aMinPoint.Y);
-				SdXMLImExViewBox aViewBox(
-					aMinPoint.X, aMinPoint.Y, aMaxSize.Width, aMaxSize.Height);
-				mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_VIEWBOX, 
-					aViewBox.GetExportString());
-
-				// prepare svx:d element export
-				SdXMLImExSvgDElement aSvgDElement(aViewBox);
-				pInnerSequenceX = xPolyPolygon3D.SequenceX.getArray();
-				pInnerSequenceY = xPolyPolygon3D.SequenceY.getArray();
-
-                for (a = 0; a < nOuterSequenceCount; a++)
-				{
-					sal_Int32 nInnerSequenceCount(pInnerSequenceX->getLength());
-					double* pArrayX = pInnerSequenceX->getArray();
-					double* pArrayY = pInnerSequenceY->getArray();
-					drawing::PointSequence aPoly(nInnerSequenceCount);
-					awt::Point* pInnerSequence = aPoly.getArray();
-
-					for(sal_Int32 b(0L); b < nInnerSequenceCount; b++)
-					{
-						double fX = *pArrayX++;
-						double fY = *pArrayY++;
-
-						*pInnerSequence = awt::Point(FRound(fX), FRound(fY));
-						pInnerSequence++;
-					}
-
-					// calculate closed flag
-					awt::Point* pFirst = aPoly.getArray();
-					awt::Point* pLast = pFirst + (nInnerSequenceCount - 1);
-					sal_Bool bClosed = (pFirst->X == pLast->X && pFirst->Y == pLast->Y);
-
-					aSvgDElement.AddPolygon(&aPoly, 0L, aMinPoint, 
-						aMaxSize, bClosed);
-
-					// #80594# corrected error in PolyPolygon3D export for 3D XML
-					pInnerSequenceX++;
-					pInnerSequenceY++;
-				}
+                // write special 3DLathe/3DExtrude attributes, get 3D PolyPolygon as drawing::PolyPolygonShape3D
+                aAny = xPropSet->getPropertyValue(OUString(RTL_CONSTASCII_USTRINGPARAM("D3DPolyPolygon3D")));
+                drawing::PolyPolygonShape3D xPolyPolygon3D;
+                aAny >>= xPolyPolygon3D;
+
+                // convert to 3D PolyPolygon
+                const basegfx::B3DPolyPolygon aPolyPolygon3D(
+                    basegfx::tools::UnoPolyPolygonShape3DToB3DPolyPolygon(
+                        xPolyPolygon3D));
+
+                // convert to 2D PolyPolygon using identity 3D transformation (just grep X and Y)
+                const basegfx::B3DHomMatrix aB3DHomMatrixFor2DConversion;
+                const basegfx::B2DPolyPolygon aPolyPolygon(
+                    basegfx::tools::createB2DPolyPolygonFromB3DPolyPolygon(
+                        aPolyPolygon3D,
+                        aB3DHomMatrixFor2DConversion));
+
+                // get 2D range of it
+                const basegfx::B2DRange aPolyPolygonRange(aPolyPolygon.getB2DRange());
+
+                // export ViewBox
+                SdXMLImExViewBox aViewBox(
+                    aPolyPolygonRange.getMinX(), 
+                    aPolyPolygonRange.getMinY(), 
+                    aPolyPolygonRange.getWidth(), 
+                    aPolyPolygonRange.getHeight());
+
+                mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_VIEWBOX, aViewBox.GetExportString());
+
+                // prepare svg:d string
+                const ::rtl::OUString aPolygonString(
+                    basegfx::tools::exportToSvgD(
+                        aPolyPolygon,
+                        true,           // bUseRelativeCoordinates
+                        false,          // bDetectQuadraticBeziers TTTT: not used in old, but maybe activated now
+                        true));         // bHandleRelativeNextPointCompatible
 
-				// write point array
-				mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_D, aSvgDElement.GetExportString());
+                // write point array
+                mrExport.AddAttribute(XML_NAMESPACE_SVG, XML_D, aPolygonString);
 
 				if(eShapeType == XmlShapeTypeDraw3DLatheObject)
 				{