20#include <com/sun/star/geometry/RealSize2D.hpp>
21#include <com/sun/star/geometry/RealPoint2D.hpp>
22#include <com/sun/star/geometry/RealRectangle2D.hpp>
23#include <com/sun/star/geometry/RealRectangle3D.hpp>
24#include <com/sun/star/geometry/RealBezierSegment2D.hpp>
25#include <com/sun/star/geometry/AffineMatrix2D.hpp>
26#include <com/sun/star/geometry/AffineMatrix3D.hpp>
27#include <com/sun/star/geometry/IntegerSize2D.hpp>
28#include <com/sun/star/geometry/IntegerRectangle2D.hpp>
29#include <com/sun/star/lang/IllegalArgumentException.hpp>
30#include <com/sun/star/rendering/XPolyPolygon2D.hpp>
31#include <com/sun/star/rendering/XGraphicDevice.hpp>
32#include <com/sun/star/awt/Rectangle.hpp>
50 uno::Sequence< geometry::RealBezierSegment2D > bezierSequenceFromB2DPolygon(const ::basegfx::B2DPolygon& rPoly)
52 const sal_uInt32 nPointCount(rPoly.count());
53 uno::Sequence< geometry::RealBezierSegment2D > outputSequence(nPointCount);
54 geometry::RealBezierSegment2D* pOutput = outputSequence.getArray();
57 for(sal_uInt32
a(0);
a < nPointCount;
a++)
63 pOutput[
a] = geometry::RealBezierSegment2D(
69 return outputSequence;
72 uno::Sequence< geometry::RealPoint2D > pointSequenceFromB2DPolygon( const ::basegfx::B2DPolygon& rPoly )
74 const sal_uInt32 nNumPoints( rPoly.count() );
76 uno::Sequence< geometry::RealPoint2D > outputSequence( nNumPoints );
77 geometry::RealPoint2D* pOutput = outputSequence.getArray();
81 for(
i=0;
i<nNumPoints; ++
i )
83 const ::basegfx::B2DPoint aPoint( rPoly.getB2DPoint(
i) );
85 pOutput[
i] = geometry::RealPoint2D( aPoint.getX(),
89 return outputSequence;
95 const sal_uInt32 nNumPolies( rPolyPoly.count() );
98 uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > > outputSequence( nNumPolies );
99 uno::Sequence< geometry::RealBezierSegment2D >* pOutput = outputSequence.getArray();
101 for(
i=0;
i<nNumPolies; ++
i )
103 pOutput[
i] = bezierSequenceFromB2DPolygon( rPolyPoly.getB2DPolygon(
i) );
106 return outputSequence;
111 const sal_uInt32 nNumPolies( rPolyPoly.count() );
114 uno::Sequence< uno::Sequence< geometry::RealPoint2D > > outputSequence( nNumPolies );
115 uno::Sequence< geometry::RealPoint2D >* pOutput = outputSequence.getArray();
117 for(
i=0;
i<nNumPolies; ++
i )
119 pOutput[
i] = pointSequenceFromB2DPolygon( rPolyPoly.getB2DPolygon(
i) );
122 return outputSequence;
126 const ::basegfx::B2DPolygon& rPoly )
128 uno::Reference< rendering::XPolyPolygon2D > xRes;
130 if( !xGraphicDevice.is() )
133 if( rPoly.areControlPointsUsed() )
135 uno::Sequence< uno::Sequence< geometry::RealBezierSegment2D > > outputSequence{ bezierSequenceFromB2DPolygon( rPoly )};
137 xRes = xGraphicDevice->createCompatibleBezierPolyPolygon( outputSequence );
141 uno::Sequence< uno::Sequence< geometry::RealPoint2D > > outputSequence{
142 pointSequenceFromB2DPolygon( rPoly )};
144 xRes = xGraphicDevice->createCompatibleLinePolyPolygon( outputSequence );
147 if( xRes.is() && rPoly.isClosed() )
148 xRes->setClosed( 0,
true );
154 const ::basegfx::B2DPolyPolygon& rPolyPoly )
156 uno::Reference< rendering::XPolyPolygon2D > xRes;
158 if( !xGraphicDevice.is() )
161 const sal_uInt32 nNumPolies( rPolyPoly.count() );
164 if( rPolyPoly.areControlPointsUsed() )
166 xRes = xGraphicDevice->createCompatibleBezierPolyPolygon(
171 xRes = xGraphicDevice->createCompatibleLinePolyPolygon(
175 for(
i=0;
i<nNumPolies; ++
i )
177 xRes->setClosed(
i, rPolyPoly.getB2DPolygon(
i).isClosed() );
185 const sal_Int32 nCurrSize( points.getLength() );
189 for( sal_Int32 nCurrPoint=0; nCurrPoint<nCurrSize; ++nCurrPoint )
199 for(
const auto &
p : points )
209 const sal_Int32 nSize(curves.getLength());
216 const geometry::RealBezierSegment2D& rFirstSegment(curves[0]);
219 for(sal_Int32
a(0);
a < nSize;
a++)
221 const geometry::RealBezierSegment2D& rCurrSegment(curves[
a]);
222 const geometry::RealBezierSegment2D& rNextSegment(curves[(
a + 1) % nSize]);
243 for(
const auto & c : curves )
264 const sal_Int32 nPolys( xPoly->getNumberOfPolygons() );
266 uno::Reference< rendering::XBezierPolyPolygon2D > xBezierPoly(
270 if( xBezierPoly.is() )
273 xBezierPoly->getBezierSegments( 0,
280 uno::Reference< rendering::XLinePolyPolygon2D > xLinePoly(
286 if( !xLinePoly.is() )
288 throw lang::IllegalArgumentException(
289 "basegfx::unotools::b2DPolyPolygonFromXPolyPolygon2D(): Invalid input"
290 "poly-polygon, cannot retrieve vertex data",
291 uno::Reference< uno::XInterface >(),
296 xLinePoly->getPoints( 0,
305 const geometry::AffineMatrix2D& input )
310 output.
set(0,0, input.m00);
311 output.
set(0,1, input.m01);
312 output.
set(0,2, input.m02);
313 output.
set(1,0, input.m10);
314 output.
set(1,1, input.m11);
315 output.
set(1,2, input.m12);
324 output.
set(0,0, input.m00);
325 output.
set(0,1, input.m01);
326 output.
set(0,2, input.m02);
327 output.
set(0,3, input.m03);
329 output.
set(1,0, input.m10);
330 output.
set(1,1, input.m11);
331 output.
set(1,2, input.m12);
332 output.
set(1,3, input.m13);
334 output.
set(2,0, input.m20);
335 output.
set(2,1, input.m21);
336 output.
set(2,2, input.m22);
337 output.
set(2,3, input.m23);
343 const ::basegfx::B2DHomMatrix& input)
345 output.m00 = input.get(0,0);
346 output.m01 = input.get(0,1);
347 output.m02 = input.get(0,2);
348 output.m10 = input.get(1,0);
349 output.m11 = input.get(1,1);
350 output.m12 = input.get(1,2);
356 geometry::AffineMatrix3D& output,
357 const ::basegfx::B3DHomMatrix& input)
359 output.m00 = input.get(0,0);
360 output.m01 = input.get(0,1);
361 output.m02 = input.get(0,2);
362 output.m03 = input.get(0,3);
364 output.m10 = input.get(1,0);
365 output.m11 = input.get(1,1);
366 output.m12 = input.get(1,2);
367 output.m13 = input.get(1,3);
369 output.m20 = input.get(2,0);
370 output.m21 = input.get(2,1);
371 output.m22 = input.get(2,2);
372 output.m23 = input.get(2,3);
379 return geometry::RealSize2D(rSize.getWidth(), rSize.getHeight());
384 return geometry::RealPoint2D( rPoint.getX(),
390 return geometry::RealRectangle2D( rRect.getMinX(),
398 return geometry::RealRectangle3D( rRect.getMinX(),
408 return ::basegfx::B2DPoint( rPoint.X,
414 return ::basegfx::B2DRange( rRect.X1,
422 return ::basegfx::B3DRange( rRect.X1,
432 return geometry::IntegerSize2D( rSize.getX(),
438 return ::basegfx::B2IVector( rSize.Width,
444 return ::basegfx::B2IRange( rRectangle.X1, rRectangle.Y1,
445 rRectangle.X2, rRectangle.Y2 );
450 return ::basegfx::B2IRange( rRect.X,
452 rRect.X + rRect.Width,
453 rRect.Y + rRect.Height );
458 return ::basegfx::B2IRange(
static_cast<sal_Int32
>( floor(rRange.getMinX()) ),
459 static_cast<sal_Int32
>( floor(rRange.getMinY()) ),
460 static_cast<sal_Int32
>( ceil(rRange.getMaxX()) ),
461 static_cast<sal_Int32
>( ceil(rRange.getMaxY()) ) );
466 return ::basegfx::B2DRange( floor(rRange.getMinX()),
467 floor(rRange.getMinY()),
468 ceil(rRange.getMaxX()),
469 ceil(rRange.getMaxY()) );
void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue)
Base Point class with two double values.
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
void setPrevControlPoint(sal_uInt32 nIndex, const basegfx::B2DPoint &rValue)
basegfx::B2DPoint getPrevControlPoint(sal_uInt32 nIndex) const
Basic ControlPoint interface.
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
sal_uInt32 count() const
member count
void remove(sal_uInt32 nIndex, sal_uInt32 nCount=1)
remove points
void appendBezierSegment(const basegfx::B2DPoint &rNextControlPoint, const basegfx::B2DPoint &rPrevControlPoint, const basegfx::B2DPoint &rPoint)
Bezier segment append with control points. The current last polygon point is implicitly taken as star...
A two-dimensional interval over doubles.
A two-dimensional interval over integers.
Base Point class with two sal_Int32 values.
void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue)
TYPE getX() const
Get X-Coordinate of 2D Tuple.
TYPE getY() const
Get Y-Coordinate of 2D Tuple.