diff options
Diffstat (limited to 'basegfx/inc/basegfx')
81 files changed, 0 insertions, 14173 deletions
diff --git a/basegfx/inc/basegfx/basegfxdllapi.h b/basegfx/inc/basegfx/basegfxdllapi.h deleted file mode 100644 index 18ad22b447..0000000000 --- a/basegfx/inc/basegfx/basegfxdllapi.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ -#ifndef INCLUDED_BASEGFXDLLAPI_H -#define INCLUDED_BASEGFXDLLAPI_H - -#if defined BASEGFX_STATICLIBRARY - -#define BASEGFX_DLLPUBLIC -#define BASEGFX_DLLPRIVATE - -#else /*BASEGFX_STATICLIBRARY*/ - -#if defined BASEGFX_DLLIMPLEMENTATION -#define BASEGFX_DLLPUBLIC SAL_DLLPUBLIC_EXPORT -#else -#define BASEGFX_DLLPUBLIC SAL_DLLPUBLIC_IMPORT -#endif -#define BASEGFX_DLLPRIVATE SAL_DLLPRIVATE - -#endif /*BASEGFX_STATICLIBRARY*/ - -#endif - - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/color/bcolor.hxx b/basegfx/inc/basegfx/color/bcolor.hxx deleted file mode 100644 index c82562c06d..0000000000 --- a/basegfx/inc/basegfx/color/bcolor.hxx +++ /dev/null @@ -1,241 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_COLOR_BCOLOR_HXX -#define _BGFX_COLOR_BCOLOR_HXX - -#include <basegfx/tuple/b3dtuple.hxx> -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -namespace com { namespace sun { namespace star { namespace rendering { - class XGraphicDevice; -}}}} - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - /** Base Color class with three double values - - This class derives all operators and common handling for - a 3D data class from B3DTuple. All necessary extensions - which are special for colors will be added here. - - @see B3DTuple - */ - class BASEGFX_DLLPUBLIC BColor : public B3DTuple - { - public: - /** Create a Color with red, green and blue components from [0.0 to 1.0] - - The color is initialized to (0.0, 0.0, 0.0) - */ - BColor() - : B3DTuple() - {} - - /** Create a 3D Color - - @param fRed - @param fGreen - @param fBlue - These parameters are used to initialize the red, green and blue intensities of the color - */ - BColor(double fRed, double fGreen, double fBlue) - : B3DTuple(fRed, fGreen, fBlue) - {} - - /** Create a 3D Color - - @param fLuminosity - The parameter is used to initialize the red, green and blue intensities of the color - */ - BColor(double fLuminosity) - : B3DTuple(fLuminosity, fLuminosity, fLuminosity) - {} - - /** Create a copy of a Color - - @param rVec - The Color which will be copied. - */ - BColor(const BColor& rVec) - : B3DTuple(rVec) - {} - - /** constructor with tuple to allow copy-constructing - from B3DTuple-based classes - */ - BColor(const ::basegfx::B3DTuple& rTuple) - : B3DTuple(rTuple) - {} - - ~BColor() - {} - - // data access read - double getRed() const { return mfX; } - double getGreen() const { return mfY; } - double getBlue() const { return mfZ; } - - // data access write - void setRed(double fNew) { mfX = fNew; } - void setGreen(double fNew) { mfY = fNew; } - void setBlue(double fNew) { mfZ = fNew; } - - /** *=operator to allow usage from BColor, too - */ - BColor& operator*=( const BColor& rPnt ) - { - mfX *= rPnt.mfX; - mfY *= rPnt.mfY; - mfZ *= rPnt.mfZ; - return *this; - } - - /** *=operator to allow usage from BColor, too - */ - BColor& operator*=(double t) - { - mfX *= t; - mfY *= t; - mfZ *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B3DTuple calculations - */ - BColor& operator=( const ::basegfx::B3DTuple& rVec ) - { - mfX = rVec.getX(); - mfY = rVec.getY(); - mfZ = rVec.getZ(); - return *this; - } - - // blend to another color using luminance - void blend(const BColor& rColor) - { - const double fLuminance(luminance()); - mfX = rColor.getRed() * fLuminance; - mfY = rColor.getGreen() * fLuminance; - mfZ = rColor.getBlue() * fLuminance; - } - - // luminance - double luminance() const - { - const double fRedWeight(77.0 / 256.0); - const double fGreenWeight(151.0 / 256.0); - const double fBlueWeight(28.0 / 256.0); - - return (mfX * fRedWeight + mfY * fGreenWeight + mfZ * fBlueWeight); - } - - // distances in color space - double getDistanceRed(const BColor& rColor) const { return (getRed() > rColor.getRed() ? getRed() - rColor.getRed() : rColor.getRed() - getRed()); } - double getDistanceGreen(const BColor& rColor) const { return (getGreen() > rColor.getGreen() ? getGreen() - rColor.getGreen() : rColor.getGreen() - getGreen()); } - double getDistanceBlue(const BColor& rColor) const { return (getBlue() > rColor.getBlue() ? getBlue() - rColor.getBlue() : rColor.getBlue() - getBlue()); } - - double getDistance(const BColor& rColor) const - { - const double fDistR(getDistanceRed(rColor)); - const double fDistG(getDistanceGreen(rColor)); - const double fDistB(getDistanceBlue(rColor)); - - return sqrt(fDistR * fDistR + fDistG * fDistG + fDistB * fDistB); - } - - double getMinimumDistance(const BColor& rColor) const - { - const double fDistR(getDistanceRed(rColor)); - const double fDistG(getDistanceGreen(rColor)); - const double fDistB(getDistanceBlue(rColor)); - - double fRetval(fDistR < fDistG ? fDistR : fDistG); - return (fRetval < fDistB ? fRetval : fDistB); - } - - double getMaximumDistance(const BColor& rColor) const - { - const double fDistR(getDistanceRed(rColor)); - const double fDistG(getDistanceGreen(rColor)); - const double fDistB(getDistanceBlue(rColor)); - - double fRetval(fDistR > fDistG ? fDistR : fDistG); - return (fRetval > fDistB ? fRetval : fDistB); - } - - // clamp color to [0.0..1.0] values in all three intensity components - void clamp() - { - mfX = basegfx::clamp(mfX, 0.0, 1.0); - mfY = basegfx::clamp(mfY, 0.0, 1.0); - mfZ = basegfx::clamp(mfZ, 0.0, 1.0); - } - - void invert() - { - mfX = 1.0 - mfX; - mfY = 1.0 - mfY; - mfZ = 1.0 - mfZ; - } - - static const BColor& getEmptyBColor() - { - return (const BColor&) ::basegfx::B3DTuple::getEmptyTuple(); - } - - com::sun::star::uno::Sequence< double > colorToDoubleSequence(const com::sun::star::uno::Reference< com::sun::star::rendering::XGraphicDevice >& /*xGraphicDevice*/) const - { - com::sun::star::uno::Sequence< double > aRet(4); - double* pRet = aRet.getArray(); - - pRet[0] = mfX; - pRet[1] = mfY; - pRet[2] = mfZ; - pRet[3] = 1.0; - - return aRet; - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_COLOR_BCOLOR_HXX */ - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/color/bcolormodifier.hxx b/basegfx/inc/basegfx/color/bcolormodifier.hxx deleted file mode 100644 index 21dc59368d..0000000000 --- a/basegfx/inc/basegfx/color/bcolormodifier.hxx +++ /dev/null @@ -1,147 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_COLOR_BCOLORMODIFIER_HXX -#define _BGFX_COLOR_BCOLORMODIFIER_HXX - -#include <basegfx/color/bcolor.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - /** Descriptor for type of color modification - */ - enum BColorModifyMode - { - BCOLORMODIFYMODE_REPLACE, // replace all color with local color - BCOLORMODIFYMODE_INTERPOLATE, // interpolate color between given and local with local value - BCOLORMODIFYMODE_GRAY, // convert color to gray - BCOLORMODIFYMODE_BLACKANDWHITE // convert color to B&W, local value is treshhold - }; - - /** Class to hold a color, value and mode for a color modification. Color modification is - done calling the getModifiedColor() method - */ - class BASEGFX_DLLPUBLIC BColorModifier - { - protected: - ::basegfx::BColor maBColor; - double mfValue; - BColorModifyMode meMode; - - public: - BColorModifier( - const ::basegfx::BColor& rBColor, - double fValue = 0.5, - BColorModifyMode eMode = BCOLORMODIFYMODE_REPLACE) - : maBColor(rBColor), - mfValue(fValue), - meMode(eMode) - {} - - // compare operator(s) - bool operator==(const BColorModifier& rCompare) const - { - return (maBColor == rCompare.maBColor && mfValue == rCompare.mfValue && meMode == rCompare.meMode); - } - - bool operator!=(const BColorModifier& rCompare) const - { - return !(operator==(rCompare)); - } - - // data access - const ::basegfx::BColor& getBColor() const { return maBColor; } - double getValue() const { return mfValue; } - BColorModifyMode getMode() const { return meMode; } - - // compute modified color - ::basegfx::BColor getModifiedColor(const ::basegfx::BColor& aSourceColor) const; - }; - - /** Class to hold a stack of BColorModifiers and to get the modified color with - applying all existing entry changes - */ - class BASEGFX_DLLPUBLIC BColorModifierStack - { - protected: - ::std::vector< BColorModifier > maBColorModifiers; - - public: - sal_uInt32 count() const - { - return maBColorModifiers.size(); - } - - const BColorModifier& getBColorModifier(sal_uInt32 nIndex) const - { - OSL_ENSURE(nIndex < count(), "BColorModifierStack: Access out of range (!)"); - return maBColorModifiers[nIndex]; - } - - ::basegfx::BColor getModifiedColor(const ::basegfx::BColor& rSource) const - { - if(count()) - { - ::basegfx::BColor aRetval(rSource); - ::std::vector< BColorModifier >::const_iterator aEnd(maBColorModifiers.end()); - - while(aEnd != maBColorModifiers.begin()) - { - aRetval = (--aEnd)->getModifiedColor(aRetval); - } - - return aRetval; - } - else - { - return rSource; - } - } - - void push(const BColorModifier& rNew) - { - maBColorModifiers.push_back(rNew); - } - - void pop() - { - maBColorModifiers.pop_back(); - } - }; -} // end of namespace basegfx - -#endif // _BGFX_COLOR_BCOLORMODIFIER_HXX - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/color/bcolortools.hxx b/basegfx/inc/basegfx/color/bcolortools.hxx deleted file mode 100644 index dbcf9b30a1..0000000000 --- a/basegfx/inc/basegfx/color/bcolortools.hxx +++ /dev/null @@ -1,76 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_COLOR_BCOLORTOOLS_HXX -#define _BGFX_COLOR_BCOLORTOOLS_HXX - -#include <sal/types.h> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BColor; - - namespace tools - { - /// Transform from RGB to HSL - BASEGFX_DLLPUBLIC BColor rgb2hsl(const BColor& rRGBColor); - /// Transform from HSL to RGB - BASEGFX_DLLPUBLIC BColor hsl2rgb(const BColor& rHSLColor); - - /// Transform from RGB to HSV - BASEGFX_DLLPUBLIC BColor rgb2hsv(const BColor& rRGBColor); - /// Transform from HSV to RGB - BASEGFX_DLLPUBLIC BColor hsv2rgb(const BColor& rHSVColor); - - /// Transform from R'G'B' to YIQ (NTSC color model - Y is used in monochrome mode) - BASEGFX_DLLPUBLIC BColor rgb2yiq(const BColor& rRGBColor); - /// Transform from YIQ to R'G'B' (NTSC color model - Y is used in monochrome mode) - BASEGFX_DLLPUBLIC BColor yiq2rgb(const BColor& rYIQColor); - - /// Transform from R'G'B' to Y'PbPr (the [0,1]x[-.5,.5]x[-.5,.5] equivalent of Y'CbCr (which is scaled into 8bit)) - BASEGFX_DLLPUBLIC BColor rgb2ypbpr(const BColor& rRGBColor); - /// Transform from Y'PbPr (the [0,1]x[-.5,.5]x[-.5,.5] equivalent of Y'CbCr (which is scaled into 8bit)) into R'G'B' - BASEGFX_DLLPUBLIC BColor ypbpr2rgb(const BColor& rYPbPrColor); - - /// Transform from CIE XYZ into Rec. 709 RGB (D65 white point) - BASEGFX_DLLPUBLIC BColor ciexyz2rgb( const BColor& rXYZColor ); - /// Transform from Rec. 709 RGB (D65 white point) into CIE XYZ - BASEGFX_DLLPUBLIC BColor rgb2ciexyz( const BColor& rRGBColor ); - - } -} // end of namespace basegfx - -#endif /* _BGFX_COLOR_BCOLORTOOLS_HXX */ - -////////////////////////////////////////////////////////////////////////////// -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/curve/b2dbeziertools.hxx b/basegfx/inc/basegfx/curve/b2dbeziertools.hxx deleted file mode 100644 index 16c1c4ec6f..0000000000 --- a/basegfx/inc/basegfx/curve/b2dbeziertools.hxx +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_CURVE_B2DBEZIERTOOLS_HXX -#define _BGFX_CURVE_B2DBEZIERTOOLS_HXX - -#include <sal/types.h> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predefines - -namespace basegfx -{ - class B2DCubicBezier; -} - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B2DCubicBezierHelper - { - private: - ::std::vector< double > maLengthArray; - sal_uInt32 mnEdgeCount; - - public: - B2DCubicBezierHelper(const B2DCubicBezier& rBase, sal_uInt32 nDivisions = 9); - - double getLength() const { if(maLengthArray.size()) return maLengthArray[maLengthArray.size() - 1]; else return 0.0; } - double distanceToRelative(double fDistance) const; - }; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_CURVE_B2DBEZIERTOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/curve/b2dcubicbezier.hxx b/basegfx/inc/basegfx/curve/b2dcubicbezier.hxx deleted file mode 100644 index 4fd89bfa58..0000000000 --- a/basegfx/inc/basegfx/curve/b2dcubicbezier.hxx +++ /dev/null @@ -1,210 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_CURVE_B2DCUBICBEZIER_HXX -#define _BGFX_CURVE_B2DCUBICBEZIER_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -namespace basegfx -{ - class B2DPolygon; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B2DCubicBezier - { - B2DPoint maStartPoint; - B2DPoint maEndPoint; - B2DPoint maControlPointA; - B2DPoint maControlPointB; - - public: - B2DCubicBezier(); - B2DCubicBezier(const B2DCubicBezier& rBezier); - B2DCubicBezier(const B2DPoint& rStart, const B2DPoint& rEnd); - B2DCubicBezier(const B2DPoint& rStart, const B2DPoint& rControlPointA, const B2DPoint& rControlPointB, const B2DPoint& rEnd); - ~B2DCubicBezier(); - - // assignment operator - B2DCubicBezier& operator=(const B2DCubicBezier& rBezier); - - // compare operators - bool operator==(const B2DCubicBezier& rBezier) const; - bool operator!=(const B2DCubicBezier& rBezier) const; - bool equal(const B2DCubicBezier& rBezier) const; - - // test if vectors are used - bool isBezier() const; - - // test if contained bezier is trivial and reset vectors accordingly - void testAndSolveTrivialBezier(); - - /** get length of edge - - This method handles beziers and simple edges. For - beziers, the deviation describes the maximum allowed - deviation from the real edge length. The default - allows a deviation of 1% from the correct length. - - For beziers, there is no direct way to get the length, - thus this method may subdivide the bezier edge and may - not be cheap. - - @param fDeviation - The maximal allowed deviation between correct length - and bezier edge length - - @return - The length of the edge - */ - double getLength(double fDeviation = 0.01) const; - - // get distance between start and end point - double getEdgeLength() const; - - // get length of control polygon - double getControlPolygonLength() const; - - // data interface - B2DPoint getStartPoint() const { return maStartPoint; } - void setStartPoint(const B2DPoint& rValue) { maStartPoint = rValue; } - - B2DPoint getEndPoint() const { return maEndPoint; } - void setEndPoint(const B2DPoint& rValue) { maEndPoint = rValue; } - - B2DPoint getControlPointA() const { return maControlPointA; } - void setControlPointA(const B2DPoint& rValue) { maControlPointA = rValue; } - - B2DPoint getControlPointB() const { return maControlPointB; } - void setControlPointB(const B2DPoint& rValue) { maControlPointB = rValue; } - - /** get the tangent in point t - - This method handles all the exceptions, e.g. when control point - A is equal to start point and/or control point B is equal to end - point - - @param t - The bezier index in the range [0.0 .. 1.0]. It will be truncated. - - @return - The tangent vector in point t - */ - B2DVector getTangent(double t) const; - - /** adaptive subdivide by angle criteria - no start point is added, but all necessary created edges - and the end point - #i37443# allow the criteria to get unsharp in recursions - */ - void adaptiveSubdivideByAngle(B2DPolygon& rTarget, double fAngleBound, bool bAllowUnsharpen) const; - - /** #i37443# adaptive subdivide by nCount subdivisions - no start point is added, but all necessary created edges - and the end point - */ - void adaptiveSubdivideByCount(B2DPolygon& rTarget, sal_uInt32 nCount) const; - - /** Subdivide cubic bezier segment. - - This function adaptively subdivides the bezier - segment into as much straight line segments as necessary, - such that the maximal orthogonal distance from any of the - segments to the true curve is less than the given error - value. - No start point is added, but all necessary created edges - and the end point - - @param rPoly - Output polygon. The subdivided bezier segment is added to - this polygon via B2DPolygon::append(). - - @param rCurve - The cubic bezier curve to subdivide - - @param fDistanceBound - Bound on the maximal distance of the approximation to the - true curve. - */ - void adaptiveSubdivideByDistance(B2DPolygon& rTarget, double fDistanceBound) const; - - // get point at given relative position - B2DPoint interpolatePoint(double t) const; - - // calculate the smallest distance from given point to this cubic bezier segment - // and return the value. The relative position on the segment is returned in rCut. - double getSmallestDistancePointToBezierSegment(const B2DPoint& rTestPoint, double& rCut) const; - - // do a split at position t and fill both resulting segments - void split(double t, B2DCubicBezier* pBezierA, B2DCubicBezier* pBezierB) const; - - // extract snippet from fStart to fEnd from this bezier - B2DCubicBezier snippet(double fStart, double fEnd) const; - - // get range including conrol points - B2DRange getRange() const; - - /** Get the minimum extremum position t - - @param rfResult - Will be changed and set to a eventually found split value which should be in the - range [0.0 .. 1.0]. It will be the smallest current extremum; there may be more - - @return - Returns true if there was at least one extremum found - */ - bool getMinimumExtremumPosition(double& rfResult) const; - - /** Get all extremum pos of this segment - - This method will calculate all extremum positions of the segment - and add them to rResults if they are in the range ]0.0 .. 1.0[ - - @param rResults - The vector of doubles where the results will be added. Evtl. - existing contents will be removed since an empty vector is a - necessary result to express that there are no extreme positions - anymore. Since there is an upper maximum of 4 values, it makes - sense to use reserve(4) at the vector as preparation. - */ - void getAllExtremumPositions(::std::vector< double >& rResults) const; - }; -} // end of namespace basegfx - -#endif /* _BGFX_CURVE_B2DCUBICBEZIER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/curve/b2dquadraticbezier.hxx b/basegfx/inc/basegfx/curve/b2dquadraticbezier.hxx deleted file mode 100644 index 18d8c6acdc..0000000000 --- a/basegfx/inc/basegfx/curve/b2dquadraticbezier.hxx +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_CURVE_B2DQUADRATICBEZIER_HXX -#define _BGFX_CURVE_B2DQUADRATICBEZIER_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B2DQuadraticBezier - { - ::basegfx::B2DPoint maStartPoint; - ::basegfx::B2DPoint maEndPoint; - ::basegfx::B2DPoint maControlPoint; - - public: - B2DQuadraticBezier(); - B2DQuadraticBezier(const B2DQuadraticBezier& rBezier); - B2DQuadraticBezier(const ::basegfx::B2DPoint& rStart, const ::basegfx::B2DPoint& rEnd); - B2DQuadraticBezier(const ::basegfx::B2DPoint& rStart, - const ::basegfx::B2DPoint& rControlPoint, const ::basegfx::B2DPoint& rEnd); - ~B2DQuadraticBezier(); - - // assignment operator - B2DQuadraticBezier& operator=(const B2DQuadraticBezier& rBezier); - - // compare operators - bool operator==(const B2DQuadraticBezier& rBezier) const; - bool operator!=(const B2DQuadraticBezier& rBezier) const; - - // test if control point is placed on the edge - bool isBezier() const; - - // data interface - ::basegfx::B2DPoint getStartPoint() const { return maStartPoint; } - void setStartPoint(const ::basegfx::B2DPoint& rValue) { maStartPoint = rValue; } - - ::basegfx::B2DPoint getEndPoint() const { return maEndPoint; } - void setEndPoint(const ::basegfx::B2DPoint& rValue) { maEndPoint = rValue; } - - ::basegfx::B2DPoint getControlPoint() const { return maControlPoint; } - void setControlPoint(const ::basegfx::B2DPoint& rValue) { maControlPoint = rValue; } - }; -} // end of namespace basegfx - -#endif /* _BGFX_CURVE_B2DQUADRATICBEZIER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/matrix/b2dhommatrix.hxx b/basegfx/inc/basegfx/matrix/b2dhommatrix.hxx deleted file mode 100644 index 7563cf04e5..0000000000 --- a/basegfx/inc/basegfx/matrix/b2dhommatrix.hxx +++ /dev/null @@ -1,172 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_MATRIX_B2DHOMMATRIX_HXX -#define _BGFX_MATRIX_B2DHOMMATRIX_HXX - -#include <sal/types.h> -#include <o3tl/cow_wrapper.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - class B2DTuple; - class Impl2DHomMatrix; - - class BASEGFX_DLLPUBLIC B2DHomMatrix - { - public: - typedef o3tl::cow_wrapper< Impl2DHomMatrix > ImplType; - - private: - ImplType mpImpl; - - public: - B2DHomMatrix(); - B2DHomMatrix(const B2DHomMatrix& rMat); - ~B2DHomMatrix(); - - /** constructor to allow setting all needed values for a 3x2 matrix at once. The - parameter f_0x1 e.g. is the same as using set(0, 1, f) - */ - B2DHomMatrix(double f_0x0, double f_0x1, double f_0x2, double f_1x0, double f_1x1, double f_1x2); - - /// unshare this matrix with all internally shared instances - void makeUnique(); - - double get(sal_uInt16 nRow, sal_uInt16 nColumn) const; - void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue); - - /** allow setting all needed values for a 3x2 matrix in one call. The - parameter f_0x1 e.g. is the same as using set(0, 1, f) - */ - void set3x2(double f_0x0, double f_0x1, double f_0x2, double f_1x0, double f_1x1, double f_1x2); - - // test if last line is default to see if last line needs to be - // involved in calculations - bool isLastLineDefault() const; - - // Auf Einheitsmatrix zuruecksetzen - bool isIdentity() const; - void identity(); - - // Invertierung - bool isInvertible() const; - bool invert(); - - // Normalisierung - bool isNormalized() const; - void normalize(); - - // Determinante - double determinant() const; - - // Trace - double trace() const; - - // Transpose - void transpose(); - - // Rotation - void rotate(double fRadiant); - - // Translation - void translate(double fX, double fY); - - // Skalierung - void scale(double fX, double fY); - - // Shearing-Matrices - void shearX(double fSx); - void shearY(double fSy); - - // Addition, Subtraktion - B2DHomMatrix& operator+=(const B2DHomMatrix& rMat); - B2DHomMatrix& operator-=(const B2DHomMatrix& rMat); - - // Vergleichsoperatoren - bool operator==(const B2DHomMatrix& rMat) const; - bool operator!=(const B2DHomMatrix& rMat) const; - - // Multiplikation, Division mit Konstante - B2DHomMatrix& operator*=(double fValue); - B2DHomMatrix& operator/=(double fValue); - - // Matritzenmultiplikation von links auf die lokale - B2DHomMatrix& operator*=(const B2DHomMatrix& rMat); - - // assignment operator - B2DHomMatrix& operator=(const B2DHomMatrix& rMat); - - // Help routine to decompose given homogen 3x3 matrix to components. A correction of - // the components is done to avoid inaccuracies. - // Zerlegung - bool decompose(B2DTuple& rScale, B2DTuple& rTranslate, double& rRotate, double& rShearX) const; - }; - - // Addition, Subtraktion - inline B2DHomMatrix operator+(const B2DHomMatrix& rMatA, const B2DHomMatrix& rMatB) - { - B2DHomMatrix aSum(rMatA); - aSum += rMatB; - return aSum; - } - - inline B2DHomMatrix operator-(const B2DHomMatrix& rMatA, const B2DHomMatrix& rMatB) - { - B2DHomMatrix aDiv(rMatA); - aDiv -= rMatB; - return aDiv; - } - - // Multiplikation, Division mit Konstante - inline B2DHomMatrix operator*(const B2DHomMatrix& rMat, double fValue) - { - B2DHomMatrix aNew(rMat); - aNew *= fValue; - return aNew; - } - - inline B2DHomMatrix operator/(const B2DHomMatrix& rMat, double fValue) - { - B2DHomMatrix aNew(rMat); - aNew *= 1.0 / fValue; - return aNew; - } - - inline B2DHomMatrix operator*(const B2DHomMatrix& rMatA, const B2DHomMatrix& rMatB) - { - B2DHomMatrix aMul(rMatB); - aMul *= rMatA; - return aMul; - } -} // end of namespace basegfx - -#endif /* _BGFX_MATRIX_B2DHOMMATRIX_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/matrix/b2dhommatrixtools.hxx b/basegfx/inc/basegfx/matrix/b2dhommatrixtools.hxx deleted file mode 100644 index 5d5070b898..0000000000 --- a/basegfx/inc/basegfx/matrix/b2dhommatrixtools.hxx +++ /dev/null @@ -1,238 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_MATRIX_B2DHOMMATRIXTOOLS_HXX -#define _BGFX_MATRIX_B2DHOMMATRIXTOOLS_HXX - -#include <sal/types.h> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace rtl { class OUString; } - -/////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace tools - { - /** If the rotation angle is an approximate multiple of pi/2, - force fSin/fCos to -1/0/1, to maintain orthogonality (which - might also be advantageous for the other cases, but: for - multiples of pi/2, the exact values _can_ be attained. It - would be largely unintuitive, if a 180 degrees rotation - would introduce slight roundoff errors, instead of exactly - mirroring the coordinate system) - */ - BASEGFX_DLLPUBLIC void createSinCosOrthogonal(double& o_rSin, double& rCos, double fRadiant); - - /** Tooling methods for on-the-fly matrix generation e.g. for inline - multiplications - */ - BASEGFX_DLLPUBLIC B2DHomMatrix createScaleB2DHomMatrix(double fScaleX, double fScaleY); - BASEGFX_DLLPUBLIC B2DHomMatrix createShearXB2DHomMatrix(double fShearX); - BASEGFX_DLLPUBLIC B2DHomMatrix createShearYB2DHomMatrix(double fShearY); - BASEGFX_DLLPUBLIC B2DHomMatrix createRotateB2DHomMatrix(double fRadiant); - BASEGFX_DLLPUBLIC B2DHomMatrix createTranslateB2DHomMatrix(double fTranslateX, double fTranslateY); - - /// inline versions for parameters as tuples - inline B2DHomMatrix createScaleB2DHomMatrix(const B2DTuple& rScale) - { - return createScaleB2DHomMatrix(rScale.getX(), rScale.getY()); - } - - inline B2DHomMatrix createTranslateB2DHomMatrix(const B2DTuple& rTranslate) - { - return createTranslateB2DHomMatrix(rTranslate.getX(), rTranslate.getY()); - } - - /** Tooling methods for faster completely combined matrix creation - when scale, shearX, rotation and translation needs to be done in - exactly that order. It's faster since it direcly calculates - each matrix value based on a symbolic calculation of the three - matrix multiplications. - Inline versions for parameters as tuples added, too. - */ - BASEGFX_DLLPUBLIC B2DHomMatrix createScaleShearXRotateTranslateB2DHomMatrix( - double fScaleX, double fScaleY, - double fShearX, - double fRadiant, - double fTranslateX, double fTranslateY); - inline B2DHomMatrix createScaleShearXRotateTranslateB2DHomMatrix( - const B2DTuple& rScale, - double fShearX, - double fRadiant, - const B2DTuple& rTranslate) - { - return createScaleShearXRotateTranslateB2DHomMatrix( - rScale.getX(), rScale.getY(), - fShearX, - fRadiant, - rTranslate.getX(), rTranslate.getY()); - } - - BASEGFX_DLLPUBLIC B2DHomMatrix createShearXRotateTranslateB2DHomMatrix( - double fShearX, - double fRadiant, - double fTranslateX, double fTranslateY); - inline B2DHomMatrix createShearXRotateTranslateB2DHomMatrix( - double fShearX, - double fRadiant, - const B2DTuple& rTranslate) - { - return createShearXRotateTranslateB2DHomMatrix( - fShearX, - fRadiant, - rTranslate.getX(), rTranslate.getY()); - } - - BASEGFX_DLLPUBLIC B2DHomMatrix createScaleTranslateB2DHomMatrix( - double fScaleX, double fScaleY, - double fTranslateX, double fTranslateY); - inline B2DHomMatrix createScaleTranslateB2DHomMatrix( - const B2DTuple& rScale, - const B2DTuple& rTranslate) - { - return createScaleTranslateB2DHomMatrix( - rScale.getX(), rScale.getY(), - rTranslate.getX(), rTranslate.getY()); - } - - /// special for the often used case of rotation around a point - BASEGFX_DLLPUBLIC B2DHomMatrix createRotateAroundPoint( - double fPointX, double fPointY, - double fRadiant); - inline B2DHomMatrix createRotateAroundPoint( - const B2DTuple& rPoint, - double fRadiant) - { - return createRotateAroundPoint( - rPoint.getX(), rPoint.getY(), - fRadiant); - } - - } // end of namespace tools -} // end of namespace basegfx - -/////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace tools - { - class BASEGFX_DLLPUBLIC B2DHomMatrixBufferedDecompose - { - private: - B2DVector maScale; - B2DVector maTranslate; - double mfRotate; - double mfShearX; - - public: - B2DHomMatrixBufferedDecompose(const B2DHomMatrix& rB2DHomMatrix) - : maScale(), - maTranslate(), - mfRotate(0.0), - mfShearX(0.0) - { - rB2DHomMatrix.decompose(maScale, maTranslate, mfRotate, mfShearX); - } - - // data access - B2DHomMatrix getB2DHomMatrix() const - { - return createScaleShearXRotateTranslateB2DHomMatrix( - maScale, mfShearX, mfRotate, maTranslate); - } - - const B2DVector& getScale() const { return maScale; } - const B2DVector& getTranslate() const { return maTranslate; } - double getRotate() const { return mfRotate; } - double getShearX() const { return mfShearX; } - }; - } // end of namespace tools -} // end of namespace basegfx - -/////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace tools - { - class BASEGFX_DLLPUBLIC B2DHomMatrixBufferedOnDemandDecompose - { - private: - B2DHomMatrix maB2DHomMatrix; - B2DVector maScale; - B2DVector maTranslate; - double mfRotate; - double mfShearX; - - // bitfield - unsigned mbDecomposed : 1; - - void impCheckDecompose() - { - if(!mbDecomposed) - { - maB2DHomMatrix.decompose(maScale, maTranslate, mfRotate, mfShearX); - mbDecomposed = true; - } - } - - public: - B2DHomMatrixBufferedOnDemandDecompose(const B2DHomMatrix& rB2DHomMatrix) - : maB2DHomMatrix(rB2DHomMatrix), - maScale(), - maTranslate(), - mfRotate(0.0), - mfShearX(0.0), - mbDecomposed(false) - { - } - - // data access - const B2DHomMatrix& getB2DHomMatrix() const { return maB2DHomMatrix; } - const B2DVector& getScale() const { const_cast< B2DHomMatrixBufferedOnDemandDecompose* >(this)->impCheckDecompose(); return maScale; } - const B2DVector& getTranslate() const { const_cast< B2DHomMatrixBufferedOnDemandDecompose* >(this)->impCheckDecompose(); return maTranslate; } - double getRotate() const { const_cast< B2DHomMatrixBufferedOnDemandDecompose* >(this)->impCheckDecompose(); return mfRotate; } - double getShearX() const { const_cast< B2DHomMatrixBufferedOnDemandDecompose* >(this)->impCheckDecompose(); return mfShearX; } - }; - } // end of namespace tools - - /// Returns a string with svg's "matrix(m00,m10,m01,m11,m02,m12)" representation - ::rtl::OUString exportToSvg( const B2DHomMatrix& rMatrix ); - -} // end of namespace basegfx - -/////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_MATRIX_B2DHOMMATRIXTOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/matrix/b3dhommatrix.hxx b/basegfx/inc/basegfx/matrix/b3dhommatrix.hxx deleted file mode 100644 index 192e6fedd0..0000000000 --- a/basegfx/inc/basegfx/matrix/b3dhommatrix.hxx +++ /dev/null @@ -1,163 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_MATRIX_B3DHOMMATRIX_HXX -#define _BGFX_MATRIX_B3DHOMMATRIX_HXX - -#include <sal/types.h> -#include <basegfx/point/b3dpoint.hxx> -#include <basegfx/vector/b3dvector.hxx> -#include <o3tl/cow_wrapper.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - class B3DTuple; - class Impl3DHomMatrix; - - class BASEGFX_DLLPUBLIC B3DHomMatrix - { - public: - typedef o3tl::cow_wrapper< Impl3DHomMatrix > ImplType; - - private: - ImplType mpImpl; - - public: - B3DHomMatrix(); - B3DHomMatrix(const B3DHomMatrix& rMat); - ~B3DHomMatrix(); - - double get(sal_uInt16 nRow, sal_uInt16 nColumn) const; - void set(sal_uInt16 nRow, sal_uInt16 nColumn, double fValue); - - // test if last line is default to see if last line needs to be - // involved in calculations - bool isLastLineDefault() const; - - bool isIdentity() const; - /// Reset to the identity matrix - void identity(); - - /// Invert the matrix (if possible) - bool invert(); - - /// Calc the matrix determinant - double determinant() const; - - /// Rotation - void rotate(double fAngleX,double fAngleY,double fAngleZ); - - /// Translation - void translate(double fX, double fY, double fZ); - - /// Scaling - void scale(double fX, double fY, double fZ); - - // Shearing-Matrices - void shearXY(double fSx, double fSy); - - // Projection matrices, used for converting between eye and - // clip coordinates - void frustum(double fLeft = -1.0, double fRight = 1.0, - double fBottom = -1.0, double fTop = 1.0, - double fNear = 0.001, double fFar = 1.0); - - void ortho(double fLeft = -1.0, double fRight = 1.0, - double fBottom = -1.0, double fTop = 1.0, - double fNear = 0.0, double fFar = 1.0); - - // build orientation matrix - void orientation( - B3DPoint aVRP = B3DPoint(0.0,0.0,1.0), - B3DVector aVPN = B3DVector(0.0,0.0,1.0), - B3DVector aVUV = B3DVector(0.0,1.0,0.0)); - - // addition, subtraction - B3DHomMatrix& operator+=(const B3DHomMatrix& rMat); - B3DHomMatrix& operator-=(const B3DHomMatrix& rMat); - - // comparison - bool operator==(const B3DHomMatrix& rMat) const; - bool operator!=(const B3DHomMatrix& rMat) const; - - // multiplication, division by constant value - B3DHomMatrix& operator*=(double fValue); - B3DHomMatrix& operator/=(double fValue); - - // matrix multiplication (from the left) - B3DHomMatrix& operator*=(const B3DHomMatrix& rMat); - - // assignment operator - B3DHomMatrix& operator=(const B3DHomMatrix& rMat); - - // decomposition - bool decompose(B3DTuple& rScale, B3DTuple& rTranslate, B3DTuple& rRotate, B3DTuple& rShear) const; - }; - - // addition, subtraction - inline B3DHomMatrix operator+(const B3DHomMatrix& rMatA, const B3DHomMatrix& rMatB) - { - B3DHomMatrix aSum(rMatA); - aSum += rMatB; - return aSum; - } - - inline B3DHomMatrix operator-(const B3DHomMatrix& rMatA, const B3DHomMatrix& rMatB) - { - B3DHomMatrix aDiv(rMatA); - aDiv -= rMatB; - return aDiv; - } - - // multiplication, division by constant value - inline B3DHomMatrix operator*(const B3DHomMatrix& rMat, double fValue) - { - B3DHomMatrix aNew(rMat); - aNew *= fValue; - return aNew; - } - - inline B3DHomMatrix operator/(const B3DHomMatrix& rMat, double fValue) - { - B3DHomMatrix aNew(rMat); - aNew *= 1.0 / fValue; - return aNew; - } - - inline B3DHomMatrix operator*(const B3DHomMatrix& rMatA, const B3DHomMatrix& rMatB) - { - B3DHomMatrix aMul(rMatB); - aMul *= rMatA; - return aMul; - } -} // end of namespace basegfx - -#endif /* _BGFX_MATRIX_B3DHOMMATRIX_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/numeric/ftools.hxx b/basegfx/inc/basegfx/numeric/ftools.hxx deleted file mode 100644 index 27310283be..0000000000 --- a/basegfx/inc/basegfx/numeric/ftools.hxx +++ /dev/null @@ -1,207 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_NUMERIC_FTOOLS_HXX -#define _BGFX_NUMERIC_FTOOLS_HXX - -#include <rtl/math.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// standard PI defines from solar.h, but we do not want to link against tools - -#ifndef F_PI -#define F_PI M_PI -#endif -#ifndef F_PI2 -#define F_PI2 M_PI_2 -#endif -#ifndef F_PI4 -#define F_PI4 M_PI_4 -#endif -#ifndef F_PI180 -#define F_PI180 (M_PI/180.0) -#endif -#ifndef F_PI1800 -#define F_PI1800 (M_PI/1800.0) -#endif -#ifndef F_PI18000 -#define F_PI18000 (M_PI/18000.0) -#endif -#ifndef F_2PI -#define F_2PI (2.0*M_PI) -#endif - -////////////////////////////////////////////////////////////////////////////// -// fTools defines - -namespace basegfx -{ - /** Round double to nearest integer - - @return the nearest integer - */ - inline sal_Int32 fround( double fVal ) - { - return fVal > 0.0 ? static_cast<sal_Int32>( fVal + .5 ) : -static_cast<sal_Int32>( -fVal + .5 ); - } - - /** Round double to nearest integer - - @return the nearest 64 bit integer - */ - inline sal_Int64 fround64( double fVal ) - { - return fVal > 0.0 ? static_cast<sal_Int64>( fVal + .5 ) : -static_cast<sal_Int64>( -fVal + .5 ); - } - - /** Prune a small epsilon range around zero. - - Use this method e.g. for calculating scale values. There, it - is usually advisable not to set a scaling to 0.0, because that - yields singular transformation matrices. - - @param fVal - An arbitrary, but finite and valid number - - @return either fVal, or a small value slightly above (when - fVal>0) or below (when fVal<0) zero. - */ - inline double pruneScaleValue( double fVal ) - { - // old version used ::std::min/max, but this collides if min is defined as preprocessor - // macro which is the case e.g with windows.h headers. The simplest way to avoid this is to - // just use the full comparison. I keep the original here, maybe there will be a better - // solution some day. - // - //return fVal < 0.0 ? - // (::std::min(fVal,-0.00001)) : - // (::std::max(fVal,0.00001)); - - if(fVal < 0.0) - return (fVal < -0.00001 ? fVal : -0.00001); - else - return (fVal > 0.00001 ? fVal : 0.00001); - } - - /** clamp given value against given minimum and maximum values - */ - template <class T> inline const T& clamp(const T& value, const T& minimum, const T& maximum) - { - if(value < minimum) - { - return minimum; - } - else if(value > maximum) - { - return maximum; - } - else - { - return value; - } - } - - /** Convert value from degrees to radians - */ - inline double deg2rad( double v ) - { - // divide first, to get exact values for v being a multiple of - // 90 degrees - return v / 90.0 * M_PI_2; - } - - /** Convert value radians to degrees - */ - inline double rad2deg( double v ) - { - // divide first, to get exact values for v being a multiple of - // pi/2 - return v / M_PI_2 * 90.0; - } - - - class BASEGFX_DLLPUBLIC fTools - { - /// Threshold value for equalZero() - static double mfSmallValue; - - public: - /// Get threshold value for equalZero and friends - static double getSmallValue() { return mfSmallValue; } - /// Set threshold value for equalZero and friends - static void setSmallValue(const double& rfNew) { mfSmallValue = rfNew; } - - /// Compare against small value - static bool equalZero(const double& rfVal) - { - return (fabs(rfVal) <= getSmallValue()); - } - - /// Compare against given small value - static bool equalZero(const double& rfVal, const double& rfSmallValue) - { - return (fabs(rfVal) <= rfSmallValue); - } - - static bool equal(const double& rfValA, const double& rfValB) - { - // changed to approxEqual usage for better numerical correctness - return rtl::math::approxEqual(rfValA, rfValB); - } - - static bool equal(const double& rfValA, const double& rfValB, const double& rfSmallValue) - { - return (fabs(rfValA - rfValB) <= rfSmallValue); - } - - static bool less(const double& rfValA, const double& rfValB) - { - return (rfValA < rfValB && !equal(rfValA, rfValB)); - } - - static bool lessOrEqual(const double& rfValA, const double& rfValB) - { - return (rfValA < rfValB || equal(rfValA, rfValB)); - } - - static bool more(const double& rfValA, const double& rfValB) - { - return (rfValA > rfValB && !equal(rfValA, rfValB)); - } - - static bool moreOrEqual(const double& rfValA, const double& rfValB) - { - return (rfValA > rfValB || equal(rfValA, rfValB)); - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_NUMERIC_FTOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/pixel/bpixel.hxx b/basegfx/inc/basegfx/pixel/bpixel.hxx deleted file mode 100644 index a2421ebfb9..0000000000 --- a/basegfx/inc/basegfx/pixel/bpixel.hxx +++ /dev/null @@ -1,226 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_PIXEL_BPIXEL_HXX -#define _BGFX_PIXEL_BPIXEL_HXX - -#include <sal/types.h> -#include <basegfx/numeric/ftools.hxx> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC BPixel - { - protected: - union - { - struct - { - // bitfield - unsigned mnR : 8; // red intensity - unsigned mnG : 8; // green intensity - unsigned mnB : 8; // blue intensity - unsigned mnO : 8; // opacity, 0 == full transparence - } maRGBO; - - struct - { - // bitfield - unsigned mnValue : 32; // all values - } maCombinedRGBO; - } maPixelUnion; - - public: - BPixel() - { - maPixelUnion.maCombinedRGBO.mnValue = 0L; - } - - // use explicit here to make sure everyone knows what he is doing. Values range from - // 0..255 integer here. - explicit BPixel(sal_uInt8 nRed, sal_uInt8 nGreen, sal_uInt8 nBlue, sal_uInt8 nOpacity) - { - maPixelUnion.maRGBO.mnR = nRed; - maPixelUnion.maRGBO.mnG = nGreen; - maPixelUnion.maRGBO.mnB = nBlue; - maPixelUnion.maRGBO.mnO = nOpacity; - } - - // constructor from BColor which uses double precision color, so change it - // to local integer format. It will also be clamped here. - BPixel(const BColor& rColor, sal_uInt8 nOpacity) - { - maPixelUnion.maRGBO.mnR = sal_uInt8((rColor.getRed() * 255.0) + 0.5); - maPixelUnion.maRGBO.mnG = sal_uInt8((rColor.getGreen() * 255.0) + 0.5); - maPixelUnion.maRGBO.mnB = sal_uInt8((rColor.getBlue() * 255.0) + 0.5); - maPixelUnion.maRGBO.mnO = nOpacity; - } - - // copy constructor - BPixel(const BPixel& rPixel) - { - maPixelUnion.maCombinedRGBO.mnValue = rPixel.maPixelUnion.maCombinedRGBO.mnValue; - } - - ~BPixel() - {} - - // assignment operator - BPixel& operator=( const BPixel& rPixel ) - { - maPixelUnion.maCombinedRGBO.mnValue = rPixel.maPixelUnion.maCombinedRGBO.mnValue; - return *this; - } - - // data access read - sal_uInt8 getRed() const { return maPixelUnion.maRGBO.mnR; } - sal_uInt8 getGreen() const { return maPixelUnion.maRGBO.mnG; } - sal_uInt8 getBlue() const { return maPixelUnion.maRGBO.mnB; } - sal_uInt8 getOpacity() const { return maPixelUnion.maRGBO.mnO; } - sal_uInt32 getRedGreenBlueOpacity() const { return maPixelUnion.maCombinedRGBO.mnValue; } - - // data access write - void setRed(sal_uInt8 nNew) { maPixelUnion.maRGBO.mnR = nNew; } - void setGreen(sal_uInt8 nNew) { maPixelUnion.maRGBO.mnG = nNew; } - void setBlue(sal_uInt8 nNew) { maPixelUnion.maRGBO.mnB = nNew; } - void setOpacity(sal_uInt8 nNew) { maPixelUnion.maRGBO.mnO = nNew; } - void setRedGreenBlueOpacity(sal_uInt32 nRedGreenBlueOpacity) { maPixelUnion.maCombinedRGBO.mnValue = nRedGreenBlueOpacity; } - void setRedGreenBlue(sal_uInt8 nR, sal_uInt8 nG, sal_uInt8 nB) { maPixelUnion.maRGBO.mnR = nR; maPixelUnion.maRGBO.mnG = nG; maPixelUnion.maRGBO.mnB = nB; } - - // comparators - bool isInvisible() const { return (0 == maPixelUnion.maRGBO.mnO); } - bool isVisible() const { return (0 != maPixelUnion.maRGBO.mnO); } - bool isEmpty() const { return isInvisible(); } - bool isUsed() const { return isVisible(); } - - bool operator==( const BPixel& rPixel ) const - { - return (rPixel.maPixelUnion.maCombinedRGBO.mnValue == maPixelUnion.maCombinedRGBO.mnValue); - } - - bool operator!=( const BPixel& rPixel ) const - { - return (rPixel.maPixelUnion.maCombinedRGBO.mnValue != maPixelUnion.maCombinedRGBO.mnValue); - } - - // empty element - static const BPixel& getEmptyBPixel(); - }; - - ////////////////////////////////////////////////////////////////////////// - // external operators - - inline BPixel minimum(const BPixel& rTupA, const BPixel& rTupB) - { - BPixel aMin( - (rTupB.getRed() < rTupA.getRed()) ? rTupB.getRed() : rTupA.getRed(), - (rTupB.getGreen() < rTupA.getGreen()) ? rTupB.getGreen() : rTupA.getGreen(), - (rTupB.getBlue() < rTupA.getBlue()) ? rTupB.getBlue() : rTupA.getBlue(), - (rTupB.getOpacity() < rTupA.getOpacity()) ? rTupB.getOpacity() : rTupA.getOpacity()); - return aMin; - } - - inline BPixel maximum(const BPixel& rTupA, const BPixel& rTupB) - { - BPixel aMax( - (rTupB.getRed() > rTupA.getRed()) ? rTupB.getRed() : rTupA.getRed(), - (rTupB.getGreen() > rTupA.getGreen()) ? rTupB.getGreen() : rTupA.getGreen(), - (rTupB.getBlue() > rTupA.getBlue()) ? rTupB.getBlue() : rTupA.getBlue(), - (rTupB.getOpacity() > rTupA.getOpacity()) ? rTupB.getOpacity() : rTupA.getOpacity()); - return aMax; - } - - inline BPixel interpolate(const BPixel& rOld1, const BPixel& rOld2, double t) - { - if(rOld1 == rOld2) - { - return rOld1; - } - else if(0.0 >= t) - { - return rOld1; - } - else if(1.0 <= t) - { - return rOld2; - } - else - { - const sal_uInt32 nFactor(fround(256.0 * t)); - const sal_uInt32 nNegFac(256L - nFactor); - return BPixel( - (sal_uInt8)(((sal_uInt32)rOld1.getRed() * nNegFac + (sal_uInt32)rOld2.getRed() * nFactor) >> 8L), - (sal_uInt8)(((sal_uInt32)rOld1.getGreen() * nNegFac + (sal_uInt32)rOld2.getGreen() * nFactor) >> 8L), - (sal_uInt8)(((sal_uInt32)rOld1.getBlue() * nNegFac + (sal_uInt32)rOld2.getBlue() * nFactor) >> 8L), - (sal_uInt8)(((sal_uInt32)rOld1.getOpacity() * nNegFac + (sal_uInt32)rOld2.getOpacity() * nFactor) >> 8L)); - } - } - - inline BPixel average(const BPixel& rOld1, const BPixel& rOld2) - { - if(rOld1 == rOld2) - { - return rOld1; - } - else - { - return BPixel( - (sal_uInt8)(((sal_uInt32)rOld1.getRed() + (sal_uInt32)rOld2.getRed()) >> 1L), - (sal_uInt8)(((sal_uInt32)rOld1.getGreen() + (sal_uInt32)rOld2.getGreen()) >> 1L), - (sal_uInt8)(((sal_uInt32)rOld1.getBlue() + (sal_uInt32)rOld2.getBlue()) >> 1L), - (sal_uInt8)(((sal_uInt32)rOld1.getOpacity() + (sal_uInt32)rOld2.getOpacity()) >> 1L)); - } - } - - inline BPixel average(const BPixel& rOld1, const BPixel& rOld2, const BPixel& rOld3) - { - if(rOld1 == rOld2 && rOld2 == rOld3) - { - return rOld1; - } - else - { - return BPixel( - (sal_uInt8)(((sal_uInt32)rOld1.getRed() + (sal_uInt32)rOld2.getRed() + (sal_uInt32)rOld3.getRed()) / 3L), - (sal_uInt8)(((sal_uInt32)rOld1.getGreen() + (sal_uInt32)rOld2.getGreen() + (sal_uInt32)rOld3.getGreen()) / 3L), - (sal_uInt8)(((sal_uInt32)rOld1.getBlue() + (sal_uInt32)rOld2.getBlue() + (sal_uInt32)rOld3.getBlue()) / 3L), - (sal_uInt8)(((sal_uInt32)rOld1.getOpacity() + (sal_uInt32)rOld2.getOpacity() + (sal_uInt32)rOld3.getOpacity()) / 3L)); - } - } -} // end of namespace basegfx - -#endif /* _BGFX_PIXEL_BPIXEL_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/point/b2dhompoint.hxx b/basegfx/inc/basegfx/point/b2dhompoint.hxx deleted file mode 100644 index e436c0b5ac..0000000000 --- a/basegfx/inc/basegfx/point/b2dhompoint.hxx +++ /dev/null @@ -1,239 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POINT_B2DHOMPOINT_HXX -#define _BGFX_POINT_B2DHOMPOINT_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - /** Basic homogen Point class with two double values and one homogen factor - - This class provides access to homogen coordinates in 2D. - For this purpose all the operators which need to do specific - action due to their homogenity are implemented here. - The only caveat are member methods which are declared as const - but do change the content. These are documented for that reason. - The class is designed to provide homogenous coordinates without - direct access to the homogen part (mfW). This is also the reason - for leaving out the [] operators which return references to members. - - @see B2DTuple - */ - class BASEGFX_DLLPUBLIC B2DHomPoint - { - protected: - /// This member contains the coordinate part of the point - ::basegfx::B2DTuple maTuple; - - /// This Member holds the homogenous part of the point - double mfW; - - /** Test if this homogen point does have a homogenous part - - @return Returns true if this point has no homogenous part - */ - bool implIsHomogenized() const; - - /** Remove homogenous part of this Point - - This method does necessary calculations to remove - the evtl. homogenous part of this Point. This may - change all members. - */ - void implHomogenize(); - - /** Test and on demand remove homogenous part - - This method tests if this Point does have a homogenous part - and then evtl. takes actions to remove that part. - - @attention Even when this method is const it may change all - members of this instance. This is due to the fact that changing - the homogenous part of a homogenous point does from a mathematical - point of view not change the point at all. - */ - void implTestAndHomogenize() const; - - public: - /** Create a homogen point - - The point is initialized to (0.0, 0.0) - */ - B2DHomPoint() - : maTuple(), - mfW(1.0) - {} - - /** Create a homogen point - - @param fX - This parameter is used to initialize the X-coordinate - of the Point. The homogenous part is initialized to 1.0. - - @param fY - This parameter is used to initialize the Y-coordinate - of the Point. The homogenous part is initialized to 1.0. - */ - B2DHomPoint(double fX, double fY) - : maTuple(fX, fY), - mfW(1.0) - {} - - /** Create a copy of a 2D Point - - @param rVec - The 2D point which will be copied. The homogenous part - is initialized to 1.0. - */ - B2DHomPoint(const B2DPoint& rVec) - : maTuple(rVec), - mfW(1.0) - {} - - /** Create a copy of a homogen point - - @param rVec - The homogen point which will be copied. The homogenous part - is copied, too. - */ - B2DHomPoint(const B2DHomPoint& rVec) - : maTuple(rVec.maTuple.getX(), rVec.maTuple.getY()), - mfW(rVec.mfW) - {} - - ~B2DHomPoint() - {} - - /** Get a 2D point from this homogenous point - - This method normalizes this homogen point if necessary and - returns the corresponding 2D point for this homogen point. - - @attention Even when this method is const it may change all - members of this instance. - */ - B2DPoint getB2DPoint() const; - - /** Get X-coordinate - - This method normalizes this homogen point if necessary and - returns the corresponding X-coordinate for this homogen point. - - @attention Even when this method is const it may change all - members of this instance. - */ - double getX() const; - - /** Get Y-coordinate - - This method normalizes this homogen point if necessary and - returns the corresponding Y-coordinate for this homogen point. - - @attention Even when this method is const it may change all - members of this instance. - */ - double getY() const; - - /** Set X-coordinate of the homogen point. - - This method sets the X-coordinate of the homogen point. If - the point does have a homogenous part this is taken into account. - - @param fX - The to-be-set X-coordinate without homogenous part. - */ - void setX(double fX); - - /** Set Y-coordinate of the homogen point. - - This method sets the Y-coordinate of the homogen point. If - the point does have a homogenous part this is taken into account. - - @param fY - The to-be-set Y-coordinate without homogenous part. - */ - void setY(double fY); - - // operators - ////////////////////////////////////////////////////////////////////// - - B2DHomPoint& operator+=( const B2DHomPoint& rPnt ); - - B2DHomPoint& operator-=( const B2DHomPoint& rPnt ); - - B2DHomPoint& operator*=(double t); - - B2DHomPoint& operator*=( const B2DHomMatrix& rMat ); - - B2DHomPoint& operator/=(double t); - - B2DHomPoint& operator-(void); - - bool operator==( const B2DHomPoint& rPnt ) const; - - bool operator!=( const B2DHomPoint& rPnt ) const; - - B2DHomPoint& operator=( const B2DHomPoint& rPnt ); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - BASEGFX_DLLPUBLIC B2DHomPoint minimum(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB); - - BASEGFX_DLLPUBLIC B2DHomPoint maximum(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB); - - BASEGFX_DLLPUBLIC B2DHomPoint absolute(const B2DHomPoint& rVec); - - BASEGFX_DLLPUBLIC B2DHomPoint interpolate(B2DHomPoint& rOld1, B2DHomPoint& rOld2, double t); - - BASEGFX_DLLPUBLIC B2DHomPoint average(B2DHomPoint& rOld1, B2DHomPoint& rOld2); - - BASEGFX_DLLPUBLIC B2DHomPoint average(B2DHomPoint& rOld1, B2DHomPoint& rOld2, B2DHomPoint& rOld3); - - BASEGFX_DLLPUBLIC B2DHomPoint operator+(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB); - - BASEGFX_DLLPUBLIC B2DHomPoint operator-(const B2DHomPoint& rVecA, const B2DHomPoint& rVecB); - - BASEGFX_DLLPUBLIC B2DHomPoint operator*(const B2DHomPoint& rVec, double t); - - BASEGFX_DLLPUBLIC B2DHomPoint operator*(double t, const B2DHomPoint& rVec); - - BASEGFX_DLLPUBLIC B2DHomPoint operator*( const B2DHomMatrix& rMat, const B2DHomPoint& rPoint ); - - BASEGFX_DLLPUBLIC B2DHomPoint operator/(const B2DHomPoint& rVec, double t); - - BASEGFX_DLLPUBLIC B2DHomPoint operator/(double t, const B2DHomPoint& rVec); -} // end of namespace basegfx - -#endif /* _BGFX_POINT_B2DHOMPOINT_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/point/b2dpoint.hxx b/basegfx/inc/basegfx/point/b2dpoint.hxx deleted file mode 100644 index fdfc4a974e..0000000000 --- a/basegfx/inc/basegfx/point/b2dpoint.hxx +++ /dev/null @@ -1,155 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POINT_B2DPOINT_HXX -#define _BGFX_POINT_B2DPOINT_HXX - -#include <basegfx/tuple/b2dtuple.hxx> -#include <basegfx/point/b2ipoint.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // predeclaration - class B2DHomMatrix; - - /** Base Point class with two double values - - This class derives all operators and common handling for - a 2D data class from B2DTuple. All necessary extensions - which are special for points will be added here. - - @see B2DTuple - */ - class B2DPoint : public ::basegfx::B2DTuple - { - public: - /** Create a 2D Point - - The point is initialized to (0.0, 0.0) - */ - B2DPoint() - : B2DTuple() - {} - - /** Create a 2D Point - - @param fX - This parameter is used to initialize the X-coordinate - of the 2D Point. - - @param fY - This parameter is used to initialize the Y-coordinate - of the 2D Point. - */ - B2DPoint(double fX, double fY) - : B2DTuple(fX, fY) - {} - - /** Create a copy of a 2D Point - - @param rPoint - The 2D Point which will be copied. - */ - B2DPoint(const B2DPoint& rPoint) - : B2DTuple(rPoint) - {} - - /** Create a copy of a 2D Point - - @param rPoint - The 2D Point which will be copied. - */ - B2DPoint(const ::basegfx::B2IPoint& rPoint) - : B2DTuple(rPoint) - {} - - /** constructor with tuple to allow copy-constructing - from B2DTuple-based classes - */ - B2DPoint(const ::basegfx::B2DTuple& rTuple) - : B2DTuple(rTuple) - {} - - ~B2DPoint() - {} - - /** *=operator to allow usage from B2DPoint, too - */ - B2DPoint& operator*=( const B2DPoint& rPnt ) - { - mfX *= rPnt.mfX; - mfY *= rPnt.mfY; - return *this; - } - - /** *=operator to allow usage from B2DPoint, too - */ - B2DPoint& operator*=(double t) - { - mfX *= t; - mfY *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B2DTuple calculations - */ - BASEGFX_DLLPUBLIC B2DPoint& operator=( const ::basegfx::B2DTuple& rPoint ); - - /** Transform point by given transformation matrix. - - The translational components of the matrix are, in - contrast to B2DVector, applied. - */ - BASEGFX_DLLPUBLIC B2DPoint& operator*=( const ::basegfx::B2DHomMatrix& rMat ); - - static const B2DPoint& getEmptyPoint() - { - return (const B2DPoint&) ::basegfx::B2DTuple::getEmptyTuple(); - } - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - /** Transform B2DPoint by given transformation matrix. - - Since this is a Point, translational components of the - matrix are used. - */ - BASEGFX_DLLPUBLIC B2DPoint operator*( const B2DHomMatrix& rMat, const B2DPoint& rPoint ); -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_POINT_B2DPOINT_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/point/b2ipoint.hxx b/basegfx/inc/basegfx/point/b2ipoint.hxx deleted file mode 100644 index 3b1f7cf9d0..0000000000 --- a/basegfx/inc/basegfx/point/b2ipoint.hxx +++ /dev/null @@ -1,131 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POINT_B2IPOINT_HXX -#define _BGFX_POINT_B2IPOINT_HXX - -#include <basegfx/tuple/b2ituple.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclaration - class B2DHomMatrix; - - /** Base Point class with two sal_Int32 values - - This class derives all operators and common handling for - a 2D data class from B2ITuple. All necessary extensions - which are special for points will be added here. - - @see B2ITuple - */ - class BASEGFX_DLLPUBLIC B2IPoint : public ::basegfx::B2ITuple - { - public: - /** Create a 2D Point - - The point is initialized to (0, 0) - */ - B2IPoint() - : B2ITuple() - {} - - /** Create a 2D Point - - @param nX - This parameter is used to initialize the X-coordinate - of the 2D Point. - - @param nY - This parameter is used to initialize the Y-coordinate - of the 2D Point. - */ - B2IPoint(sal_Int32 nX, sal_Int32 nY) - : B2ITuple(nX, nY) - {} - - /** Create a copy of a 2D Point - - @param rPoint - The 2D Point which will be copied. - */ - B2IPoint(const B2IPoint& rPoint) - : B2ITuple(rPoint) - {} - - /** constructor with tuple to allow copy-constructing - from B2ITuple-based classes - */ - B2IPoint(const ::basegfx::B2ITuple& rTuple) - : B2ITuple(rTuple) - {} - - ~B2IPoint() - {} - - /** *=operator to allow usage from B2IPoint, too - */ - B2IPoint& operator*=( const B2IPoint& rPnt ) - { - mnX *= rPnt.mnX; - mnY *= rPnt.mnY; - return *this; - } - - /** *=operator to allow usage from B2IPoint, too - */ - B2IPoint& operator*=(sal_Int32 t) - { - mnX *= t; - mnY *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B2ITuple calculations - */ - B2IPoint& operator=( const ::basegfx::B2ITuple& rPoint ); - - /** Transform point by given transformation matrix. - - The translational components of the matrix are, in - contrast to B2DVector, applied. - */ - B2IPoint& operator*=( const ::basegfx::B2DHomMatrix& rMat ); - - static const B2IPoint& getEmptyPoint() - { - return (const B2IPoint&) ::basegfx::B2ITuple::getEmptyTuple(); - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_POINT_B2IPOINT_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/point/b3dpoint.hxx b/basegfx/inc/basegfx/point/b3dpoint.hxx deleted file mode 100644 index 690eedf052..0000000000 --- a/basegfx/inc/basegfx/point/b3dpoint.hxx +++ /dev/null @@ -1,154 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POINT_B3DPOINT_HXX -#define _BGFX_POINT_B3DPOINT_HXX - -#include <basegfx/tuple/b3dtuple.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclaration - class B3DHomMatrix; - - /** Base Point class with three double values - - This class derives all operators and common handling for - a 3D data class from B3DTuple. All necessary extensions - which are special for points will be added here. - - @see B3DTuple - */ - class BASEGFX_DLLPUBLIC B3DPoint : public ::basegfx::B3DTuple - { - public: - /** Create a 3D Point - - The point is initialized to (0.0, 0.0, 0.0) - */ - B3DPoint() - : B3DTuple() - {} - - /** Create a 3D Point - - @param fX - This parameter is used to initialize the X-coordinate - of the 3D Point. - - @param fY - This parameter is used to initialize the Y-coordinate - of the 3D Point. - - @param fZ - This parameter is used to initialize the Z-coordinate - of the 3D Point. - */ - B3DPoint(double fX, double fY, double fZ) - : B3DTuple(fX, fY, fZ) - {} - - /** Create a copy of a 3D Point - - @param rVec - The 3D Point which will be copied. - */ - B3DPoint(const B3DPoint& rVec) - : B3DTuple(rVec) - {} - - /** constructor with tuple to allow copy-constructing - from B3DTuple-based classes - */ - B3DPoint(const ::basegfx::B3DTuple& rTuple) - : B3DTuple(rTuple) - {} - - ~B3DPoint() - {} - - /** *=operator to allow usage from B3DPoint, too - */ - B3DPoint& operator*=( const B3DPoint& rPnt ) - { - mfX *= rPnt.mfX; - mfY *= rPnt.mfY; - mfZ *= rPnt.mfZ; - return *this; - } - - /** *=operator to allow usage from B3DPoint, too - */ - B3DPoint& operator*=(double t) - { - mfX *= t; - mfY *= t; - mfZ *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B3DTuple calculations - */ - B3DPoint& operator=( const ::basegfx::B3DTuple& rVec ) - { - mfX = rVec.getX(); - mfY = rVec.getY(); - mfZ = rVec.getZ(); - return *this; - } - - /** Transform point by given transformation matrix. - - The translational components of the matrix are, in - contrast to B3DVector, applied. - */ - B3DPoint& operator*=( const ::basegfx::B3DHomMatrix& rMat ); - - static const B3DPoint& getEmptyPoint() - { - return (const B3DPoint&) ::basegfx::B3DTuple::getEmptyTuple(); - } - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - /** Transform B3DPoint by given transformation matrix. - - Since this is a Point, translational components of the - matrix are used. - */ - BASEGFX_DLLPUBLIC B3DPoint operator*( const B3DHomMatrix& rMat, const B3DPoint& rPoint ); - -} // end of namespace basegfx - -#endif /* _BGFX_POINT_B3DPOINT_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/point/b3ipoint.hxx b/basegfx/inc/basegfx/point/b3ipoint.hxx deleted file mode 100644 index 42b6688acc..0000000000 --- a/basegfx/inc/basegfx/point/b3ipoint.hxx +++ /dev/null @@ -1,143 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POINT_B3IPOINT_HXX -#define _BGFX_POINT_B3IPOINT_HXX - -#include <basegfx/tuple/b3ituple.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclaration - class B3DHomMatrix; - - /** Base Point class with three sal_Int32 values - - This class derives all operators and common handling for - a 3D data class from B3ITuple. All necessary extensions - which are special for points will be added here. - - @see B3ITuple - */ - class BASEGFX_DLLPUBLIC B3IPoint : public ::basegfx::B3ITuple - { - public: - /** Create a 3D Point - - The point is initialized to (0, 0, 0) - */ - B3IPoint() - : B3ITuple() - {} - - /** Create a 3D Point - - @param nX - This parameter is used to initialize the X-coordinate - of the 3D Point. - - @param nY - This parameter is used to initialize the Y-coordinate - of the 3D Point. - - @param nZ - This parameter is used to initialize the Z-coordinate - of the 3D Point. - */ - B3IPoint(sal_Int32 nX, sal_Int32 nY, sal_Int32 nZ) - : B3ITuple(nX, nY, nZ) - {} - - /** Create a copy of a 3D Point - - @param rVec - The 3D Point which will be copied. - */ - B3IPoint(const B3IPoint& rVec) - : B3ITuple(rVec) - {} - - /** constructor with tuple to allow copy-constructing - from B3ITuple-based classes - */ - B3IPoint(const ::basegfx::B3ITuple& rTuple) - : B3ITuple(rTuple) - {} - - ~B3IPoint() - {} - - /** *=operator to allow usage from B3IPoint, too - */ - B3IPoint& operator*=( const B3IPoint& rPnt ) - { - mnX *= rPnt.mnX; - mnY *= rPnt.mnY; - mnZ *= rPnt.mnZ; - return *this; - } - - /** *=operator to allow usage from B3IPoint, too - */ - B3IPoint& operator*=(sal_Int32 t) - { - mnX *= t; - mnY *= t; - mnZ *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B3ITuple calculations - */ - B3IPoint& operator=( const ::basegfx::B3ITuple& rVec ) - { - mnX = rVec.getX(); - mnY = rVec.getY(); - mnZ = rVec.getZ(); - return *this; - } - - /** Transform point by given transformation matrix. - - The translational components of the matrix are, in - contrast to B3DVector, applied. - */ - B3IPoint& operator*=( const ::basegfx::B3DHomMatrix& rMat ); - - static const B3IPoint& getEmptyPoint() - { - return (const B3IPoint&) ::basegfx::B3ITuple::getEmptyTuple(); - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_POINT_B3IPOINT_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dlinegeometry.hxx b/basegfx/inc/basegfx/polygon/b2dlinegeometry.hxx deleted file mode 100644 index e708ee329b..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dlinegeometry.hxx +++ /dev/null @@ -1,148 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DLINEGEOMETRY_HXX -#define _BGFX_POLYGON_B2DLINEGEOMETRY_HXX - -#include <sal/types.h> -#include <basegfx/numeric/ftools.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace tools - { - /** Create line start/end geometry element, mostly arrows and things like that. - - @param rCandidate - The polygon which needs to get that line ends and needs to have two points - at least. - - @param rArrow - The line start/end geometry. It is assumed that the tip is pointing - upwards. Result will be rotated and scaled to fit. - - @param bStart - describes if creation is for start or end of candidate. - - @param fWidth - defines the size of the element, it's describing the target width in X - of the arrow. - - @param fDockingPosition needs to be in [0.0 ..1.0] range, where 0.0 means - that the tip of the arrow will be aligned with the polygon start, 1.0 means - the bottom. The default of 0.5 describes a centered arrow. - - @param pConsumedLength - Using this parameter it is possible to get back how much from the candidate - geometry is overlapped by the created element (consumed). - - @param fCandidateLength - This should contain the length of rCandidate to allow work without - again calculating the length (which may be expensive with beziers). If 0.0 is - given, the length is calculated on demand. - - @return - The Line start and end polygon, correctly rotated and scaled - */ - BASEGFX_DLLPUBLIC B2DPolyPolygon createAreaGeometryForLineStartEnd( - const B2DPolygon& rCandidate, - const B2DPolyPolygon& rArrow, - bool bStart, - double fWidth, - double fCandidateLength = 0.0, // 0.0 -> calculate self - double fDockingPosition = 0.5, // 0->top, 1->bottom - double* pConsumedLength = 0L); - - /** create filled polygon geometry for lines with a line width - - This method will create bezier based, fillable polygons which - will resample the curve if it was extended for the given half - line width. It will remove extrema positions from contained - bezier segments and get as close as possible and defined by - the given parameters to the ideal result. - - It will check edges for trivial bezier to avoid unnecessary - bezier polygons. Care is taken to produce the in-between - polygon points (the ones original on the source poygon) since - it has showed that without those, the raster converters leave - non-filled gaps. - - @param rCandidate - The source polygon defining the hairline polygon path - - @param fHalfLineWidth - The width of the line to one side - - @param eJoin - The LineJoin if the edges meeting in a point do not have a C1 - or C2 continuity - - @param fMaxAllowedAngle - Allows to hand over the maximum allowed angle between an edge and - it's control vectors. The smaller, the more subdivisions will be - needed to create the filled geometry. Allowed range is cropped to - [F_PI2 .. 0.01 * F_PI2]. - - @param fMaxPartOfEdge - Allows to influence from with relative length of a control vector - compared to it's edge a split is forced. The smaller, the more - subdivisions will be needed to create the filled geometry. Allowed - range is cropped to [1.0 .. 0.01] - - @praram fMiterMinimumAngle - The minimum wanted angle between two edges when edge rounding - is using miter. When an edge is smaller than this (tighter) - the usual fallback to bevel is used. Allowed range is cropped - to [F_PI .. 0.01 * F_PI]. - - @return - The PolyPolygon containing the geometry of the extended line by - it's line width. Contains bezier segments and edge roundings as - needed and defined. - */ - BASEGFX_DLLPUBLIC B2DPolyPolygon createAreaGeometry( - const B2DPolygon& rCandidate, - double fHalfLineWidth, - B2DLineJoin eJoin = B2DLINEJOIN_ROUND, - double fMaxAllowedAngle = (12.5 * F_PI180), - double fMaxPartOfEdge = 0.4, - double fMiterMinimumAngle = (15.0 * F_PI180)); - } // end of namespace tools -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_POLYGON_B2DLINEGEOMETRY_HXX */ -// eof - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolygon.hxx b/basegfx/inc/basegfx/polygon/b2dpolygon.hxx deleted file mode 100644 index d506a3ac55..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolygon.hxx +++ /dev/null @@ -1,278 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DPOLYGON_HXX -#define _BGFX_POLYGON_B2DPOLYGON_HXX - -#include <sal/types.h> -#include <o3tl/cow_wrapper.hxx> -#include <basegfx/vector/b2enums.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations -class ImplB2DPolygon; - -namespace basegfx -{ - class B2DPolygon; - class B2DPoint; - class B2DVector; - class B2DHomMatrix; - class B2DCubicBezier; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B2DPolygon - { - public: - typedef o3tl::cow_wrapper< ImplB2DPolygon > ImplType; - - private: - // internal data. - ImplType mpPolygon; - - public: - /// diverse constructors - B2DPolygon(); - B2DPolygon(const B2DPolygon& rPolygon); - B2DPolygon(const B2DPolygon& rPolygon, sal_uInt32 nIndex, sal_uInt32 nCount); - ~B2DPolygon(); - - /// assignment operator - B2DPolygon& operator=(const B2DPolygon& rPolygon); - - /// unshare this polygon with all internally shared instances - void makeUnique(); - - /// compare operators - bool operator==(const B2DPolygon& rPolygon) const; - bool operator!=(const B2DPolygon& rPolygon) const; - - /// member count - sal_uInt32 count() const; - - /// Coordinate interface - basegfx::B2DPoint getB2DPoint(sal_uInt32 nIndex) const; - void setB2DPoint(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue); - - /// Coordinate insert/append - void insert(sal_uInt32 nIndex, const basegfx::B2DPoint& rPoint, sal_uInt32 nCount = 1); - void append(const basegfx::B2DPoint& rPoint, sal_uInt32 nCount); - void append(const basegfx::B2DPoint& rPoint); - void reserve(sal_uInt32 nCount); - - /// Basic ControlPoint interface - basegfx::B2DPoint getPrevControlPoint(sal_uInt32 nIndex) const; - basegfx::B2DPoint getNextControlPoint(sal_uInt32 nIndex) const; - void setPrevControlPoint(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue); - void setNextControlPoint(sal_uInt32 nIndex, const basegfx::B2DPoint& rValue); - void setControlPoints(sal_uInt32 nIndex, const basegfx::B2DPoint& rPrev, const basegfx::B2DPoint& rNext); - - /// ControlPoint resets - void resetPrevControlPoint(sal_uInt32 nIndex); - void resetNextControlPoint(sal_uInt32 nIndex); - void resetControlPoints(sal_uInt32 nIndex); - void resetControlPoints(); - - /// Bezier segment append with control points. The current last polygon point is implicitly taken as start point. - void appendBezierSegment(const basegfx::B2DPoint& rNextControlPoint, const basegfx::B2DPoint& rPrevControlPoint, const basegfx::B2DPoint& rPoint); - - /// ControlPoint checks - bool areControlPointsUsed() const; - bool isPrevControlPointUsed(sal_uInt32 nIndex) const; - bool isNextControlPointUsed(sal_uInt32 nIndex) const; - B2VectorContinuity getContinuityInPoint(sal_uInt32 nIndex) const; - - /** check edge for being a bezier segment - - This test the existance of control vectors, but do not apply - testAndSolveTrivialBezier() to the bezier segment, so it is still useful - to do so. - Since it can use internal data representations, it is faster - than using getBezierSegment() and applying isBezier() on it. - - @param nIndex - Index of the addressed edge's start point - - @return - true if edge exists and at least one control vector is used - */ - bool isBezierSegment(sal_uInt32 nIndex) const; - - /** bezier segment access - - This method also works when it is no bezier segment at all and will fill - the given B2DCubicBezier as needed. - In any case, the given B2DCubicBezier will be filled, if necessary with - the single start point (if no valid edge exists). - - @param nIndex - Index of the addressed edge's start point - - @param rTarget - The B2DCubicBezier to be filled. It's data WILL be changed. - */ - void getBezierSegment(sal_uInt32 nIndex, B2DCubicBezier& rTarget) const; - - /** Default adaptive subdivision access - - This method will return a default adapive subdivision of the polygon. - If the polygon does not contain any bezier curve segments, it will - just return itself. - - The subdivision is created on first request and buffered, so when using - this subdivision You have the guarantee for fast accesses for multiple - usages. It is intended for tooling usage for tasks which would be hard - to accomplish on bezier segments (e.g. isInEpsilonRange). - - The current default subdivision uses adaptiveSubdivideByCount with 9 - subdivisions which gives 10 edges and 11 points per segment and is - usually pretty usable for processing purposes. There is no parameter - passing here ATM but it may be changed on demand. If needed, a TYPE - and PARAMETER (both defaulted) may be added to allow for switching - between the different kinds of subdivisiond and passing them one - parameter. - - The lifetime of the buffered subdivision is based on polygon changes. - When changing the polygon, it will be flushed. It is buffered at the - refcounted implementation class, so it will survive copy by value and - combinations in PolyPolygons. - - @return - The default (and buffered) subdivision of this polygon. It may - be this polygon itself when it has no bezier segments. It is guaranteed - to have no more bezier segments - */ - B2DPolygon getDefaultAdaptiveSubdivision() const; - - /** Get the B2DRange (Rectangle dimensions) of this B2DPolygon - - A polygon may have up to three ranges: - - (a) the range of the polygon points - (b) the range of the polygon points and control points - (c) the outer range of the subdivided bezier curve - - Ranges (a) and (c) are produced by tools::getRange(); resp. this - getB2DRange(). tools::getRangeWithControlPoints handles case (b). - - To get range (c) a simple solution would be to subdivide the polygon - and use getRange() on it. Since subdivision is expensive and decreases - the polygon quality, i added this new method. It will use a - methodology suggested by HDU. First, it gets the range (a). - Then it iterates over the bezier segments and for each it - first tests if the outer range of the bezier segment is already - contained in the result range. - - The subdivision itself uses getAllExtremumPositions() to only - calculate extremum points and to expand the result accordingly. - Thus it calculates maximal four extremum points on the bezier - segment, no split is used at all. - - @return - The outer range of the bezier curve/polygon - */ - B2DRange getB2DRange() const; - - /** insert other 2D polygons - - The default (with nIndex2 == 0 && nCount == 0) inserts the whole - rPoly at position nIndex - - @param nIndex - Target index for points to be inserted - - @param rPoly - The source for new points - - @param nIndex2 - The index to the first source point into rPoly - - @param nCount - How many points to add from rPoly to this polygon. Null - means to copy all (starting from nIndex2) - */ - void insert(sal_uInt32 nIndex, const B2DPolygon& rPoly, sal_uInt32 nIndex2 = 0, sal_uInt32 nCount = 0); - - /** append other 2D polygons - - The default (nIndex ==0 && nCount == 0) will append - the whole rPoly - - @param rPoly - The source polygon - - @param nIndex - The index to the first point of rPoly to append - - @param nCount - The number of points to append from rPoly, starting - from nIndex. If zero, as much as possibel is appended - */ - void append(const B2DPolygon& rPoly, sal_uInt32 nIndex = 0, sal_uInt32 nCount = 0); - - /// remove points - void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1); - - /// clear all points - void clear(); - - /// closed state interface - bool isClosed() const; - void setClosed(bool bNew); - - /// flip polygon direction - void flip(); - - /// test if Polygon has double points - bool hasDoublePoints() const; - - /// remove double points, at the begin/end and follow-ups, too - void removeDoublePoints(); - - /// apply transformation given in matrix form - void transform(const basegfx::B2DHomMatrix& rMatrix); - - // point iterators (same iterator validity conditions as for vector) - const B2DPoint* begin() const; - const B2DPoint* end() const; - B2DPoint* begin(); - B2DPoint* end(); - }; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_POLYGON_B2DPOLYGON_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolygonclipper.hxx b/basegfx/inc/basegfx/polygon/b2dpolygonclipper.hxx deleted file mode 100644 index c94f91a371..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolygonclipper.hxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYPOLYGON_B2DPOLYGONCLIPPER_HXX -#define _BGFX_POLYPOLYGON_B2DPOLYGONCLIPPER_HXX - -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // predefinitions - class B2DRange; - - namespace tools - { - // This method clips the given PolyPolygon against a horizontal or vertical axis (parallell to X or Y axis). The axis is - // defined by bParallelToXAxis (true -> it's parallel to the X-Axis of the coordinate system, else to the Y-Axis) and the - // fValueOnOtherAxis (gives the translation to the coordinate system axis). For example, when You want to define - // a clip axis parallel to X.Axis and 100 above it, use bParallelToXAxis = true and fValueOnOtherAxis = 100. - // The value bAboveAxis defines on which side the return value will be (true -> above X, right of Y). - // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true). - BASEGFX_DLLPUBLIC B2DPolyPolygon clipPolyPolygonOnParallelAxis(const B2DPolyPolygon& rCandidate, bool bParallelToXAxis, bool bAboveAxis, double fValueOnOtherAxis, bool bStroke); - BASEGFX_DLLPUBLIC B2DPolyPolygon clipPolygonOnParallelAxis(const B2DPolygon& rCandidate, bool bParallelToXAxis, bool bAboveAxis, double fValueOnOtherAxis, bool bStroke); - - // Clip the given PolyPolygon against the given range. bInside defines if the result will contain the - // parts which are contained in the range or vice versa. - // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true). - BASEGFX_DLLPUBLIC B2DPolyPolygon clipPolyPolygonOnRange(const B2DPolyPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke); - BASEGFX_DLLPUBLIC B2DPolyPolygon clipPolygonOnRange(const B2DPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke); - - // Clip given PolyPolygon against the endless edge (ray) defined by the given two points. bAbove defines on which side - // of the edge the result will be together with the definition of the edge. If the edge is seen as a vector - // from A to B and bAbove is true, the result will contain the geometry left of the vector. - // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true). - BASEGFX_DLLPUBLIC B2DPolyPolygon clipPolyPolygonOnEdge(const B2DPolyPolygon& rCandidate, const B2DPoint& rPointA, const B2DPoint& rPointB, bool bAbove, bool bStroke); - BASEGFX_DLLPUBLIC B2DPolyPolygon clipPolygonOnEdge(const B2DPolygon& rCandidate, const B2DPoint& rPointA, const B2DPoint& rPointB, bool bAbove, bool bStroke); - - // Clip given PolyPolygon against given clipping polygon. - // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true). - // With stroke polygons, You get all line snippets inside rCip. - // With filled polygons, You get all PolyPolygon parts which were inside rClip. - // The switch bInside decides if the parts inside the clip polygon or outside shall be created. - // The clip polygon is always assumed closed, even when it's isClosed() is false. - BASEGFX_DLLPUBLIC B2DPolyPolygon clipPolyPolygonOnPolyPolygon(const B2DPolyPolygon& rCandidate, const B2DPolyPolygon& rClip, bool bInside, bool bStroke); - BASEGFX_DLLPUBLIC B2DPolyPolygon clipPolygonOnPolyPolygon(const B2DPolygon& rCandidate, const B2DPolyPolygon& rClip, bool bInside, bool bStroke); - - // clip the given polygon against the given range. the resulting polygon will always contain - // the inside parts which will always be interpreted as areas. the incoming polygon is expected - // to be a simple triangle list. the result is also a simple triangle list. - BASEGFX_DLLPUBLIC B2DPolygon clipTriangleListOnRange( const B2DPolygon& rCandidate, const B2DRange& rRange ); - - } // end of namespace tools -} // end of namespace basegfx - -#endif /* _BGFX_POLYPOLYGON_B2DPOLYGONCLIPPER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolygoncutandtouch.hxx b/basegfx/inc/basegfx/polygon/b2dpolygoncutandtouch.hxx deleted file mode 100644 index 1ca48ee34d..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolygoncutandtouch.hxx +++ /dev/null @@ -1,85 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_CUTANDTOUCH_HXX -#define _BGFX_POLYGON_CUTANDTOUCH_HXX - -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace tools - { - // look for self-intersections and self-touches (points on an edge) in given polygon and add - // extra points there. Result will have no touches or intersections on an edge, only on points - BASEGFX_DLLPUBLIC B2DPolygon addPointsAtCutsAndTouches(const B2DPolygon& rCandidate); - - // look for polypolygon-intersections and polypolygon-touches (point of poly A on an edge of poly B) in given PolyPolygon and add - // extra points there. Result will have no touches or intersections between contained polygons on an edge, only on points. For - // convenience, the correction for self-intersections for each member polygon will be used, too. - // Changed: Self intersections are searched by default, but may be switched off by 2nd parameter. - BASEGFX_DLLPUBLIC B2DPolyPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rCandidate, bool bSelfIntersections = true); - - // look for intersections of rCandidate with all polygons from rMask and add extra points there. Do - // not change or add points to rMask. - BASEGFX_DLLPUBLIC B2DPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rMask, const B2DPolygon& rCandidate); - - // look for intersections of rCandidate with all polygons from rMask and add extra points there. Do - // not change or add points to rMask. - BASEGFX_DLLPUBLIC B2DPolyPolygon addPointsAtCutsAndTouches(const B2DPolyPolygon& rMask, const B2DPolyPolygon& rCandidate); - - // look for intersections of rCandidate with the edge from rStart to rEnd and add extra points there. - // Points are only added in the range of the edge, not on the endless vector. - BASEGFX_DLLPUBLIC B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate, const B2DPoint& rStart, const B2DPoint& rEnd); - BASEGFX_DLLPUBLIC B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, const B2DPoint& rStart, const B2DPoint& rEnd); - - // look for intersections of rCandidate with the mask Polygon and add extra points there. - // The mask polygon is assumed to be closed, even when it's not explicitely. - BASEGFX_DLLPUBLIC B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate, const B2DPolyPolygon& rMask); - BASEGFX_DLLPUBLIC B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, const B2DPolyPolygon& rMask); - - // look for self-intersections in given polygon and add extra points there. Result will have no - // intersections on an edge - BASEGFX_DLLPUBLIC B2DPolygon addPointsAtCuts(const B2DPolygon& rCandidate); - - // add points at all self-intersections of single polygons (depends on bSelfIntersections) - // and at polygon-polygon intersections - BASEGFX_DLLPUBLIC B2DPolyPolygon addPointsAtCuts(const B2DPolyPolygon& rCandidate, bool bSelfIntersections = true); - - } // end of namespace tools -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_POLYGON_CUTANDTOUCH_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolygontools.hxx b/basegfx/inc/basegfx/polygon/b2dpolygontools.hxx deleted file mode 100644 index f01cdd83f2..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolygontools.hxx +++ /dev/null @@ -1,538 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DPOLYGONTOOLS_HXX -#define _BGFX_POLYGON_B2DPOLYGONTOOLS_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/range/b2drectangle.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // predefinitions - class B2DPolygon; - class B2DRange; - - namespace tools - { - // B2DPolygon tools - - // open/close with point add/remove and control point corrections - BASEGFX_DLLPUBLIC void openWithGeometryChange(B2DPolygon& rCandidate); - BASEGFX_DLLPUBLIC void closeWithGeometryChange(B2DPolygon& rCandidate); - - /** Check if given polygon is closed. - - This is kind of a 'classic' method to support old polygon - definitions. Those old polygon definitions define the - closed state of the polygon using identical start and - endpoints. This method corrects this (removes double - start/end points) and sets the Closed()-state of the - polygon correctly. - */ - BASEGFX_DLLPUBLIC void checkClosed(B2DPolygon& rCandidate); - - // Get successor and predecessor indices. Returning the same index means there - // is none. Same for successor. - BASEGFX_DLLPUBLIC sal_uInt32 getIndexOfPredecessor(sal_uInt32 nIndex, const B2DPolygon& rCandidate); - BASEGFX_DLLPUBLIC sal_uInt32 getIndexOfSuccessor(sal_uInt32 nIndex, const B2DPolygon& rCandidate); - - // Get orientation of Polygon - BASEGFX_DLLPUBLIC B2VectorOrientation getOrientation(const B2DPolygon& rCandidate); - - // isInside tests for B2dPoint and other B2dPolygon. On border is not inside as long as - // not true is given in bWithBorder flag. - BASEGFX_DLLPUBLIC bool isInside(const B2DPolygon& rCandidate, const B2DPoint& rPoint, bool bWithBorder = false); - BASEGFX_DLLPUBLIC bool isInside(const B2DPolygon& rCandidate, const B2DPolygon& rPolygon, bool bWithBorder = false); - - /** Get the range of a polygon including bezier control points - - For detailed discussion, see B2DPolygon::getB2DRange() - - @param rCandidate - The B2DPolygon eventually containing bezier segments - - @return - The outer range of the bezier curve containing bezier control points - */ - BASEGFX_DLLPUBLIC B2DRange getRangeWithControlPoints(const B2DPolygon& rCandidate); - - /** Get the range of a polygon - - This method creates the outer range of the subdivided bezier curve. - For detailed discussion see B2DPolygon::getB2DRange() - - @param rCandidate - The B2DPolygon eventually containing bezier segments - - @return - The outer range of the bezier curve - */ - BASEGFX_DLLPUBLIC B2DRange getRange(const B2DPolygon& rCandidate); - - // get signed area of polygon - BASEGFX_DLLPUBLIC double getSignedArea(const B2DPolygon& rCandidate); - - // get area of polygon - BASEGFX_DLLPUBLIC double getArea(const B2DPolygon& rCandidate); - - /** get length of polygon edge from point nIndex to nIndex + 1 */ - BASEGFX_DLLPUBLIC double getEdgeLength(const B2DPolygon& rCandidate, sal_uInt32 nIndex); - - /** get length of polygon */ - BASEGFX_DLLPUBLIC double getLength(const B2DPolygon& rCandidate); - - // get position on polygon for absolute given distance. If - // length is given, it is assumed the correct polygon length, if 0.0 it is calculated - // using getLength(...) - BASEGFX_DLLPUBLIC B2DPoint getPositionAbsolute(const B2DPolygon& rCandidate, double fDistance, double fLength = 0.0); - - // get position on polygon for relative given distance in range [0.0 .. 1.0]. If - // length is given, it is assumed the correct polygon length, if 0.0 it is calculated - // using getLength(...) - BASEGFX_DLLPUBLIC B2DPoint getPositionRelative(const B2DPolygon& rCandidate, double fDistance, double fLength = 0.0); - - // get a snippet from given polygon for absolute distances. The polygon is assumed - // to be opened (not closed). fFrom and fTo need to be in range [0.0 .. fLength], where - // fTo >= fFrom. If length is given, it is assumed the correct polygon length, - // if 0.0 it is calculated using getLength(...) - BASEGFX_DLLPUBLIC B2DPolygon getSnippetAbsolute(const B2DPolygon& rCandidate, double fFrom, double fTo, double fLength = 0.0); - - // get a snippet from given polygon for relative distances. The polygon is assumed - // to be opened (not closed). fFrom and fTo need to be in range [0.0 .. 1.0], where - // fTo >= fFrom. If length is given, it is assumed the correct polygon length, - // if 0.0 it is calculated using getLength(...) - BASEGFX_DLLPUBLIC B2DPolygon getSnippetRelative(const B2DPolygon& rCandidate, double fFrom = 0.0, double fTo = 1.0, double fLength = 0.0); - - // Continuity check for point with given index - BASEGFX_DLLPUBLIC B2VectorContinuity getContinuityInPoint(const B2DPolygon& rCandidate, sal_uInt32 nIndex); - - // Subdivide all contained curves. Use distanceBound value if given. - BASEGFX_DLLPUBLIC B2DPolygon adaptiveSubdivideByDistance(const B2DPolygon& rCandidate, double fDistanceBound = 0.0); - - // Subdivide all contained curves. Use angleBound value if given. - BASEGFX_DLLPUBLIC B2DPolygon adaptiveSubdivideByAngle(const B2DPolygon& rCandidate, double fAngleBound = 0.0); - - // #i37443# Subdivide all contained curves. - BASEGFX_DLLPUBLIC B2DPolygon adaptiveSubdivideByCount(const B2DPolygon& rCandidate, sal_uInt32 nCount = 0L); - - // Definitions for the cut flags used from the findCut methods - typedef sal_uInt16 CutFlagValue; - - #define CUTFLAG_NONE (0x0000) - #define CUTFLAG_LINE (0x0001) - #define CUTFLAG_START1 (0x0002) - #define CUTFLAG_START2 (0x0004) - #define CUTFLAG_END1 (0x0008) - #define CUTFLAG_END2 (0x0010) - #define CUTFLAG_ALL (CUTFLAG_LINE|CUTFLAG_START1|CUTFLAG_START2|CUTFLAG_END1|CUTFLAG_END2) - #define CUTFLAG_DEFAULT (CUTFLAG_LINE|CUTFLAG_START2|CUTFLAG_END2) - - // Calculate cut between the points given by the two indices. pCut1 - // and pCut2 will contain the cut coordinate on each edge in ]0.0, 1.0] - // (if given) and the return value will contain a cut description. - BASEGFX_DLLPUBLIC CutFlagValue findCut( - const B2DPolygon& rCandidate, - sal_uInt32 nIndex1, sal_uInt32 nIndex2, - CutFlagValue aCutFlags = CUTFLAG_DEFAULT, - double* pCut1 = 0L, double* pCut2 = 0L); - - // This version is working with two indexed edges from different - // polygons. - BASEGFX_DLLPUBLIC CutFlagValue findCut( - const B2DPolygon& rCandidate1, sal_uInt32 nIndex1, - const B2DPolygon& rCandidate2, sal_uInt32 nIndex2, - CutFlagValue aCutFlags = CUTFLAG_DEFAULT, - double* pCut1 = 0L, double* pCut2 = 0L); - - // This version works with two points and vectors to define the - // edges for the cut test. - BASEGFX_DLLPUBLIC CutFlagValue findCut( - const B2DPoint& rEdge1Start, const B2DVector& rEdge1Delta, - const B2DPoint& rEdge2Start, const B2DVector& rEdge2Delta, - CutFlagValue aCutFlags = CUTFLAG_DEFAULT, - double* pCut1 = 0L, double* pCut2 = 0L); - - // test if point is on the given edge in range ]0.0..1.0[ without - // the start/end points. If so, return true and put the parameter - // value in pCut (if provided) - BASEGFX_DLLPUBLIC bool isPointOnEdge( - const B2DPoint& rPoint, - const B2DPoint& rEdgeStart, - const B2DVector& rEdgeDelta, - double* pCut = 0L); - - /** Apply given LineDashing to given polygon - - This method is used to cut down line polygons to the needed - pieces when a dashing needs to be applied. - It is now capable of keeping contained bezier segments. - It is also capable of delivering line and non-line portions - depending on what target polygons You provide. This is useful - e.g. for dashed lines with two colors. - If the last and the first snippet in one of the results have - a common start/end ppoint, they will be merged to achieve as - view as needed result line snippets. This is also relevant for - further processing the results. - - @param rCandidate - The polygon based on which the snippets will be created. - - @param rDotDashArray - The line pattern given as array of length values - - @param pLineTarget - The target for line snippets, e.g. the first entry will be - a line segment with length rDotDashArray[0]. The given - polygon will be emptied as preparation. - - @param pGapTarget - The target for gap snippets, e.g. the first entry will be - a line segment with length rDotDashArray[1]. The given - polygon will be emptied as preparation. - - @param fFullDashDotLen - The sumed-up length of the rDotDashArray. If zero, it will - be calculated internally. - */ - BASEGFX_DLLPUBLIC void applyLineDashing( - const B2DPolygon& rCandidate, - const ::std::vector<double>& rDotDashArray, - B2DPolyPolygon* pLineTarget, - B2DPolyPolygon* pGapTarget = 0, - double fFullDashDotLen = 0.0); - - // test if point is inside epsilon-range around an edge defined - // by the two given points. Can be used for HitTesting. The epsilon-range - // is defined to be the rectangle centered to the given edge, using height - // 2 x fDistance, and the circle around both points with radius fDistance. - BASEGFX_DLLPUBLIC bool isInEpsilonRange(const B2DPoint& rEdgeStart, const B2DPoint& rEdgeEnd, const B2DPoint& rTestPosition, double fDistance); - - // test if point is inside epsilon-range around the given Polygon. Can be used - // for HitTesting. The epsilon-range is defined to be the rectangle centered - // to the given edge, using height 2 x fDistance, and the circle around both points - // with radius fDistance. - BASEGFX_DLLPUBLIC bool isInEpsilonRange(const B2DPolygon& rCandidate, const B2DPoint& rTestPosition, double fDistance); - - /** Create a polygon from a rectangle. - - @param rRect - The rectangle which describes the polygon size - - @param fRadius - Radius of the edge rounding, relative to the rectangle size. 0.0 means no - rounding, 1.0 will lead to an ellipse - */ - BASEGFX_DLLPUBLIC B2DPolygon createPolygonFromRect( const B2DRectangle& rRect, double fRadius ); - - /** Create a polygon from a rectangle. - - @param rRect - The rectangle which describes the polygon size - - @param fRadiusX - @param fRadiusY - Radius of the edge rounding, relative to the rectangle size. 0.0 means no - rounding, 1.0 will lead to an ellipse - */ - BASEGFX_DLLPUBLIC B2DPolygon createPolygonFromRect( const B2DRectangle& rRect, double fRadiusX, double fRadiusY ); - - /** Create a polygon from a rectangle. - */ - BASEGFX_DLLPUBLIC B2DPolygon createPolygonFromRect( const B2DRectangle& rRect ); - - /** Create the unit polygon - */ - BASEGFX_DLLPUBLIC B2DPolygon createUnitPolygon(); - - /** Create a circle polygon with given radius. - - This method creates a circle approximation consisting of - four cubic bezier segments, which approximate the given - circle with an error of less than 0.5 percent. - - @param rCenter - Center point of the circle - - @param fRadius - Radius of the circle - */ - BASEGFX_DLLPUBLIC B2DPolygon createPolygonFromCircle( const B2DPoint& rCenter, double fRadius ); - - /** create a polygon which describes the unit circle and close it - - @param nStartQuadrant - To be able to rebuild the old behaviour where the circles started at bottom, - this parameter is used. Default is 0 which is the first quadrant and the - polygon's start point will be the rightmost one. When using e.g. 1, the - first created quadrant will start at the YMax-position (with Y down on screens, - this is the lowest one). This is needed since when lines are dashed, toe old - geometry started at bottom point, else it would look different. - */ - BASEGFX_DLLPUBLIC B2DPolygon createPolygonFromUnitCircle(sal_uInt32 nStartQuadrant = 0); - - /** Create an ellipse polygon with given radii. - - This method creates an ellipse approximation consisting of - four cubic bezier segments, which approximate the given - ellipse with an error of less than 0.5 percent. - - @param rCenter - Center point of the circle - - @param fRadiusX - Radius of the ellipse in X direction - - @param fRadiusY - Radius of the ellipse in Y direction - */ - BASEGFX_DLLPUBLIC B2DPolygon createPolygonFromEllipse( const B2DPoint& rCenter, double fRadiusX, double fRadiusY ); - - /** Create an unit ellipse polygon with the given angles, from start to end - */ - BASEGFX_DLLPUBLIC B2DPolygon createPolygonFromEllipseSegment( const B2DPoint& rCenter, double fRadiusX, double fRadiusY, double fStart, double fEnd ); - - BASEGFX_DLLPUBLIC B2DPolygon createPolygonFromUnitEllipseSegment( double fStart, double fEnd ); - - /** Predicate whether a given polygon is a rectangle. - - @param rPoly - Polygon to check - - @return true, if the polygon describes a rectangle - (polygon is closed, and the points are either cw or ccw - enumerations of a rectangle's vertices). Note that - intermediate points and duplicate points are ignored. - */ - BASEGFX_DLLPUBLIC bool isRectangle( const B2DPolygon& rPoly ); - - // create 3d polygon from given 2d polygon. The given fZCoordinate is used to expand the - // third coordinate. - BASEGFX_DLLPUBLIC B3DPolygon createB3DPolygonFromB2DPolygon(const B2DPolygon& rCandidate, double fZCoordinate = 0.0); - - // create 2d PolyPolygon from given 3d PolyPolygon. All coordinates are transformed using the given - // matrix and the resulting x,y is used to form the new polygon. - BASEGFX_DLLPUBLIC B2DPolygon createB2DPolygonFromB3DPolygon(const B3DPolygon& rCandidate, const B3DHomMatrix& rMat); - - // create simplified version of the original polygon by - // replacing segments with spikes/loops and self intersections - // by several trivial sub-segments - BASEGFX_DLLPUBLIC B2DPolygon createSimplifiedPolygon(const B2DPolygon&); - - // calculate the distance to the given endless ray and return. The relative position on the edge is returned in Cut. - // That position may be less than 0.0 or more than 1.0 - BASEGFX_DLLPUBLIC double getDistancePointToEndlessRay(const B2DPoint& rPointA, const B2DPoint& rPointB, const B2DPoint& rTestPoint, double& rCut); - - // calculate the smallest distance to given edge and return. The relative position on the edge is returned in Cut. - // That position is in the range [0.0 .. 1.0] and the returned distance is adapted accordingly to the start or end - // point of the edge - BASEGFX_DLLPUBLIC double getSmallestDistancePointToEdge(const B2DPoint& rPointA, const B2DPoint& rPointB, const B2DPoint& rTestPoint, double& rCut); - - // for each contained edge calculate the smallest distance. Return the index to the smallest - // edge in rEdgeIndex. The relative position on the edge is returned in rCut. - // If nothing was found (e.g. empty input plygon), DBL_MAX is returned. - BASEGFX_DLLPUBLIC double getSmallestDistancePointToPolygon(const B2DPolygon& rCandidate, const B2DPoint& rTestPoint, sal_uInt32& rEdgeIndex, double& rCut); - - // distort single point. rOriginal describes the original range, where the given points describe the distorted corresponding points. - BASEGFX_DLLPUBLIC B2DPoint distort(const B2DPoint& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight); - - // distort polygon. rOriginal describes the original range, where the given points describe the distorted corresponding points. - BASEGFX_DLLPUBLIC B2DPolygon distort(const B2DPolygon& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight); - - // rotate polygon around given point with given angle. - BASEGFX_DLLPUBLIC B2DPolygon rotateAroundPoint(const B2DPolygon& rCandidate, const B2DPoint& rCenter, double fAngle); - - // expand all segments (which are not yet) to curve segments. This is done with setting the control - // vectors on the 1/3 resp. 2/3 distances on each segment. - BASEGFX_DLLPUBLIC B2DPolygon expandToCurve(const B2DPolygon& rCandidate); - - // expand given segment to curve segment. This is done with setting the control - // vectors on the 1/3 resp. 2/3 distances. The return value describes if a change took place. - BASEGFX_DLLPUBLIC bool expandToCurveInPoint(B2DPolygon& rCandidate, sal_uInt32 nIndex); - - // set continuity for the whole curve. If not a curve, nothing will change. Non-curve points are not changed, too. - B2DPolygon setContinuity(const B2DPolygon& rCandidate, B2VectorContinuity eContinuity); - - // set continuity for given index. If not a curve, nothing will change. Non-curve points are not changed, too. - // The return value describes if a change took place. - BASEGFX_DLLPUBLIC bool setContinuityInPoint(B2DPolygon& rCandidate, sal_uInt32 nIndex, B2VectorContinuity eContinuity); - - // test if polygon contains neutral points. A neutral point is one whos orientation is neutral - // e.g. positioned on the edge of it's predecessor and successor - BASEGFX_DLLPUBLIC bool hasNeutralPoints(const B2DPolygon& rCandidate); - - // remove neutral points. A neutral point is one whos orientation is neutral - // e.g. positioned on the edge of it's predecessor and successor - BASEGFX_DLLPUBLIC B2DPolygon removeNeutralPoints(const B2DPolygon& rCandidate); - - // tests if polygon is convex - BASEGFX_DLLPUBLIC bool isConvex(const B2DPolygon& rCandidate); - - // calculates the orientation at edge nIndex - BASEGFX_DLLPUBLIC B2VectorOrientation getOrientationForIndex(const B2DPolygon& rCandidate, sal_uInt32 nIndex); - - // calculates if given point is on given line, taking care of the numerical epsilon - BASEGFX_DLLPUBLIC bool isPointOnLine(const B2DPoint& rStart, const B2DPoint& rEnd, const B2DPoint& rCandidate, bool bWithPoints = false); - - // calculates if given point is on given polygon, taking care of the numerical epsilon. Uses - // isPointOnLine internally - BASEGFX_DLLPUBLIC bool isPointOnPolygon(const B2DPolygon& rCandidate, const B2DPoint& rPoint, bool bWithPoints = true); - - // test if candidate is inside triangle - BASEGFX_DLLPUBLIC bool isPointInTriangle(const B2DPoint& rA, const B2DPoint& rB, const B2DPoint& rC, const B2DPoint& rCandidate, bool bWithBorder = false); - - // test if candidateA and candidateB are on the same side of the given line - BASEGFX_DLLPUBLIC bool arePointsOnSameSideOfLine(const B2DPoint& rStart, const B2DPoint& rEnd, const B2DPoint& rCandidateA, const B2DPoint& rCandidateB, bool bWithLine = false); - - // add triangles for given rCandidate to rTarget. For each triangle, 3 points will be added to rCandidate. - // All triangles will go from the start point of rCandidate to two consecutive points, building (rCandidate.count() - 2) - // triangles. - BASEGFX_DLLPUBLIC void addTriangleFan(const B2DPolygon& rCandidate, B2DPolygon& rTarget); - - // grow for polygon. Move all geometry in each point in the direction of the normal in that point - // with the given amount. Value may be negative. - BASEGFX_DLLPUBLIC B2DPolygon growInNormalDirection(const B2DPolygon& rCandidate, double fValue); - - // force all sub-polygons to a point count of nSegments - BASEGFX_DLLPUBLIC B2DPolygon reSegmentPolygon(const B2DPolygon& rCandidate, sal_uInt32 nSegments); - - // create polygon state at t from 0.0 to 1.0 between the two polygons. Both polygons must have the same - // organisation, e.g. same amount of points - BASEGFX_DLLPUBLIC B2DPolygon interpolate(const B2DPolygon& rOld1, const B2DPolygon& rOld2, double t); - - BASEGFX_DLLPUBLIC bool isPolyPolygonEqualRectangle( const B2DPolyPolygon& rPolyPoly, const B2DRange& rRect ); - - // #i76891# Try to remove existing curve segments if they are simply edges - BASEGFX_DLLPUBLIC B2DPolygon simplifyCurveSegments(const B2DPolygon& rCandidate); - - // makes the given indexed point the new polygon start point. To do that, the points in the - // polygon will be rotated. This is only valid for closed polygons, for non-closed ones - // an assertion will be triggered - BASEGFX_DLLPUBLIC B2DPolygon makeStartPoint(const B2DPolygon& rCandidate, sal_uInt32 nIndexOfNewStatPoint); - - /** create edges of given length along given B2DPolygon - - @param rCandidate - The polygon to move along. Points at the given polygon are created, starting - at position fStart and stopping at less or equal to fEnd. The closed state is - preserved. - The polygon is subdivided if curve segments are included. That subdivision is the base - for the newly created points. - If the source is closed, the indirectly existing last edge may NOT have the - given length. - If the source is open, all edges will have the given length. You may use the last - point of the original when You want to add the last edge Yourself. - - @param fLength - The length of the created edges. If less or equal zero, an empty polygon is returned. - - @param fStart - The start distance for the first to be generated point. Use 0.0 to get the - original start point. Negative values are truncated to 0.0. - - @param fEnd - The maximum distance for the last point. No more points behind this distance will be created. - Use 0.0 to proccess the whole polygon. Negative values are truncated to 0.0. It also - needs to be more or equal to fStart, else it is truncated to fStart. - - @return - The newly created polygon - */ - BASEGFX_DLLPUBLIC B2DPolygon createEdgesOfGivenLength(const B2DPolygon& rCandidate, double fLength, double fStart = 0.0, double fEnd = 0.0); - - /** Create Waveline along given polygon - The implementation is based on createEdgesOfGivenLength and creates a curve - segment with the given dimensions for each created line segment. The polygon - is treated as if opened (closed state will be ignored) and only for whole - edges a curve segment will be created (no rest handling) - - @param rCandidate - The polygon along which the waveline will be created - - @param fWaveWidth - The length of a single waveline curve segment - - @param fgWaveHeight - The height of the waveline (amplitude) - */ - BASEGFX_DLLPUBLIC B2DPolygon createWaveline(const B2DPolygon& rCandidate, double fWaveWidth, double fWaveHeight); - - /** split each edge of a polygon in exactly nSubEdges equidistant edges - - @param rCandidate - The source polygon. If too small (no edges), nSubEdges too small (<2) - or neither bHandleCurvedEdgesnor bHandleStraightEdges it will just be returned. - Else for each edge nSubEdges will be created. Closed state is preserved. - - @param nSubEdges - How many edges shall be created as replacement for each single edge - - @param bHandleCurvedEdges - Process curved edges or not. If to handle the curved edges will be splitted - into nSubEdges part curved edges of equidistant bezier distances. If not, - curved edges will just be copied. - - @param bHandleStraightEdges - Process straight edges or not. If to handle the straight edges will be splitted - into nSubEdges part curved edges of equidistant length. If not, - straight edges will just be copied. - */ - BASEGFX_DLLPUBLIC B2DPolygon reSegmentPolygonEdges(const B2DPolygon& rCandidate, sal_uInt32 nSubEdges, bool bHandleCurvedEdges, bool bHandleStraightEdges); - - ////////////////////////////////////////////////////////////////////// - // comparators with tolerance for 2D Polygons - BASEGFX_DLLPUBLIC bool equal(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB, const double& rfSmallValue); - BASEGFX_DLLPUBLIC bool equal(const B2DPolygon& rCandidateA, const B2DPolygon& rCandidateB); - - /** snap some polygon coordinates to discrete coordinates - - This method allows to snap some polygon points to discrete (integer) values - which equals e.g. a snap to discrete coordinates. It will snap points of - horizontal and vertical edges - - @param rCandidate - The source polygon - - @return - The modified version of the source polygon - */ - BASEGFX_DLLPUBLIC B2DPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolygon& rCandidate); - - } // end of namespace tools -} // end of namespace basegfx - -#endif /* _BGFX_POLYGON_B2DPOLYGONTOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolygontriangulator.hxx b/basegfx/inc/basegfx/polygon/b2dpolygontriangulator.hxx deleted file mode 100644 index a2b7c4e596..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolygontriangulator.hxx +++ /dev/null @@ -1,53 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DPOLYGONTRIANGULATOR_HXX -#define _BGFX_POLYGON_B2DPOLYGONTRIANGULATOR_HXX - -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace triangulator - { - // triangulate given polygon - BASEGFX_DLLPUBLIC ::basegfx::B2DPolygon triangulate(const ::basegfx::B2DPolygon& rCandidate); - - // triangulate given PolyPolygon - BASEGFX_DLLPUBLIC ::basegfx::B2DPolygon triangulate(const ::basegfx::B2DPolyPolygon& rCandidate); - - } // end of namespace triangulator -} // end of namespace basegfx - -#endif /* _BGFX_POLYGON_B2DPOLYGONTRIANGULATOR_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygon.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygon.hxx deleted file mode 100644 index d86e9045d5..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolypolygon.hxx +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DPOLYPOLYGON_HXX -#define _BGFX_POLYGON_B2DPOLYPOLYGON_HXX - -#include <sal/types.h> -#include <o3tl/cow_wrapper.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/basegfxdllapi.h> - -// predeclarations -class ImplB2DPolyPolygon; - -namespace basegfx -{ - class B2DPolygon; - class B2DHomMatrix; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B2DPolyPolygon - { - public: - typedef o3tl::cow_wrapper< ImplB2DPolyPolygon > ImplType; - - private: - ImplType mpPolyPolygon; - - public: - B2DPolyPolygon(); - B2DPolyPolygon(const B2DPolyPolygon& rPolyPolygon); - explicit B2DPolyPolygon(const B2DPolygon& rPolygon); - ~B2DPolyPolygon(); - - // assignment operator - B2DPolyPolygon& operator=(const B2DPolyPolygon& rPolyPolygon); - - /// unshare this poly-polygon (and all included polygons) with all internally shared instances - void makeUnique(); - - // compare operators - bool operator==(const B2DPolyPolygon& rPolyPolygon) const; - bool operator!=(const B2DPolyPolygon& rPolyPolygon) const; - - // polygon interface - sal_uInt32 count() const; - - B2DPolygon getB2DPolygon(sal_uInt32 nIndex) const; - void setB2DPolygon(sal_uInt32 nIndex, const B2DPolygon& rPolygon); - - // test for curve - bool areControlPointsUsed() const; - - // insert/append single polygon - void insert(sal_uInt32 nIndex, const B2DPolygon& rPolygon, sal_uInt32 nCount = 1); - void append(const B2DPolygon& rPolygon, sal_uInt32 nCount = 1); - - /** Default adaptive subdivision access - - For details refer to B2DPolygon::getDefaultAdaptiveSubdivision() - - @return - The default subdivision of this polygon - */ - B2DPolyPolygon getDefaultAdaptiveSubdivision() const; - - /** Get the B2DRange (Rectangle dimensions) of this B2DPolyPolygon - - For details refer to B2DPolygon::getB2DRange() - - @return - The outer range of the bezier curve/polygon - */ - B2DRange getB2DRange() const; - - // insert/append multiple polygons - void insert(sal_uInt32 nIndex, const B2DPolyPolygon& rPolyPolygon); - void append(const B2DPolyPolygon& rPolyPolygon); - - // remove - void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1); - - // reset to empty state - void clear(); - - // closed state - bool isClosed() const; - void setClosed(bool bNew); - - // flip polygon direction - void flip(); - - // test if PolyPolygon has double points - bool hasDoublePoints() const; - - // remove double points, at the begin/end and follow-ups, too - void removeDoublePoints(); - - // apply transformation given in matrix form to the polygon - void transform(const basegfx::B2DHomMatrix& rMatrix); - - // polygon iterators (same iterator validity conditions as for vector) - const B2DPolygon* begin() const; - const B2DPolygon* end() const; - B2DPolygon* begin(); - B2DPolygon* end(); - }; -} // end of namespace basegfx - -#endif /* _BGFX_POLYGON_B2DPOLYPOLYGON_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx deleted file mode 100644 index 31ba67962f..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolypolygoncutter.hxx +++ /dev/null @@ -1,123 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DPOLYPOLYGONCUTTER_HXX -#define _BGFX_POLYGON_B2DPOLYPOLYGONCUTTER_HXX - -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace tools - { - // Solve all crossovers in a polyPolygon. This re-layouts all contained polygons so that the - // result will contain only non-cutting polygons. For that reason, points will be added at - // crossover and touch points and the single Polygons may be re-combined. The orientations - // of the contained polygons in not changed but used as topological information. - // Self crossovers of the contained sub-polygons are implicitely handled, but to not lose - // the topological information, it may be necessary to remove self-intersections of the - // contained sub-polygons in a preparing step and to explicitely correct their orientations. - BASEGFX_DLLPUBLIC B2DPolyPolygon solveCrossovers(const B2DPolyPolygon& rCandidate); - - // Version for single polygons. This is for solving self-intersections. Result will be free of - // crossovers. When result contains multiple polygons, it may be necessary to rearrange their - // orientations since holes may have been created (use correctOrientations eventually). - BASEGFX_DLLPUBLIC B2DPolyPolygon solveCrossovers(const B2DPolygon& rCandidate); - - // Neutral polygons will be stripped. Neutral polygons are ones who's orientation is - // neutral, so normally they have no volume -> just closed paths. A polygon with the same - // positive and negative oriented volume is also neutral, so this may not be wanted. It is - // safe to call with crossover-free polygons, though (that's where it's mostly used). - BASEGFX_DLLPUBLIC B2DPolyPolygon stripNeutralPolygons(const B2DPolyPolygon& rCandidate); - - // Remove not necessary polygons. Works only correct with crossover-free polygons. For each - // polygon, the depth for the PolyPolygon is calculated. The orientation is used to identify holes. - // Start value for holes is -1, for polygons it's zero. Ech time a polygon is contained in another one, - // it's depth is increased when inside a polygon, decreased when inside a hole. The result is a depth - // which e.g. is -1 for holes outside everything, 1 for a polygon covered by another polygon and zero - // for e.g. holes in a polygon or polygons outside everythig else. - // In the 2nd step, all polygons with depth other than zero are removed. If bKeepAboveZero is used, - // all polygons < 1 are removed. The bKeepAboveZero mode is useful for clipping, e.g. just append - // one polygon to another and use this mode -> only parts where two polygons overlapped will be kept. - // In combination with correct orientation of the input orientations and the SolveCrossover calls this - // can be combined for logical polygon operations or polygon clipping. - BASEGFX_DLLPUBLIC B2DPolyPolygon stripDispensablePolygons(const B2DPolyPolygon& rCandidate, bool bKeepAboveZero = false); - - // For convenience: The four basic operations OR, XOR, AND and DIFF for - // two PolyPolygons. These are combinations of the above methods. To not be forced - // to do evtl. already done preparations twice, You have to do the operations Yourself. - // - // A source preparation consists of preparing it to be seen as XOR-Rule PolyPolygon, - // so it is freed of intersections, self-intersections and the orientations are corrected. - // Important is that it will define the same areas as before, but is intersection-free. - // As an example think about a single polygon looping in itself and having holes. To - // topologically correctly handle this, it is necessary to remove all intersections and - // to correct the orientations. The orientation of the isolated holes e.g. will be negative. - // Topologically it is necessary to prepare each polygon which is seen as entity. It is - // not sufficient just to concatenate them and prepare the result, this may be topologically - // different since the simple concatenation will be seen as XOR. To work correctly, You - // may need to OR those polygons. - - // Preparations: solve self-intersections and intersections, remove neutral - // parts and correct orientations. - BASEGFX_DLLPUBLIC B2DPolyPolygon prepareForPolygonOperation(const B2DPolygon& rCandidate); - BASEGFX_DLLPUBLIC B2DPolyPolygon prepareForPolygonOperation(const B2DPolyPolygon& rCandidate); - - // OR: Return all areas where CandidateA or CandidateB exist - BASEGFX_DLLPUBLIC B2DPolyPolygon solvePolygonOperationOr(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB); - - // XOR: Return all areas where CandidateA or CandidateB exist, but not both - BASEGFX_DLLPUBLIC B2DPolyPolygon solvePolygonOperationXor(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB); - - // AND: Return all areas where CandidateA and CandidateB exist - BASEGFX_DLLPUBLIC B2DPolyPolygon solvePolygonOperationAnd(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB); - - // DIFF: Return all areas where CandidateA is not covered by CandidateB (cut B out of A) - BASEGFX_DLLPUBLIC B2DPolyPolygon solvePolygonOperationDiff(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB); - - /** merge all single PolyPolygons to a single, OR-ed PolyPolygon - - @param rInput - The source PolyPolygons - - @return A single PolyPolygon containing the Or-merged result - */ - BASEGFX_DLLPUBLIC B2DPolyPolygon mergeToSinglePolyPolygon(const std::vector< basegfx::B2DPolyPolygon >& rInput); - - } // end of namespace tools -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - - -#endif /* _BGFX_POLYGON_B2DPOLYPOLYGONCUTTER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygonfillrule.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygonfillrule.hxx deleted file mode 100644 index 01b4af6027..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolypolygonfillrule.hxx +++ /dev/null @@ -1,63 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DPOLYPOLYGONFILLRULE_HXX -#define _BGFX_POLYGON_B2DPOLYPOLYGONFILLRULE_HXX - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - /** Fill rule to use for poly-polygon filling. - - The fill rule determines which areas are inside, and which are - outside the poly-polygon. - */ - enum FillRule - { - /** Areas, for which a scanline has crossed an odd number of - vertices, are regarded 'inside', the remainder 'outside' - of the poly-polygon. - */ - FillRule_EVEN_ODD, - - /** For each edge a scanline crosses, a current winding number - is updated. Downward edges count +1, upward edges count - -1. If the total accumulated winding number for one area - is not zero, this area is regarded 'inside', otherwise, - 'outside'. - */ - FillRule_NONZERO_WINDING_NUMBER - }; -} - -#endif /* _BGFX_POLYGON_B2DPOLYPOLYGONFILLRULE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygonrasterconverter.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygonrasterconverter.hxx deleted file mode 100644 index c5cf030e0a..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolypolygonrasterconverter.hxx +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DPOLYPOLYGONRASTERCONVERTER_HXX -#define _BGFX_POLYGON_B2DPOLYPOLYGONRASTERCONVERTER_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/range/b2drectangle.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/polygon/b2dpolypolygonfillrule.hxx> -#include <vector> -#include <utility> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - /** Raster-convert a poly-polygon. - - This class can raster-convert a given poly-polygon. Simply - derive from this, and override the span() method, which will - get called for every scanline span of the poly-polygon. - - @derive - Overwrite span() with the render output method of your choice. - */ - class BASEGFX_DLLPUBLIC B2DPolyPolygonRasterConverter - { - public: - /** Create raster-converter for given poly-polygon - */ - B2DPolyPolygonRasterConverter(const B2DPolyPolygon& rPolyPolyRaster); - - /** Create raster-converter for given poly-polygon and raster - area. - - @param rPolyPolyRaster - Poly-Polygon to raster convert - - @param rMinUpdateArea - Minimal area to touch when raster-converting. The - rectangle given here is guaranteed to be iterated through - scanline by scanline (but the raster converter might - actually use more scanlines, e.g. if the poly-polygon's - bound rect is larger). One of the cases where this - parameter comes in handy is when rendering in the 'off' - spans, and a certain area must be filled. <em>Do not</em> - use this for clipping, as described above, the touched - area might also be larger. - */ - B2DPolyPolygonRasterConverter(const B2DPolyPolygon& rPolyPolyRaster, - const B2DRectangle& rRasterArea ); - - virtual ~B2DPolyPolygonRasterConverter(); - - /** Raster-convert the contained poly-polygon - - @param eFillRule - Fill rule to use for span filling - */ - void rasterConvert( FillRule eFillRule); - - /** Override this method, to be called for every scanline span - of the poly-polygon - - @param rfXLeft - The left end of the current horizontal span - - @param rfXRight - The right end of the current horizontal span - - @param nY - The y position of the current horizontal span - - @param bOn - Denotes whether this span is on or off, according to the - active fill rule. - */ - virtual void span(const double& rfXLeft, - const double& rfXRight, - sal_Int32 nY, - bool bOn ) = 0; - - /// @internal - struct Vertex - { - inline Vertex(); - inline Vertex( const B2DPoint&, const B2DPoint&, bool ); - - B2DPoint aP1; - B2DPoint aP2; - bool bDownwards; - }; - - private: - // default: disabled copy/assignment - B2DPolyPolygonRasterConverter(const B2DPolyPolygonRasterConverter&); - B2DPolyPolygonRasterConverter& operator=( const B2DPolyPolygonRasterConverter& ); - - void init(); - - typedef ::std::vector<Vertex> VectorOfVertices; - typedef ::std::vector<VectorOfVertices> VectorOfVertexVectors; - - /// The poly-polygon to raster-convert - B2DPolyPolygon maPolyPolygon; - /// Total bound rect of the poly-polygon - const B2DRectangle maPolyPolyRectangle; - - /** Vector containing for each scanline a vector which in turn - contains all vertices that start on the specific scanline - */ - VectorOfVertexVectors maScanlines; - }; -} - -#endif /* _BGFX_POLYGON_B2DPOLYPOLYGONRASTERCONVERTER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx b/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx deleted file mode 100644 index efcc501551..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dpolypolygontools.hxx +++ /dev/null @@ -1,283 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYPOLYGON_B2DPOLYGONTOOLS_HXX -#define _BGFX_POLYPOLYGON_B2DPOLYGONTOOLS_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b3dpolypolygon.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -namespace rtl -{ - class OUString; -} - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // predefinitions - class B2DPolyPolygon; - class B2DRange; - - namespace tools - { - // B2DPolyPolygon tools - - // Check and evtl. correct orientations of all contained Polygons so that - // the orientations of contained polygons will variate to express areas and - // holes - BASEGFX_DLLPUBLIC B2DPolyPolygon correctOrientations(const B2DPolyPolygon& rCandidate); - - // make sure polygon with index 0L is not a hole. This may evtl. change the - // sequence of polygons, but allows to use polygon with index 0L to - // get the correct normal for the whole polyPolygon - BASEGFX_DLLPUBLIC B2DPolyPolygon correctOutmostPolygon(const B2DPolyPolygon& rCandidate); - - // Subdivide all contained curves. Use distanceBound value if given. - BASEGFX_DLLPUBLIC B2DPolyPolygon adaptiveSubdivideByDistance(const B2DPolyPolygon& rCandidate, double fDistanceBound = 0.0); - - // Subdivide all contained curves. Use distanceBound value if given. Else, a convenient one - // is created. - BASEGFX_DLLPUBLIC B2DPolyPolygon adaptiveSubdivideByAngle(const B2DPolyPolygon& rCandidate, double fAngleBound = 0.0); - - // Subdivide all contained curves. Use nCount divisions if given. Else, a convenient one - // is created. - BASEGFX_DLLPUBLIC B2DPolyPolygon adaptiveSubdivideByCount(const B2DPolyPolygon& rCandidate, sal_uInt32 nCount = 0L); - - // isInside test for B2dPoint. On border is not inside as long as not true is given - // in bWithBorder flag. It is assumed that the orientations of the given polygon are correct. - BASEGFX_DLLPUBLIC bool isInside(const B2DPolyPolygon& rCandidate, const B2DPoint& rPoint, bool bWithBorder = false); - - /** get range of PolyPolygon. Control points are included. - - For detailed description look at getRangeWithControlPoints(const B2DPolygon&). - This method just expands by the range of every sub-Polygon. - - @param rCandidate - The B2DPolyPolygon eventually containing bezier segments - - @return - The outer range including control points - */ - BASEGFX_DLLPUBLIC B2DRange getRangeWithControlPoints(const B2DPolyPolygon& rCandidate); - - /** Get the range of a polyPolygon - - For detailed description look at getRange(const B2DPolygon&). - This method just expands by the range of every sub-Polygon. - - @param rCandidate - The B2DPolyPolygon eventually containing bezier segments - - @return - The outer range of the polygon - */ - BASEGFX_DLLPUBLIC B2DRange getRange(const B2DPolyPolygon& rCandidate); - - /** Apply given LineDashing to given polyPolygon - - For a description see applyLineDashing in b2dpolygontoos.hxx - */ - BASEGFX_DLLPUBLIC void applyLineDashing( - const B2DPolyPolygon& rCandidate, - const ::std::vector<double>& rDotDashArray, - B2DPolyPolygon* pLineTarget, - B2DPolyPolygon* pGapTarget = 0, - double fFullDashDotLen = 0.0); - - // test if point is inside epsilon-range around the given PolyPolygon. Can be used - // for HitTesting. The epsilon-range is defined to be the tube around the PolyPolygon - // with distance fDistance and rounded edges (start and end point). - BASEGFX_DLLPUBLIC bool isInEpsilonRange(const B2DPolyPolygon& rCandidate, const B2DPoint& rTestPosition, double fDistance); - - /** Read poly-polygon from SVG. - - This function imports a poly-polygon from an SVG-D - attribute. Currently, elliptical arc elements are not yet - supported (and ignored during parsing). - - @param o_rPolyPoly - The output poly-polygon - - @param rSvgDAttribute - A valid SVG-D attribute string - - @return true, if the string was successfully parsed - */ - BASEGFX_DLLPUBLIC bool importFromSvgD( B2DPolyPolygon& o_rPolyPoly, - const ::rtl::OUString& rSvgDAttribute ); - - /** Read poly-polygon from SVG. - - This function imports a poly-polygon from an SVG points - attribute (a plain list of coordinate pairs). - - @param o_rPoly - The output polygon. Note that svg:points can only define a - single polygon - - @param rSvgPointsAttribute - A valid SVG points attribute string - - @return true, if the string was successfully parsed - */ - BASEGFX_DLLPUBLIC bool importFromSvgPoints( B2DPolygon& o_rPoly, - const ::rtl::OUString& rSvgPointsAttribute ); - - - // grow for polyPolygon. Move all geometry in each point in the direction of the normal in that point - // with the given amount. Value may be negative. - BASEGFX_DLLPUBLIC B2DPolyPolygon growInNormalDirection(const B2DPolyPolygon& rCandidate, double fValue); - - // This method will correct a pair of polyPolygons where the goal is to keep same point count - // to allow direct point association and also to remove self-intersections produced by shrinks. - // This method will eventually change both polyPolygons to reach that goal because there are cases - // where it is necessary to add new cut points to the original - BASEGFX_DLLPUBLIC void correctGrowShrinkPolygonPair(B2DPolyPolygon& rOriginal, B2DPolyPolygon& rGrown); - - // force all sub-polygons to a point count of nSegments - BASEGFX_DLLPUBLIC B2DPolyPolygon reSegmentPolyPolygon(const B2DPolyPolygon& rCandidate, sal_uInt32 nSegments); - - // create polygon state at t from 0.0 to 1.0 between the two polygons. Both polygons must have the same - // organisation, e.g. same amount of polygons - BASEGFX_DLLPUBLIC B2DPolyPolygon interpolate(const B2DPolyPolygon& rOld1, const B2DPolyPolygon& rOld2, double t); - - // create 3d PolyPolygon from given 2d PolyPolygon. The given fZCoordinate is used to expand the - // third coordinate. - BASEGFX_DLLPUBLIC B3DPolyPolygon createB3DPolyPolygonFromB2DPolyPolygon(const B2DPolyPolygon& rCandidate, double fZCoordinate = 0.0); - - // create 2d PolyPolygon from given 3d PolyPolygon. All coordinates are transformed using the given - // matrix and the resulting x,y is used to form the new polygon. - BASEGFX_DLLPUBLIC B2DPolyPolygon createB2DPolyPolygonFromB3DPolyPolygon(const B3DPolyPolygon& rCandidate, const B3DHomMatrix& rMat); - - // for each contained edge in each contained polygon calculate the smallest distance. Return the index to the smallest - // edge in rEdgeIndex and the index to the polygon in rPolygonIndex. The relative position on the edge is returned in rCut. - // If nothing was found (e.g. empty input plygon), DBL_MAX is returned. - BASEGFX_DLLPUBLIC double getSmallestDistancePointToPolyPolygon(const B2DPolyPolygon& rCandidate, const B2DPoint& rTestPoint, sal_uInt32& rPolygonIndex, sal_uInt32& rEdgeIndex, double& rCut); - - // distort PolyPolygon. rOriginal describes the original range, where the given points describe the distorted - // corresponding points. - BASEGFX_DLLPUBLIC B2DPolyPolygon distort(const B2DPolyPolygon& rCandidate, const B2DRange& rOriginal, const B2DPoint& rTopLeft, const B2DPoint& rTopRight, const B2DPoint& rBottomLeft, const B2DPoint& rBottomRight); - - // rotate PolyPolygon around given point with given angle. - BASEGFX_DLLPUBLIC B2DPolyPolygon rotateAroundPoint(const B2DPolyPolygon& rCandidate, const B2DPoint& rCenter, double fAngle); - - // expand all segments (which are not yet) to curve segments. This is done with setting the control - // vectors on the 1/3 resp. 2/3 distances on each segment. - BASEGFX_DLLPUBLIC B2DPolyPolygon expandToCurve(const B2DPolyPolygon& rCandidate); - - // set continuity for the whole curve. If not a curve, nothing will change. Non-curve points are not changed, too. - BASEGFX_DLLPUBLIC B2DPolyPolygon setContinuity(const B2DPolyPolygon& rCandidate, B2VectorContinuity eContinuity); - - /** Predicate whether a given poly-polygon is a rectangle. - - @param rPoly - PolyPolygon to check - - @return true, if the poly-polygon describes a rectangle - (contains exactly one polygon, polygon is closed, and the - points are either cw or ccw enumerations of a rectangle's - vertices). Note that intermediate points and duplicate - points are ignored. - */ - BASEGFX_DLLPUBLIC bool isRectangle( const B2DPolyPolygon& rPoly ); - - /** Export poly-polygon to SVG. - - This function exports a poly-polygon into an SVG-D - statement. Currently, output of relative point sequences - is not yet supported (might cause slightly larger output) - - @param rPolyPoly - The poly-polygon to export - - @param bUseRelativeCoordinates - When true, all coordinate values are exported as relative - to the current position. This tends to save some space, - since fewer digits needs to be written. - - @param bDetectQuadraticBeziers - When true, the export tries to detect cubic bezier - segments in the input polygon, which can be represented by - quadratic bezier segments. Note that the generated string - causes versions prior to OOo2.0 to crash. - - @return the generated SVG-D statement (the XML d attribute - value alone, without any "<path ...>" or "d="...") - */ - BASEGFX_DLLPUBLIC ::rtl::OUString exportToSvgD( const B2DPolyPolygon& rPolyPoly, - bool bUseRelativeCoordinates=true, - bool bDetectQuadraticBeziers=true ); - - // #i76891# Try to remove existing curve segments if they are simply edges - BASEGFX_DLLPUBLIC B2DPolyPolygon simplifyCurveSegments(const B2DPolyPolygon& rCandidate); - - /** split each edge of a polyPolygon in exactly nSubEdges equidistant edges - - @param rCandidate - The source polyPolygon. If too small (no edges), nSubEdges too small (<2) - or neither bHandleCurvedEdgesnor bHandleStraightEdges it will just be returned. - Else for each edge nSubEdges will be created. Closed state is preserved. - - @param nSubEdges - @param bHandleCurvedEdges - @param bHandleStraightEdges - Please take a look at reSegmentPolygonEdges description, these are the same. - */ - BASEGFX_DLLPUBLIC B2DPolyPolygon reSegmentPolyPolygonEdges(const B2DPolyPolygon& rCandidate, sal_uInt32 nSubEdges, bool bHandleCurvedEdges, bool bHandleStraightEdges); - - ////////////////////////////////////////////////////////////////////// - // comparators with tolerance for 2D PolyPolygons - BASEGFX_DLLPUBLIC bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB, const double& rfSmallValue); - BASEGFX_DLLPUBLIC bool equal(const B2DPolyPolygon& rCandidateA, const B2DPolyPolygon& rCandidateB); - - /** snap some polygon coordinates to discrete coordinates - - This method allows to snap some polygon points to discrete (integer) values - which equals e.g. a snap to discrete coordinates. It will snap points of - horizontal and vertical edges - - @param rCandidate - The source polygon - - @return - The modified version of the source polygon - */ - BASEGFX_DLLPUBLIC B2DPolyPolygon snapPointsOfHorizontalOrVerticalEdges(const B2DPolyPolygon& rCandidate); - - } // end of namespace tools -} // end of namespace basegfx - -#endif /* _BGFX_POLYPOLYGON_B2DPOLYGONTOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b2dtrapezoid.hxx b/basegfx/inc/basegfx/polygon/b2dtrapezoid.hxx deleted file mode 100644 index 9e29bb8765..0000000000 --- a/basegfx/inc/basegfx/polygon/b2dtrapezoid.hxx +++ /dev/null @@ -1,133 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B2DTRAPEZOID_HXX -#define _BGFX_POLYGON_B2DTRAPEZOID_HXX - -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // class to hold a single trapezoid - class BASEGFX_DLLPUBLIC B2DTrapezoid - { - private: - // Geometry data. YValues are down-oriented, this means bottom should - // be bigger than top to be below it. The constructor implementation - // guarantees: - // - // - mfBottomY >= mfTopY - // - mfTopXRight >= mfTopXLeft - // - mfBottomXRight >= mfBottomXLeft - double mfTopXLeft; - double mfTopXRight; - double mfTopY; - double mfBottomXLeft; - double mfBottomXRight; - double mfBottomY; - - public: - // constructor - B2DTrapezoid( - const double& rfTopXLeft, - const double& rfTopXRight, - const double& rfTopY, - const double& rfBottomXLeft, - const double& rfBottomXRight, - const double& rfBottomY); - - // data read access - const double& getTopXLeft() const { return mfTopXLeft; } - const double& getTopXRight() const { return mfTopXRight; } - const double& getTopY() const { return mfTopY; } - const double& getBottomXLeft() const { return mfBottomXLeft; } - const double& getBottomXRight() const { return mfBottomXRight; } - const double& getBottomY() const { return mfBottomY; } - - // convenience method to get content as Polygon - B2DPolygon getB2DPolygon() const; - }; - - typedef ::std::vector< B2DTrapezoid > B2DTrapezoidVector; - -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace tools - { - // convert SourcePolyPolygon to trapezoids. The trapezoids will be appended to - // ro_Result. ro_Result will not be cleared. If SourcePolyPolygon contains curves, - // it's default AdaptiveSubdivision will be used. - // CAUTION: Trapezoids are oreintation-dependent in the sense that the upper and lower - // lines have to be parallel to the X-Axis, thus this subdivision is NOT simply usable - // for primitive decompositions. To use it, the shear and rotate parts of the - // involved transformations HAVE to be taken into account. - BASEGFX_DLLPUBLIC void trapezoidSubdivide( - B2DTrapezoidVector& ro_Result, - const B2DPolyPolygon& rSourcePolyPolygon); - - // directly create trapezoids from given edge. Depending on the given geometry, - // none up to three trapezoids will be created - BASEGFX_DLLPUBLIC void createLineTrapezoidFromEdge( - B2DTrapezoidVector& ro_Result, - const B2DPoint& rPointA, - const B2DPoint& rPointB, - double fLineWidth = 1.0); - - // create trapezoids for all edges of the given polygon. The closed state of - // the polygon is taken into account. If curves are contaned, the default - // AdaptiveSubdivision will be used. - BASEGFX_DLLPUBLIC void createLineTrapezoidFromB2DPolygon( - B2DTrapezoidVector& ro_Result, - const B2DPolygon& rPolygon, - double fLineWidth = 1.0); - - // create trapezoids for all edges of the given polyPolygon. The closed state of - // the PolyPolygon is taken into account. If curves are contaned, the default - // AdaptiveSubdivision will be used. - BASEGFX_DLLPUBLIC void createLineTrapezoidFromB2DPolyPolygon( - B2DTrapezoidVector& ro_Result, - const B2DPolyPolygon& rPolyPolygon, - double fLineWidth = 1.0); - - } // end of namespace tools -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_POLYGON_B2DTRAPEZOID_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b3dpolygon.hxx b/basegfx/inc/basegfx/polygon/b3dpolygon.hxx deleted file mode 100644 index 4736e1a943..0000000000 --- a/basegfx/inc/basegfx/polygon/b3dpolygon.hxx +++ /dev/null @@ -1,145 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B3DPOLYGON_HXX -#define _BGFX_POLYGON_B3DPOLYGON_HXX - -#include <sal/types.h> -#include <o3tl/cow_wrapper.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations -class ImplB3DPolygon; - -namespace basegfx -{ - class B3DPolygon; - class B3DPoint; - class B3DHomMatrix; - class B3DVector; - class B2DPoint; - class B2DHomMatrix; - class BColor; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B3DPolygon - { - public: - typedef o3tl::cow_wrapper< ImplB3DPolygon > ImplType; - - private: - // internal data. - ImplType mpPolygon; - - public: - B3DPolygon(); - B3DPolygon(const B3DPolygon& rPolygon); - B3DPolygon(const B3DPolygon& rPolygon, sal_uInt32 nIndex, sal_uInt32 nCount); - ~B3DPolygon(); - - // assignment operator - B3DPolygon& operator=(const B3DPolygon& rPolygon); - - /// unshare this polygon with all internally shared instances - void makeUnique(); - - // compare operators - bool operator==(const B3DPolygon& rPolygon) const; - bool operator!=(const B3DPolygon& rPolygon) const; - - // member count - sal_uInt32 count() const; - - // Coordinate interface - B3DPoint getB3DPoint(sal_uInt32 nIndex) const; - void setB3DPoint(sal_uInt32 nIndex, const B3DPoint& rValue); - - // Coordinate insert/append - void insert(sal_uInt32 nIndex, const B3DPoint& rPoint, sal_uInt32 nCount = 1); - void append(const B3DPoint& rPoint, sal_uInt32 nCount = 1); - - // BColor interface - BColor getBColor(sal_uInt32 nIndex) const; - void setBColor(sal_uInt32 nIndex, const BColor& rValue); - bool areBColorsUsed() const; - void clearBColors(); - - // Normals interface - B3DVector getNormal() const; // plane normal - B3DVector getNormal(sal_uInt32 nIndex) const; // normal in each point - void setNormal(sal_uInt32 nIndex, const B3DVector& rValue); - void transformNormals(const B3DHomMatrix& rMatrix); - bool areNormalsUsed() const; - void clearNormals(); - - // TextureCoordinate interface - B2DPoint getTextureCoordinate(sal_uInt32 nIndex) const; - void setTextureCoordinate(sal_uInt32 nIndex, const B2DPoint& rValue); - void transformTextureCoordiantes(const B2DHomMatrix& rMatrix); - bool areTextureCoordinatesUsed() const; - void clearTextureCoordinates(); - - // insert/append other 2D polygons - void insert(sal_uInt32 nIndex, const B3DPolygon& rPoly, sal_uInt32 nIndex2 = 0, sal_uInt32 nCount = 0); - void append(const B3DPolygon& rPoly, sal_uInt32 nIndex = 0, sal_uInt32 nCount = 0); - - // remove - void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1); - - // clear all points - void clear(); - - // closed state - bool isClosed() const; - void setClosed(bool bNew); - - // flip polygon direction - void flip(); - - // test if Polygon has double points - bool hasDoublePoints() const; - - // remove double points, at the begin/end and follow-ups, too - void removeDoublePoints(); - - // apply transformation given in matrix form to the polygon - void transform(const B3DHomMatrix& rMatrix); - }; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - - -#endif /* _BGFX_POLYGON_B3DPOLYGON_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b3dpolygonclipper.hxx b/basegfx/inc/basegfx/polygon/b3dpolygonclipper.hxx deleted file mode 100644 index 345394955c..0000000000 --- a/basegfx/inc/basegfx/polygon/b3dpolygonclipper.hxx +++ /dev/null @@ -1,90 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYPOLYGON_B3DPOLYGONCLIPPER_HXX -#define _BGFX_POLYPOLYGON_B3DPOLYGONCLIPPER_HXX - -#include <basegfx/polygon/b3dpolypolygon.hxx> -#include <basegfx/polygon/b3dpolygon.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // predefinitions - class B3DRange; - class B2DRange; - - namespace tools - { - /** define for deciding one of X,Y,Z directions - */ - enum B3DOrientation - { - B3DORIENTATION_X, // X-Axis - B3DORIENTATION_Y, // Y-Axis - B3DORIENTATION_Z // Z-Axis - }; - - // Clip given 3D polygon against a plane orthogonal to X,Y or Z axis. The plane is defined using the - // enum ePlaneOrthogonal which names the vector orthogonal to the plane, the fPlaneOffset gives the distance - // of the plane from the center (0.0). - // The value bClipPositive defines on which side the return value will be (true -> on positive side of plane). - // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true). - BASEGFX_DLLPUBLIC B3DPolyPolygon clipPolyPolygonOnOrthogonalPlane(const B3DPolyPolygon& rCandidate, B3DOrientation ePlaneOrthogonal, bool bClipPositive, double fPlaneOffset, bool bStroke); - - // version for Polygons - BASEGFX_DLLPUBLIC B3DPolyPolygon clipPolygonOnOrthogonalPlane(const B3DPolygon& rCandidate, B3DOrientation ePlaneOrthogonal, bool bClipPositive, double fPlaneOffset, bool bStroke); - - // Clip the given PolyPolygon against the given range. bInside defines if the result will contain the - // parts which are contained in the range or vice versa. - // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true). - BASEGFX_DLLPUBLIC B3DPolyPolygon clipPolyPolygonOnRange(const B3DPolyPolygon& rCandidate, const B3DRange& rRange, bool bInside, bool bStroke); - - // version for Polygons - BASEGFX_DLLPUBLIC B3DPolyPolygon clipPolygonOnRange(const B3DPolygon& rCandidate, const B3DRange& rRange, bool bInside, bool bStroke); - - // versions for B2DRange, clips only against X,Y - BASEGFX_DLLPUBLIC B3DPolyPolygon clipPolyPolygonOnRange(const B3DPolyPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke); - BASEGFX_DLLPUBLIC B3DPolyPolygon clipPolygonOnRange(const B3DPolygon& rCandidate, const B2DRange& rRange, bool bInside, bool bStroke); - - // Clip the given PolyPolygon against given plane in 3D. The plane is defined by a plane normal and a point on the plane. - // The value bClipPositive defines on which side the return value will be (true -> on positive side of plane). - // The switch bStroke decides if the polygon is interpreted as area (false) or strokes (true). - BASEGFX_DLLPUBLIC B3DPolyPolygon clipPolyPolygonOnPlane(const B3DPolyPolygon& rCandidate, const B3DPoint& rPointOnPlane, const B3DVector& rPlaneNormal, bool bClipPositive, bool bStroke); - - // version for Polygons - BASEGFX_DLLPUBLIC B3DPolyPolygon clipPolygonOnPlane(const B3DPolygon& rCandidate, const B3DPoint& rPointOnPlane, const B3DVector& rPlaneNormal, bool bClipPositive, bool bStroke); - - } // end of namespace tools -} // end of namespace basegfx - -#endif /* _BGFX_POLYPOLYGON_B3DPOLYGONCLIPPER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b3dpolygontools.hxx b/basegfx/inc/basegfx/polygon/b3dpolygontools.hxx deleted file mode 100644 index feeb625e4d..0000000000 --- a/basegfx/inc/basegfx/polygon/b3dpolygontools.hxx +++ /dev/null @@ -1,195 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B3DPOLYGONTOOLS_HXX -#define _BGFX_POLYGON_B3DPOLYGONTOOLS_HXX - -#include <basegfx/point/b3dpoint.hxx> -#include <basegfx/vector/b3dvector.hxx> -#include <basegfx/polygon/b3dpolypolygon.hxx> -#include <basegfx/vector/b2enums.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // predefinitions - class B3DPolygon; - class B3DRange; - - namespace tools - { - // B3DPolygon tools - - /** Check if given polygon is closed. This is kind of a - 'classic' method to support old polygon definitions. - Those old polygon definitions define the closed state - of the polygon using identical start and endpoints. This - method corrects this (removes double start/end points) - and sets the Closed()-state of the polygon correctly. - */ - BASEGFX_DLLPUBLIC void checkClosed(B3DPolygon& rCandidate); - - // Get successor and predecessor indices. Returning the same index means there - // is none. Same for successor. - BASEGFX_DLLPUBLIC sal_uInt32 getIndexOfPredecessor(sal_uInt32 nIndex, const B3DPolygon& rCandidate); - BASEGFX_DLLPUBLIC sal_uInt32 getIndexOfSuccessor(sal_uInt32 nIndex, const B3DPolygon& rCandidate); - - // Get orientation of Polygon - BASEGFX_DLLPUBLIC B2VectorOrientation getOrientation(const B3DPolygon& rCandidate); - - // get size of polygon. Control vectors are included in that ranges. - BASEGFX_DLLPUBLIC B3DRange getRange(const B3DPolygon& rCandidate); - - // get normal vector of polygon - BASEGFX_DLLPUBLIC B3DVector getNormal(const B3DPolygon& rCandidate); - - // get normal vector of positive oriented polygon - BASEGFX_DLLPUBLIC B3DVector getPositiveOrientedNormal(const B3DPolygon& rCandidate); - - // get signed area of polygon - BASEGFX_DLLPUBLIC double getSignedArea(const B3DPolygon& rCandidate); - - // get area of polygon - BASEGFX_DLLPUBLIC double getArea(const B3DPolygon& rCandidate); - - // get signed area of polygon - BASEGFX_DLLPUBLIC double getSignedArea(const B3DPolygon& rCandidate); - - // get area of polygon - BASEGFX_DLLPUBLIC double getArea(const ::basegfx::B3DPolygon& rCandidate); - - // get length of polygon edge from point nIndex to nIndex + 1 - BASEGFX_DLLPUBLIC double getEdgeLength(const B3DPolygon& rCandidate, sal_uInt32 nIndex); - - // get length of polygon - BASEGFX_DLLPUBLIC double getLength(const B3DPolygon& rCandidate); - - // get position on polygon for absolute given distance. If - // length is given, it is assumed the correct polygon length, if 0.0 it is calculated - // using getLength(...) - BASEGFX_DLLPUBLIC B3DPoint getPositionAbsolute(const B3DPolygon& rCandidate, double fDistance, double fLength = 0.0); - - // get position on polygon for relative given distance in range [0.0 .. 1.0]. If - // length is given, it is assumed the correct polygon length, if 0.0 it is calculated - // using getLength(...) - BASEGFX_DLLPUBLIC B3DPoint getPositionRelative(const B3DPolygon& rCandidate, double fDistance, double fLength = 0.0); - - /** Apply given LineDashing to given polygon - - For a description see applyLineDashing in b2dpolygontoos.hxx - */ - BASEGFX_DLLPUBLIC void applyLineDashing( - const B3DPolygon& rCandidate, - const ::std::vector<double>& rDotDashArray, - B3DPolyPolygon* pLineTarget, - B3DPolyPolygon* pGapTarget = 0, - double fFullDashDotLen = 0.0); - - /** Create/replace normals for given 3d geometry with default normals from given center to outside. - rCandidate: the 3d geometry to change - rCenter: the center of the 3d geometry - */ - BASEGFX_DLLPUBLIC B3DPolygon applyDefaultNormalsSphere( const B3DPolygon& rCandidate, const B3DPoint& rCenter); - - /** invert normals for given 3d geometry. - */ - BASEGFX_DLLPUBLIC B3DPolygon invertNormals( const B3DPolygon& rCandidate); - - /** Create/replace texture coordinates for given 3d geometry with parallel projected one - rRange: the full range of the 3d geometry - If bChangeX, x texture coordinate will be recalculated. - If bChangeY, y texture coordinate will be recalculated. - */ - BASEGFX_DLLPUBLIC B3DPolygon applyDefaultTextureCoordinatesParallel( const B3DPolygon& rCandidate, const B3DRange& rRange, bool bChangeX = true, bool bChangeY = true); - - /** Create/replace texture coordinates for given 3d geometry with spherical one - rCenter: the centre of the used 3d geometry - If bChangeX, x texture coordinate will be recalculated. - If bChangeY, y texture coordinate will be recalculated. - */ - BASEGFX_DLLPUBLIC B3DPolygon applyDefaultTextureCoordinatesSphere( const B3DPolygon& rCandidate, const B3DPoint& rCenter, bool bChangeX = true, bool bChangeY = true); - - // test if point is inside epsilon-range around an edge defined - // by the two given points. Can be used for HitTesting. The epsilon-range - // is defined to be the cylinder centered to the given edge, using radius - // fDistance, and the sphere around both points with radius fDistance. - BASEGFX_DLLPUBLIC bool isInEpsilonRange(const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, const B3DPoint& rTestPosition, double fDistance); - - // test if point is inside epsilon-range around the given Polygon. Can be used - // for HitTesting. The epsilon-range is defined to be the cylinder centered to - // the given edge, using radius fDistance, and the sphere around both points with radius fDistance. - BASEGFX_DLLPUBLIC bool isInEpsilonRange(const B3DPolygon& rCandidate, const B3DPoint& rTestPosition, double fDistance); - - // isInside tests for B3DPoint and other B3DPolygon. On border is not inside as long as - // not true is given in bWithBorder flag. - BASEGFX_DLLPUBLIC bool isInside(const B3DPolygon& rCandidate, const B3DPoint& rPoint, bool bWithBorder = false); - BASEGFX_DLLPUBLIC bool isInside(const B3DPolygon& rCandidate, const B3DPolygon& rPolygon, bool bWithBorder = false); - - // calculates if given point is on given line, taking care of the numerical epsilon - BASEGFX_DLLPUBLIC bool isPointOnLine(const B3DPoint& rStart, const B3DPoint& rEnd, const B3DPoint& rCandidate, bool bWithPoints = false); - - // calculates if given point is on given polygon, taking care of the numerical epsilon. Uses - // isPointOnLine internally - BASEGFX_DLLPUBLIC bool isPointOnPolygon(const B3DPolygon& rCandidate, const B3DPoint& rPoint, bool bWithPoints = true); - - // helper to get a fCut position between a plane (given with normal and a point) - // and a line given by start and end point - BASEGFX_DLLPUBLIC bool getCutBetweenLineAndPlane(const B3DVector& rPlaneNormal, const B3DPoint& rPlanePoint, const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, double& fCut); - - // helper to get a fCut position between a 3d Polygon - // and a line given by start and end point - BASEGFX_DLLPUBLIC bool getCutBetweenLineAndPolygon(const B3DPolygon& rCandidate, const B3DPoint& rEdgeStart, const B3DPoint& rEdgeEnd, double& fCut); - - ////////////////////////////////////////////////////////////////////// - // comparators with tolerance for 3D Polygons - BASEGFX_DLLPUBLIC bool equal(const B3DPolygon& rCandidateA, const B3DPolygon& rCandidateB, const double& rfSmallValue); - BASEGFX_DLLPUBLIC bool equal(const B3DPolygon& rCandidateA, const B3DPolygon& rCandidateB); - - /** snap some polygon coordinates to discrete coordinates - - This method allows to snap some polygon points to discrete (integer) values - which equals e.g. a snap to discrete coordinates. It will snap points of - horizontal and vertical edges - - @param rCandidate - The source polygon - - @return - The modified version of the source polygon - */ - BASEGFX_DLLPUBLIC B3DPolygon snapPointsOfHorizontalOrVerticalEdges(const B3DPolygon& rCandidate); - - } // end of namespace tools -} // end of namespace basegfx - -#endif /* _BGFX_POLYGON_B3DPOLYGONTOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b3dpolypolygon.hxx b/basegfx/inc/basegfx/polygon/b3dpolypolygon.hxx deleted file mode 100644 index 19d5f026ae..0000000000 --- a/basegfx/inc/basegfx/polygon/b3dpolypolygon.hxx +++ /dev/null @@ -1,129 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYGON_B3DPOLYPOLYGON_HXX -#define _BGFX_POLYGON_B3DPOLYPOLYGON_HXX - -#include <sal/types.h> -#include <o3tl/cow_wrapper.hxx> -#include <basegfx/basegfxdllapi.h> - -// predeclarations -class ImplB3DPolyPolygon; - -namespace basegfx -{ - class B3DPolygon; - class B3DHomMatrix; - class B2DHomMatrix; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B3DPolyPolygon - { - public: - typedef o3tl::cow_wrapper< ImplB3DPolyPolygon > ImplType; - - private: - ImplType mpPolyPolygon; - - public: - B3DPolyPolygon(); - B3DPolyPolygon(const B3DPolyPolygon& rPolyPolygon); - explicit B3DPolyPolygon(const B3DPolygon& rPolygon); - ~B3DPolyPolygon(); - - // assignment operator - B3DPolyPolygon& operator=(const B3DPolyPolygon& rPolyPolygon); - - /// unshare this poly-polygon (and all included polygons) with all internally shared instances - void makeUnique(); - - // compare operators - bool operator==(const B3DPolyPolygon& rPolyPolygon) const; - bool operator!=(const B3DPolyPolygon& rPolyPolygon) const; - - // polygon interface - sal_uInt32 count() const; - - // B3DPolygon interface - B3DPolygon getB3DPolygon(sal_uInt32 nIndex) const; - void setB3DPolygon(sal_uInt32 nIndex, const B3DPolygon& rPolygon); - - // BColor interface - bool areBColorsUsed() const; - void clearBColors(); - - // Normals interface - void transformNormals(const B3DHomMatrix& rMatrix); - bool areNormalsUsed() const; - void clearNormals(); - - // TextureCoordinate interface - void transformTextureCoordiantes(const B2DHomMatrix& rMatrix); - bool areTextureCoordinatesUsed() const; - void clearTextureCoordinates(); - - // insert/append single polygon - void insert(sal_uInt32 nIndex, const B3DPolygon& rPolygon, sal_uInt32 nCount = 1); - void append(const B3DPolygon& rPolygon, sal_uInt32 nCount = 1); - - // insert/append multiple polygons - void insert(sal_uInt32 nIndex, const B3DPolyPolygon& rPolyPolygon); - void append(const B3DPolyPolygon& rPolyPolygon); - - // remove - void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1); - - // reset to empty state - void clear(); - - // closed state - bool isClosed() const; - void setClosed(bool bNew); - - // flip polygon direction - void flip(); - - // test if PolyPolygon has double points - bool hasDoublePoints() const; - - // remove double points, at the begin/end and follow-ups, too - void removeDoublePoints(); - - // apply transformation given in matrix form to the polygon - void transform(const basegfx::B3DHomMatrix& rMatrix); - }; -} // end of namespace basegfx - -#endif /* _BGFX_POLYGON_B3DPOLYPOLYGON_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/polygon/b3dpolypolygontools.hxx b/basegfx/inc/basegfx/polygon/b3dpolypolygontools.hxx deleted file mode 100644 index 7973aeca29..0000000000 --- a/basegfx/inc/basegfx/polygon/b3dpolypolygontools.hxx +++ /dev/null @@ -1,158 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_POLYPOLYGON_B3DPOLYGONTOOLS_HXX -#define _BGFX_POLYPOLYGON_B3DPOLYGONTOOLS_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <vector> -#include <basegfx/numeric/ftools.hxx> -#include <basegfx/point/b3dpoint.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // predefinitions - class B3DPolyPolygon; - class B3DRange; - - namespace tools - { - // B3DPolyPolygon tools - - // get size of PolyPolygon. Control vectors are included in that ranges. - BASEGFX_DLLPUBLIC B3DRange getRange(const B3DPolyPolygon& rCandidate); - - /** Apply given LineDashing to given polyPolygon - - For a description see applyLineDashing in b2dpolygontoos.hxx - */ - BASEGFX_DLLPUBLIC void applyLineDashing( - const B3DPolyPolygon& rCandidate, - const ::std::vector<double>& rDotDashArray, - B3DPolyPolygon* pLineTarget, - B3DPolyPolygon* pGapTarget = 0, - double fFullDashDotLen = 0.0); - - /** Create a unit 3D line polyPolygon which defines a cube. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon createUnitCubePolyPolygon(); - - /** Create a unit 3D fill polyPolygon which defines a cube. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon createUnitCubeFillPolyPolygon(); - - /** Create a 3D line polyPolygon from a B3DRange which defines a cube. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon createCubePolyPolygonFromB3DRange( const B3DRange& rRange); - - /** Create a 3D fill polyPolygon from a B3DRange which defines a cube. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon createCubeFillPolyPolygonFromB3DRange( const B3DRange& rRange); - - /** Create a unit 3D line polyPolygon which defines a sphere with the given count of hor and ver segments. - Result will be centered at (0.0, 0.0, 0.0) and sized [-1.0 .. 1.0] in all dimensions. - If nHorSeg == 0 and/or nVerSeg == 0, a default will be calculated to have a step at least each 15 degrees. - With VerStart, VerStop and hor range in cartesian may be specified to create a partial sphere only. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon createUnitSpherePolyPolygon( - sal_uInt32 nHorSeg = 0L, sal_uInt32 nVerSeg = 0L, - double fVerStart = F_PI2, double fVerStop = -F_PI2, - double fHorStart = 0.0, double fHorStop = F_2PI); - - /** Create a 3D line polyPolygon from a B3DRange which defines a sphere with the given count of hor and ver segments. - If nHorSeg == 0 and/or nVerSeg == 0, a default will be calculated to have a step at least each 15 degrees. - With VerStart, VerStop and hor range in cartesian may be specified to create a partial sphere only. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon createSpherePolyPolygonFromB3DRange( - const B3DRange& rRange, - sal_uInt32 nHorSeg = 0L, sal_uInt32 nVerSeg = 0L, - double fVerStart = F_PI2, double fVerStop = -F_PI2, - double fHorStart = 0.0, double fHorStop = F_2PI); - - /** same as createUnitSpherePolyPolygon, but creates filled polygons (closed and oriented) - There is one extra, the bool bNormals defines if normals will be set, default is false - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon createUnitSphereFillPolyPolygon( - sal_uInt32 nHorSeg = 0L, sal_uInt32 nVerSeg = 0L, - bool bNormals = false, - double fVerStart = F_PI2, double fVerStop = -F_PI2, - double fHorStart = 0.0, double fHorStop = F_2PI); - - /** same as createSpherePolyPolygonFromB3DRange, but creates filled polygons (closed and oriented) - There is one extra, the bool bNormals defines if normals will be set, default is false - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon createSphereFillPolyPolygonFromB3DRange( - const B3DRange& rRange, - sal_uInt32 nHorSeg = 0L, sal_uInt32 nVerSeg = 0L, - bool bNormals = false, - double fVerStart = F_PI2, double fVerStop = -F_PI2, - double fHorStart = 0.0, double fHorStop = F_2PI); - - /** Create/replace normals for given 3d geometry with default normals from given center to outside. - rCandidate: the 3d geometry to change - rCenter: the center of the 3d geometry - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon applyDefaultNormalsSphere( const B3DPolyPolygon& rCandidate, const B3DPoint& rCenter); - - /** invert normals for given 3d geometry. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon invertNormals( const B3DPolyPolygon& rCandidate); - - /** Create/replace texture coordinates for given 3d geometry with parallel projected one - rRange: the full range of the 3d geometry - If bChangeX, x texture coordinate will be recalculated. - If bChangeY, y texture coordinate will be recalculated. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon applyDefaultTextureCoordinatesParallel( const B3DPolyPolygon& rCandidate, const B3DRange& rRange, bool bChangeX = true, bool bChangeY = true); - - /** Create/replace texture coordinates for given 3d geometry with spherical one - rCenter: the centre of the used 3d geometry - If bChangeX, x texture coordinate will be recalculated. - If bChangeY, y texture coordinate will be recalculated. - */ - BASEGFX_DLLPUBLIC B3DPolyPolygon applyDefaultTextureCoordinatesSphere( const B3DPolyPolygon& rCandidate, const B3DPoint& rCenter, bool bChangeX = true, bool bChangeY = true); - - // isInside test for B3DPoint. On border is not inside as long as not true is given - // in bWithBorder flag. It is assumed that the orientations of the given polygon are correct. - BASEGFX_DLLPUBLIC bool isInside(const B3DPolyPolygon& rCandidate, const B3DPoint& rPoint, bool bWithBorder = false); - - ////////////////////////////////////////////////////////////////////// - // comparators with tolerance for 3D PolyPolygons - BASEGFX_DLLPUBLIC bool equal(const B3DPolyPolygon& rCandidateA, const B3DPolyPolygon& rCandidateB, const double& rfSmallValue); - BASEGFX_DLLPUBLIC bool equal(const B3DPolyPolygon& rCandidateA, const B3DPolyPolygon& rCandidateB); - - } // end of namespace tools -} // end of namespace basegfx - -#endif /* _BGFX_POLYPOLYGON_B3DPOLYGONTOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b1drange.hxx b/basegfx/inc/basegfx/range/b1drange.hxx deleted file mode 100644 index 4da5883372..0000000000 --- a/basegfx/inc/basegfx/range/b1drange.hxx +++ /dev/null @@ -1,169 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B1DRANGE_HXX -#define _BGFX_RANGE_B1DRANGE_HXX - -#include <basegfx/range/basicrange.hxx> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - class B1IRange; - - class BASEGFX_DLLPUBLIC B1DRange - { - ::basegfx::BasicRange< double, DoubleTraits > maRange; - - public: - B1DRange() - { - } - - explicit B1DRange(double fStartValue) - : maRange(fStartValue) - { - } - - B1DRange(double fStartValue1, double fStartValue2) - : maRange(fStartValue1) - { - expand(fStartValue2); - } - - B1DRange(const B1DRange& rRange) - : maRange(rRange.maRange) - { - } - - explicit B1DRange( const B1IRange& rRange ); - - bool isEmpty() const - { - return maRange.isEmpty(); - } - - void reset() - { - maRange.reset(); - } - - bool operator==( const B1DRange& rRange ) const - { - return (maRange == rRange.maRange); - } - - bool operator!=( const B1DRange& rRange ) const - { - return (maRange != rRange.maRange); - } - - B1DRange& operator=(const B1DRange& rRange) - { - maRange = rRange.maRange; - return *this; - } - - bool equal(const B1DRange& rRange) const - { - return (maRange.equal(rRange.maRange)); - } - - double getMinimum() const - { - return maRange.getMinimum(); - } - - double getMaximum() const - { - return maRange.getMaximum(); - } - - double getRange() const - { - return maRange.getRange(); - } - - double getCenter() const - { - return maRange.getCenter(); - } - - bool isInside(double fValue) const - { - return maRange.isInside(fValue); - } - - bool isInside(const B1DRange& rRange) const - { - return maRange.isInside(rRange.maRange); - } - - bool overlaps(const B1DRange& rRange) const - { - return maRange.overlaps(rRange.maRange); - } - - bool overlapsMore(const B1DRange& rRange) const - { - return maRange.overlapsMore(rRange.maRange); - } - - void expand(double fValue) - { - maRange.expand(fValue); - } - - void expand(const B1DRange& rRange) - { - maRange.expand(rRange.maRange); - } - - void intersect(const B1DRange& rRange) - { - maRange.intersect(rRange.maRange); - } - - void grow(double fValue) - { - maRange.grow(fValue); - } - }; - - /** Round double to nearest integer for 1D range - - @return the nearest integer for this range - */ - B1IRange fround(const B1DRange& rRange); -} // end of namespace basegfx - - -#endif /* _BGFX_RANGE_B1DRANGE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b1ibox.hxx b/basegfx/inc/basegfx/range/b1ibox.hxx deleted file mode 100644 index 36b3354a63..0000000000 --- a/basegfx/inc/basegfx/range/b1ibox.hxx +++ /dev/null @@ -1,147 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B1IBOX_HXX -#define _BGFX_RANGE_B1IBOX_HXX - -#include <basegfx/range/basicbox.hxx> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B1IBox - { - ::basegfx::BasicBox maRange; - - public: - B1IBox() - { - } - - explicit B1IBox(sal_Int32 nStartValue) - : maRange(nStartValue) - { - } - - B1IBox(sal_Int32 nStartValue1, sal_Int32 nStartValue2) - : maRange(nStartValue1) - { - expand(nStartValue2); - } - - B1IBox(const B1IBox& rBox) - : maRange(rBox.maRange) - { - } - - bool isEmpty() const - { - return maRange.isEmpty(); - } - - void reset() - { - maRange.reset(); - } - - bool operator==( const B1IBox& rBox ) const - { - return (maRange == rBox.maRange); - } - - bool operator!=( const B1IBox& rBox ) const - { - return (maRange != rBox.maRange); - } - - void operator=(const B1IBox& rBox) - { - maRange = rBox.maRange; - } - - sal_Int32 getMinimum() const - { - return maRange.getMinimum(); - } - - sal_Int32 getMaximum() const - { - return maRange.getMaximum(); - } - - Int32Traits::DifferenceType getRange() const - { - return maRange.getRange(); - } - - double getCenter() const - { - return maRange.getCenter(); - } - - bool isInside(sal_Int32 nValue) const - { - return maRange.isInside(nValue); - } - - bool isInside(const B1IBox& rBox) const - { - return maRange.isInside(rBox.maRange); - } - - bool overlaps(const B1IBox& rBox) const - { - return maRange.overlaps(rBox.maRange); - } - - void expand(sal_Int32 nValue) - { - maRange.expand(nValue); - } - - void expand(const B1IBox& rBox) - { - maRange.expand(rBox.maRange); - } - - void intersect(const B1IBox& rBox) - { - maRange.intersect(rBox.maRange); - } - - void grow(sal_Int32 nValue) - { - maRange.grow(nValue); - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_RANGE_B1IBOX_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b1irange.hxx b/basegfx/inc/basegfx/range/b1irange.hxx deleted file mode 100644 index a74af0ab6b..0000000000 --- a/basegfx/inc/basegfx/range/b1irange.hxx +++ /dev/null @@ -1,148 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B1IRANGE_HXX -#define _BGFX_RANGE_B1IRANGE_HXX - -#include <basegfx/range/basicrange.hxx> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B1IRange - { - ::basegfx::BasicRange< sal_Int32, Int32Traits > maRange; - - public: - B1IRange() - { - } - - explicit B1IRange(sal_Int32 nStartValue) - : maRange(nStartValue) - { - } - - B1IRange(sal_Int32 nStartValue1, sal_Int32 nStartValue2) - : maRange(nStartValue1) - { - expand(nStartValue2); - } - - B1IRange(const B1IRange& rRange) - : maRange(rRange.maRange) - { - } - - bool isEmpty() const - { - return maRange.isEmpty(); - } - - void reset() - { - maRange.reset(); - } - - bool operator==( const B1IRange& rRange ) const - { - return (maRange == rRange.maRange); - } - - bool operator!=( const B1IRange& rRange ) const - { - return (maRange != rRange.maRange); - } - - B1IRange& operator=(const B1IRange& rRange) - { - maRange = rRange.maRange; - return *this; - } - - sal_Int32 getMinimum() const - { - return maRange.getMinimum(); - } - - sal_Int32 getMaximum() const - { - return maRange.getMaximum(); - } - - Int32Traits::DifferenceType getRange() const - { - return maRange.getRange(); - } - - double getCenter() const - { - return maRange.getCenter(); - } - - bool isInside(sal_Int32 nValue) const - { - return maRange.isInside(nValue); - } - - bool isInside(const B1IRange& rRange) const - { - return maRange.isInside(rRange.maRange); - } - - bool overlaps(const B1IRange& rRange) const - { - return maRange.overlaps(rRange.maRange); - } - - void expand(sal_Int32 nValue) - { - maRange.expand(nValue); - } - - void expand(const B1IRange& rRange) - { - maRange.expand(rRange.maRange); - } - - void intersect(const B1IRange& rRange) - { - maRange.intersect(rRange.maRange); - } - - void grow(sal_Int32 nValue) - { - maRange.grow(nValue); - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_RANGE_B1IRANGE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b2dconnectedranges.hxx b/basegfx/inc/basegfx/range/b2dconnectedranges.hxx deleted file mode 100644 index 27fbcb06b5..0000000000 --- a/basegfx/inc/basegfx/range/b2dconnectedranges.hxx +++ /dev/null @@ -1,266 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B2DCONNECTEDRANGES_HXX -#define _BGFX_RANGE_B2DCONNECTEDRANGES_HXX - -#include <osl/diagnose.h> -#include <basegfx/range/b2drange.hxx> -#include <list> -#include <utility> -#include <algorithm> - - -namespace basegfx -{ - /** Calculate connected ranges from input ranges. - - This template constructs a list of connected ranges from the - given input ranges. That is, the output will contain a set of - ranges, itself containing a number of input ranges, which will - be mutually non-intersecting. - - Example: - <code> - ------------------- - | -------| - | | || - | --- | || - | | | -------| -------- - | | +--------- | | | - | --+ | | | | - | | | | -------- - | ---------- | - ------------------- - </code - - Here, the outer rectangles represent the output - ranges. Contained are the input rectangles that comprise these - output ranges. - - @tpl UserData - User data to be stored along with the range, to later identify - which range went into which connected component. Must be - assignable, default- and copy-constructible. - */ - template< typename UserData > class B2DConnectedRanges - { - public: - /// Type of the basic entity (rect + user data) - typedef ::std::pair< B2DRange, UserData > ComponentType; - typedef ::std::list< ComponentType > ComponentListType; - - /// List of (intersecting) components, plus overall bounds - struct ConnectedComponents - { - ComponentListType maComponentList; - B2DRange maTotalBounds; - }; - - typedef ::std::list< ConnectedComponents > ConnectedComponentsType; - - - /// Create the range calculator - B2DConnectedRanges() : - maDisjunctAggregatesList(), - maTotalBounds() - { - } - - /** Query total bounds of all added ranges. - - @return the union bound rect over all added ranges. - */ - B2DRange getBounds() const - { - return maTotalBounds; - } - - /** Add an additional range. - - This method integrates a new range into the connected - ranges lists. The method has a worst-case time complexity - of O(n^2), with n denoting the number of already added - ranges (typically, for well-behaved input, it is O(n) - though). - */ - void addRange( const B2DRange& rRange, - const UserData& rUserData ) - { - // check whether fast path is possible: if new range is - // outside accumulated total range, can add it as a - // separate component right away. - const bool bNotOutsideEverything( - maTotalBounds.overlaps( rRange ) ); - - // update own global bounds range - maTotalBounds.expand( rRange ); - - // assemble anything intersecting with rRange into - // this new connected component - ConnectedComponents aNewConnectedComponent; - - // as at least rRange will be a member of - // aNewConnectedComponent (will be added below), can - // preset the overall bounds here. - aNewConnectedComponent.maTotalBounds = rRange; - - - // - // STAGE 1: Search for intersecting maDisjunctAggregatesList entries - // ================================================================= - // - - // if rRange is empty, it will intersect with no - // maDisjunctAggregatesList member. Thus, we can safe us - // the check. - // if rRange is outside all other rectangle, skip here, - // too - if( bNotOutsideEverything && - !rRange.isEmpty() ) - { - typename ConnectedComponentsType::iterator aCurrAggregate; - typename ConnectedComponentsType::iterator aLastAggregate; - - // flag, determining whether we touched one or more of - // the maDisjunctAggregatesList entries. _If_ we did, - // we have to repeat the intersection process, because - // these changes might have generated new - // intersections. - bool bSomeAggregatesChanged; - - // loop, until bSomeAggregatesChanged stays false - do - { - // only continue loop if 'intersects' branch below was hit - bSomeAggregatesChanged = false; - - // iterate over all current members of maDisjunctAggregatesList - for( aCurrAggregate=maDisjunctAggregatesList.begin(), - aLastAggregate=maDisjunctAggregatesList.end(); - aCurrAggregate != aLastAggregate; ) - { - // first check if current component's bounds - // are empty. This ensures that distinct empty - // components are not merged into one - // aggregate. As a matter of fact, they have - // no position and size. - - if( !aCurrAggregate->maTotalBounds.isEmpty() && - aCurrAggregate->maTotalBounds.overlaps( - aNewConnectedComponent.maTotalBounds ) ) - { - // union the intersecting - // maDisjunctAggregatesList element into - // aNewConnectedComponent - - // calc union bounding box - aNewConnectedComponent.maTotalBounds.expand( aCurrAggregate->maTotalBounds ); - - // extract all aCurrAggregate components - // to aNewConnectedComponent - aNewConnectedComponent.maComponentList.splice( - aNewConnectedComponent.maComponentList.end(), - aCurrAggregate->maComponentList ); - - // remove and delete aCurrAggregate entry - // from list (we've gutted it's content - // above). list::erase() will update our - // iterator with the predecessor here. - aCurrAggregate = maDisjunctAggregatesList.erase( aCurrAggregate ); - - // at least one aggregate changed, need to rescan everything - bSomeAggregatesChanged = true; - } - else - { - aCurrAggregate++; - } - } - } - while( bSomeAggregatesChanged ); - } - - // - // STAGE 2: Add newly generated connected component list element - // ============================================================= - // - - // add new component to the end of the component list - aNewConnectedComponent.maComponentList.push_back( - ComponentType( rRange, rUserData ) ); - - // do some consistency checks (aka post conditions) - OSL_ENSURE( !aNewConnectedComponent.maComponentList.empty(), - "B2DConnectedRanges::addRange(): empty aggregate list" ); - OSL_ENSURE( !aNewConnectedComponent.maTotalBounds.isEmpty() || - (aNewConnectedComponent.maTotalBounds.isEmpty() && - aNewConnectedComponent.maComponentList.size() == 1), - "B2DConnectedRanges::addRange(): empty ranges must be solitary"); - - // add aNewConnectedComponent as a new entry to - // maDisjunctAggregatesList - maDisjunctAggregatesList.push_back( aNewConnectedComponent ); - } - - /** Apply a functor to each of the disjunct component - aggregates. - - @param aFunctor - Functor to apply. Must provide an operator( const ConnectedComponents& ). - - @return a copy of the functor, as applied to all aggregates. - */ - template< typename UnaryFunctor > UnaryFunctor forEachAggregate( UnaryFunctor aFunctor ) const - { - return ::std::for_each( maDisjunctAggregatesList.begin(), - maDisjunctAggregatesList.end(), - aFunctor ); - } - - private: - // default: disabled copy/assignment - B2DConnectedRanges(const B2DConnectedRanges&); - B2DConnectedRanges& operator=( const B2DConnectedRanges& ); - - /** Current list of disjunct sets of connected components - - Each entry corresponds to one of the top-level rectangles - in the drawing above. - */ - ConnectedComponentsType maDisjunctAggregatesList; - - /** Global bound rect over all added ranges. - */ - B2DRange maTotalBounds; - }; -} - -#endif /* _BGFX_RANGE_B2DCONNECTEDRANGES_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b2dpolyrange.hxx b/basegfx/inc/basegfx/range/b2dpolyrange.hxx deleted file mode 100644 index 8633f1e8fc..0000000000 --- a/basegfx/inc/basegfx/range/b2dpolyrange.hxx +++ /dev/null @@ -1,146 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B2DPOLYRANGE_HXX -#define _BGFX_RANGE_B2DPOLYRANGE_HXX - -#include <o3tl/cow_wrapper.hxx> -#include <boost/tuple/tuple.hpp> -#include <basegfx/vector/b2enums.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - class B2DTuple; - class B2DRange; - class B2DPolyPolygon; - class ImplB2DPolyRange; - - /** Multiple ranges in one object. - - This class combines multiple ranges in one object, providing a - total, enclosing range for it. - - You can use this class e.g. when updating views containing - rectangular objects. Add each modified object to a - B2DMultiRange, then test each viewable object against - intersection with the multi range. - - Similar in spirit to the poly-polygon vs. polygon relationship. - - Note that comparable to polygons, a poly-range can also - contain 'holes' - this is encoded via polygon orientation at - the poly-polygon, and via explicit flags for the poly-range. - */ - class BASEGFX_DLLPUBLIC B2DPolyRange - { - public: - typedef boost::tuple<B2DRange,B2VectorOrientation> ElementType ; - - B2DPolyRange(); - ~B2DPolyRange(); - - /** Create a multi range with exactly one containing range - */ - explicit B2DPolyRange( const ElementType& rElement ); - B2DPolyRange( const B2DRange& rRange, B2VectorOrientation eOrient ); - B2DPolyRange( const B2DPolyRange& ); - B2DPolyRange& operator=( const B2DPolyRange& ); - - /// unshare this poly-range with all internally shared instances - void makeUnique(); - - bool operator==(const B2DPolyRange&) const; - bool operator!=(const B2DPolyRange&) const; - - /// Number of included ranges - sal_uInt32 count() const; - - ElementType getElement(sal_uInt32 nIndex) const; - void setElement(sal_uInt32 nIndex, const ElementType& rElement ); - void setElement(sal_uInt32 nIndex, const B2DRange& rRange, B2VectorOrientation eOrient ); - - // insert/append a single range - void insertElement(sal_uInt32 nIndex, const ElementType& rElement, sal_uInt32 nCount = 1); - void insertElement(sal_uInt32 nIndex, const B2DRange& rRange, B2VectorOrientation eOrient, sal_uInt32 nCount = 1); - void appendElement(const ElementType& rElement, sal_uInt32 nCount = 1); - void appendElement(const B2DRange& rRange, B2VectorOrientation eOrient, sal_uInt32 nCount = 1); - - // insert/append multiple ranges - void insertPolyRange(sal_uInt32 nIndex, const B2DPolyRange&); - void appendPolyRange(const B2DPolyRange&); - - void remove(sal_uInt32 nIndex, sal_uInt32 nCount = 1); - void clear(); - - // flip range orientations - converts holes to solids, and vice versa - void flip(); - - /** Get overall range - - @return - The union range of all contained ranges - */ - B2DRange getBounds() const; - - /** Test whether given tuple is inside one or more of the - included ranges. Does *not* use overall range, but checks - individually. - */ - bool isInside( const B2DTuple& rTuple ) const; - - /** Test whether given range is inside one or more of the - included ranges. Does *not* use overall range, but checks - individually. - */ - bool isInside( const B2DRange& rRange ) const; - - /** Test whether given range overlaps one or more of the - included ranges. Does *not* use overall range, but checks - individually. - */ - bool overlaps( const B2DRange& rRange ) const; - - /** Request a poly-polygon with solved cross-overs - */ - B2DPolyPolygon solveCrossovers() const; - - // element iterators (same iterator validity conditions as for vector) - const B2DRange* begin() const; - const B2DRange* end() const; - B2DRange* begin(); - B2DRange* end(); - - private: - o3tl::cow_wrapper< ImplB2DPolyRange > mpImpl; - }; -} - -#endif /* _BGFX_RANGE_B2DPOLYRANGE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b2drange.hxx b/basegfx/inc/basegfx/range/b2drange.hxx deleted file mode 100644 index b025125754..0000000000 --- a/basegfx/inc/basegfx/range/b2drange.hxx +++ /dev/null @@ -1,299 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B2DRANGE_HXX -#define _BGFX_RANGE_B2DRANGE_HXX - -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/tuple/b2dtuple.hxx> -#include <basegfx/range/basicrange.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - // predeclarations - class B2IRange; - class B2DHomMatrix; - - class B2DRange - { - public: - typedef double ValueType; - typedef DoubleTraits TraitsType; - - B2DRange() - { - } - - explicit B2DRange(const B2DTuple& rTuple) - : maRangeX(rTuple.getX()), - maRangeY(rTuple.getY()) - { - } - - B2DRange(double x1, - double y1, - double x2, - double y2) - : maRangeX(x1), - maRangeY(y1) - { - maRangeX.expand(x2); - maRangeY.expand(y2); - } - - B2DRange(const B2DTuple& rTuple1, - const B2DTuple& rTuple2) - : maRangeX(rTuple1.getX()), - maRangeY(rTuple1.getY()) - { - expand( rTuple2 ); - } - - B2DRange(const B2DRange& rRange) - : maRangeX(rRange.maRangeX), - maRangeY(rRange.maRangeY) - { - } - - BASEGFX_DLLPUBLIC explicit B2DRange(const B2IRange& rRange); - - bool isEmpty() const - { - return ( - maRangeX.isEmpty() - || maRangeY.isEmpty() - ); - } - - void reset() - { - maRangeX.reset(); - maRangeY.reset(); - } - - bool operator==( const B2DRange& rRange ) const - { - return (maRangeX == rRange.maRangeX - && maRangeY == rRange.maRangeY); - } - - bool operator!=( const B2DRange& rRange ) const - { - return (maRangeX != rRange.maRangeX - || maRangeY != rRange.maRangeY); - } - - B2DRange& operator=(const B2DRange& rRange) - { - maRangeX = rRange.maRangeX; - maRangeY = rRange.maRangeY; - return *this; - } - - bool equal(const B2DRange& rRange) const - { - return (maRangeX.equal(rRange.maRangeX) - && maRangeY.equal(rRange.maRangeY)); - } - - double getMinX() const - { - return maRangeX.getMinimum(); - } - - double getMinY() const - { - return maRangeY.getMinimum(); - } - - double getMaxX() const - { - return maRangeX.getMaximum(); - } - - double getMaxY() const - { - return maRangeY.getMaximum(); - } - - double getWidth() const - { - return maRangeX.getRange(); - } - - double getHeight() const - { - return maRangeY.getRange(); - } - - B2DPoint getMinimum() const - { - return B2DPoint( - maRangeX.getMinimum(), - maRangeY.getMinimum() - ); - } - - B2DPoint getMaximum() const - { - return B2DPoint( - maRangeX.getMaximum(), - maRangeY.getMaximum() - ); - } - - B2DVector getRange() const - { - return B2DVector( - maRangeX.getRange(), - maRangeY.getRange() - ); - } - - B2DPoint getCenter() const - { - return B2DPoint( - maRangeX.getCenter(), - maRangeY.getCenter() - ); - } - - double getCenterX() const - { - return maRangeX.getCenter(); - } - - double getCenterY() const - { - return maRangeY.getCenter(); - } - - bool isInside(const B2DTuple& rTuple) const - { - return ( - maRangeX.isInside(rTuple.getX()) - && maRangeY.isInside(rTuple.getY()) - ); - } - - bool isInside(const B2DRange& rRange) const - { - return ( - maRangeX.isInside(rRange.maRangeX) - && maRangeY.isInside(rRange.maRangeY) - ); - } - - bool overlaps(const B2DRange& rRange) const - { - return ( - maRangeX.overlaps(rRange.maRangeX) - && maRangeY.overlaps(rRange.maRangeY) - ); - } - - bool overlapsMore(const B2DRange& rRange) const - { - return ( - maRangeX.overlapsMore(rRange.maRangeX) - && maRangeY.overlapsMore(rRange.maRangeY) - ); - } - - void expand(const B2DTuple& rTuple) - { - maRangeX.expand(rTuple.getX()); - maRangeY.expand(rTuple.getY()); - } - - void expand(const B2DRange& rRange) - { - maRangeX.expand(rRange.maRangeX); - maRangeY.expand(rRange.maRangeY); - } - - void intersect(const B2DRange& rRange) - { - maRangeX.intersect(rRange.maRangeX); - maRangeY.intersect(rRange.maRangeY); - } - - void grow(double fValue) - { - maRangeX.grow(fValue); - maRangeY.grow(fValue); - } - - BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix& rMatrix); - - private: - typedef ::basegfx::BasicRange< ValueType, TraitsType > MyBasicRange; - - MyBasicRange maRangeX; - MyBasicRange maRangeY; - }; - - /** Round double to nearest integer for 2D range - - @return the nearest integer for this range - */ - BASEGFX_DLLPUBLIC B2IRange fround(const B2DRange& rRange); - - /** Compute the set difference of the two given ranges - - This method calculates the symmetric difference (aka XOR) - between the two given ranges, and returning the resulting - ranges. Thus, the result will contain all areas where one, but - not both ranges lie. - - @param o_rResult - Result vector. The up to four difference ranges are returned - within this vector - - @param rFirst - The first range - - @param rSecond - The second range - - @return the input vector - */ - BASEGFX_DLLPUBLIC ::std::vector< B2DRange >& computeSetDifference( ::std::vector< B2DRange >& o_rResult, - const B2DRange& rFirst, - const B2DRange& rSecond ); - -} // end of namespace basegfx - - -#endif /* _BGFX_RANGE_B2DRANGE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b2drangeclipper.hxx b/basegfx/inc/basegfx/range/b2drangeclipper.hxx deleted file mode 100644 index a90a1370e1..0000000000 --- a/basegfx/inc/basegfx/range/b2drangeclipper.hxx +++ /dev/null @@ -1,54 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B2DRANGECLIPPER_HXX -#define _BGFX_RANGE_B2DRANGECLIPPER_HXX - -#include <basegfx/range/b2dpolyrange.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - namespace tools - { - /** Extract poly-polygon w/o self-intersections from poly-range - - Similar to the solveCrossovers(const B2DPolyPolygon&) - method, this one calculates a self-intersection-free - poly-polygon with the same topology, and encoding - inside/outsidedness via polygon orientation and layering. - */ - BASEGFX_DLLPUBLIC B2DPolyPolygon solveCrossovers(const std::vector<B2DRange>& rRanges, - const std::vector<B2VectorOrientation>& rOrientations); - } -} - -#endif /* _BGFX_RANGE_B2DRANGECLIPPER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b2drectangle.hxx b/basegfx/inc/basegfx/range/b2drectangle.hxx deleted file mode 100644 index 9a9e1b7cbf..0000000000 --- a/basegfx/inc/basegfx/range/b2drectangle.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B2DRECTANGLE_HXX -#define _BGFX_RANGE_B2DRECTANGLE_HXX - -#include <basegfx/range/b2drange.hxx> - -namespace basegfx -{ - // syntactic sugar: a B2DRange exactly models a Rectangle, thus, - // for interface clarity, we provide an alias name - - /// Alias name for interface clarity (not everybody is aware of the identity) - typedef B2DRange B2DRectangle; -} - -#endif /* _BGFX_RANGE_B2DRECTANGLE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b2ibox.hxx b/basegfx/inc/basegfx/range/b2ibox.hxx deleted file mode 100644 index d0c503cc8c..0000000000 --- a/basegfx/inc/basegfx/range/b2ibox.hxx +++ /dev/null @@ -1,255 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B2IBOX_HXX -#define _BGFX_RANGE_B2IBOX_HXX - -#include <basegfx/point/b2ipoint.hxx> -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/tuple/b2ituple.hxx> -#include <basegfx/tuple/b2i64tuple.hxx> -#include <basegfx/range/basicbox.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B2IBox - { - public: - typedef sal_Int32 ValueType; - typedef Int32Traits TraitsType; - - B2IBox() - { - } - - explicit B2IBox(const B2ITuple& rTuple) - : maRangeX(rTuple.getX()), - maRangeY(rTuple.getY()) - { - } - - B2IBox(sal_Int32 x1, - sal_Int32 y1, - sal_Int32 x2, - sal_Int32 y2) : - maRangeX(x1), - maRangeY(y1) - { - maRangeX.expand(x2); - maRangeY.expand(y2); - } - - B2IBox(const B2ITuple& rTuple1, - const B2ITuple& rTuple2) : - maRangeX(rTuple1.getX()), - maRangeY(rTuple1.getY()) - { - expand( rTuple2 ); - } - - B2IBox(const B2IBox& rBox) : - maRangeX(rBox.maRangeX), - maRangeY(rBox.maRangeY) - { - } - - bool isEmpty() const - { - return maRangeX.isEmpty() || maRangeY.isEmpty(); - } - - void reset() - { - maRangeX.reset(); - maRangeY.reset(); - } - - bool operator==( const B2IBox& rBox ) const - { - return (maRangeX == rBox.maRangeX - && maRangeY == rBox.maRangeY); - } - - bool operator!=( const B2IBox& rBox ) const - { - return (maRangeX != rBox.maRangeX - || maRangeY != rBox.maRangeY); - } - - void operator=(const B2IBox& rBox) - { - maRangeX = rBox.maRangeX; - maRangeY = rBox.maRangeY; - } - - sal_Int32 getMinX() const - { - return maRangeX.getMinimum(); - } - - sal_Int32 getMinY() const - { - return maRangeY.getMinimum(); - } - - sal_Int32 getMaxX() const - { - return maRangeX.getMaximum(); - } - - sal_Int32 getMaxY() const - { - return maRangeY.getMaximum(); - } - - sal_Int64 getWidth() const - { - return maRangeX.getRange(); - } - - sal_Int64 getHeight() const - { - return maRangeY.getRange(); - } - - B2IPoint getMinimum() const - { - return B2IPoint( - maRangeX.getMinimum(), - maRangeY.getMinimum() - ); - } - - B2IPoint getMaximum() const - { - return B2IPoint( - maRangeX.getMaximum(), - maRangeY.getMaximum() - ); - } - - B2I64Tuple getRange() const - { - return B2I64Tuple( - maRangeX.getRange(), - maRangeY.getRange() - ); - } - - B2DPoint getCenter() const - { - return B2DPoint( - maRangeX.getCenter(), - maRangeY.getCenter() - ); - } - - bool isInside(const B2ITuple& rTuple) const - { - return ( - maRangeX.isInside(rTuple.getX()) - && maRangeY.isInside(rTuple.getY()) - ); - } - - bool isInside(const B2IBox& rBox) const - { - return ( - maRangeX.isInside(rBox.maRangeX) - && maRangeY.isInside(rBox.maRangeY) - ); - } - - bool overlaps(const B2IBox& rBox) const - { - return ( - maRangeX.overlaps(rBox.maRangeX) - && maRangeY.overlaps(rBox.maRangeY) - ); - } - - void expand(const B2ITuple& rTuple) - { - maRangeX.expand(rTuple.getX()); - maRangeY.expand(rTuple.getY()); - } - - void expand(const B2IBox& rBox) - { - maRangeX.expand(rBox.maRangeX); - maRangeY.expand(rBox.maRangeY); - } - - void intersect(const B2IBox& rBox) - { - maRangeX.intersect(rBox.maRangeX); - maRangeY.intersect(rBox.maRangeY); - } - - void grow(sal_Int32 nValue) - { - maRangeX.grow(nValue); - maRangeY.grow(nValue); - } - - private: - BasicBox maRangeX; - BasicBox maRangeY; - }; - - /** Compute the set difference of the two given boxes - - This method calculates the symmetric difference (aka XOR) - between the two given boxes, and returning the resulting - boxes. Thus, the result will contain all areas where one, but - not both boxes lie. - - @param o_rResult - Result vector. The up to four difference boxes are returned - within this vector - - @param rFirst - The first box - - @param rSecond - The second box - - @return the input vector - */ - ::std::vector< B2IBox >& computeSetDifference( ::std::vector< B2IBox >& o_rResult, - const B2IBox& rFirst, - const B2IBox& rSecond ); - -} // end of namespace basegfx - -#endif /* _BGFX_RANGE_B2IBOX_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b2irange.hxx b/basegfx/inc/basegfx/range/b2irange.hxx deleted file mode 100644 index 85f540a115..0000000000 --- a/basegfx/inc/basegfx/range/b2irange.hxx +++ /dev/null @@ -1,258 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B2IRANGE_HXX -#define _BGFX_RANGE_B2IRANGE_HXX - -#include <basegfx/point/b2ipoint.hxx> -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/tuple/b2ituple.hxx> -#include <basegfx/tuple/b2i64tuple.hxx> -#include <basegfx/range/basicrange.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B2IRange - { - public: - typedef sal_Int32 ValueType; - typedef Int32Traits TraitsType; - - B2IRange() - { - } - - explicit B2IRange(const B2ITuple& rTuple) - : maRangeX(rTuple.getX()), - maRangeY(rTuple.getY()) - { - } - - B2IRange(sal_Int32 x1, - sal_Int32 y1, - sal_Int32 x2, - sal_Int32 y2) - : maRangeX(x1), - maRangeY(y1) - { - maRangeX.expand(x2); - maRangeY.expand(y2); - } - - B2IRange(const B2ITuple& rTuple1, - const B2ITuple& rTuple2) - : maRangeX(rTuple1.getX()), - maRangeY(rTuple1.getY()) - { - expand( rTuple2 ); - } - - B2IRange(const B2IRange& rRange) - : maRangeX(rRange.maRangeX), - maRangeY(rRange.maRangeY) - { - } - - bool isEmpty() const - { - return maRangeX.isEmpty() || maRangeY.isEmpty(); - } - - void reset() - { - maRangeX.reset(); - maRangeY.reset(); - } - - bool operator==( const B2IRange& rRange ) const - { - return (maRangeX == rRange.maRangeX - && maRangeY == rRange.maRangeY); - } - - bool operator!=( const B2IRange& rRange ) const - { - return (maRangeX != rRange.maRangeX - || maRangeY != rRange.maRangeY); - } - - B2IRange& operator=(const B2IRange& rRange) - { - maRangeX = rRange.maRangeX; - maRangeY = rRange.maRangeY; - return *this; - } - - sal_Int32 getMinX() const - { - return maRangeX.getMinimum(); - } - - sal_Int32 getMinY() const - { - return maRangeY.getMinimum(); - } - - sal_Int32 getMaxX() const - { - return maRangeX.getMaximum(); - } - - sal_Int32 getMaxY() const - { - return maRangeY.getMaximum(); - } - - sal_Int64 getWidth() const - { - return maRangeX.getRange(); - } - - sal_Int64 getHeight() const - { - return maRangeY.getRange(); - } - - B2IPoint getMinimum() const - { - return B2IPoint( - maRangeX.getMinimum(), - maRangeY.getMinimum() - ); - } - - B2IPoint getMaximum() const - { - return B2IPoint( - maRangeX.getMaximum(), - maRangeY.getMaximum() - ); - } - - B2I64Tuple getRange() const - { - return B2I64Tuple( - maRangeX.getRange(), - maRangeY.getRange() - ); - } - - B2DPoint getCenter() const - { - return B2DPoint( - maRangeX.getCenter(), - maRangeY.getCenter() - ); - } - - bool isInside(const B2ITuple& rTuple) const - { - return ( - maRangeX.isInside(rTuple.getX()) - && maRangeY.isInside(rTuple.getY()) - ); - } - - bool isInside(const B2IRange& rRange) const - { - return ( - maRangeX.isInside(rRange.maRangeX) - && maRangeY.isInside(rRange.maRangeY) - ); - } - - bool overlaps(const B2IRange& rRange) const - { - return ( - maRangeX.overlaps(rRange.maRangeX) - && maRangeY.overlaps(rRange.maRangeY) - ); - } - - void expand(const B2ITuple& rTuple) - { - maRangeX.expand(rTuple.getX()); - maRangeY.expand(rTuple.getY()); - } - - void expand(const B2IRange& rRange) - { - maRangeX.expand(rRange.maRangeX); - maRangeY.expand(rRange.maRangeY); - } - - void intersect(const B2IRange& rRange) - { - maRangeX.intersect(rRange.maRangeX); - maRangeY.intersect(rRange.maRangeY); - } - - void grow(sal_Int32 nValue) - { - maRangeX.grow(nValue); - maRangeY.grow(nValue); - } - - private: - typedef ::basegfx::BasicRange< ValueType, TraitsType > MyBasicRange; - - MyBasicRange maRangeX; - MyBasicRange maRangeY; - }; - - /** Compute the set difference of the two given ranges - - This method calculates the symmetric difference (aka XOR) - between the two given ranges, and returning the resulting - ranges. Thus, the result will contain all areas where one, but - not both ranges lie. - - @param o_rResult - Result vector. The up to four difference ranges are returned - within this vector - - @param rFirst - The first range - - @param rSecond - The second range - - @return the input vector - */ - BASEGFX_DLLPUBLIC ::std::vector< B2IRange >& computeSetDifference( ::std::vector< B2IRange >& o_rResult, - const B2IRange& rFirst, - const B2IRange& rSecond ); - -} // end of namespace basegfx - -#endif /* _BGFX_RANGE_B2IRANGE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b2irectangle.hxx b/basegfx/inc/basegfx/range/b2irectangle.hxx deleted file mode 100644 index 965fe7b10b..0000000000 --- a/basegfx/inc/basegfx/range/b2irectangle.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B2IRECTANGLE_HXX -#define _BGFX_RANGE_B2IRECTANGLE_HXX - -#include <basegfx/range/b2irange.hxx> - -namespace basegfx -{ - // syntactic sugar: a B2IRange exactly models a Rectangle, thus, - // for interface clarity, we provide an alias name - - /// Alias name for interface clarity (not everybody is aware of the identity) - typedef B2IRange B2IRectangle; -} - -#endif /* _BGFX_RANGE_B2IRECTANGLE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b3drange.hxx b/basegfx/inc/basegfx/range/b3drange.hxx deleted file mode 100644 index bd08fae832..0000000000 --- a/basegfx/inc/basegfx/range/b3drange.hxx +++ /dev/null @@ -1,306 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B3DRANGE_HXX -#define _BGFX_RANGE_B3DRANGE_HXX - -#include <basegfx/vector/b3dvector.hxx> -#include <basegfx/point/b3dpoint.hxx> -#include <basegfx/tuple/b3dtuple.hxx> -#include <basegfx/range/basicrange.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclarations - class B3IRange; - class B3DHomMatrix; - - class BASEGFX_DLLPUBLIC B3DRange - { - typedef ::basegfx::BasicRange< double, DoubleTraits > MyBasicRange; - - MyBasicRange maRangeX; - MyBasicRange maRangeY; - MyBasicRange maRangeZ; - - public: - B3DRange() - { - } - - explicit B3DRange(const B3DTuple& rTuple) - : maRangeX(rTuple.getX()), - maRangeY(rTuple.getY()), - maRangeZ(rTuple.getZ()) - { - } - - B3DRange(double x1, - double y1, - double z1, - double x2, - double y2, - double z2) - : maRangeX(x1), - maRangeY(y1), - maRangeZ(z1) - { - maRangeX.expand(x2); - maRangeY.expand(y2); - maRangeZ.expand(z2); - } - - B3DRange(const B3DTuple& rTuple1, - const B3DTuple& rTuple2) - : maRangeX(rTuple1.getX()), - maRangeY(rTuple1.getY()), - maRangeZ(rTuple1.getZ()) - { - expand(rTuple2); - } - - B3DRange(const B3DRange& rRange) - : maRangeX(rRange.maRangeX), - maRangeY(rRange.maRangeY), - maRangeZ(rRange.maRangeZ) - { - } - - explicit B3DRange(const B3IRange& rRange); - - bool isEmpty() const - { - return ( - maRangeX.isEmpty() - || maRangeY.isEmpty() - || maRangeZ.isEmpty() - ); - } - - void reset() - { - maRangeX.reset(); - maRangeY.reset(); - maRangeZ.reset(); - } - - bool operator==( const B3DRange& rRange ) const - { - return (maRangeX == rRange.maRangeX - && maRangeY == rRange.maRangeY - && maRangeZ == rRange.maRangeZ); - } - - bool operator!=( const B3DRange& rRange ) const - { - return (maRangeX != rRange.maRangeX - || maRangeY != rRange.maRangeY - || maRangeZ != rRange.maRangeZ); - } - - B3DRange& operator=(const B3DRange& rRange) - { - maRangeX = rRange.maRangeX; - maRangeY = rRange.maRangeY; - maRangeZ = rRange.maRangeZ; - return *this; - } - - bool equal(const B3DRange& rRange) const - { - return (maRangeX.equal(rRange.maRangeX) - && maRangeY.equal(rRange.maRangeY) - && maRangeZ.equal(rRange.maRangeZ)); - } - - double getMinX() const - { - return maRangeX.getMinimum(); - } - - double getMinY() const - { - return maRangeY.getMinimum(); - } - - double getMinZ() const - { - return maRangeZ.getMinimum(); - } - - double getMaxX() const - { - return maRangeX.getMaximum(); - } - - double getMaxY() const - { - return maRangeY.getMaximum(); - } - - double getMaxZ() const - { - return maRangeZ.getMaximum(); - } - - double getWidth() const - { - return maRangeX.getRange(); - } - - double getHeight() const - { - return maRangeY.getRange(); - } - - double getDepth() const - { - return maRangeZ.getRange(); - } - - B3DPoint getMinimum() const - { - return B3DPoint( - maRangeX.getMinimum(), - maRangeY.getMinimum(), - maRangeZ.getMinimum() - ); - } - - B3DPoint getMaximum() const - { - return B3DPoint( - maRangeX.getMaximum(), - maRangeY.getMaximum(), - maRangeZ.getMaximum() - ); - } - - B3DVector getRange() const - { - return B3DVector( - maRangeX.getRange(), - maRangeY.getRange(), - maRangeZ.getRange() - ); - } - - B3DPoint getCenter() const - { - return B3DPoint( - maRangeX.getCenter(), - maRangeY.getCenter(), - maRangeZ.getCenter() - ); - } - - double getCenterX() const - { - return maRangeX.getCenter(); - } - - double getCenterY() const - { - return maRangeY.getCenter(); - } - - double getCenterZ() const - { - return maRangeZ.getCenter(); - } - - bool isInside(const B3DTuple& rTuple) const - { - return ( - maRangeX.isInside(rTuple.getX()) - && maRangeY.isInside(rTuple.getY()) - && maRangeZ.isInside(rTuple.getZ()) - ); - } - - bool isInside(const B3DRange& rRange) const - { - return ( - maRangeX.isInside(rRange.maRangeX) - && maRangeY.isInside(rRange.maRangeY) - && maRangeZ.isInside(rRange.maRangeZ) - ); - } - - bool overlaps(const B3DRange& rRange) const - { - return ( - maRangeX.overlaps(rRange.maRangeX) - && maRangeY.overlaps(rRange.maRangeY) - && maRangeZ.overlaps(rRange.maRangeZ) - ); - } - - void expand(const B3DTuple& rTuple) - { - maRangeX.expand(rTuple.getX()); - maRangeY.expand(rTuple.getY()); - maRangeZ.expand(rTuple.getZ()); - } - - void expand(const B3DRange& rRange) - { - maRangeX.expand(rRange.maRangeX); - maRangeY.expand(rRange.maRangeY); - maRangeZ.expand(rRange.maRangeZ); - } - - void intersect(const B3DRange& rRange) - { - maRangeX.intersect(rRange.maRangeX); - maRangeY.intersect(rRange.maRangeY); - maRangeZ.intersect(rRange.maRangeZ); - } - - void grow(double fValue) - { - maRangeX.grow(fValue); - maRangeY.grow(fValue); - maRangeZ.grow(fValue); - } - - void transform(const B3DHomMatrix& rMatrix); - }; - - /** Round double to nearest integer for 3D range - - @return the nearest integer for this range - */ - BASEGFX_DLLPUBLIC B3IRange fround(const B3DRange& rRange); -} // end of namespace basegfx - - -#endif /* _BGFX_RANGE_B3DRANGE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b3dvolume.hxx b/basegfx/inc/basegfx/range/b3dvolume.hxx deleted file mode 100644 index 4891444dc8..0000000000 --- a/basegfx/inc/basegfx/range/b3dvolume.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B3DBOX_HXX -#define _BGFX_RANGE_B3DBOX_HXX - -#include <basegfx/range/b3drange.hxx> - -namespace basegfx -{ - // syntactic sugar: a B3DRange exactly models a Volume in 3D, thus, - // for interface clarity, we provide an alias name - - /// Alias name for interface clarity (not everybody is aware of the identity) - typedef B3DRange B3DVolume; -} - -#endif /* _BGFX_RANGE_B3DBOX_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b3ibox.hxx b/basegfx/inc/basegfx/range/b3ibox.hxx deleted file mode 100644 index 021b415e22..0000000000 --- a/basegfx/inc/basegfx/range/b3ibox.hxx +++ /dev/null @@ -1,263 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B3IBOX_HXX -#define _BGFX_RANGE_B3IBOX_HXX - -#include <basegfx/point/b3ipoint.hxx> -#include <basegfx/point/b3dpoint.hxx> -#include <basegfx/tuple/b3ituple.hxx> -#include <basegfx/tuple/b3i64tuple.hxx> -#include <basegfx/range/basicbox.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B3IBox - { - BasicBox maRangeX; - BasicBox maRangeY; - BasicBox maRangeZ; - - public: - B3IBox() - { - } - - explicit B3IBox(const B3ITuple& rTuple) : - maRangeX(rTuple.getX()), - maRangeY(rTuple.getY()), - maRangeZ(rTuple.getZ()) - { - } - - B3IBox(sal_Int32 x1, - sal_Int32 y1, - sal_Int32 z1, - sal_Int32 x2, - sal_Int32 y2, - sal_Int32 z2) : - maRangeX(x1), - maRangeY(y1), - maRangeZ(z1) - { - maRangeX.expand(x2); - maRangeY.expand(y2); - maRangeZ.expand(z2); - } - - B3IBox(const B3ITuple& rTuple1, - const B3ITuple& rTuple2) : - maRangeX(rTuple1.getX()), - maRangeY(rTuple1.getY()), - maRangeZ(rTuple1.getZ()) - { - expand(rTuple2); - } - - B3IBox(const B3IBox& rBox) : - maRangeX(rBox.maRangeX), - maRangeY(rBox.maRangeY), - maRangeZ(rBox.maRangeZ) - { - } - - bool isEmpty() const - { - return maRangeX.isEmpty() || maRangeY.isEmpty() || maRangeZ.isEmpty(); - } - - void reset() - { - maRangeX.reset(); - maRangeY.reset(); - maRangeZ.reset(); - } - - bool operator==( const B3IBox& rBox ) const - { - return (maRangeX == rBox.maRangeX - && maRangeY == rBox.maRangeY - && maRangeZ == rBox.maRangeZ); - } - - bool operator!=( const B3IBox& rBox ) const - { - return (maRangeX != rBox.maRangeX - || maRangeY != rBox.maRangeY - || maRangeZ != rBox.maRangeZ); - } - - void operator=(const B3IBox& rBox) - { - maRangeX = rBox.maRangeX; - maRangeY = rBox.maRangeY; - maRangeZ = rBox.maRangeZ; - } - - sal_Int32 getMinX() const - { - return maRangeX.getMinimum(); - } - - sal_Int32 getMinY() const - { - return maRangeY.getMinimum(); - } - - sal_Int32 getMinZ() const - { - return maRangeZ.getMinimum(); - } - - sal_Int32 getMaxX() const - { - return maRangeX.getMaximum(); - } - - sal_Int32 getMaxY() const - { - return maRangeY.getMaximum(); - } - - sal_Int32 getMaxZ() const - { - return maRangeZ.getMaximum(); - } - - sal_Int64 getWidth() const - { - return maRangeX.getRange(); - } - - sal_Int64 getHeight() const - { - return maRangeY.getRange(); - } - - sal_Int64 getDepth() const - { - return maRangeZ.getRange(); - } - - B3IPoint getMinimum() const - { - return B3IPoint( - maRangeX.getMinimum(), - maRangeY.getMinimum(), - maRangeZ.getMinimum() - ); - } - - B3IPoint getMaximum() const - { - return B3IPoint( - maRangeX.getMaximum(), - maRangeY.getMaximum(), - maRangeZ.getMaximum() - ); - } - - B3I64Tuple getRange() const - { - return B3I64Tuple( - maRangeX.getRange(), - maRangeY.getRange(), - maRangeZ.getRange() - ); - } - - B3DPoint getCenter() const - { - return B3DPoint( - maRangeX.getCenter(), - maRangeY.getCenter(), - maRangeZ.getCenter() - ); - } - - bool isInside(const B3ITuple& rTuple) const - { - return ( - maRangeX.isInside(rTuple.getX()) - && maRangeY.isInside(rTuple.getY()) - && maRangeZ.isInside(rTuple.getZ()) - ); - } - - bool isInside(const B3IBox& rBox) const - { - return ( - maRangeX.isInside(rBox.maRangeX) - && maRangeY.isInside(rBox.maRangeY) - && maRangeZ.isInside(rBox.maRangeZ) - ); - } - - bool overlaps(const B3IBox& rBox) const - { - return ( - maRangeX.overlaps(rBox.maRangeX) - && maRangeY.overlaps(rBox.maRangeY) - && maRangeZ.overlaps(rBox.maRangeZ) - ); - } - - void expand(const B3ITuple& rTuple) - { - maRangeX.expand(rTuple.getX()); - maRangeY.expand(rTuple.getY()); - maRangeZ.expand(rTuple.getZ()); - } - - void expand(const B3IBox& rBox) - { - maRangeX.expand(rBox.maRangeX); - maRangeY.expand(rBox.maRangeY); - maRangeZ.expand(rBox.maRangeZ); - } - - void intersect(const B3IBox& rBox) - { - maRangeX.intersect(rBox.maRangeX); - maRangeY.intersect(rBox.maRangeY); - maRangeZ.intersect(rBox.maRangeZ); - } - - void grow(sal_Int32 nValue) - { - maRangeX.grow(nValue); - maRangeY.grow(nValue); - maRangeZ.grow(nValue); - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_RANGE_B3IBOX_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b3irange.hxx b/basegfx/inc/basegfx/range/b3irange.hxx deleted file mode 100644 index e07a4c5822..0000000000 --- a/basegfx/inc/basegfx/range/b3irange.hxx +++ /dev/null @@ -1,266 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B3IRANGE_HXX -#define _BGFX_RANGE_B3IRANGE_HXX - -#include <basegfx/point/b3ipoint.hxx> -#include <basegfx/point/b3dpoint.hxx> -#include <basegfx/tuple/b3ituple.hxx> -#include <basegfx/tuple/b3i64tuple.hxx> -#include <basegfx/range/basicrange.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC B3IRange - { - typedef ::basegfx::BasicRange< sal_Int32, Int32Traits > MyBasicRange; - - MyBasicRange maRangeX; - MyBasicRange maRangeY; - MyBasicRange maRangeZ; - - public: - B3IRange() - { - } - - explicit B3IRange(const B3ITuple& rTuple) - : maRangeX(rTuple.getX()), - maRangeY(rTuple.getY()), - maRangeZ(rTuple.getZ()) - { - } - - B3IRange(sal_Int32 x1, - sal_Int32 y1, - sal_Int32 z1, - sal_Int32 x2, - sal_Int32 y2, - sal_Int32 z2) - : maRangeX(x1), - maRangeY(y1), - maRangeZ(z1) - { - maRangeX.expand(x2); - maRangeY.expand(y2); - maRangeZ.expand(z2); - } - - B3IRange(const B3ITuple& rTuple1, - const B3ITuple& rTuple2) - : maRangeX(rTuple1.getX()), - maRangeY(rTuple1.getY()), - maRangeZ(rTuple1.getZ()) - { - expand(rTuple2); - } - - B3IRange(const B3IRange& rRange) - : maRangeX(rRange.maRangeX), - maRangeY(rRange.maRangeY), - maRangeZ(rRange.maRangeZ) - { - } - - bool isEmpty() const - { - return maRangeX.isEmpty() || maRangeY.isEmpty() || maRangeZ.isEmpty(); - } - - void reset() - { - maRangeX.reset(); - maRangeY.reset(); - maRangeZ.reset(); - } - - bool operator==( const B3IRange& rRange ) const - { - return (maRangeX == rRange.maRangeX - && maRangeY == rRange.maRangeY - && maRangeZ == rRange.maRangeZ); - } - - bool operator!=( const B3IRange& rRange ) const - { - return (maRangeX != rRange.maRangeX - || maRangeY != rRange.maRangeY - || maRangeZ != rRange.maRangeZ); - } - - B3IRange& operator=(const B3IRange& rRange) - { - maRangeX = rRange.maRangeX; - maRangeY = rRange.maRangeY; - maRangeZ = rRange.maRangeZ; - return *this; - } - - sal_Int32 getMinX() const - { - return maRangeX.getMinimum(); - } - - sal_Int32 getMinY() const - { - return maRangeY.getMinimum(); - } - - sal_Int32 getMinZ() const - { - return maRangeZ.getMinimum(); - } - - sal_Int32 getMaxX() const - { - return maRangeX.getMaximum(); - } - - sal_Int32 getMaxY() const - { - return maRangeY.getMaximum(); - } - - sal_Int32 getMaxZ() const - { - return maRangeZ.getMaximum(); - } - - sal_Int64 getWidth() const - { - return maRangeX.getRange(); - } - - sal_Int64 getHeight() const - { - return maRangeY.getRange(); - } - - sal_Int64 getDepth() const - { - return maRangeZ.getRange(); - } - - B3IPoint getMinimum() const - { - return B3IPoint( - maRangeX.getMinimum(), - maRangeY.getMinimum(), - maRangeZ.getMinimum() - ); - } - - B3IPoint getMaximum() const - { - return B3IPoint( - maRangeX.getMaximum(), - maRangeY.getMaximum(), - maRangeZ.getMaximum() - ); - } - - B3I64Tuple getRange() const - { - return B3I64Tuple( - maRangeX.getRange(), - maRangeY.getRange(), - maRangeZ.getRange() - ); - } - - B3DPoint getCenter() const - { - return B3DPoint( - maRangeX.getCenter(), - maRangeY.getCenter(), - maRangeZ.getCenter() - ); - } - - bool isInside(const B3ITuple& rTuple) const - { - return ( - maRangeX.isInside(rTuple.getX()) - && maRangeY.isInside(rTuple.getY()) - && maRangeZ.isInside(rTuple.getZ()) - ); - } - - bool isInside(const B3IRange& rRange) const - { - return ( - maRangeX.isInside(rRange.maRangeX) - && maRangeY.isInside(rRange.maRangeY) - && maRangeZ.isInside(rRange.maRangeZ) - ); - } - - bool overlaps(const B3IRange& rRange) const - { - return ( - maRangeX.overlaps(rRange.maRangeX) - && maRangeY.overlaps(rRange.maRangeY) - && maRangeZ.overlaps(rRange.maRangeZ) - ); - } - - void expand(const B3ITuple& rTuple) - { - maRangeX.expand(rTuple.getX()); - maRangeY.expand(rTuple.getY()); - maRangeZ.expand(rTuple.getZ()); - } - - void expand(const B3IRange& rRange) - { - maRangeX.expand(rRange.maRangeX); - maRangeY.expand(rRange.maRangeY); - maRangeZ.expand(rRange.maRangeZ); - } - - void intersect(const B3IRange& rRange) - { - maRangeX.intersect(rRange.maRangeX); - maRangeY.intersect(rRange.maRangeY); - maRangeZ.intersect(rRange.maRangeZ); - } - - void grow(sal_Int32 nValue) - { - maRangeX.grow(nValue); - maRangeY.grow(nValue); - maRangeZ.grow(nValue); - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_RANGE_B3IRANGE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/b3ivolume.hxx b/basegfx/inc/basegfx/range/b3ivolume.hxx deleted file mode 100644 index 18f003e11c..0000000000 --- a/basegfx/inc/basegfx/range/b3ivolume.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_B3IBOX_HXX -#define _BGFX_RANGE_B3IBOX_HXX - -#include <basegfx/range/b3irange.hxx> - -namespace basegfx -{ - // syntactic sugar: a B3IRange exactly models a Box in 3D, thus, - // for interface clarity, we provide an alias name - - /// Alias name for interface clarity (not everybody is aware of the identity) - typedef B3IRange B3IBox; -} - -#endif /* _BGFX_RANGE_B3IBOX_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/basicbox.hxx b/basegfx/inc/basegfx/range/basicbox.hxx deleted file mode 100644 index f0756be4be..0000000000 --- a/basegfx/inc/basegfx/range/basicbox.hxx +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_BASICBOX_HXX -#define _BGFX_RANGE_BASICBOX_HXX - -#include <basegfx/range/basicrange.hxx> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - /** Specialization of BasicRange, handling the inside predicates - differently. - - This template considers the rightmost and bottommost border as - <em>outside</em> of the range, in contrast to BasicRange, - which considers them inside. - */ - class BASEGFX_DLLPUBLIC BasicBox : public BasicRange< sal_Int32, Int32Traits > - { - typedef BasicRange< sal_Int32, Int32Traits > Base; - public: - BasicBox() : - Base() - { - } - - BasicBox( sal_Int32 nValue ) : - Base( nValue ) - { - } - - BasicBox(const BasicBox& rBox) : - Base( rBox ) - { - } - - double getCenter() const - { - if(isEmpty()) - { - return 0.0; - } - else - { - return ((mnMaximum + mnMinimum - 1.0) / 2.0); - } - } - - using Base::isInside; - - bool isInside(sal_Int32 nValue) const - { - if(isEmpty()) - { - return false; - } - else - { - return (nValue >= mnMinimum) && (nValue < mnMaximum); - } - } - - using Base::overlaps; - - bool overlaps(const BasicBox& rBox) const - { - if(isEmpty()) - { - return false; - } - else - { - if(rBox.isEmpty()) - { - return false; - } - else - { - return !((rBox.mnMaximum <= mnMinimum) || (rBox.mnMinimum >= mnMaximum)); - } - } - } - - void grow(sal_Int32 nValue) - { - if(!isEmpty()) - { - bool bLessThanZero(nValue < 0); - - if(nValue > 0 || bLessThanZero) - { - mnMinimum -= nValue; - mnMaximum += nValue; - - if(bLessThanZero) - { - // test if range did collapse - if(mnMinimum > mnMaximum) - { - // if yes, collapse to center - mnMinimum = mnMaximum = ((mnMaximum + mnMinimum - 1) / 2); - } - } - } - } - } - }; - -} // end of namespace basegfx - -#endif /* _BGFX_RANGE_BASICBOX_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/basicrange.hxx b/basegfx/inc/basegfx/range/basicrange.hxx deleted file mode 100644 index d8f149f205..0000000000 --- a/basegfx/inc/basegfx/range/basicrange.hxx +++ /dev/null @@ -1,300 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_BASICRANGE_HXX -#define _BGFX_RANGE_BASICRANGE_HXX - -#include <sal/types.h> -#include <float.h> -#include <basegfx/numeric/ftools.hxx> - - -namespace basegfx -{ - template< typename T, typename Traits > class BasicRange - { - protected: - T mnMinimum; - T mnMaximum; - - public: - typedef T ValueType; - typedef Traits TraitsType; - - BasicRange() : - mnMinimum(Traits::maxVal()), - mnMaximum(Traits::minVal()) - { - } - - BasicRange( T nValue ) : - mnMinimum(nValue), - mnMaximum(nValue) - { - } - - BasicRange(const BasicRange& rRange) : - mnMinimum(rRange.mnMinimum), - mnMaximum(rRange.mnMaximum) - { - } - - void reset() - { - mnMinimum = Traits::maxVal(); - mnMaximum = Traits::minVal(); - } - - bool isEmpty() const - { - return Traits::maxVal() == mnMinimum; - } - - T getMinimum() const { return mnMinimum; } - T getMaximum() const { return mnMaximum; } - - double getCenter() const - { - if(isEmpty()) - { - return 0.0; - } - else - { - return ((mnMaximum + mnMinimum) / 2.0); - } - } - - bool isInside(T nValue) const - { - if(isEmpty()) - { - return false; - } - else - { - return (nValue >= mnMinimum) && (nValue <= mnMaximum); - } - } - - bool isInside(const BasicRange& rRange) const - { - if(isEmpty()) - { - return false; - } - else - { - if(rRange.isEmpty()) - { - return false; - } - else - { - return (rRange.mnMinimum >= mnMinimum) && (rRange.mnMaximum <= mnMaximum); - } - } - } - - bool overlaps(const BasicRange& rRange) const - { - if(isEmpty()) - { - return false; - } - else - { - if(rRange.isEmpty()) - { - return false; - } - else - { - return !((rRange.mnMaximum < mnMinimum) || (rRange.mnMinimum > mnMaximum)); - } - } - } - - bool overlapsMore(const BasicRange& rRange) const - { - if(isEmpty() || rRange.isEmpty()) - return false; - // returns true if the overlap is more than just a touching at the limits - return ((rRange.mnMaximum > mnMinimum) && (rRange.mnMinimum < mnMaximum)); - } - - bool operator==( const BasicRange& rRange ) const - { - return (mnMinimum == rRange.mnMinimum && mnMaximum == rRange.mnMaximum); - } - - bool operator!=( const BasicRange& rRange ) const - { - return (mnMinimum != rRange.mnMinimum || mnMaximum != rRange.mnMaximum); - } - - BasicRange& operator=(const BasicRange& rRange) - { - mnMinimum = rRange.mnMinimum; - mnMaximum = rRange.mnMaximum; - return *this; - } - - bool equal(const BasicRange& rRange) const - { - return ( - fTools::equal(mnMinimum, rRange.mnMinimum) && - fTools::equal(mnMaximum, rRange.mnMaximum)); - } - - void expand(T nValue) - { - if(isEmpty()) - { - mnMinimum = mnMaximum = nValue; - } - else - { - if(nValue < mnMinimum) - { - mnMinimum = nValue; - } - - if(nValue > mnMaximum) - { - mnMaximum = nValue; - } - } - } - - void expand(const BasicRange& rRange) - { - if(isEmpty()) - { - mnMinimum = rRange.mnMinimum; - mnMaximum = rRange.mnMaximum; - } - else - { - if(!rRange.isEmpty()) - { - if(rRange.mnMinimum < mnMinimum) - { - mnMinimum = rRange.mnMinimum; - } - - if(rRange.mnMaximum > mnMaximum) - { - mnMaximum = rRange.mnMaximum; - } - } - } - } - - void intersect(const BasicRange& rRange) - { - // here, overlaps also tests all isEmpty() conditions already. - if( !overlaps( rRange ) ) - { - reset(); - } - else - { - if(rRange.mnMinimum > mnMinimum) - { - mnMinimum = rRange.mnMinimum; - } - - if(rRange.mnMaximum < mnMaximum) - { - mnMaximum = rRange.mnMaximum; - } - } - } - - void grow(T nValue) - { - if(!isEmpty()) - { - bool bLessThanZero(nValue < 0); - - if(nValue > 0 || bLessThanZero) - { - mnMinimum -= nValue; - mnMaximum += nValue; - - if(bLessThanZero) - { - // test if range did collapse - if(mnMinimum > mnMaximum) - { - // if yes, collapse to center - mnMinimum = mnMaximum = (mnMinimum + mnMaximum) / 2; - } - } - } - } - } - - typename Traits::DifferenceType getRange() const - { - if(isEmpty()) - { - return Traits::neutral(); - } - else - { - return (mnMaximum - mnMinimum); - } - } - }; - - // some pre-fabricated traits - struct DoubleTraits - { - static double minVal() { return DBL_MIN; }; - static double maxVal() { return DBL_MAX; }; - static double neutral() { return 0.0; }; - - typedef double DifferenceType; - }; - - struct Int32Traits - { - static sal_Int32 minVal() { return SAL_MIN_INT32; }; - static sal_Int32 maxVal() { return SAL_MAX_INT32; }; - static sal_Int32 neutral() { return 0L; }; - - typedef sal_Int64 DifferenceType; - }; - -} // end of namespace basegfx - -#endif /* _BGFX_RANGE_BASICRANGE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/range/rangeexpander.hxx b/basegfx/inc/basegfx/range/rangeexpander.hxx deleted file mode 100644 index 6d8e2562e2..0000000000 --- a/basegfx/inc/basegfx/range/rangeexpander.hxx +++ /dev/null @@ -1,86 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RANGE_RANGEEXPANDER_HXX -#define _BGFX_RANGE_RANGEEXPANDER_HXX - -#include <basegfx/range/b1drange.hxx> -#include <basegfx/range/b1irange.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/range/b2irange.hxx> -#include <basegfx/range/b3drange.hxx> -#include <basegfx/range/b3irange.hxx> - -namespace basegfx -{ - /** Generic functor for expanding a range with a number of other - ranges. - - Since *Range::expand() is overloaded, straight-forward - application of ::boost::bind and friends fails (because of - ambiguities). Thus, this functor template can be used, to - expand the given range with a number of other ranges, passed - in at the function operator. - - @tpl RangeType - Range type to operate with. Preferrably, one of B1*Range, - B2*Range, or B3*Range. - */ - template< typename RangeType > class RangeExpander - { - public: - typedef RangeType ValueType; - typedef void result_type; - - explicit RangeExpander( ValueType& rBounds ) : - mrBounds( rBounds ) - { - } - - void operator()( const ValueType& rBounds ) - { - mrBounds.expand( rBounds ); - } - - private: - ValueType& mrBounds; - }; - - typedef RangeExpander< B1DRange > B1DRangeExpander; - typedef RangeExpander< B1IRange > B1IRangeExpander; - typedef RangeExpander< B2DRange > B2DRangeExpander; - typedef RangeExpander< B2IRange > B2IRangeExpander; - typedef RangeExpander< B3DRange > B3DRangeExpander; - typedef RangeExpander< B3IRange > B3IRangeExpander; - -} // end of namespace basegfx - - -#endif /* _BGFX_RANGE_RANGEEXPANDER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/raster/bpixelraster.hxx b/basegfx/inc/basegfx/raster/bpixelraster.hxx deleted file mode 100644 index 9082da3674..0000000000 --- a/basegfx/inc/basegfx/raster/bpixelraster.hxx +++ /dev/null @@ -1,120 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RASTER_BPIXELRASTER_HXX -#define _BGFX_RASTER_BPIXELRASTER_HXX - -#include <algorithm> -#include <sal/types.h> -#include <basegfx/pixel/bpixel.hxx> -#include <rtl/memory.h> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC BPixelRaster - { - private: - // do not allow copy constructor and assignment operator - BPixelRaster(const BPixelRaster&); - BPixelRaster& operator=(const BPixelRaster&); - - protected: - sal_uInt32 mnWidth; - sal_uInt32 mnHeight; - sal_uInt32 mnCount; - BPixel* mpContent; - - public: - // reset - void reset() - { - rtl_zeroMemory(mpContent, sizeof(BPixel) * mnCount); - } - - // constructor/destructor - BPixelRaster(sal_uInt32 nWidth, sal_uInt32 nHeight) - : mnWidth(nWidth), - mnHeight(nHeight), - mnCount(nWidth * nHeight), - mpContent(new BPixel[mnCount]) - { - reset(); - } - - ~BPixelRaster() - { - delete [] mpContent; - } - - // coordinate calcs between X/Y and span - sal_uInt32 getIndexFromXY(sal_uInt32 nX, sal_uInt32 nY) const { return (nX + (nY * mnWidth)); } - sal_uInt32 getXFromIndex(sal_uInt32 nIndex) const { return (nIndex % mnWidth); } - sal_uInt32 getYFromIndex(sal_uInt32 nIndex) const { return (nIndex / mnWidth); } - - // data access read - sal_uInt32 getWidth() const { return mnWidth; } - sal_uInt32 getHeight() const { return mnHeight; } - sal_uInt32 getCount() const { return mnCount; } - - // data access read only - const BPixel& getBPixel(sal_uInt32 nIndex) const - { -#ifdef DBG_UTIL - if(nIndex >= mnCount) - { - OSL_FAIL("getBPixel: Access out of range (!)"); - return BPixel::getEmptyBPixel(); - } -#endif - return mpContent[nIndex]; - } - - // data access read/write - BPixel& getBPixel(sal_uInt32 nIndex) - { -#ifdef DBG_UTIL - if(nIndex >= mnCount) - { - OSL_FAIL("getBPixel: Access out of range (!)"); - return mpContent[0L]; - } -#endif - return mpContent[nIndex]; - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_RASTER_BPIXELRASTER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/raster/bzpixelraster.hxx b/basegfx/inc/basegfx/raster/bzpixelraster.hxx deleted file mode 100644 index 729abe0fbe..0000000000 --- a/basegfx/inc/basegfx/raster/bzpixelraster.hxx +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RASTER_BZPIXELRASTER_HXX -#define _BGFX_RASTER_BZPIXELRASTER_HXX - -#include <basegfx/raster/bpixelraster.hxx> -#include <rtl/memory.h> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC BZPixelRaster : public BPixelRaster - { - protected: - // additionally, host a ZBuffer - sal_uInt16* mpZBuffer; - - public: - // reset - void resetZ() - { - reset(); - rtl_zeroMemory(mpZBuffer, sizeof(sal_uInt16) * mnCount); - } - - // constructor/destructor - BZPixelRaster(sal_uInt32 nWidth, sal_uInt32 nHeight) - : BPixelRaster(nWidth, nHeight), - mpZBuffer(new sal_uInt16[mnCount]) - { - rtl_zeroMemory(mpZBuffer, sizeof(sal_uInt16) * mnCount); - } - - ~BZPixelRaster() - { - delete [] mpZBuffer; - } - - // data access read only - const sal_uInt16& getZ(sal_uInt32 nIndex) const - { -#ifdef DBG_UTIL - if(nIndex >= mnCount) - { - OSL_FAIL("getZ: Access out of range (!)"); - return mpZBuffer[0L]; - } -#endif - return mpZBuffer[nIndex]; - } - - // data access read/write - sal_uInt16& getZ(sal_uInt32 nIndex) - { -#ifdef DBG_UTIL - if(nIndex >= mnCount) - { - OSL_FAIL("getZ: Access out of range (!)"); - return mpZBuffer[0L]; - } -#endif - return mpZBuffer[nIndex]; - } - }; -} // end of namespace basegfx - -#endif /* _BGFX_RASTER_BZPIXELRASTER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/raster/rasterconvert3d.hxx b/basegfx/inc/basegfx/raster/rasterconvert3d.hxx deleted file mode 100644 index 7eee5b3cb2..0000000000 --- a/basegfx/inc/basegfx/raster/rasterconvert3d.hxx +++ /dev/null @@ -1,349 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_RASTER_RASTERCONVERT3D_HXX -#define _BGFX_RASTER_RASTERCONVERT3D_HXX - -#include <sal/types.h> -#include <vector> -#include <basegfx/color/bcolor.hxx> -#include <basegfx/vector/b3dvector.hxx> -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// -// predeclarations - -namespace basegfx -{ - class B3DPolygon; - class B3DPolyPolygon; -} - -////////////////////////////////////////////////////////////////////////////// -// interpolators for double precision - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC ip_single - { - private: - double mfVal; - double mfInc; - - public: - ip_single() - : mfVal(0.0), - mfInc(0.0) - {} - - ip_single(double fVal, double fInc) - : mfVal(fVal), - mfInc(fInc) - {} - - double getVal() const { return mfVal; } - double getInc() const { return mfInc; } - - void increment(double fStep) { mfVal += fStep * mfInc; } - }; -} // end of namespace basegfx - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC ip_double - { - private: - ip_single maX; - ip_single maY; - - public: - ip_double() - : maX(), - maY() - {} - - ip_double(double fXVal, double fXInc, double fYVal, double fYInc) - : maX(fXVal, fXInc), - maY(fYVal, fYInc) - {} - - const ip_single& getX() const { return maX; } - const ip_single& getY() const { return maY; } - - void increment(double fStep) { maX.increment(fStep); maY.increment(fStep); } - }; -} // end of namespace basegfx - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC ip_triple - { - private: - ip_single maX; - ip_single maY; - ip_single maZ; - - public: - ip_triple() - : maX(), - maY(), - maZ() - {} - - ip_triple(double fXVal, double fXInc, double fYVal, double fYInc, double fZVal, double fZInc) - : maX(fXVal, fXInc), - maY(fYVal, fYInc), - maZ(fZVal, fZInc) - {} - - const ip_single& getX() const { return maX; } - const ip_single& getY() const { return maY; } - const ip_single& getZ() const { return maZ; } - - void increment(double fStep) { maX.increment(fStep); maY.increment(fStep); maZ.increment(fStep); } - }; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// -// InterpolatorProvider3D to have a common source for allocating interpolators -// which may then be addressed using the index to the vectors - -namespace basegfx -{ - #define SCANLINE_EMPTY_INDEX (0xffffffff) - - class BASEGFX_DLLPUBLIC InterpolatorProvider3D - { - private: - ::std::vector< ip_triple > maColorInterpolators; - ::std::vector< ip_triple > maNormalInterpolators; - ::std::vector< ip_double > maTextureInterpolators; - ::std::vector< ip_triple > maInverseTextureInterpolators; - - protected: - sal_uInt32 addColorInterpolator(const BColor& rA, const BColor& rB, double fInvYDelta) - { - B3DVector aDelta(rB.getRed() - rA.getRed(), rB.getGreen() - rA.getGreen(), rB.getBlue() - rA.getBlue()); - aDelta *= fInvYDelta; - maColorInterpolators.push_back(ip_triple(rA.getRed(), aDelta.getX(), rA.getGreen(), aDelta.getY(), rA.getBlue(), aDelta.getZ())); - return (maColorInterpolators.size() - 1L); - } - - sal_uInt32 addNormalInterpolator(const B3DVector& rA, const B3DVector& rB, double fInvYDelta) - { - B3DVector aDelta(rB.getX() - rA.getX(), rB.getY() - rA.getY(), rB.getZ() - rA.getZ()); - aDelta *= fInvYDelta; - maNormalInterpolators.push_back(ip_triple(rA.getX(), aDelta.getX(), rA.getY(), aDelta.getY(), rA.getZ(), aDelta.getZ())); - return (maNormalInterpolators.size() - 1L); - } - - sal_uInt32 addTextureInterpolator(const B2DPoint& rA, const B2DPoint& rB, double fInvYDelta) - { - B2DVector aDelta(rB.getX() - rA.getX(), rB.getY() - rA.getY()); - aDelta *= fInvYDelta; - maTextureInterpolators.push_back(ip_double(rA.getX(), aDelta.getX(), rA.getY(), aDelta.getY())); - return (maTextureInterpolators.size() - 1L); - } - - sal_uInt32 addInverseTextureInterpolator(const B2DPoint& rA, const B2DPoint& rB, double fZEyeA, double fZEyeB, double fInvYDelta) - { - const double fInvZEyeA(fTools::equalZero(fZEyeA) ? fZEyeA : 1.0 / fZEyeA); - const double fInvZEyeB(fTools::equalZero(fZEyeB) ? fZEyeB : 1.0 / fZEyeB); - const B2DPoint aInvA(rA * fInvZEyeA); - const B2DPoint aInvB(rB * fInvZEyeB); - double fZDelta(fInvZEyeB - fInvZEyeA); - B2DVector aDelta(aInvB.getX() - aInvA.getX(), aInvB.getY() - aInvA.getY()); - - fZDelta *= fInvYDelta; - aDelta *= fInvYDelta; - - maInverseTextureInterpolators.push_back(ip_triple(aInvA.getX(), aDelta.getX(), aInvA.getY(), aDelta.getY(), fInvZEyeA, fZDelta)); - return (maInverseTextureInterpolators.size() - 1L); - } - - void reset() - { - maColorInterpolators.clear(); - maNormalInterpolators.clear(); - maTextureInterpolators.clear(); - maInverseTextureInterpolators.clear(); - } - - public: - InterpolatorProvider3D() {} - - ::std::vector< ip_triple >& getColorInterpolators() { return maColorInterpolators; } - ::std::vector< ip_triple >& getNormalInterpolators() { return maNormalInterpolators; } - ::std::vector< ip_double >& getTextureInterpolators() { return maTextureInterpolators; } - ::std::vector< ip_triple >& getInverseTextureInterpolators() { return maInverseTextureInterpolators; } - }; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// -// RasterConversionLineEntry3D for Raterconversion of 3D PolyPolygons - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC RasterConversionLineEntry3D - { - private: - ip_single maX; - ip_single maZ; - sal_Int32 mnY; - sal_uInt32 mnCount; - - sal_uInt32 mnColorIndex; - sal_uInt32 mnNormalIndex; - sal_uInt32 mnTextureIndex; - sal_uInt32 mnInverseTextureIndex; - - public: - RasterConversionLineEntry3D(const double& rfX, const double& rfDeltaX, const double& rfZ, const double& rfDeltaZ, sal_Int32 nY, sal_uInt32 nCount) - : maX(rfX, rfDeltaX), - maZ(rfZ, rfDeltaZ), - mnY(nY), - mnCount(nCount), - mnColorIndex(SCANLINE_EMPTY_INDEX), - mnNormalIndex(SCANLINE_EMPTY_INDEX), - mnTextureIndex(SCANLINE_EMPTY_INDEX), - mnInverseTextureIndex(SCANLINE_EMPTY_INDEX) - {} - - void setColorIndex(sal_uInt32 nIndex) { mnColorIndex = nIndex; } - void setNormalIndex(sal_uInt32 nIndex) { mnNormalIndex = nIndex; } - void setTextureIndex(sal_uInt32 nIndex) { mnTextureIndex = nIndex; } - void setInverseTextureIndex(sal_uInt32 nIndex) { mnInverseTextureIndex = nIndex; } - - bool operator<(const RasterConversionLineEntry3D& rComp) const - { - if(mnY == rComp.mnY) - { - return maX.getVal() < rComp.maX.getVal(); - } - - return mnY < rComp.mnY; - } - - bool decrementRasterConversionLineEntry3D(sal_uInt32 nStep) - { - if(nStep >= mnCount) - { - return false; - } - else - { - mnCount -= nStep; - return true; - } - } - - void incrementRasterConversionLineEntry3D(sal_uInt32 nStep, InterpolatorProvider3D& rProvider) - { - const double fStep((double)nStep); - maX.increment(fStep); - maZ.increment(fStep); - mnY += nStep; - - if(SCANLINE_EMPTY_INDEX != mnColorIndex) - { - rProvider.getColorInterpolators()[mnColorIndex].increment(fStep); - } - - if(SCANLINE_EMPTY_INDEX != mnNormalIndex) - { - rProvider.getNormalInterpolators()[mnNormalIndex].increment(fStep); - } - - if(SCANLINE_EMPTY_INDEX != mnTextureIndex) - { - rProvider.getTextureInterpolators()[mnTextureIndex].increment(fStep); - } - - if(SCANLINE_EMPTY_INDEX != mnInverseTextureIndex) - { - rProvider.getInverseTextureInterpolators()[mnInverseTextureIndex].increment(fStep); - } - } - - // data read access - const ip_single& getX() const { return maX; } - sal_Int32 getY() const { return mnY; } - const ip_single& getZ() const { return maZ; } - sal_uInt32 getColorIndex() const { return mnColorIndex; } - sal_uInt32 getNormalIndex() const { return mnNormalIndex; } - sal_uInt32 getTextureIndex() const { return mnTextureIndex; } - sal_uInt32 getInverseTextureIndex() const { return mnInverseTextureIndex; } - }; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// -// the basic RaterConverter itself. Only one method needs to be overloaded. The -// class itself is strictly virtual - -namespace basegfx -{ - class BASEGFX_DLLPUBLIC RasterConverter3D : public InterpolatorProvider3D - { - private: - // the line entries for an area conversion run - ::std::vector< RasterConversionLineEntry3D > maLineEntries; - - struct lineComparator - { - bool operator()(const RasterConversionLineEntry3D* pA, const RasterConversionLineEntry3D* pB) - { - OSL_ENSURE(pA && pB, "lineComparator: empty pointer (!)"); - return pA->getX().getVal() < pB->getX().getVal(); - } - }; - - void addArea(const B3DPolygon& rFill, const B3DHomMatrix* pViewToEye); - void addArea(const B3DPolyPolygon& rFill, const B3DHomMatrix* pViewToEye); - void addEdge(const B3DPolygon& rFill, sal_uInt32 a, sal_uInt32 b, const B3DHomMatrix* pViewToEye); - - void rasterconvertB3DArea(sal_Int32 nStartLine, sal_Int32 nStopLine); - void rasterconvertB3DEdge(const B3DPolygon& rLine, sal_uInt32 nA, sal_uInt32 nB, sal_Int32 nStartLine, sal_Int32 nStopLine, sal_uInt16 nLineWidth); - - virtual void processLineSpan(const RasterConversionLineEntry3D& rA, const RasterConversionLineEntry3D& rB, sal_Int32 nLine, sal_uInt32 nSpanCount) = 0; - - public: - RasterConverter3D(); - virtual ~RasterConverter3D(); - - void rasterconvertB3DPolyPolygon(const B3DPolyPolygon& rFill, const B3DHomMatrix* pViewToEye, sal_Int32 nStartLine, sal_Int32 nStopLine); - void rasterconvertB3DPolygon(const B3DPolygon& rLine, sal_Int32 nStartLine, sal_Int32 nStopLine, sal_uInt16 nLineWidth); - }; -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_RASTER_RASTERCONVERT3D_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/b2dclipstate.hxx b/basegfx/inc/basegfx/tools/b2dclipstate.hxx deleted file mode 100644 index 236b81c0d2..0000000000 --- a/basegfx/inc/basegfx/tools/b2dclipstate.hxx +++ /dev/null @@ -1,120 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TOOLS_CLIPSTATE_HXX -#define _BGFX_TOOLS_CLIPSTATE_HXX - -#include <sal/types.h> -#include <o3tl/cow_wrapper.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - class B2DRange; - class B2DPolyRange; - class B2DPolygon; - class B2DPolyPolygon; - - namespace tools - { - class ImplB2DClipState; - - /** This class provides an optimized, symbolic clip state for graphical output - - Having a current 'clip' state is a common attribute of - almost all graphic output APIs, most of which internally - represent it via a list of rectangular bands. In contrast, - this implementation purely uses symbolic clips, but in a - quite efficient manner, deferring actual evaluation until - a clip representation is requested, and using faster code - paths for common special cases (like all-rectangle clips) - */ - class BASEGFX_DLLPUBLIC B2DClipState - { - public: - typedef o3tl::cow_wrapper< ImplB2DClipState > ImplType; - - private: - ImplType mpImpl; - - public: - /// Init clip, in 'cleared' state - everything is visible - B2DClipState(); - ~B2DClipState(); - B2DClipState( const B2DClipState& ); - explicit B2DClipState( const B2DRange& ); - explicit B2DClipState( const B2DPolygon& ); - explicit B2DClipState( const B2DPolyPolygon& ); - B2DClipState& operator=( const B2DClipState& ); - - /// unshare this poly-range with all internally shared instances - void makeUnique(); - - /// Set clip to 'null' - nothing is visible - void makeNull(); - /// returns true when clip is 'null' - nothing is visible - bool isNull() const; - - /// Set clip 'cleared' - everything is visible - void makeClear(); - /// returns true when clip is 'cleared' - everything is visible - bool isCleared() const; - - bool operator==(const B2DClipState&) const; - bool operator!=(const B2DClipState&) const; - - void unionRange(const B2DRange& ); - void unionPolygon(const B2DPolygon& ); - void unionPolyPolygon(const B2DPolyPolygon& ); - void unionClipState(const B2DClipState& ); - - void intersectRange(const B2DRange& ); - void intersectPolygon(const B2DPolygon& ); - void intersectPolyPolygon(const B2DPolyPolygon& ); - void intersectClipState(const B2DClipState& ); - - void subtractRange(const B2DRange& ); - void subtractPolygon(const B2DPolygon& ); - void subtractPolyPolygon(const B2DPolyPolygon& ); - void subtractClipState(const B2DClipState& ); - - void xorRange(const B2DRange& ); - void xorPolygon(const B2DPolygon& ); - void xorPolyPolygon(const B2DPolyPolygon& ); - void xorClipState(const B2DClipState& ); - - B2DPolyPolygon getClipPoly() const; - }; - } -} - -#endif // _BGFX_TOOLS_CLIPSTATE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/canvastools.hxx b/basegfx/inc/basegfx/tools/canvastools.hxx deleted file mode 100644 index c3458c4657..0000000000 --- a/basegfx/inc/basegfx/tools/canvastools.hxx +++ /dev/null @@ -1,225 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TOOLS_CANVASTOOLS_HXX -#define _BGFX_TOOLS_CANVASTOOLS_HXX - -#include <com/sun/star/uno/Reference.hxx> -#include <com/sun/star/uno/Sequence.hxx> -#include <basegfx/basegfxdllapi.h> - - -namespace com { namespace sun { namespace star { namespace geometry -{ - struct AffineMatrix2D; - struct AffineMatrix3D; - struct Matrix2D; - struct RealPoint2D; - struct RealSize2D; - struct RealRectangle2D; - struct RealRectangle3D; - struct IntegerPoint2D; - struct IntegerSize2D; - struct IntegerRectangle2D; - struct RealBezierSegment2D; -} } } } - -namespace com { namespace sun { namespace star { namespace rendering -{ - class XGraphicDevice; - class XPolyPolygon2D; -} } } } - -namespace com { namespace sun { namespace star { namespace awt -{ - struct Point; - struct Size; - struct Rectangle; -} } } } - -namespace basegfx -{ - class B2DHomMatrix; - class B3DHomMatrix; - class B2DVector; - class B2DPoint; - class B2DRange; - class B3DRange; - class B2IVector; - class B2IPoint; - class B2IRange; - class B2DPolygon; - class B2DPolyPolygon; - - namespace unotools - { - // Polygon conversions - // =================================================================== - - BASEGFX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D > - xPolyPolygonFromB2DPolygon( const ::com::sun::star::uno::Reference< - ::com::sun::star::rendering::XGraphicDevice >& xGraphicDevice, - const ::basegfx::B2DPolygon& rPoly ); - - BASEGFX_DLLPUBLIC ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D > - xPolyPolygonFromB2DPolyPolygon( const ::com::sun::star::uno::Reference< - ::com::sun::star::rendering::XGraphicDevice >& xGraphicDevice, - const ::basegfx::B2DPolyPolygon& rPolyPoly ); - - - BASEGFX_DLLPUBLIC ::com::sun::star::uno::Sequence< - ::com::sun::star::uno::Sequence< - ::com::sun::star::geometry::RealBezierSegment2D > > - bezierSequenceSequenceFromB2DPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly ); - - BASEGFX_DLLPUBLIC ::com::sun::star::uno::Sequence< - ::com::sun::star::uno::Sequence< - ::com::sun::star::geometry::RealPoint2D > > - pointSequenceSequenceFromB2DPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly ); - - BASEGFX_DLLPUBLIC ::basegfx::B2DPolygon polygonFromPoint2DSequence( - const ::com::sun::star::uno::Sequence< - ::com::sun::star::geometry::RealPoint2D >& rPoints ); - - BASEGFX_DLLPUBLIC ::basegfx::B2DPolyPolygon polyPolygonFromPoint2DSequenceSequence( - const ::com::sun::star::uno::Sequence< - ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealPoint2D > >& rPoints ); - - BASEGFX_DLLPUBLIC ::basegfx::B2DPolygon polygonFromBezier2DSequence( - const ::com::sun::star::uno::Sequence< - ::com::sun::star::geometry::RealBezierSegment2D >& rPoints ); - - BASEGFX_DLLPUBLIC ::basegfx::B2DPolyPolygon polyPolygonFromBezier2DSequenceSequence( - const ::com::sun::star::uno::Sequence< - ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealBezierSegment2D > >& rPoints ); - - BASEGFX_DLLPUBLIC ::basegfx::B2DPolyPolygon b2DPolyPolygonFromXPolyPolygon2D( - const ::com::sun::star::uno::Reference< - ::com::sun::star::rendering::XPolyPolygon2D >& rPoly ); - - // Matrix conversions - // =================================================================== - - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::AffineMatrix2D& - affineMatrixFromHomMatrix( ::com::sun::star::geometry::AffineMatrix2D& matrix, - const ::basegfx::B2DHomMatrix& transform); - - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::AffineMatrix3D& affineMatrixFromHomMatrix3D( - ::com::sun::star::geometry::AffineMatrix3D& matrix, - const ::basegfx::B3DHomMatrix& transform); - - BASEGFX_DLLPUBLIC ::basegfx::B2DHomMatrix& - homMatrixFromAffineMatrix( ::basegfx::B2DHomMatrix& transform, - const ::com::sun::star::geometry::AffineMatrix2D& matrix ); - - BASEGFX_DLLPUBLIC ::basegfx::B2DHomMatrix homMatrixFromAffineMatrix( const ::com::sun::star::geometry::AffineMatrix2D& matrix ); - BASEGFX_DLLPUBLIC ::basegfx::B3DHomMatrix homMatrixFromAffineMatrix3D( const ::com::sun::star::geometry::AffineMatrix3D& matrix ); - - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::Matrix2D& - matrixFromHomMatrix( ::com::sun::star::geometry::Matrix2D& matrix, - const ::basegfx::B2DHomMatrix& transform); - - BASEGFX_DLLPUBLIC ::basegfx::B2DHomMatrix& - homMatrixFromMatrix( ::basegfx::B2DHomMatrix& transform, - const ::com::sun::star::geometry::Matrix2D& matrix ); - - // Geometry conversions - // =================================================================== - - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::RealSize2D size2DFromB2DSize( const ::basegfx::B2DVector& ); - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::RealPoint2D point2DFromB2DPoint( const ::basegfx::B2DPoint& ); - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::RealRectangle2D rectangle2DFromB2DRectangle( const ::basegfx::B2DRange& ); - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::RealRectangle3D rectangle3DFromB3DRectangle( const ::basegfx::B3DRange& ); - - BASEGFX_DLLPUBLIC ::basegfx::B2DVector b2DSizeFromRealSize2D( const ::com::sun::star::geometry::RealSize2D& ); - BASEGFX_DLLPUBLIC ::basegfx::B2DPoint b2DPointFromRealPoint2D( const ::com::sun::star::geometry::RealPoint2D& ); - BASEGFX_DLLPUBLIC ::basegfx::B2DRange b2DRectangleFromRealRectangle2D( const ::com::sun::star::geometry::RealRectangle2D& ); - BASEGFX_DLLPUBLIC ::basegfx::B3DRange b3DRectangleFromRealRectangle3D( const ::com::sun::star::geometry::RealRectangle3D& ); - - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::IntegerSize2D integerSize2DFromB2ISize( const ::basegfx::B2IVector& ); - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::IntegerPoint2D integerPoint2DFromB2IPoint( const ::basegfx::B2IPoint& ); - BASEGFX_DLLPUBLIC ::com::sun::star::geometry::IntegerRectangle2D integerRectangle2DFromB2IRectangle( const ::basegfx::B2IRange& ); - - BASEGFX_DLLPUBLIC ::basegfx::B2IVector b2ISizeFromIntegerSize2D( const ::com::sun::star::geometry::IntegerSize2D& ); - BASEGFX_DLLPUBLIC ::basegfx::B2IPoint b2IPointFromIntegerPoint2D( const ::com::sun::star::geometry::IntegerPoint2D& ); - BASEGFX_DLLPUBLIC ::basegfx::B2IRange b2IRectangleFromIntegerRectangle2D( const ::com::sun::star::geometry::IntegerRectangle2D& ); - - BASEGFX_DLLPUBLIC ::com::sun::star::awt::Size awtSizeFromB2ISize( const ::basegfx::B2IVector& ); - BASEGFX_DLLPUBLIC ::com::sun::star::awt::Point awtPointFromB2IPoint( const ::basegfx::B2IPoint& ); - BASEGFX_DLLPUBLIC ::com::sun::star::awt::Rectangle awtRectangleFromB2IRectangle( const ::basegfx::B2IRange& ); - - BASEGFX_DLLPUBLIC ::basegfx::B2IVector b2ISizeFromAwtSize( const ::com::sun::star::awt::Size& ); - BASEGFX_DLLPUBLIC ::basegfx::B2IPoint b2IPointFromAwtPoint( const ::com::sun::star::awt::Point& ); - BASEGFX_DLLPUBLIC ::basegfx::B2IRange b2IRectangleFromAwtRectangle( const ::com::sun::star::awt::Rectangle& ); - - // Geometry comparisons - // =================================================================== - - BASEGFX_DLLPUBLIC bool RealSize2DAreEqual( const ::com::sun::star::geometry::RealSize2D& rA, const ::com::sun::star::geometry::RealSize2D& rB ); - BASEGFX_DLLPUBLIC bool RealPoint2DAreEqual( const ::com::sun::star::geometry::RealPoint2D& rA, const ::com::sun::star::geometry::RealPoint2D& rB ); - BASEGFX_DLLPUBLIC bool RealRectangle2DAreEqual( const ::com::sun::star::geometry::RealRectangle2D& rA, const ::com::sun::star::geometry::RealRectangle2D& rB ); - BASEGFX_DLLPUBLIC bool RealRectangle3DAreEqual( const ::com::sun::star::geometry::RealRectangle3D& rA, const ::com::sun::star::geometry::RealRectangle3D& rB ); - BASEGFX_DLLPUBLIC bool AffineMatrix2DAreEqual( const ::com::sun::star::geometry::AffineMatrix2D& rA, const ::com::sun::star::geometry::AffineMatrix2D& rB ); - - BASEGFX_DLLPUBLIC bool IntegerSize2DAreEqual( const ::com::sun::star::geometry::IntegerSize2D& rA, const ::com::sun::star::geometry::IntegerSize2D& rB ); - BASEGFX_DLLPUBLIC bool IntegerPoint2DAreEqual( const ::com::sun::star::geometry::IntegerPoint2D& rA, const ::com::sun::star::geometry::IntegerPoint2D& rB ); - BASEGFX_DLLPUBLIC bool IntegerRectangle2DAreEqual( const ::com::sun::star::geometry::IntegerRectangle2D& rA, const ::com::sun::star::geometry::IntegerRectangle2D& rB ); - - BASEGFX_DLLPUBLIC bool awtSizeAreEqual( const ::com::sun::star::awt::Size& rA, const ::com::sun::star::awt::Size& rB ); - BASEGFX_DLLPUBLIC bool awtPointAreEqual( const ::com::sun::star::awt::Point& rA, const ::com::sun::star::awt::Point& rB ); - BASEGFX_DLLPUBLIC bool awtRectangleAreEqual( const ::com::sun::star::awt::Rectangle& rA, const ::com::sun::star::awt::Rectangle& rB ); - - /** Return smalltest integer range, which completely contains - given floating point range. - - @param rRange - Input range. Values must be within the representable - bounds of sal_Int32 - - @return the closest integer range, which completely - contains rRange. - */ - BASEGFX_DLLPUBLIC ::basegfx::B2IRange b2ISurroundingRangeFromB2DRange( const ::basegfx::B2DRange& rRange ); - - /** Return smalltest B2DRange with integer values, which - completely contains given floating point range. - - @param rRange - Input range. - - @return the closest B2DRange with integer coordinates, - which completely contains rRange. - */ - BASEGFX_DLLPUBLIC ::basegfx::B2DRange b2DSurroundingIntegerRangeFromB2DRange( const ::basegfx::B2DRange& rRange ); - - } -} - -#endif /* _BGFX_TOOLS_CANVASTOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/debugplotter.hxx b/basegfx/inc/basegfx/tools/debugplotter.hxx deleted file mode 100644 index 9ce9d0f1fb..0000000000 --- a/basegfx/inc/basegfx/tools/debugplotter.hxx +++ /dev/null @@ -1,111 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TOOLS_DEBUGPLOTTER_HXX -#define _BGFX_TOOLS_DEBUGPLOTTER_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/polygon/b2dpolygon.hxx> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <rtl/string.hxx> -#include <boost/utility.hpp> // for noncopyable -#include <vector> -#include <utility> -#include <iosfwd> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - class B2DCubicBezier; - - /** Generates debug output for various basegfx data types. - - Use this class to produce debug (trace) output for various - basegfx geometry data types. By default, this class outputs - via OSL_TRACE (i.e. to stderr), and uses the gnuplot output - format. - - To be able to generate one coherent block of output, this - class delays actual writing to its destructor - */ - class BASEGFX_DLLPUBLIC DebugPlotter : private ::boost::noncopyable - { - public: - /** Create new debug output object - - @param pTitle - Title of the debug output, will appear in trace output - */ - explicit DebugPlotter( const sal_Char* pTitle ); - - /** Create new debug output object - - @param pTitle - Title of the debug output, will appear in trace output - - @param rOutputStream - Stream to write output to. Must stay valid over the - lifetime of this object! - */ - DebugPlotter( const sal_Char* pTitle, - ::std::ostream& rOutputStream ); - - ~DebugPlotter(); - - void plot( const B2DPoint& rPoint, - const sal_Char* pTitle ); - void plot( const B2DVector& rVec, - const sal_Char* pTitle ); - void plot( const B2DCubicBezier& rBezier, - const sal_Char* pTitle ); - void plot( const B2DRange& rRange, - const sal_Char* pTitle ); - void plot( const B2DPolygon& rPoly, - const sal_Char* pTitle ); - void plot( const B2DPolyPolygon& rPoly, - const sal_Char* pTitle ); - - private: - void print( const sal_Char* ); - - ::rtl::OString maTitle; - ::std::vector< ::std::pair< B2DPoint, ::rtl::OString > > maPoints; - ::std::vector< ::std::pair< B2DVector, ::rtl::OString > > maVectors; - ::std::vector< ::std::pair< B2DRange, ::rtl::OString > > maRanges; - ::std::vector< ::std::pair< B2DPolygon, ::rtl::OString > > maPolygons; - - ::std::ostream* mpOutputStream; - }; -} - -#endif /* _BGFX_TOOLS_DEBUGPLOTTER_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/gradienttools.hxx b/basegfx/inc/basegfx/tools/gradienttools.hxx deleted file mode 100644 index fb233d3b4b..0000000000 --- a/basegfx/inc/basegfx/tools/gradienttools.hxx +++ /dev/null @@ -1,414 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TOOLS_GRADIENTTOOLS_HXX -#define _BGFX_TOOLS_GRADIENTTOOLS_HXX - -#include <basegfx/point/b2dpoint.hxx> -#include <basegfx/range/b2drange.hxx> -#include <basegfx/vector/b2dvector.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> -#include <basegfx/numeric/ftools.hxx> -#include <basegfx/basegfxdllapi.h> - -#include <vector> -#include <algorithm> - -namespace basegfx -{ - /** Gradient definition as used in ODF 1.2 - - This struct collects all data necessary for rendering ODF - 1.2-compatible gradients. Use the createXXXODFGradientInfo() - methods below for initializing from ODF attributes. - */ - struct BASEGFX_DLLPUBLIC ODFGradientInfo - { - /** transformation mapping from [0,1]^2 texture coordinate - space to [0,1]^2 shape coordinate space - */ - B2DHomMatrix maTextureTransform; - - /** transformation mapping from [0,1]^2 shape coordinate space - to [0,1]^2 texture coordinate space. This is the - transformation commonly used to create gradients from a - scanline rasterizer (put shape u/v coordinates into it, get - texture s/t coordinates out of it) - */ - B2DHomMatrix maBackTextureTransform; - - /** Aspect ratio of the gradient. Only used in drawinglayer - for generating nested gradient polygons currently. Already - catered for in the transformations above. - */ - double mfAspectRatio; - - /** Requested gradient steps to render. See the - implementations of the getXXXGradientAlpha() methods below, - the semantic differs slightly for the different gradient - types. - */ - sal_uInt32 mnSteps; - }; - - namespace tools - { - /** Create matrix for ODF's linear gradient definition - - Note that odf linear gradients are varying in y direction. - - @param o_rGradientInfo - Receives the calculated texture transformation matrix (for - use with standard [0,1]x[0,1] texture coordinates) - - @param rTargetArea - Output area, needed for aspect ratio calculations and - texture transformation - - @param nSteps - Number of gradient steps (from ODF) - - @param fBorder - Width of gradient border (from ODF) - - @param fAngle - Gradient angle (from ODF) - */ - BASEGFX_DLLPUBLIC ODFGradientInfo& createLinearODFGradientInfo(ODFGradientInfo& o_rGradientInfo, - const B2DRange& rTargetArea, - sal_uInt32 nSteps, - double fBorder, - double fAngle); - - /** Calculate linear gradient blend value - - This method generates you the lerp alpha value for - blending linearly between gradient start and end color, - according to the formula (startCol*(1.0-alpha) + endCol*alpha) - - @param rUV - Current uv coordinate. Values outside [0,1] will be - clamped. Assumes gradient color varies along the y axis. - - @param rGradInfo - Gradient info, for transformation and number of steps - */ - inline double getLinearGradientAlpha(const B2DPoint& rUV, - const ODFGradientInfo& rGradInfo ) - { - const B2DPoint aCoor(rGradInfo.maBackTextureTransform * rUV); - const double t(clamp(aCoor.getY(), 0.0, 1.0)); - const sal_uInt32 nSteps(rGradInfo.mnSteps); - - if(nSteps > 2L && nSteps < 128L) - return floor(t * nSteps) / double(nSteps + 1L); - - return t; - } - - /** Create matrix for ODF's axial gradient definition - - Note that odf axial gradients are varying in y - direction. Note further that you can map the axial - gradient to a linear gradient (in case you want or need to - avoid an extra gradient renderer), by using - createLinearODFGradientInfo() instead, shifting the - resulting texture transformation by 0.5 to the top and - appending the same stop colors again, but mirrored. - - @param o_rGradientInfo - Receives the calculated texture transformation matrix (for - use with standard [0,1]x[0,1] texture coordinates) - - @param rTargetArea - Output area, needed for aspect ratio calculations and - texture transformation - - @param nSteps - Number of gradient steps (from ODF) - - @param fBorder - Width of gradient border (from ODF) - - @param fAngle - Gradient angle (from ODF) - */ - BASEGFX_DLLPUBLIC ODFGradientInfo& createAxialODFGradientInfo(ODFGradientInfo& o_rGradientInfo, - const B2DRange& rTargetArea, - sal_uInt32 nSteps, - double fBorder, - double fAngle); - - /** Calculate axial gradient blend value - - This method generates you the lerp alpha value for - blending linearly between gradient start and end color, - according to the formula (startCol*(1.0-alpha) + endCol*alpha) - - @param rUV - Current uv coordinate. Values outside [0,1] will be - clamped. Assumes gradient color varies along the y axis. - - @param rGradInfo - Gradient info, for transformation and number of steps - */ - inline double getAxialGradientAlpha(const B2DPoint& rUV, - const ODFGradientInfo& rGradInfo ) - { - const B2DPoint aCoor(rGradInfo.maBackTextureTransform * rUV); - const double t(clamp(fabs(aCoor.getY()), 0.0, 1.0)); - const sal_uInt32 nSteps(rGradInfo.mnSteps); - const double fInternalSteps((nSteps * 2L) - 1L); - - if(nSteps > 2L && nSteps < 128L) - return floor(((t * fInternalSteps) + 1.0) / 2.0) / double(nSteps - 1L); - - return t; - } - - /** Create matrix for ODF's radial gradient definition - - @param o_rGradientInfo - Receives the calculated texture transformation matrix (for - use with standard [0,1]x[0,1] texture coordinates) - - @param rTargetArea - Output area, needed for aspect ratio calculations and - texture transformation - - @param rOffset - Gradient offset value (from ODF) - - @param nSteps - Number of gradient steps (from ODF) - - @param fBorder - Width of gradient border (from ODF) - - @param fAngle - Gradient angle (from ODF) - */ - BASEGFX_DLLPUBLIC ODFGradientInfo& createRadialODFGradientInfo(ODFGradientInfo& o_rGradientInfo, - const B2DRange& rTargetArea, - const B2DVector& rOffset, - sal_uInt32 nSteps, - double fBorder); - - /** Calculate radial gradient blend value - - This method generates you the lerp alpha value for - blending linearly between gradient start and end color, - according to the formula (startCol*(1.0-alpha) + endCol*alpha) - - @param rUV - Current uv coordinate. Values outside [0,1] will be - clamped. - - @param rGradInfo - Gradient info, for transformation and number of steps - */ - inline double getRadialGradientAlpha(const B2DPoint& rUV, - const ODFGradientInfo& rGradInfo ) - { - const B2DPoint aCoor(rGradInfo.maBackTextureTransform * rUV); - const double fDist( - clamp(aCoor.getX() * aCoor.getX() + aCoor.getY() * aCoor.getY(), - 0.0, - 1.0)); - - const double t(1.0 - sqrt(fDist)); - const sal_uInt32 nSteps(rGradInfo.mnSteps); - - if(nSteps > 2L && nSteps < 128L) - return floor(t * nSteps) / double(nSteps - 1L); - - return t; - } - - /** Create matrix for ODF's elliptical gradient definition - - @param o_rGradientInfo - Receives the calculated texture transformation matrix (for - use with standard [0,1]x[0,1] texture coordinates) - - @param rTargetArea - Output area, needed for aspect ratio calculations and - texture transformation - - @param rOffset - Gradient offset value (from ODF) - - @param nSteps - Number of gradient steps (from ODF) - - @param fBorder - Width of gradient border (from ODF) - - @param fAngle - Gradient angle (from ODF) - */ - BASEGFX_DLLPUBLIC ODFGradientInfo& createEllipticalODFGradientInfo(ODFGradientInfo& o_rGradientInfo, - const B2DRange& rTargetArea, - const B2DVector& rOffset, - sal_uInt32 nSteps, - double fBorder, - double fAngle); - - /** Calculate elliptical gradient blend value - - This method generates you the lerp alpha value for - blending linearly between gradient start and end color, - according to the formula (startCol*(1.0-alpha) + endCol*alpha) - - @param rUV - Current uv coordinate. Values outside [0,1] will be - clamped. - - @param rGradInfo - Gradient info, for transformation and number of steps - */ - inline double getEllipticalGradientAlpha(const B2DPoint& rUV, - const ODFGradientInfo& rGradInfo ) - { - return getRadialGradientAlpha(rUV,rGradInfo); // only matrix setup differs - } - - /** Create matrix for ODF's square gradient definition - - @param o_rGradientInfo - Receives the calculated texture transformation matrix (for - use with standard [0,1]x[0,1] texture coordinates) - - @param rTargetArea - Output area, needed for aspect ratio calculations and - texture transformation - - @param rOffset - Gradient offset value (from ODF) - - @param nSteps - Number of gradient steps (from ODF) - - @param fBorder - Width of gradient border (from ODF) - - @param fAngle - Gradient angle (from ODF) - */ - BASEGFX_DLLPUBLIC ODFGradientInfo& createSquareODFGradientInfo(ODFGradientInfo& o_rGradientInfo, - const B2DRange& rTargetArea, - const B2DVector& rOffset, - sal_uInt32 nSteps, - double fBorder, - double fAngle); - - /** Calculate square gradient blend value - - This method generates you the lerp alpha value for - blending linearly between gradient start and end color, - according to the formula (startCol*(1.0-alpha) + endCol*alpha) - - @param rUV - Current uv coordinate. Values outside [0,1] will be - clamped. - - @param rGradInfo - Gradient info, for transformation and number of steps - */ - inline double getSquareGradientAlpha(const B2DPoint& rUV, - const ODFGradientInfo& rGradInfo ) - { - const B2DPoint aCoor(rGradInfo.maBackTextureTransform * rUV); - const double fAbsX(fabs(aCoor.getX())); - const double fAbsY(fabs(aCoor.getY())); - - if(fTools::moreOrEqual(fAbsX, 1.0) || fTools::moreOrEqual(fAbsY, 1.0)) - return 0.0; - - const double t(1.0 - (fAbsX > fAbsY ? fAbsX : fAbsY)); - const sal_uInt32 nSteps(rGradInfo.mnSteps); - - if(nSteps > 2L && nSteps < 128L) - return floor(t * nSteps) / double(nSteps - 1L); - - return t; - } - - /** Create matrix for ODF's rectangular gradient definition - - @param o_rGradientInfo - Receives the calculated texture transformation matrix (for - use with standard [0,1]x[0,1] texture coordinates) - - @param rTargetArea - Output area, needed for aspect ratio calculations and - texture transformation - - @param rOffset - Gradient offset value (from ODF) - - @param nSteps - Number of gradient steps (from ODF) - - @param fBorder - Width of gradient border (from ODF) - - @param fAngle - Gradient angle (from ODF) - */ - BASEGFX_DLLPUBLIC ODFGradientInfo& createRectangularODFGradientInfo(ODFGradientInfo& o_rGradientInfo, - const B2DRange& rTargetArea, - const B2DVector& rOffset, - sal_uInt32 nSteps, - double fBorder, - double fAngle); - - /** Calculate rectangular gradient blend value - - This method generates you the lerp alpha value for - blending linearly between gradient start and end color, - according to the formula (startCol*(1.0-alpha) + endCol*alpha) - - @param rUV - Current uv coordinate. Values outside [0,1] will be - clamped. - - @param rGradInfo - Gradient info, for transformation and number of steps - */ - inline double getRectangularGradientAlpha(const B2DPoint& rUV, - const ODFGradientInfo& rGradInfo ) - { - return getSquareGradientAlpha(rUV, rGradInfo); // only matrix setup differs - } - } -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/keystoplerp.hxx b/basegfx/inc/basegfx/tools/keystoplerp.hxx deleted file mode 100644 index c6694c02b5..0000000000 --- a/basegfx/inc/basegfx/tools/keystoplerp.hxx +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TOOLS_KEYSTOPLERP_HXX -#define _BGFX_TOOLS_KEYSTOPLERP_HXX - -#include <basegfx/numeric/ftools.hxx> -#include <vector> -#include <basegfx/basegfxdllapi.h> - -namespace com{ namespace sun{ namespace star{ namespace uno { - template<typename T> class Sequence; -}}}} - -namespace basegfx -{ - namespace tools - { - /** Lerp in a vector of key stops - - This class holds a key stop vector and provides the - functionality to lerp inside it. Useful e.g. for - multi-stop gradients, or the SMIL key time activity. - - For those, given a global [0,1] lerp alpha, one need to - find the suitable bucket index from key stop vector, and - then calculate the relative alpha between the two buckets - found. - */ - class BASEGFX_DLLPUBLIC KeyStopLerp - { - public: - typedef std::pair<std::ptrdiff_t,double> ResultType; - - /** Create lerper with given vector of stops - - @param rKeyStops - - Vector of stops, must contain at least two elements - (though preferrably more, otherwise you probably don't - need key stop lerping in the first place). All - elements must be of monotonically increasing value. - */ - explicit KeyStopLerp( const std::vector<double>& rKeyStops ); - - /** Create lerper with given sequence of stops - - @param rKeyStops - - Sequence of stops, must contain at least two elements - (though preferrably more, otherwise you probably don't - need key stop lerping in the first place). All - elements must be of monotonically increasing value. - */ - explicit KeyStopLerp( const ::com::sun::star::uno::Sequence<double>& rKeyStops ); - - /** Find two nearest bucket index & interpolate - - @param fAlpha - Find bucket index i, with keyStops[i] < fAlpha <= - keyStops[i+1]. Return new alpha value in [0,1), - proportional to fAlpha's position between keyStops[i] - and keyStops[i+1] - */ - ResultType lerp(double fAlpha) const; - - private: - std::vector<double> maKeyStops; - mutable std::ptrdiff_t mnLastIndex; - }; - } -} - -#endif - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/lerp.hxx b/basegfx/inc/basegfx/tools/lerp.hxx deleted file mode 100644 index c0f61bc910..0000000000 --- a/basegfx/inc/basegfx/tools/lerp.hxx +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2008 by Sun Microsystems, Inc. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TOOLS_LERP_HXX -#define _BGFX_TOOLS_LERP_HXX - -#include <sal/types.h> - -namespace basegfx -{ - namespace tools - { - /** Generic linear interpolator - - @tpl ValueType - Must have operator+ and operator* defined, and should - have value semantics. - - @param t - As usual, t must be in the [0,1] range - */ - template< typename ValueType > ValueType lerp( const ValueType& rFrom, - const ValueType& rTo, - double t ) - { - // This is only to suppress a double->int warning. All other - // types should be okay here. - return static_cast<ValueType>( (1.0-t)*rFrom + t*rTo ); - } - } -} - -#endif /* _BGFX_TOOLS_LERP_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/rectcliptools.hxx b/basegfx/inc/basegfx/tools/rectcliptools.hxx deleted file mode 100644 index 18bd6c57ec..0000000000 --- a/basegfx/inc/basegfx/tools/rectcliptools.hxx +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TOOLS_RECTCLIPTOOLS_HXX -#define _BGFX_TOOLS_RECTCLIPTOOLS_HXX - -#include <sal/types.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - namespace tools - { - namespace RectClipFlags - { - static const sal_uInt32 LEFT = (sal_Int32)0x01; - static const sal_uInt32 RIGHT = (sal_Int32)0x02; - static const sal_uInt32 TOP = (sal_Int32)0x04; - static const sal_uInt32 BOTTOM = (sal_Int32)0x08; - } - - /** Calc clip mask for Cohen-Sutherland rectangle clip - - This function returns a clip mask used for the - Cohen-Sutherland rectangle clip method, where one or more - of the lower four bits are set, if the given point is - outside one or more of the four half planes defining the - rectangle (see RectClipFlags for possible values) - */ - template< class Point, class Rect > inline - sal_uInt32 getCohenSutherlandClipFlags( const Point& rP, - const Rect& rR ) - { - // maxY | minY | maxX | minX - sal_uInt32 clip = (rP.getX() < rR.getMinX()) << 0; - clip |= (rP.getX() > rR.getMaxX()) << 1; - clip |= (rP.getY() < rR.getMinY()) << 2; - clip |= (rP.getY() > rR.getMaxY()) << 3; - return clip; - } - - /** Determine number of clip planes hit by given clip mask - - This method returns the number of one bits in the four - least significant bits of the argument, which amounts to - the number of clip planes hit within the - getCohenSutherlandClipFlags() method. - */ - inline sal_uInt32 getNumberOfClipPlanes( sal_uInt32 nFlags ) - { - // classic bit count algo, see e.g. Reingold, Nievergelt, - // Deo: Combinatorial Algorithms, Theory and Practice, - // Prentice-Hall 1977 - nFlags = (nFlags & 0x05) + ((nFlags >> 1) & 0x05); - nFlags = (nFlags & 0x03) + (nFlags >> 2); // no need for & - // 0x03, can't - // overflow - return nFlags; - } - } -} - -#endif // _BGFX_TOOLS_RECTCLIPTOOLS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/tools.hxx b/basegfx/inc/basegfx/tools/tools.hxx deleted file mode 100644 index 67dd7ee691..0000000000 --- a/basegfx/inc/basegfx/tools/tools.hxx +++ /dev/null @@ -1,135 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TOOLS_TOOLS_HXX -#define _BGFX_TOOLS_TOOLS_HXX - -#include <sal/types.h> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - class B2DPoint; - class B2DRange; - - namespace tools - { - /** Liang-Barsky 2D line clipping algorithm - - This function clips a line given by two points against the - given rectangle. The resulting line is returned in the - given points. - - @param io_rStart - Start point of the line. On return, contains the clipped - start point. - - @param io_rEnd - End point of the line. On return, contains the clipped - end point. - - @param rClipRect - The rectangle to clip against - - @return true, when at least part of the line is visible - after the clip, false otherwise - */ - BASEGFX_DLLPUBLIC bool liangBarskyClip2D( ::basegfx::B2DPoint& io_rStart, - ::basegfx::B2DPoint& io_rEnd, - const ::basegfx::B2DRange& rClipRect ); - - /** Expand given parallelogram, such that it extends beyond - bound rect in a given direction. - - This method is useful when e.g. generating one-dimensional - gradients, such as linear or axial gradients: those - gradients vary only in one direction, the other has - constant color. Most of the time, those gradients extends - infinitely in the direction with the constant color, but - practically, one always has a limiting bound rect into - which the gradient is painted. The method at hand now - extends a given parallelogram (e.g. the transformed - bounding box of a gradient) virtually into infinity to the - top and to the bottom (i.e. normal to the line io_rLeftTop - io_rRightTop), such that the given rectangle is guaranteed - to be covered in that direction. - - @attention There might be some peculiarities with this - method, that might limit its usage to the described - gradients. One of them is the fact that when determining - how far the parallelogram has to be extended to the top or - the bottom, the upper and lower border are assumed to be - infinite lines. - - @param io_rLeftTop - Left, top edge of the parallelogramm. Note that this need - not be the left, top edge geometrically, it's just used - when determining the extension direction. Thus, it's - perfectly legal to affine-transform a rectangle, and given - the transformed point here. On method return, this - parameter will contain the adapted output. - - @param io_rLeftBottom - Left, bottom edge of the parallelogramm. Note that this need - not be the left, bottom edge geometrically, it's just used - when determining the extension direction. Thus, it's - perfectly legal to affine-transform a rectangle, and given - the transformed point here. On method return, this - parameter will contain the adapted output. - - @param io_rRightTop - Right, top edge of the parallelogramm. Note that this need - not be the right, top edge geometrically, it's just used - when determining the extension direction. Thus, it's - perfectly legal to affine-transform a rectangle, and given - the transformed point here. On method return, this - parameter will contain the adapted output. - - @param io_rRightBottom - Right, bottom edge of the parallelogramm. Note that this need - not be the right, bottom edge geometrically, it's just used - when determining the extension direction. Thus, it's - perfectly legal to affine-transform a rectangle, and given - the transformed point here. On method return, this - parameter will contain the adapted output. - - @param rFitTarget - The rectangle to fit the parallelogram into. - */ - BASEGFX_DLLPUBLIC void infiniteLineFromParallelogram( ::basegfx::B2DPoint& io_rLeftTop, - ::basegfx::B2DPoint& io_rLeftBottom, - ::basegfx::B2DPoint& io_rRightTop, - ::basegfx::B2DPoint& io_rRightBottom, - const ::basegfx::B2DRange& rFitTarget ); - - } -} - -#endif /* _BGFX_TOOLS_TOOLS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/unopolypolygon.hxx b/basegfx/inc/basegfx/tools/unopolypolygon.hxx deleted file mode 100644 index ec0f3e6062..0000000000 --- a/basegfx/inc/basegfx/tools/unopolypolygon.hxx +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef INCLUDED_BASEGFX_UNOPOLYPOLYGON_HXX -#define INCLUDED_BASEGFX_UNOPOLYPOLYGON_HXX - -#include <cppuhelper/basemutex.hxx> -#include <cppuhelper/compbase3.hxx> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/rendering/FillRule.hpp> -#include <com/sun/star/rendering/XLinePolyPolygon2D.hpp> -#include <com/sun/star/rendering/XBezierPolyPolygon2D.hpp> -#include <basegfx/polygon/b2dpolypolygon.hxx> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ -namespace unotools -{ - typedef ::cppu::WeakComponentImplHelper3< - ::com::sun::star::rendering::XLinePolyPolygon2D, - ::com::sun::star::rendering::XBezierPolyPolygon2D, - ::com::sun::star::lang::XServiceInfo > UnoPolyPolygonBase; - - class BASEGFX_DLLPUBLIC UnoPolyPolygon : private cppu::BaseMutex, - public UnoPolyPolygonBase - { - public: - explicit UnoPolyPolygon( const B2DPolyPolygon& ); - - // XPolyPolygon2D - virtual void SAL_CALL addPolyPolygon( const ::com::sun::star::geometry::RealPoint2D& position, const ::com::sun::star::uno::Reference< ::com::sun::star::rendering::XPolyPolygon2D >& polyPolygon ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); - virtual ::sal_Int32 SAL_CALL getNumberOfPolygons( ) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Int32 SAL_CALL getNumberOfPolygonPoints( ::sal_Int32 polygon ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::rendering::FillRule SAL_CALL getFillRule( ) throw (::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setFillRule( ::com::sun::star::rendering::FillRule fillRule ) throw (::com::sun::star::uno::RuntimeException); - virtual ::sal_Bool SAL_CALL isClosed( ::sal_Int32 index ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setClosed( ::sal_Int32 index, ::sal_Bool closedState ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - - // XLinePolyPolygon2D - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealPoint2D > > SAL_CALL getPoints( ::sal_Int32 nPolygonIndex, ::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, ::sal_Int32 nNumberOfPoints ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setPoints( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealPoint2D > >& points, ::sal_Int32 nPolygonIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::geometry::RealPoint2D SAL_CALL getPoint( ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setPoint( const ::com::sun::star::geometry::RealPoint2D& point, ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - - // XBezierPolyPolygon2D - virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealBezierSegment2D > > SAL_CALL getBezierSegments( ::sal_Int32 nPolygonIndex, ::sal_Int32 nNumberOfPolygons, ::sal_Int32 nPointIndex, ::sal_Int32 nNumberOfPoints ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setBezierSegments( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Sequence< ::com::sun::star::geometry::RealBezierSegment2D > >& points, ::sal_Int32 nPolygonIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - virtual ::com::sun::star::geometry::RealBezierSegment2D SAL_CALL getBezierSegment( ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - virtual void SAL_CALL setBezierSegment( const ::com::sun::star::geometry::RealBezierSegment2D& point, ::sal_Int32 nPolygonIndex, ::sal_Int32 nPointIndex ) throw (::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::uno::RuntimeException); - - // XServiceInfo - virtual ::rtl::OUString SAL_CALL getImplementationName() throw( ::com::sun::star::uno::RuntimeException ); - virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw( ::com::sun::star::uno::RuntimeException ); - virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw( ::com::sun::star::uno::RuntimeException ); - - B2DPolyPolygon getPolyPolygon() const; - - protected: - /// Check whether index is a valid polygon index - void checkIndex( sal_Int32 nIndex ) const // throw (::com::sun::star::lang::IndexOutOfBoundsException); - { - if( nIndex < 0 || nIndex >= static_cast<sal_Int32>(maPolyPoly.count()) ) - throw ::com::sun::star::lang::IndexOutOfBoundsException(); - } - - B2DPolyPolygon getSubsetPolyPolygon( sal_Int32 nPolygonIndex, - sal_Int32 nNumberOfPolygons, - sal_Int32 nPointIndex, - sal_Int32 nNumberOfPoints ) const; - - /// Get cow copy of internal polygon. not thread-safe outside this object. - B2DPolyPolygon getPolyPolygonUnsafe() const; - - /// Called whenever internal polypolygon gets modified - virtual void modifying() const {} - - private: - UnoPolyPolygon( const UnoPolyPolygon& ); - UnoPolyPolygon& operator=( const UnoPolyPolygon& ); - - B2DPolyPolygon maPolyPoly; - ::com::sun::star::rendering::FillRule meFillRule; - }; -} -} - -#endif /* INCLUDED_BASEGFX_UNOPOLYPOLYGON_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tools/unotools.hxx b/basegfx/inc/basegfx/tools/unotools.hxx deleted file mode 100644 index 52e2069075..0000000000 --- a/basegfx/inc/basegfx/tools/unotools.hxx +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Version: MPL 1.1 / GPLv3+ / LGPLv3+ - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License or as specified alternatively below. You may obtain a copy of - * the License at http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Initial Developer of the Original Code is - * Thorsten Behrens <tbehrens@novell.com> - * Portions created by the Initial Developer are Copyright (C) 2011 the - * Initial Developer. All Rights Reserved. - * - * For minor contributions see the git repository. - * - * Alternatively, the contents of this file may be used under the terms of - * either the GNU General Public License Version 3 or later (the "GPLv3+"), or - * the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"), - * in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable - * instead of those above. - */ - -#ifndef INCLUDED_BASEGFX_UNOTOOLS_HXX -#define INCLUDED_BASEGFX_UNOTOOLS_HXX - -#include <cppuhelper/basemutex.hxx> -#include <cppuhelper/compbase3.hxx> -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/rendering/FillRule.hpp> -#include <com/sun/star/rendering/XLinePolyPolygon2D.hpp> -#include <com/sun/star/rendering/XBezierPolyPolygon2D.hpp> -#include <basegfx/polygon/b2dpolypolygon.hxx> - - -namespace basegfx -{ -class B2DPolyPolygon; - -namespace unotools -{ - - BASEGFX_DLLPUBLIC B2DPolyPolygon polyPolygonBezierToB2DPolyPolygon(const ::com::sun::star::drawing::PolyPolygonBezierCoords& rSourcePolyPolygon) - throw( ::com::sun::star::lang::IllegalArgumentException ); - - BASEGFX_DLLPUBLIC void b2DPolyPolygonToPolyPolygonBezier( const B2DPolyPolygon& rPolyPoly, - ::com::sun::star::drawing::PolyPolygonBezierCoords& rRetval ); -} -} - -#endif /* INCLUDED_BASEGFX_UNOTOOLS_HXX */ diff --git a/basegfx/inc/basegfx/tuple/b2dtuple.hxx b/basegfx/inc/basegfx/tuple/b2dtuple.hxx deleted file mode 100644 index f98f98aaf0..0000000000 --- a/basegfx/inc/basegfx/tuple/b2dtuple.hxx +++ /dev/null @@ -1,363 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TUPLE_B2DTUPLE_HXX -#define _BGFX_TUPLE_B2DTUPLE_HXX - -#include <sal/types.h> -#include <basegfx/numeric/ftools.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclarations - class B2ITuple; - - /** Base class for all Points/Vectors with two double values - - This class provides all methods common to Point - avd Vector classes which are derived from here. - - @derive Use this class to implement Points or Vectors - which are based on two double values - */ - class B2DTuple - { - protected: - double mfX; - double mfY; - - public: - /** Create a 2D Tuple - - The tuple is initialized to (0.0, 0.0) - */ - B2DTuple() - : mfX(0.0), - mfY(0.0) - {} - - /** Create a 2D Tuple - - @param fX - This parameter is used to initialize the X-coordinate - of the 2D Tuple. - - @param fY - This parameter is used to initialize the Y-coordinate - of the 2D Tuple. - */ - B2DTuple(double fX, double fY) - : mfX( fX ), - mfY( fY ) - {} - - /** Create a copy of a 2D Tuple - - @param rTup - The 2D Tuple which will be copied. - */ - B2DTuple(const B2DTuple& rTup) - : mfX( rTup.mfX ), - mfY( rTup.mfY ) - {} - - /** Create a copy of a 2D integer Tuple - - @param rTup - The 2D Tuple which will be copied. - */ - BASEGFX_DLLPUBLIC explicit B2DTuple(const B2ITuple& rTup); - - ~B2DTuple() - {} - - /// Get X-Coordinate of 2D Tuple - double getX() const - { - return mfX; - } - - /// Get Y-Coordinate of 2D Tuple - double getY() const - { - return mfY; - } - - /// Set X-Coordinate of 2D Tuple - void setX(double fX) - { - mfX = fX; - } - - /// Set Y-Coordinate of 2D Tuple - void setY(double fY) - { - mfY = fY; - } - - /// Array-access to 2D Tuple - const double& operator[] (int nPos) const - { - // Here, normally one if(...) should be used. In the assumption that - // both double members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mfX; return mfY; - return *((&mfX) + nPos); - } - - /// Array-access to 2D Tuple - double& operator[] (int nPos) - { - // Here, normally one if(...) should be used. In the assumption that - // both double members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mfX; return mfY; - return *((&mfX) + nPos); - } - - // comparators with tolerance - ////////////////////////////////////////////////////////////////////// - - bool equalZero() const - { - return (this == &getEmptyTuple() || - (fTools::equalZero(mfX) && fTools::equalZero(mfY))); - } - - bool equalZero(const double& rfSmallValue) const - { - return (this == &getEmptyTuple() || - (fTools::equalZero(mfX, rfSmallValue) && fTools::equalZero(mfY, rfSmallValue))); - } - - bool equal(const B2DTuple& rTup) const - { - return ( - this == &rTup || - (fTools::equal(mfX, rTup.mfX) && - fTools::equal(mfY, rTup.mfY))); - } - - bool equal(const B2DTuple& rTup, const double& rfSmallValue) const - { - return ( - this == &rTup || - (fTools::equal(mfX, rTup.mfX, rfSmallValue) && - fTools::equal(mfY, rTup.mfY, rfSmallValue))); - } - - // operators - ////////////////////////////////////////////////////////////////////// - - B2DTuple& operator+=( const B2DTuple& rTup ) - { - mfX += rTup.mfX; - mfY += rTup.mfY; - return *this; - } - - B2DTuple& operator-=( const B2DTuple& rTup ) - { - mfX -= rTup.mfX; - mfY -= rTup.mfY; - return *this; - } - - B2DTuple& operator/=( const B2DTuple& rTup ) - { - mfX /= rTup.mfX; - mfY /= rTup.mfY; - return *this; - } - - B2DTuple& operator*=( const B2DTuple& rTup ) - { - mfX *= rTup.mfX; - mfY *= rTup.mfY; - return *this; - } - - B2DTuple& operator*=(double t) - { - mfX *= t; - mfY *= t; - return *this; - } - - B2DTuple& operator/=(double t) - { - const double fVal(1.0 / t); - mfX *= fVal; - mfY *= fVal; - return *this; - } - - B2DTuple operator-(void) const - { - return B2DTuple(-mfX, -mfY); - } - - bool operator==( const B2DTuple& rTup ) const - { - return equal(rTup); - } - - bool operator!=( const B2DTuple& rTup ) const - { - return !equal(rTup); - } - - B2DTuple& operator=( const B2DTuple& rTup ) - { - mfX = rTup.mfX; - mfY = rTup.mfY; - return *this; - } - - BASEGFX_DLLPUBLIC void correctValues(const double fCompareValue = 0.0); - - BASEGFX_DLLPUBLIC static const B2DTuple& getEmptyTuple(); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - inline B2DTuple minimum(const B2DTuple& rTupA, const B2DTuple& rTupB) - { - B2DTuple aMin( - (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY()); - return aMin; - } - - inline B2DTuple maximum(const B2DTuple& rTupA, const B2DTuple& rTupB) - { - B2DTuple aMax( - (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY()); - return aMax; - } - - inline B2DTuple absolute(const B2DTuple& rTup) - { - B2DTuple aAbs( - (0.0 > rTup.getX()) ? -rTup.getX() : rTup.getX(), - (0.0 > rTup.getY()) ? -rTup.getY() : rTup.getY()); - return aAbs; - } - - inline B2DTuple interpolate(const B2DTuple& rOld1, const B2DTuple& rOld2, double t) - { - B2DTuple aInt( - ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(), - ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY()); - return aInt; - } - - inline B2DTuple average(const B2DTuple& rOld1, const B2DTuple& rOld2) - { - B2DTuple aAvg( - (rOld1.getX() + rOld2.getX()) * 0.5, - (rOld1.getY() + rOld2.getY()) * 0.5); - return aAvg; - } - - inline B2DTuple average(const B2DTuple& rOld1, const B2DTuple& rOld2, const B2DTuple& rOld3) - { - B2DTuple aAvg( - (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0), - (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0)); - return aAvg; - } - - inline B2DTuple operator+(const B2DTuple& rTupA, const B2DTuple& rTupB) - { - B2DTuple aSum(rTupA); - aSum += rTupB; - return aSum; - } - - inline B2DTuple operator-(const B2DTuple& rTupA, const B2DTuple& rTupB) - { - B2DTuple aSub(rTupA); - aSub -= rTupB; - return aSub; - } - - inline B2DTuple operator/(const B2DTuple& rTupA, const B2DTuple& rTupB) - { - B2DTuple aDiv(rTupA); - aDiv /= rTupB; - return aDiv; - } - - inline B2DTuple operator*(const B2DTuple& rTupA, const B2DTuple& rTupB) - { - B2DTuple aMul(rTupA); - aMul *= rTupB; - return aMul; - } - - inline B2DTuple operator*(const B2DTuple& rTup, double t) - { - B2DTuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B2DTuple operator*(double t, const B2DTuple& rTup) - { - B2DTuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B2DTuple operator/(const B2DTuple& rTup, double t) - { - B2DTuple aNew(rTup); - aNew /= t; - return aNew; - } - - inline B2DTuple operator/(double t, const B2DTuple& rTup) - { - B2DTuple aNew(t, t); - B2DTuple aTmp(rTup); - aNew /= aTmp; - return aNew; - } - - /** Round double to nearest integer for 2D tuple - - @return the nearest integer for this tuple - */ - BASEGFX_DLLPUBLIC B2ITuple fround(const B2DTuple& rTup); -} // end of namespace basegfx - -#endif /* _BGFX_TUPLE_B2DTUPLE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tuple/b2i64tuple.hxx b/basegfx/inc/basegfx/tuple/b2i64tuple.hxx deleted file mode 100644 index 9a57c09b92..0000000000 --- a/basegfx/inc/basegfx/tuple/b2i64tuple.hxx +++ /dev/null @@ -1,316 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TUPLE_B2I64TUPLE_HXX -#define _BGFX_TUPLE_B2I64TUPLE_HXX - -#include <sal/types.h> -#include <basegfx/tuple/b2dtuple.hxx> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - /** Base class for all Points/Vectors with two sal_Int64 values - - This class provides all methods common to Point - avd Vector classes which are derived from here. - - @derive Use this class to implement Points or Vectors - which are based on two sal_Int64 values - */ - class BASEGFX_DLLPUBLIC B2I64Tuple - { - protected: - sal_Int64 mnX; - sal_Int64 mnY; - - public: - /** Create a 2D Tuple - - The tuple is initialized to (0, 0) - */ - B2I64Tuple() - : mnX(0), - mnY(0) - {} - - /** Create a 2D Tuple - - @param fX - This parameter is used to initialize the X-coordinate - of the 2D Tuple. - - @param fY - This parameter is used to initialize the Y-coordinate - of the 2D Tuple. - */ - B2I64Tuple(sal_Int64 fX, sal_Int64 fY) - : mnX( fX ), - mnY( fY ) - {} - - /** Create a copy of a 2D Tuple - - @param rTup - The 2D Tuple which will be copied. - */ - B2I64Tuple(const B2I64Tuple& rTup) - : mnX( rTup.mnX ), - mnY( rTup.mnY ) - {} - - ~B2I64Tuple() - {} - - /// Get X-Coordinate of 2D Tuple - sal_Int64 getX() const - { - return mnX; - } - - /// Get Y-Coordinate of 2D Tuple - sal_Int64 getY() const - { - return mnY; - } - - /// Set X-Coordinate of 2D Tuple - void setX(sal_Int64 fX) - { - mnX = fX; - } - - /// Set Y-Coordinate of 2D Tuple - void setY(sal_Int64 fY) - { - mnY = fY; - } - - /// Array-access to 2D Tuple - const sal_Int64& operator[] (int nPos) const - { - // Here, normally one if(...) should be used. In the assumption that - // both sal_Int64 members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mnX; return mnY; - return *((&mnX) + nPos); - } - - /// Array-access to 2D Tuple - sal_Int64& operator[] (int nPos) - { - // Here, normally one if(...) should be used. In the assumption that - // both sal_Int64 members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mnX; return mnY; - return *((&mnX) + nPos); - } - - // operators - ////////////////////////////////////////////////////////////////////// - - B2I64Tuple& operator+=( const B2I64Tuple& rTup ) - { - mnX += rTup.mnX; - mnY += rTup.mnY; - return *this; - } - - B2I64Tuple& operator-=( const B2I64Tuple& rTup ) - { - mnX -= rTup.mnX; - mnY -= rTup.mnY; - return *this; - } - - B2I64Tuple& operator/=( const B2I64Tuple& rTup ) - { - mnX /= rTup.mnX; - mnY /= rTup.mnY; - return *this; - } - - B2I64Tuple& operator*=( const B2I64Tuple& rTup ) - { - mnX *= rTup.mnX; - mnY *= rTup.mnY; - return *this; - } - - B2I64Tuple& operator*=(sal_Int64 t) - { - mnX *= t; - mnY *= t; - return *this; - } - - B2I64Tuple& operator/=(sal_Int64 t) - { - mnX /= t; - mnY /= t; - return *this; - } - - B2I64Tuple operator-(void) const - { - return B2I64Tuple(-mnX, -mnY); - } - - bool equalZero() const { return mnX == 0 && mnY == 0; } - - bool operator==( const B2I64Tuple& rTup ) const - { - return this == &rTup || (rTup.mnX == mnX && rTup.mnY == mnY); - } - - bool operator!=( const B2I64Tuple& rTup ) const - { - return !(*this == rTup); - } - - B2I64Tuple& operator=( const B2I64Tuple& rTup ) - { - mnX = rTup.mnX; - mnY = rTup.mnY; - return *this; - } - - static const B2I64Tuple& getEmptyTuple(); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - inline B2I64Tuple minimum(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB) - { - B2I64Tuple aMin( - (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY()); - return aMin; - } - - inline B2I64Tuple maximum(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB) - { - B2I64Tuple aMax( - (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY()); - return aMax; - } - - inline B2I64Tuple absolute(const B2I64Tuple& rTup) - { - B2I64Tuple aAbs( - (0 > rTup.getX()) ? -rTup.getX() : rTup.getX(), - (0 > rTup.getY()) ? -rTup.getY() : rTup.getY()); - return aAbs; - } - - inline B2DTuple interpolate(const B2I64Tuple& rOld1, const B2I64Tuple& rOld2, double t) - { - B2DTuple aInt( - ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(), - ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY()); - return aInt; - } - - inline B2DTuple average(const B2I64Tuple& rOld1, const B2I64Tuple& rOld2) - { - B2DTuple aAvg( - (rOld1.getX() + rOld2.getX()) * 0.5, - (rOld1.getY() + rOld2.getY()) * 0.5); - return aAvg; - } - - inline B2DTuple average(const B2I64Tuple& rOld1, const B2I64Tuple& rOld2, const B2I64Tuple& rOld3) - { - B2DTuple aAvg( - (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0), - (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0)); - return aAvg; - } - - inline B2I64Tuple operator+(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB) - { - B2I64Tuple aSum(rTupA); - aSum += rTupB; - return aSum; - } - - inline B2I64Tuple operator-(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB) - { - B2I64Tuple aSub(rTupA); - aSub -= rTupB; - return aSub; - } - - inline B2I64Tuple operator/(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB) - { - B2I64Tuple aDiv(rTupA); - aDiv /= rTupB; - return aDiv; - } - - inline B2I64Tuple operator*(const B2I64Tuple& rTupA, const B2I64Tuple& rTupB) - { - B2I64Tuple aMul(rTupA); - aMul *= rTupB; - return aMul; - } - - inline B2I64Tuple operator*(const B2I64Tuple& rTup, sal_Int64 t) - { - B2I64Tuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B2I64Tuple operator*(sal_Int64 t, const B2I64Tuple& rTup) - { - B2I64Tuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B2I64Tuple operator/(const B2I64Tuple& rTup, sal_Int64 t) - { - B2I64Tuple aNew(rTup); - aNew /= t; - return aNew; - } - - inline B2I64Tuple operator/(sal_Int64 t, const B2I64Tuple& rTup) - { - B2I64Tuple aNew(t, t); - B2I64Tuple aTmp(rTup); - aNew /= aTmp; - return aNew; - } -} // end of namespace basegfx - -#endif /* _BGFX_TUPLE_B2I64TUPLE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tuple/b2ituple.hxx b/basegfx/inc/basegfx/tuple/b2ituple.hxx deleted file mode 100644 index aac4317881..0000000000 --- a/basegfx/inc/basegfx/tuple/b2ituple.hxx +++ /dev/null @@ -1,226 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TUPLE_B2ITUPLE_HXX -#define _BGFX_TUPLE_B2ITUPLE_HXX - -#include <sal/types.h> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - /** Base class for all Points/Vectors with two sal_Int32 values - - This class provides all methods common to Point - avd Vector classes which are derived from here. - - @derive Use this class to implement Points or Vectors - which are based on two sal_Int32 values - */ - class BASEGFX_DLLPUBLIC B2ITuple - { - protected: - sal_Int32 mnX; - sal_Int32 mnY; - - public: - /** Create a 2D Tuple - - The tuple is initialized to (0, 0) - */ - B2ITuple() - : mnX(0), - mnY(0) - {} - - /** Create a 2D Tuple - - @param fX - This parameter is used to initialize the X-coordinate - of the 2D Tuple. - - @param fY - This parameter is used to initialize the Y-coordinate - of the 2D Tuple. - */ - B2ITuple(sal_Int32 fX, sal_Int32 fY) - : mnX( fX ), - mnY( fY ) - {} - - /** Create a copy of a 2D Tuple - - @param rTup - The 2D Tuple which will be copied. - */ - B2ITuple(const B2ITuple& rTup) - : mnX( rTup.mnX ), - mnY( rTup.mnY ) - {} - - ~B2ITuple() - {} - - /// Get X-Coordinate of 2D Tuple - sal_Int32 getX() const - { - return mnX; - } - - /// Get Y-Coordinate of 2D Tuple - sal_Int32 getY() const - { - return mnY; - } - - /// Set X-Coordinate of 2D Tuple - void setX(sal_Int32 fX) - { - mnX = fX; - } - - /// Set Y-Coordinate of 2D Tuple - void setY(sal_Int32 fY) - { - mnY = fY; - } - - /// Array-access to 2D Tuple - const sal_Int32& operator[] (int nPos) const - { - // Here, normally one if(...) should be used. In the assumption that - // both sal_Int32 members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mnX; return mnY; - return *((&mnX) + nPos); - } - - /// Array-access to 2D Tuple - sal_Int32& operator[] (int nPos) - { - // Here, normally one if(...) should be used. In the assumption that - // both sal_Int32 members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mnX; return mnY; - return *((&mnX) + nPos); - } - - // operators - ////////////////////////////////////////////////////////////////////// - - B2ITuple& operator+=( const B2ITuple& rTup ) - { - mnX += rTup.mnX; - mnY += rTup.mnY; - return *this; - } - - B2ITuple& operator-=( const B2ITuple& rTup ) - { - mnX -= rTup.mnX; - mnY -= rTup.mnY; - return *this; - } - - B2ITuple& operator/=( const B2ITuple& rTup ) - { - mnX /= rTup.mnX; - mnY /= rTup.mnY; - return *this; - } - - B2ITuple& operator*=( const B2ITuple& rTup ) - { - mnX *= rTup.mnX; - mnY *= rTup.mnY; - return *this; - } - - B2ITuple& operator*=(sal_Int32 t) - { - mnX *= t; - mnY *= t; - return *this; - } - - B2ITuple& operator/=(sal_Int32 t) - { - mnX /= t; - mnY /= t; - return *this; - } - - B2ITuple operator-(void) const - { - return B2ITuple(-mnX, -mnY); - } - - bool equalZero() const { return mnX == 0 && mnY == 0; } - - bool operator==( const B2ITuple& rTup ) const - { - return this == &rTup || (rTup.mnX == mnX && rTup.mnY == mnY); - } - - bool operator!=( const B2ITuple& rTup ) const - { - return !(*this == rTup); - } - - B2ITuple& operator=( const B2ITuple& rTup ) - { - mnX = rTup.mnX; - mnY = rTup.mnY; - return *this; - } - - static const B2ITuple& getEmptyTuple(); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - class B2DTuple; - - BASEGFX_DLLPUBLIC B2ITuple minimum(const B2ITuple& rTupA, const B2ITuple& rTupB); - BASEGFX_DLLPUBLIC B2ITuple maximum(const B2ITuple& rTupA, const B2ITuple& rTupB); - BASEGFX_DLLPUBLIC B2ITuple absolute(const B2ITuple& rTup); - BASEGFX_DLLPUBLIC B2DTuple interpolate(const B2ITuple& rOld1, const B2ITuple& rOld2, double t); - BASEGFX_DLLPUBLIC B2DTuple average(const B2ITuple& rOld1, const B2ITuple& rOld2); - BASEGFX_DLLPUBLIC B2DTuple average(const B2ITuple& rOld1, const B2ITuple& rOld2, const B2ITuple& rOld3); - - BASEGFX_DLLPUBLIC B2ITuple operator+(const B2ITuple& rTupA, const B2ITuple& rTupB); - BASEGFX_DLLPUBLIC B2ITuple operator-(const B2ITuple& rTupA, const B2ITuple& rTupB); - BASEGFX_DLLPUBLIC B2ITuple operator/(const B2ITuple& rTupA, const B2ITuple& rTupB); - BASEGFX_DLLPUBLIC B2ITuple operator*(const B2ITuple& rTupA, const B2ITuple& rTupB); - BASEGFX_DLLPUBLIC B2ITuple operator*(const B2ITuple& rTup, sal_Int32 t); - BASEGFX_DLLPUBLIC B2ITuple operator*(sal_Int32 t, const B2ITuple& rTup); - BASEGFX_DLLPUBLIC B2ITuple operator/(const B2ITuple& rTup, sal_Int32 t); - BASEGFX_DLLPUBLIC B2ITuple operator/(sal_Int32 t, const B2ITuple& rTup); -} // end of namespace basegfx - -#endif /* _BGFX_TUPLE_B2ITUPLE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tuple/b3dtuple.hxx b/basegfx/inc/basegfx/tuple/b3dtuple.hxx deleted file mode 100644 index fc47def74b..0000000000 --- a/basegfx/inc/basegfx/tuple/b3dtuple.hxx +++ /dev/null @@ -1,437 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TUPLE_B3DTUPLE_HXX -#define _BGFX_TUPLE_B3DTUPLE_HXX - -#include <sal/types.h> -#include <basegfx/numeric/ftools.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclarations - class B3ITuple; - - /** Base class for all Points/Vectors with three double values - - This class provides all methods common to Point - avd Vector classes which are derived from here. - - @derive Use this class to implement Points or Vectors - which are based on three double values - */ - class BASEGFX_DLLPUBLIC B3DTuple - { - protected: - double mfX; - double mfY; - double mfZ; - - public: - /** Create a 3D Tuple - - The tuple is initialized to (0.0, 0.0, 0.0) - */ - B3DTuple() - : mfX(0.0), - mfY(0.0), - mfZ(0.0) - {} - - /** Create a 3D Tuple - - @param fX - This parameter is used to initialize the X-coordinate - of the 3D Tuple. - - @param fY - This parameter is used to initialize the Y-coordinate - of the 3D Tuple. - - @param fZ - This parameter is used to initialize the Z-coordinate - of the 3D Tuple. - */ - B3DTuple(double fX, double fY, double fZ) - : mfX(fX), - mfY(fY), - mfZ(fZ) - {} - - /** Create a copy of a 3D Tuple - - @param rTup - The 3D Tuple which will be copied. - */ - B3DTuple(const B3DTuple& rTup) - : mfX( rTup.mfX ), - mfY( rTup.mfY ), - mfZ( rTup.mfZ ) - {} - - /** Create a copy of a 3D integer Tuple - - @param rTup - The 3D Tuple which will be copied. - */ - explicit B3DTuple(const B3ITuple& rTup); - - ~B3DTuple() - {} - - /// get X-Coordinate of 3D Tuple - double getX() const - { - return mfX; - } - - /// get Y-Coordinate of 3D Tuple - double getY() const - { - return mfY; - } - - /// get Z-Coordinate of 3D Tuple - double getZ() const - { - return mfZ; - } - - /// set X-Coordinate of 3D Tuple - void setX(double fX) - { - mfX = fX; - } - - /// set Y-Coordinate of 3D Tuple - void setY(double fY) - { - mfY = fY; - } - - /// set Z-Coordinate of 3D Tuple - void setZ(double fZ) - { - mfZ = fZ; - } - - /// Array-access to 3D Tuple - const double& operator[] (int nPos) const - { - // Here, normally two if(...)'s should be used. In the assumption that - // both double members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mfX; if(1 == nPos) return mfY; return mfZ; - return *((&mfX) + nPos); - } - - /// Array-access to 3D Tuple - double& operator[] (int nPos) - { - // Here, normally two if(...)'s should be used. In the assumption that - // both double members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mfX; if(1 == nPos) return mfY; return mfZ; - return *((&mfX) + nPos); - } - - // comparators with tolerance - ////////////////////////////////////////////////////////////////////// - - bool equalZero() const - { - return (this == &getEmptyTuple() || - (::basegfx::fTools::equalZero(mfX) - && ::basegfx::fTools::equalZero(mfY) - && ::basegfx::fTools::equalZero(mfZ))); - } - - bool equalZero(const double& rfSmallValue) const - { - return (this == &getEmptyTuple() || - (::basegfx::fTools::equalZero(mfX, rfSmallValue) - && ::basegfx::fTools::equalZero(mfY, rfSmallValue) - && ::basegfx::fTools::equalZero(mfZ, rfSmallValue))); - } - - bool equal(const B3DTuple& rTup) const - { - return ( - this == &rTup || - (::basegfx::fTools::equal(mfX, rTup.mfX) && - ::basegfx::fTools::equal(mfY, rTup.mfY) && - ::basegfx::fTools::equal(mfZ, rTup.mfZ))); - } - - bool equal(const B3DTuple& rTup, const double& rfSmallValue) const - { - return ( - this == &rTup || - (::basegfx::fTools::equal(mfX, rTup.mfX, rfSmallValue) && - ::basegfx::fTools::equal(mfY, rTup.mfY, rfSmallValue) && - ::basegfx::fTools::equal(mfZ, rTup.mfZ, rfSmallValue))); - } - - // operators - ////////////////////////////////////////////////////////////////////// - - B3DTuple& operator+=( const B3DTuple& rTup ) - { - mfX += rTup.mfX; - mfY += rTup.mfY; - mfZ += rTup.mfZ; - return *this; - } - - B3DTuple& operator-=( const B3DTuple& rTup ) - { - mfX -= rTup.mfX; - mfY -= rTup.mfY; - mfZ -= rTup.mfZ; - return *this; - } - - B3DTuple& operator/=( const B3DTuple& rTup ) - { - mfX /= rTup.mfX; - mfY /= rTup.mfY; - mfZ /= rTup.mfZ; - return *this; - } - - B3DTuple& operator*=( const B3DTuple& rTup ) - { - mfX *= rTup.mfX; - mfY *= rTup.mfY; - mfZ *= rTup.mfZ; - return *this; - } - - B3DTuple& operator*=(double t) - { - mfX *= t; - mfY *= t; - mfZ *= t; - return *this; - } - - B3DTuple& operator/=(double t) - { - const double fVal(1.0 / t); - mfX *= fVal; - mfY *= fVal; - mfZ *= fVal; - return *this; - } - - B3DTuple operator-(void) const - { - return B3DTuple(-mfX, -mfY, -mfZ); - } - - bool operator==( const B3DTuple& rTup ) const - { - return equal(rTup); - } - - bool operator!=( const B3DTuple& rTup ) const - { - return !equal(rTup); - } - - B3DTuple& operator=( const B3DTuple& rTup ) - { - mfX = rTup.mfX; - mfY = rTup.mfY; - mfZ = rTup.mfZ; - return *this; - } - - void correctValues(const double fCompareValue = 0.0) - { - if(0.0 == fCompareValue) - { - if(::basegfx::fTools::equalZero(mfX)) - { - mfX = 0.0; - } - - if(::basegfx::fTools::equalZero(mfY)) - { - mfY = 0.0; - } - - if(::basegfx::fTools::equalZero(mfZ)) - { - mfZ = 0.0; - } - } - else - { - if(::basegfx::fTools::equal(mfX, fCompareValue)) - { - mfX = fCompareValue; - } - - if(::basegfx::fTools::equal(mfY, fCompareValue)) - { - mfY = fCompareValue; - } - - if(::basegfx::fTools::equal(mfZ, fCompareValue)) - { - mfZ = fCompareValue; - } - } - } - - static const B3DTuple& getEmptyTuple(); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - inline B3DTuple minimum(const B3DTuple& rTupA, const B3DTuple& rTupB) - { - B3DTuple aMin( - (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY(), - (rTupB.getZ() < rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ()); - return aMin; - } - - inline B3DTuple maximum(const B3DTuple& rTupA, const B3DTuple& rTupB) - { - B3DTuple aMax( - (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY(), - (rTupB.getZ() > rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ()); - return aMax; - } - - inline B3DTuple absolute(const B3DTuple& rTup) - { - B3DTuple aAbs( - (0.0 > rTup.getX()) ? -rTup.getX() : rTup.getX(), - (0.0 > rTup.getY()) ? -rTup.getY() : rTup.getY(), - (0.0 > rTup.getZ()) ? -rTup.getZ() : rTup.getZ()); - return aAbs; - } - - inline B3DTuple interpolate(const B3DTuple& rOld1, const B3DTuple& rOld2, double t) - { - B3DTuple aInt( - ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(), - ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY(), - ((rOld2.getZ() - rOld1.getZ()) * t) + rOld1.getZ()); - return aInt; - } - - inline B3DTuple average(const B3DTuple& rOld1, const B3DTuple& rOld2) - { - B3DTuple aAvg( - (rOld1.getX() + rOld2.getX()) * 0.5, - (rOld1.getY() + rOld2.getY()) * 0.5, - (rOld1.getZ() + rOld2.getZ()) * 0.5); - return aAvg; - } - - inline B3DTuple average(const B3DTuple& rOld1, const B3DTuple& rOld2, const B3DTuple& rOld3) - { - B3DTuple aAvg( - (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0), - (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0), - (rOld1.getZ() + rOld2.getZ() + rOld3.getZ()) * (1.0 / 3.0)); - return aAvg; - } - - inline B3DTuple operator+(const B3DTuple& rTupA, const B3DTuple& rTupB) - { - B3DTuple aSum(rTupA); - aSum += rTupB; - return aSum; - } - - inline B3DTuple operator-(const B3DTuple& rTupA, const B3DTuple& rTupB) - { - B3DTuple aSub(rTupA); - aSub -= rTupB; - return aSub; - } - - inline B3DTuple operator/(const B3DTuple& rTupA, const B3DTuple& rTupB) - { - B3DTuple aDiv(rTupA); - aDiv /= rTupB; - return aDiv; - } - - inline B3DTuple operator*(const B3DTuple& rTupA, const B3DTuple& rTupB) - { - B3DTuple aMul(rTupA); - aMul *= rTupB; - return aMul; - } - - inline B3DTuple operator*(const B3DTuple& rTup, double t) - { - B3DTuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B3DTuple operator*(double t, const B3DTuple& rTup) - { - B3DTuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B3DTuple operator/(const B3DTuple& rTup, double t) - { - B3DTuple aNew(rTup); - aNew /= t; - return aNew; - } - - inline B3DTuple operator/(double t, const B3DTuple& rTup) - { - B3DTuple aNew(rTup); - aNew /= t; - return aNew; - } - - /** Round double to nearest integer for 3D tuple - - @return the nearest integer for this tuple - */ - BASEGFX_DLLPUBLIC B3ITuple fround(const B3DTuple& rTup); -} // end of namespace basegfx - -#endif /* _BGFX_TUPLE_B3DTUPLE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tuple/b3i64tuple.hxx b/basegfx/inc/basegfx/tuple/b3i64tuple.hxx deleted file mode 100644 index 45c01c93e5..0000000000 --- a/basegfx/inc/basegfx/tuple/b3i64tuple.hxx +++ /dev/null @@ -1,353 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TUPLE_B3I64TUPLE_HXX -#define _BGFX_TUPLE_B3I64TUPLE_HXX - -#include <sal/types.h> -#include <basegfx/tuple/b3dtuple.hxx> -#include <basegfx/basegfxdllapi.h> - - -namespace basegfx -{ - /** Base class for all Points/Vectors with three sal_Int64 values - - This class provides all methods common to Point - avd Vector classes which are derived from here. - - @derive Use this class to implement Points or Vectors - which are based on three sal_Int64 values - */ - class BASEGFX_DLLPUBLIC B3I64Tuple - { - protected: - sal_Int64 mnX; - sal_Int64 mnY; - sal_Int64 mnZ; - - public: - /** Create a 3D Tuple - - The tuple is initialized to (0, 0, 0) - */ - B3I64Tuple() - : mnX(0), - mnY(0), - mnZ(0) - {} - - /** Create a 3D Tuple - - @param nX - This parameter is used to initialize the X-coordinate - of the 3D Tuple. - - @param nY - This parameter is used to initialize the Y-coordinate - of the 3D Tuple. - - @param nZ - This parameter is used to initialize the Z-coordinate - of the 3D Tuple. - */ - B3I64Tuple(sal_Int64 nX, sal_Int64 nY, sal_Int64 nZ) - : mnX(nX), - mnY(nY), - mnZ(nZ) - {} - - /** Create a copy of a 3D Tuple - - @param rTup - The 3D Tuple which will be copied. - */ - B3I64Tuple(const B3I64Tuple& rTup) - : mnX( rTup.mnX ), - mnY( rTup.mnY ), - mnZ( rTup.mnZ ) - {} - - ~B3I64Tuple() - {} - - /// get X-Coordinate of 3D Tuple - sal_Int64 getX() const - { - return mnX; - } - - /// get Y-Coordinate of 3D Tuple - sal_Int64 getY() const - { - return mnY; - } - - /// get Z-Coordinate of 3D Tuple - sal_Int64 getZ() const - { - return mnZ; - } - - /// set X-Coordinate of 3D Tuple - void setX(sal_Int64 nX) - { - mnX = nX; - } - - /// set Y-Coordinate of 3D Tuple - void setY(sal_Int64 nY) - { - mnY = nY; - } - - /// set Z-Coordinate of 3D Tuple - void setZ(sal_Int64 nZ) - { - mnZ = nZ; - } - - /// Array-access to 3D Tuple - const sal_Int64& operator[] (int nPos) const - { - // Here, normally two if(...)'s should be used. In the assumption that - // both sal_Int64 members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mnX; if(1 == nPos) return mnY; return mnZ; - return *((&mnX) + nPos); - } - - /// Array-access to 3D Tuple - sal_Int64& operator[] (int nPos) - { - // Here, normally two if(...)'s should be used. In the assumption that - // both sal_Int64 members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mnX; if(1 == nPos) return mnY; return mnZ; - return *((&mnX) + nPos); - } - - // operators - ////////////////////////////////////////////////////////////////////// - - B3I64Tuple& operator+=( const B3I64Tuple& rTup ) - { - mnX += rTup.mnX; - mnY += rTup.mnY; - mnZ += rTup.mnZ; - return *this; - } - - B3I64Tuple& operator-=( const B3I64Tuple& rTup ) - { - mnX -= rTup.mnX; - mnY -= rTup.mnY; - mnZ -= rTup.mnZ; - return *this; - } - - B3I64Tuple& operator/=( const B3I64Tuple& rTup ) - { - mnX /= rTup.mnX; - mnY /= rTup.mnY; - mnZ /= rTup.mnZ; - return *this; - } - - B3I64Tuple& operator*=( const B3I64Tuple& rTup ) - { - mnX *= rTup.mnX; - mnY *= rTup.mnY; - mnZ *= rTup.mnZ; - return *this; - } - - B3I64Tuple& operator*=(sal_Int64 t) - { - mnX *= t; - mnY *= t; - mnZ *= t; - return *this; - } - - B3I64Tuple& operator/=(sal_Int64 t) - { - mnX /= t; - mnY /= t; - mnZ /= t; - return *this; - } - - B3I64Tuple operator-(void) const - { - return B3I64Tuple(-mnX, -mnY, -mnZ); - } - - bool equalZero() const - { - return (this == &getEmptyTuple() || - (mnX == 0 && mnY == 0 && mnZ == 0)); - } - - bool operator==( const B3I64Tuple& rTup ) const - { - return this == &rTup || (rTup.mnX == mnX && rTup.mnY == mnY && rTup.mnZ == mnZ); - } - - bool operator!=( const B3I64Tuple& rTup ) const - { - return !(*this == rTup); - } - - B3I64Tuple& operator=( const B3I64Tuple& rTup ) - { - mnX = rTup.mnX; - mnY = rTup.mnY; - mnZ = rTup.mnZ; - return *this; - } - - static const B3I64Tuple& getEmptyTuple(); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - inline B3I64Tuple minimum(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB) - { - B3I64Tuple aMin( - (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY(), - (rTupB.getZ() < rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ()); - return aMin; - } - - inline B3I64Tuple maximum(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB) - { - B3I64Tuple aMax( - (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY(), - (rTupB.getZ() > rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ()); - return aMax; - } - - inline B3I64Tuple absolute(const B3I64Tuple& rTup) - { - B3I64Tuple aAbs( - (0 > rTup.getX()) ? -rTup.getX() : rTup.getX(), - (0 > rTup.getY()) ? -rTup.getY() : rTup.getY(), - (0 > rTup.getZ()) ? -rTup.getZ() : rTup.getZ()); - return aAbs; - } - - inline B3DTuple interpolate(const B3I64Tuple& rOld1, const B3I64Tuple& rOld2, double t) - { - B3DTuple aInt( - ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(), - ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY(), - ((rOld2.getZ() - rOld1.getZ()) * t) + rOld1.getZ()); - return aInt; - } - - inline B3DTuple average(const B3I64Tuple& rOld1, const B3I64Tuple& rOld2) - { - B3DTuple aAvg( - (rOld1.getX() + rOld2.getX()) * 0.5, - (rOld1.getY() + rOld2.getY()) * 0.5, - (rOld1.getZ() + rOld2.getZ()) * 0.5); - return aAvg; - } - - inline B3DTuple average(const B3I64Tuple& rOld1, const B3I64Tuple& rOld2, const B3I64Tuple& rOld3) - { - B3DTuple aAvg( - (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0), - (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0), - (rOld1.getZ() + rOld2.getZ() + rOld3.getZ()) * (1.0 / 3.0)); - return aAvg; - } - - inline B3I64Tuple operator+(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB) - { - B3I64Tuple aSum(rTupA); - aSum += rTupB; - return aSum; - } - - inline B3I64Tuple operator-(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB) - { - B3I64Tuple aSub(rTupA); - aSub -= rTupB; - return aSub; - } - - inline B3I64Tuple operator/(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB) - { - B3I64Tuple aDiv(rTupA); - aDiv /= rTupB; - return aDiv; - } - - inline B3I64Tuple operator*(const B3I64Tuple& rTupA, const B3I64Tuple& rTupB) - { - B3I64Tuple aMul(rTupA); - aMul *= rTupB; - return aMul; - } - - inline B3I64Tuple operator*(const B3I64Tuple& rTup, sal_Int64 t) - { - B3I64Tuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B3I64Tuple operator*(sal_Int64 t, const B3I64Tuple& rTup) - { - B3I64Tuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B3I64Tuple operator/(const B3I64Tuple& rTup, sal_Int64 t) - { - B3I64Tuple aNew(rTup); - aNew /= t; - return aNew; - } - - inline B3I64Tuple operator/(sal_Int64 t, const B3I64Tuple& rTup) - { - B3I64Tuple aNew(t, t, t); - B3I64Tuple aTmp(rTup); - aNew /= aTmp; - return aNew; - } -} // end of namespace basegfx - -#endif /* _BGFX_TUPLE_B3I64TUPLE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/tuple/b3ituple.hxx b/basegfx/inc/basegfx/tuple/b3ituple.hxx deleted file mode 100644 index 7cfc277858..0000000000 --- a/basegfx/inc/basegfx/tuple/b3ituple.hxx +++ /dev/null @@ -1,352 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_TUPLE_B3ITUPLE_HXX -#define _BGFX_TUPLE_B3ITUPLE_HXX - -#include <sal/types.h> -#include <basegfx/tuple/b3dtuple.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - /** Base class for all Points/Vectors with three sal_Int32 values - - This class provides all methods common to Point - avd Vector classes which are derived from here. - - @derive Use this class to implement Points or Vectors - which are based on three sal_Int32 values - */ - class BASEGFX_DLLPUBLIC B3ITuple - { - protected: - sal_Int32 mnX; - sal_Int32 mnY; - sal_Int32 mnZ; - - public: - /** Create a 3D Tuple - - The tuple is initialized to (0, 0, 0) - */ - B3ITuple() - : mnX(0), - mnY(0), - mnZ(0) - {} - - /** Create a 3D Tuple - - @param nX - This parameter is used to initialize the X-coordinate - of the 3D Tuple. - - @param nY - This parameter is used to initialize the Y-coordinate - of the 3D Tuple. - - @param nZ - This parameter is used to initialize the Z-coordinate - of the 3D Tuple. - */ - B3ITuple(sal_Int32 nX, sal_Int32 nY, sal_Int32 nZ) - : mnX(nX), - mnY(nY), - mnZ(nZ) - {} - - /** Create a copy of a 3D Tuple - - @param rTup - The 3D Tuple which will be copied. - */ - B3ITuple(const B3ITuple& rTup) - : mnX( rTup.mnX ), - mnY( rTup.mnY ), - mnZ( rTup.mnZ ) - {} - - ~B3ITuple() - {} - - /// get X-Coordinate of 3D Tuple - sal_Int32 getX() const - { - return mnX; - } - - /// get Y-Coordinate of 3D Tuple - sal_Int32 getY() const - { - return mnY; - } - - /// get Z-Coordinate of 3D Tuple - sal_Int32 getZ() const - { - return mnZ; - } - - /// set X-Coordinate of 3D Tuple - void setX(sal_Int32 nX) - { - mnX = nX; - } - - /// set Y-Coordinate of 3D Tuple - void setY(sal_Int32 nY) - { - mnY = nY; - } - - /// set Z-Coordinate of 3D Tuple - void setZ(sal_Int32 nZ) - { - mnZ = nZ; - } - - /// Array-access to 3D Tuple - const sal_Int32& operator[] (int nPos) const - { - // Here, normally two if(...)'s should be used. In the assumption that - // both sal_Int32 members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mnX; if(1 == nPos) return mnY; return mnZ; - return *((&mnX) + nPos); - } - - /// Array-access to 3D Tuple - sal_Int32& operator[] (int nPos) - { - // Here, normally two if(...)'s should be used. In the assumption that - // both sal_Int32 members can be accessed as an array a shortcut is used here. - // if(0 == nPos) return mnX; if(1 == nPos) return mnY; return mnZ; - return *((&mnX) + nPos); - } - - // operators - ////////////////////////////////////////////////////////////////////// - - B3ITuple& operator+=( const B3ITuple& rTup ) - { - mnX += rTup.mnX; - mnY += rTup.mnY; - mnZ += rTup.mnZ; - return *this; - } - - B3ITuple& operator-=( const B3ITuple& rTup ) - { - mnX -= rTup.mnX; - mnY -= rTup.mnY; - mnZ -= rTup.mnZ; - return *this; - } - - B3ITuple& operator/=( const B3ITuple& rTup ) - { - mnX /= rTup.mnX; - mnY /= rTup.mnY; - mnZ /= rTup.mnZ; - return *this; - } - - B3ITuple& operator*=( const B3ITuple& rTup ) - { - mnX *= rTup.mnX; - mnY *= rTup.mnY; - mnZ *= rTup.mnZ; - return *this; - } - - B3ITuple& operator*=(sal_Int32 t) - { - mnX *= t; - mnY *= t; - mnZ *= t; - return *this; - } - - B3ITuple& operator/=(sal_Int32 t) - { - mnX /= t; - mnY /= t; - mnZ /= t; - return *this; - } - - B3ITuple operator-(void) const - { - return B3ITuple(-mnX, -mnY, -mnZ); - } - - bool equalZero() const - { - return (this == &getEmptyTuple() || - (mnX == 0 && mnY == 0 && mnZ == 0)); - } - - bool operator==( const B3ITuple& rTup ) const - { - return this == &rTup || (rTup.mnX == mnX && rTup.mnY == mnY && rTup.mnZ == mnZ); - } - - bool operator!=( const B3ITuple& rTup ) const - { - return !(*this == rTup); - } - - B3ITuple& operator=( const B3ITuple& rTup ) - { - mnX = rTup.mnX; - mnY = rTup.mnY; - mnZ = rTup.mnZ; - return *this; - } - - static const B3ITuple& getEmptyTuple(); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - inline B3ITuple minimum(const B3ITuple& rTupA, const B3ITuple& rTupB) - { - B3ITuple aMin( - (rTupB.getX() < rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() < rTupA.getY()) ? rTupB.getY() : rTupA.getY(), - (rTupB.getZ() < rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ()); - return aMin; - } - - inline B3ITuple maximum(const B3ITuple& rTupA, const B3ITuple& rTupB) - { - B3ITuple aMax( - (rTupB.getX() > rTupA.getX()) ? rTupB.getX() : rTupA.getX(), - (rTupB.getY() > rTupA.getY()) ? rTupB.getY() : rTupA.getY(), - (rTupB.getZ() > rTupA.getZ()) ? rTupB.getZ() : rTupA.getZ()); - return aMax; - } - - inline B3ITuple absolute(const B3ITuple& rTup) - { - B3ITuple aAbs( - (0 > rTup.getX()) ? -rTup.getX() : rTup.getX(), - (0 > rTup.getY()) ? -rTup.getY() : rTup.getY(), - (0 > rTup.getZ()) ? -rTup.getZ() : rTup.getZ()); - return aAbs; - } - - inline B3DTuple interpolate(const B3ITuple& rOld1, const B3ITuple& rOld2, double t) - { - B3DTuple aInt( - ((rOld2.getX() - rOld1.getX()) * t) + rOld1.getX(), - ((rOld2.getY() - rOld1.getY()) * t) + rOld1.getY(), - ((rOld2.getZ() - rOld1.getZ()) * t) + rOld1.getZ()); - return aInt; - } - - inline B3DTuple average(const B3ITuple& rOld1, const B3ITuple& rOld2) - { - B3DTuple aAvg( - (rOld1.getX() + rOld2.getX()) * 0.5, - (rOld1.getY() + rOld2.getY()) * 0.5, - (rOld1.getZ() + rOld2.getZ()) * 0.5); - return aAvg; - } - - inline B3DTuple average(const B3ITuple& rOld1, const B3ITuple& rOld2, const B3ITuple& rOld3) - { - B3DTuple aAvg( - (rOld1.getX() + rOld2.getX() + rOld3.getX()) * (1.0 / 3.0), - (rOld1.getY() + rOld2.getY() + rOld3.getY()) * (1.0 / 3.0), - (rOld1.getZ() + rOld2.getZ() + rOld3.getZ()) * (1.0 / 3.0)); - return aAvg; - } - - inline B3ITuple operator+(const B3ITuple& rTupA, const B3ITuple& rTupB) - { - B3ITuple aSum(rTupA); - aSum += rTupB; - return aSum; - } - - inline B3ITuple operator-(const B3ITuple& rTupA, const B3ITuple& rTupB) - { - B3ITuple aSub(rTupA); - aSub -= rTupB; - return aSub; - } - - inline B3ITuple operator/(const B3ITuple& rTupA, const B3ITuple& rTupB) - { - B3ITuple aDiv(rTupA); - aDiv /= rTupB; - return aDiv; - } - - inline B3ITuple operator*(const B3ITuple& rTupA, const B3ITuple& rTupB) - { - B3ITuple aMul(rTupA); - aMul *= rTupB; - return aMul; - } - - inline B3ITuple operator*(const B3ITuple& rTup, sal_Int32 t) - { - B3ITuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B3ITuple operator*(sal_Int32 t, const B3ITuple& rTup) - { - B3ITuple aNew(rTup); - aNew *= t; - return aNew; - } - - inline B3ITuple operator/(const B3ITuple& rTup, sal_Int32 t) - { - B3ITuple aNew(rTup); - aNew /= t; - return aNew; - } - - inline B3ITuple operator/(sal_Int32 t, const B3ITuple& rTup) - { - B3ITuple aNew(t, t, t); - B3ITuple aTmp(rTup); - aNew /= aTmp; - return aNew; - } -} // end of namespace basegfx - -#endif /* _BGFX_TUPLE_B3ITUPLE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b2dsize.hxx b/basegfx/inc/basegfx/vector/b2dsize.hxx deleted file mode 100644 index 4681a30405..0000000000 --- a/basegfx/inc/basegfx/vector/b2dsize.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B2DSIZE_HXX -#define _BGFX_VECTOR_B2DSIZE_HXX - -#include <basegfx/vector/b2dvector.hxx> - -namespace basegfx -{ - // syntactic sugar: a B2DVector exactly models a Size object, - // thus, for interface clarity, we provide an alias name - - /// Alias name for interface clarity (not everybody is aware of the identity) - typedef B2DVector B2DSize; -} - -#endif /* _BGFX_VECTOR_B2DSIZE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b2dvector.hxx b/basegfx/inc/basegfx/vector/b2dvector.hxx deleted file mode 100644 index e80462d562..0000000000 --- a/basegfx/inc/basegfx/vector/b2dvector.hxx +++ /dev/null @@ -1,271 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B2DVECTOR_HXX -#define _BGFX_VECTOR_B2DVECTOR_HXX - -#include <basegfx/tuple/b2dtuple.hxx> -#include <basegfx/vector/b2ivector.hxx> -#include <basegfx/vector/b2enums.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclaration - class B2DHomMatrix; - - /** Base Point class with two double values - - This class derives all operators and common handling for - a 2D data class from B2DTuple. All necessary extensions - which are special for 2D Vectors are added here. - - @see B2DTuple - */ - class BASEGFX_DLLPUBLIC B2DVector : public ::basegfx::B2DTuple - { - public: - /** Create a 2D Vector - - The vector is initialized to (0.0, 0.0) - */ - B2DVector() - : B2DTuple() - {} - - /** Create a 2D Vector - - @param fX - This parameter is used to initialize the X-coordinate - of the 2D Vector. - - @param fY - This parameter is used to initialize the Y-coordinate - of the 2D Vector. - */ - B2DVector(double fX, double fY) - : B2DTuple(fX, fY) - {} - - /** Create a copy of a 2D Vector - - @param rVec - The 2D Vector which will be copied. - */ - B2DVector(const B2DVector& rVec) - : B2DTuple(rVec) - {} - - /** Create a copy of a 2D Vector - - @param rVec - The 2D Vector which will be copied. - */ - B2DVector(const ::basegfx::B2IVector& rVec) - : B2DTuple(rVec) - {} - - /** constructor with tuple to allow copy-constructing - from B2DTuple-based classes - */ - B2DVector(const ::basegfx::B2DTuple& rTuple) - : B2DTuple(rTuple) - {} - - ~B2DVector() - {} - - /** *=operator to allow usage from B2DVector, too - */ - B2DVector& operator*=( const B2DVector& rPnt ) - { - mfX *= rPnt.mfX; - mfY *= rPnt.mfY; - return *this; - } - - /** *=operator to allow usage from B2DVector, too - */ - B2DVector& operator*=(double t) - { - mfX *= t; - mfY *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B2DTuple calculations - */ - B2DVector& operator=( const ::basegfx::B2DTuple& rVec ); - - /** Calculate the length of this 2D Vector - - @return The Length of the 2D Vector - */ - double getLength() const; - - /** Set the length of this 2D Vector - - @param fLen - The to be achieved length of the 2D Vector - */ - B2DVector& setLength(double fLen); - - /** Normalize this 2D Vector - - The length of the 2D Vector is set to 1.0 - */ - B2DVector& normalize(); - - /** Test if this 2D Vector is normalized - - @return - true if lenth of vector is equal to 1.0 - false else - */ - bool isNormalized() const; - - /** Calculate the Scalar with another 2D Vector - - @param rVec - The second 2D Vector - - @return - The Scalar value of the two involved 2D Vectors - */ - double scalar( const B2DVector& rVec ) const; - - /** Calculate the length of the cross product with another 2D Vector - - In 2D, returning an actual vector does not make much - sense here. The magnitude, although, can be readily - used for tasks such as angle calculations, since for - the returned value, the following equation holds: - retVal = getLength(this)*getLength(rVec)*sin(theta), - with theta being the angle between the two vectors. - - @param rVec - The second 2D Vector - - @return - The length of the cross product of the two involved 2D Vectors - */ - double cross( const B2DVector& rVec ) const; - - /** Calculate the Angle with another 2D Vector - - @param rVec - The second 2D Vector - - @return - The Angle value of the two involved 2D Vectors in -pi/2 < return < pi/2 - */ - double angle( const B2DVector& rVec ) const; - - /** Transform vector by given transformation matrix. - - Since this is a vector, translational components of the - matrix are disregarded. - */ - B2DVector& operator*=( const B2DHomMatrix& rMat ); - - static const B2DVector& getEmptyVector(); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - /** Calculate the orientation to another 2D Vector - - @param rVecA - The first 2D Vector - - @param rVecB - The second 2D Vector - - @return - The mathematical Orientation of the two involved 2D Vectors - */ - BASEGFX_DLLPUBLIC B2VectorOrientation getOrientation( const B2DVector& rVecA, const B2DVector& rVecB ); - - /** Calculate a perpendicular 2D Vector to the given one - - @param rVec - The source 2D Vector - - @attention This only works if the given 2D Vector is normalized. - - @return - A 2D Vector perpendicular to the one given in parameter rVec - */ - BASEGFX_DLLPUBLIC B2DVector getPerpendicular( const B2DVector& rNormalizedVec ); - - /** Calculate a perpendicular 2D Vector to the given one, - normalize the given one as preparation - - @param rVec - The source 2D Vector - - @return - A normalized 2D Vector perpendicular to the one given in parameter rVec - */ - BASEGFX_DLLPUBLIC B2DVector getNormalizedPerpendicular( const B2DVector& rVec ); - - /** Test two vectors which need not to be normalized for parallelism - - @param rVecA - The first 2D Vector - - @param rVecB - The second 2D Vector - - @return - bool if the two values are parallel. Also true if - one of the vectors is empty. - */ - BASEGFX_DLLPUBLIC bool areParallel( const B2DVector& rVecA, const B2DVector& rVecB ); - - /** Transform vector by given transformation matrix. - - Since this is a vector, translational components of the - matrix are disregarded. - */ - BASEGFX_DLLPUBLIC B2DVector operator*( const B2DHomMatrix& rMat, const B2DVector& rVec ); - - /** Test continuity between given vectors. - - The two given vectors are assumed to describe control points on a - common point. Calculate if there is a continuity between them. - */ - BASEGFX_DLLPUBLIC B2VectorContinuity getContinuity( const B2DVector& rBackVector, const B2DVector& rForwardVector ); - -} // end of namespace basegfx - -#endif /* _BGFX_VECTOR_B2DVECTOR_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b2enums.hxx b/basegfx/inc/basegfx/vector/b2enums.hxx deleted file mode 100644 index 7159d35946..0000000000 --- a/basegfx/inc/basegfx/vector/b2enums.hxx +++ /dev/null @@ -1,79 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B2ENUMS_HXX -#define _BGFX_VECTOR_B2ENUMS_HXX - -#include <sal/types.h> - -namespace basegfx -{ - /** Descriptor for the mathematical orientations of two 2D Vectors - */ - enum B2VectorOrientation - { - /// mathematically positive oriented - ORIENTATION_POSITIVE = 0, - - /// mathematically negative oriented - ORIENTATION_NEGATIVE, - - /// mathematically neutral, thus parallel - ORIENTATION_NEUTRAL - }; - - /** Descriptor for the mathematical continuity of two 2D Vectors - */ - enum B2VectorContinuity - { - /// none - CONTINUITY_NONE = 0, - - /// mathematically negative oriented - CONTINUITY_C1, - - /// mathematically neutral, thus parallel - CONTINUITY_C2 - }; - - /** Descriptor for possible line joins between two line segments - */ - enum B2DLineJoin - { - B2DLINEJOIN_NONE, // no rounding - B2DLINEJOIN_MIDDLE, // calc middle value between joints - B2DLINEJOIN_BEVEL, // join edges with line - B2DLINEJOIN_MITER, // extend till cut - B2DLINEJOIN_ROUND // create arc - }; - -} // end of namespace basegfx - -#endif /* _BGFX_VECTOR_B2ENUMS_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b2isize.hxx b/basegfx/inc/basegfx/vector/b2isize.hxx deleted file mode 100644 index e904513dde..0000000000 --- a/basegfx/inc/basegfx/vector/b2isize.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B2ISIZE_HXX -#define _BGFX_VECTOR_B2ISIZE_HXX - -#include <basegfx/vector/b2ivector.hxx> - -namespace basegfx -{ - // syntactic sugar: a B2IVector exactly models a Size object, - // thus, for interface clarity, we provide an alias name - - /// Alias name for interface clarity (not everybody is aware of the identity) - typedef B2IVector B2ISize; -} - -#endif /* _BGFX_VECTOR_B2ISIZE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b2ivector.hxx b/basegfx/inc/basegfx/vector/b2ivector.hxx deleted file mode 100644 index 9a686f7625..0000000000 --- a/basegfx/inc/basegfx/vector/b2ivector.hxx +++ /dev/null @@ -1,234 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B2IVECTOR_HXX -#define _BGFX_VECTOR_B2IVECTOR_HXX - -#include <basegfx/tuple/b2ituple.hxx> -#include <basegfx/vector/b2enums.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclaration - class B2DHomMatrix; - - /** Base Point class with two sal_Int32 values - - This class derives all operators and common handling for - a 2D data class from B2ITuple. All necessary extensions - which are special for 2D Vectors are added here. - - @see B2ITuple - */ - class BASEGFX_DLLPUBLIC B2IVector : public ::basegfx::B2ITuple - { - public: - /** Create a 2D Vector - - The vector is initialized to (0, 0) - */ - B2IVector() - : B2ITuple() - {} - - /** Create a 2D Vector - - @param nX - This parameter is used to initialize the X-coordinate - of the 2D Vector. - - @param nY - This parameter is used to initialize the Y-coordinate - of the 2D Vector. - */ - B2IVector(sal_Int32 nX, sal_Int32 nY) - : B2ITuple(nX, nY) - {} - - /** Create a copy of a 2D Vector - - @param rVec - The 2D Vector which will be copied. - */ - B2IVector(const B2IVector& rVec) - : B2ITuple(rVec) - {} - - /** constructor with tuple to allow copy-constructing - from B2ITuple-based classes - */ - B2IVector(const ::basegfx::B2ITuple& rTuple) - : B2ITuple(rTuple) - {} - - ~B2IVector() - {} - - /** *=operator to allow usage from B2IVector, too - */ - B2IVector& operator*=( const B2IVector& rPnt ) - { - mnX *= rPnt.mnX; - mnY *= rPnt.mnY; - return *this; - } - - /** *=operator to allow usage from B2IVector, too - */ - B2IVector& operator*=(sal_Int32 t) - { - mnX *= t; - mnY *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B2ITuple calculations - */ - B2IVector& operator=( const ::basegfx::B2ITuple& rVec ); - - /** Calculate the length of this 2D Vector - - @return The Length of the 2D Vector - */ - double getLength() const; - - /** Set the length of this 2D Vector - - @param fLen - The to be achieved length of the 2D Vector - */ - B2IVector& setLength(double fLen); - - /** Calculate the Scalar with another 2D Vector - - @param rVec - The second 2D Vector - - @return - The Scalar value of the two involved 2D Vectors - */ - double scalar( const B2IVector& rVec ) const; - - /** Calculate the length of the cross product with another 2D Vector - - In 2D, returning an actual vector does not make much - sense here. The magnitude, although, can be readily - used for tasks such as angle calculations, since for - the returned value, the following equation holds: - retVal = getLength(this)*getLength(rVec)*sin(theta), - with theta being the angle between the two vectors. - - @param rVec - The second 2D Vector - - @return - The length of the cross product of the two involved 2D Vectors - */ - double cross( const B2IVector& rVec ) const; - - /** Calculate the Angle with another 2D Vector - - @param rVec - The second 2D Vector - - @return - The Angle value of the two involved 2D Vectors in -pi/2 < return < pi/2 - */ - double angle( const B2IVector& rVec ) const; - - /** Transform vector by given transformation matrix. - - Since this is a vector, translational components of the - matrix are disregarded. - */ - B2IVector& operator*=( const B2DHomMatrix& rMat ); - - static const B2IVector& getEmptyVector(); - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - /** Calculate the orientation to another 2D Vector - - @param rVecA - The first 2D Vector - - @param rVecB - The second 2D Vector - - @return - The mathematical Orientation of the two involved 2D Vectors - */ - BASEGFX_DLLPUBLIC B2VectorOrientation getOrientation( const B2IVector& rVecA, const B2IVector& rVecB ); - - /** Calculate a perpendicular 2D Vector to the given one - - @param rVec - The source 2D Vector - - @return - A 2D Vector perpendicular to the one given in parameter rVec - */ - BASEGFX_DLLPUBLIC B2IVector getPerpendicular( const B2IVector& rVec ); - - /** Test two vectors which need not to be normalized for parallelism - - @param rVecA - The first 2D Vector - - @param rVecB - The second 2D Vector - - @return - bool if the two values are parallel. Also true if - one of the vectors is empty. - */ - BASEGFX_DLLPUBLIC bool areParallel( const B2IVector& rVecA, const B2IVector& rVecB ); - - /** Transform vector by given transformation matrix. - - Since this is a vector, translational components of the - matrix are disregarded. - */ - BASEGFX_DLLPUBLIC B2IVector operator*( const B2DHomMatrix& rMat, const B2IVector& rVec ); - - /** Test continuity between given vectors. - - The two given vectors are assumed to describe control points on a - common point. Calculate if there is a continuity between them. - */ - BASEGFX_DLLPUBLIC B2VectorContinuity getContinuity( const B2IVector& rBackVector, const B2IVector& rForwardVector ); - -} // end of namespace basegfx - -#endif /* _BGFX_VECTOR_B2IVECTOR_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b3dsize.hxx b/basegfx/inc/basegfx/vector/b3dsize.hxx deleted file mode 100644 index ab1fa4d5a4..0000000000 --- a/basegfx/inc/basegfx/vector/b3dsize.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B3DSIZE_HXX -#define _BGFX_VECTOR_B3DSIZE_HXX - -#include <basegfx/vector/b3dvector.hxx> - -namespace basegfx -{ - // syntactic sugar: a B3DVector exactly models a Size3D object, - // thus, for interface clarity, we provide an alias name - - /// Alias name for interface clarity (not everybody is aware of the identity) - typedef B3DVector B3DSize; -} - -#endif /* _BGFX_VECTOR_B3DSIZE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b3dvector.hxx b/basegfx/inc/basegfx/vector/b3dvector.hxx deleted file mode 100644 index a0ee71d267..0000000000 --- a/basegfx/inc/basegfx/vector/b3dvector.hxx +++ /dev/null @@ -1,331 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B3DVECTOR_HXX -#define _BGFX_VECTOR_B3DVECTOR_HXX - -#include <basegfx/tuple/b3dtuple.hxx> -#include <basegfx/basegfxdllapi.h> - -////////////////////////////////////////////////////////////////////////////// - -namespace basegfx -{ - // predeclaration - class B3DHomMatrix; - - /** Base Point class with three double values - - This class derives all operators and common handling for - a 3D data class from B3DTuple. All necessary extensions - which are special for 3D Vectors are added here. - - @see B3DTuple - */ - class BASEGFX_DLLPUBLIC B3DVector : public ::basegfx::B3DTuple - { - public: - /** Create a 3D Vector - - The vector is initialized to (0.0, 0.0, 0.0) - */ - B3DVector() - : B3DTuple() - {} - - /** Create a 3D Vector - - @param fX - This parameter is used to initialize the X-coordinate - of the 3D Vector. - - @param fY - This parameter is used to initialize the Y-coordinate - of the 3D Vector. - - @param fZ - This parameter is used to initialize the Z-coordinate - of the 3D Vector. - */ - B3DVector(double fX, double fY, double fZ) - : B3DTuple(fX, fY, fZ) - {} - - /** Create a copy of a 3D Vector - - @param rVec - The 3D Vector which will be copied. - */ - B3DVector(const B3DVector& rVec) - : B3DTuple(rVec) - {} - - /** constructor with tuple to allow copy-constructing - from B3DTuple-based classes - */ - B3DVector(const ::basegfx::B3DTuple& rTuple) - : B3DTuple(rTuple) - {} - - ~B3DVector() - {} - - /** *=operator to allow usage from B3DVector, too - */ - B3DVector& operator*=( const B3DVector& rPnt ) - { - mfX *= rPnt.mfX; - mfY *= rPnt.mfY; - mfZ *= rPnt.mfZ; - return *this; - } - - /** *=operator to allow usage from B3DVector, too - */ - B3DVector& operator*=(double t) - { - mfX *= t; - mfY *= t; - mfZ *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B3DTuple calculations - */ - B3DVector& operator=( const ::basegfx::B3DTuple& rVec ) - { - mfX = rVec.getX(); - mfY = rVec.getY(); - mfZ = rVec.getZ(); - return *this; - } - - /** Calculate the length of this 3D Vector - - @return The Length of the 3D Vector - */ - double getLength(void) const - { - double fLen(scalar(*this)); - if((0.0 == fLen) || (1.0 == fLen)) - return fLen; - return sqrt(fLen); - } - - /** Calculate the length in the XY-Plane for this 3D Vector - - @return The XY-Plane Length of the 3D Vector - */ - double getXYLength(void) const - { - double fLen((mfX * mfX) + (mfY * mfY)); - if((0.0 == fLen) || (1.0 == fLen)) - return fLen; - return sqrt(fLen); - } - - /** Calculate the length in the XZ-Plane for this 3D Vector - - @return The XZ-Plane Length of the 3D Vector - */ - double getXZLength(void) const - { - double fLen((mfX * mfX) + (mfZ * mfZ)); // #i73040# - if((0.0 == fLen) || (1.0 == fLen)) - return fLen; - return sqrt(fLen); - } - - /** Calculate the length in the YZ-Plane for this 3D Vector - - @return The YZ-Plane Length of the 3D Vector - */ - double getYZLength(void) const - { - double fLen((mfY * mfY) + (mfZ * mfZ)); - if((0.0 == fLen) || (1.0 == fLen)) - return fLen; - return sqrt(fLen); - } - - /** Set the length of this 3D Vector - - @param fLen - The to be achieved length of the 3D Vector - */ - B3DVector& setLength(double fLen) - { - double fLenNow(scalar(*this)); - - if(!::basegfx::fTools::equalZero(fLenNow)) - { - const double fOne(1.0); - - if(!::basegfx::fTools::equal(fOne, fLenNow)) - { - fLen /= sqrt(fLenNow); - } - - mfX *= fLen; - mfY *= fLen; - mfZ *= fLen; - } - - return *this; - } - - /** Normalize this 3D Vector - - The length of the 3D Vector is set to 1.0 - */ - B3DVector& normalize(); - - /** Test if this 3D Vector is normalized - - @return - true if lenth of vector is equal to 1.0 - false else - */ - bool isNormalized() const - { - const double fOne(1.0); - const double fScalar(scalar(*this)); - - return (::basegfx::fTools::equal(fOne, fScalar)); - } - - /** get a 3D Vector which is perpendicular to this and a given 3D Vector - - @attention This only works if this and the given 3D Vector are - both normalized. - - @param rNormalizedVec - A normalized 3D Vector. - - @return - A 3D Vector perpendicular to this and the given one - */ - B3DVector getPerpendicular(const B3DVector& rNormalizedVec) const; - - /** Calculate the Scalar product - - This method calculates the Scalar product between this - and the given 3D Vector. - - @param rVec - A second 3D Vector. - - @return - The Scalar Product of two 3D Vectors - */ - double scalar(const B3DVector& rVec) const - { - return ((mfX * rVec.mfX) + (mfY * rVec.mfY) + (mfZ * rVec.mfZ)); - } - - /** Transform vector by given transformation matrix. - - Since this is a vector, translational components of the - matrix are disregarded. - */ - B3DVector& operator*=( const B3DHomMatrix& rMat ); - - static const B3DVector& getEmptyVector() - { - return (const B3DVector&) ::basegfx::B3DTuple::getEmptyTuple(); - } - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - /** get a 3D Vector which is in 2D (ignoring - the Z-Coordinate) perpendicular to a given 3D Vector - - @attention This only works if the given 3D Vector is normalized. - - @param rNormalizedVec - A normalized 3D Vector. - - @return - A 3D Vector perpendicular to the given one in X,Y (2D). - */ - inline B3DVector getPerpendicular2D( const B3DVector& rNormalizedVec ) - { - B3DVector aPerpendicular(-rNormalizedVec.getY(), rNormalizedVec.getX(), rNormalizedVec.getZ()); - return aPerpendicular; - } - - /** Test two vectors which need not to be normalized for parallelism - - @param rVecA - The first 3D Vector - - @param rVecB - The second 3D Vector - - @return - bool if the two values are parallel. Also true if - one of the vectors is empty. - */ - BASEGFX_DLLPUBLIC bool areParallel( const B3DVector& rVecA, const B3DVector& rVecB ); - - /** Transform vector by given transformation matrix. - - Since this is a vector, translational components of the - matrix are disregarded. - */ - BASEGFX_DLLPUBLIC B3DVector operator*( const B3DHomMatrix& rMat, const B3DVector& rVec ); - - /** Calculate the Cross Product of two 3D Vectors - - @param rVecA - A first 3D Vector. - - @param rVecB - A second 3D Vector. - - @return - The Cross Product of both 3D Vectors - */ - inline B3DVector cross(const B3DVector& rVecA, const B3DVector& rVecB) - { - B3DVector aVec( - rVecA.getY() * rVecB.getZ() - rVecA.getZ() * rVecB.getY(), - rVecA.getZ() * rVecB.getX() - rVecA.getX() * rVecB.getZ(), - rVecA.getX() * rVecB.getY() - rVecA.getY() * rVecB.getX()); - return aVec; - } -} // end of namespace basegfx - -////////////////////////////////////////////////////////////////////////////// - -#endif /* _BGFX_VECTOR_B3DVECTOR_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b3isize.hxx b/basegfx/inc/basegfx/vector/b3isize.hxx deleted file mode 100644 index f22a46a11a..0000000000 --- a/basegfx/inc/basegfx/vector/b3isize.hxx +++ /dev/null @@ -1,45 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B3ISIZE_HXX -#define _BGFX_VECTOR_B3ISIZE_HXX - -#include <basegfx/vector/b3ivector.hxx> - -namespace basegfx -{ - // syntactic sugar: a B3IVector exactly models a Size3D object, - // thus, for interface clarity, we provide an alias name - - /// Alias name for interface clarity (not everybody is aware of the identity) - typedef B3IVector B3ISize; -} - -#endif /* _BGFX_VECTOR_B3ISIZE_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/basegfx/inc/basegfx/vector/b3ivector.hxx b/basegfx/inc/basegfx/vector/b3ivector.hxx deleted file mode 100644 index 911b655c72..0000000000 --- a/basegfx/inc/basegfx/vector/b3ivector.hxx +++ /dev/null @@ -1,263 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -#ifndef _BGFX_VECTOR_B3IVECTOR_HXX -#define _BGFX_VECTOR_B3IVECTOR_HXX - -#include <basegfx/tuple/b3ituple.hxx> -#include <basegfx/basegfxdllapi.h> - -namespace basegfx -{ - // predeclaration - class B3DHomMatrix; - - /** Base Point class with three sal_Int32 values - - This class derives all operators and common handling for - a 3D data class from B3ITuple. All necessary extensions - which are special for 3D Vectors are added here. - - @see B3ITuple - */ - class BASEGFX_DLLPUBLIC B3IVector : public ::basegfx::B3ITuple - { - public: - /** Create a 3D Vector - - The vector is initialized to (0, 0, 0) - */ - B3IVector() - : B3ITuple() - {} - - /** Create a 3D Vector - - @param nX - This parameter is used to initialize the X-coordinate - of the 3D Vector. - - @param nY - This parameter is used to initialize the Y-coordinate - of the 3D Vector. - - @param nZ - This parameter is used to initialize the Z-coordinate - of the 3D Vector. - */ - B3IVector(sal_Int32 nX, sal_Int32 nY, sal_Int32 nZ) - : B3ITuple(nX, nY, nZ) - {} - - /** Create a copy of a 3D Vector - - @param rVec - The 3D Vector which will be copied. - */ - B3IVector(const B3IVector& rVec) - : B3ITuple(rVec) - {} - - /** constructor with tuple to allow copy-constructing - from B3ITuple-based classes - */ - B3IVector(const ::basegfx::B3ITuple& rTuple) - : B3ITuple(rTuple) - {} - - ~B3IVector() - {} - - /** *=operator to allow usage from B3IVector, too - */ - B3IVector& operator*=( const B3IVector& rPnt ) - { - mnX *= rPnt.mnX; - mnY *= rPnt.mnY; - mnZ *= rPnt.mnZ; - return *this; - } - - /** *=operator to allow usage from B3IVector, too - */ - B3IVector& operator*=(sal_Int32 t) - { - mnX *= t; - mnY *= t; - mnZ *= t; - return *this; - } - - /** assignment operator to allow assigning the results - of B3ITuple calculations - */ - B3IVector& operator=( const ::basegfx::B3ITuple& rVec ) - { - mnX = rVec.getX(); - mnY = rVec.getY(); - mnZ = rVec.getZ(); - return *this; - } - - /** Calculate the length of this 3D Vector - - @return The Length of the 3D Vector - */ - double getLength(void) const - { - double fLen(scalar(*this)); - if((0 == fLen) || (1.0 == fLen)) - return fLen; - return sqrt(fLen); - } - - /** Calculate the length in the XY-Plane for this 3D Vector - - @return The XY-Plane Length of the 3D Vector - */ - double getXYLength(void) const - { - double fLen((mnX * mnX) + (mnY * mnY)); - if((0 == fLen) || (1.0 == fLen)) - return fLen; - return sqrt(fLen); - } - - /** Calculate the length in the XZ-Plane for this 3D Vector - - @return The XZ-Plane Length of the 3D Vector - */ - double getXZLength(void) const - { - double fLen((mnX * mnZ) + (mnY * mnZ)); - if((0 == fLen) || (1.0 == fLen)) - return fLen; - return sqrt(fLen); - } - - /** Calculate the length in the YZ-Plane for this 3D Vector - - @return The YZ-Plane Length of the 3D Vector - */ - double getYZLength(void) const - { - double fLen((mnY * mnY) + (mnZ * mnZ)); - if((0 == fLen) || (1.0 == fLen)) - return fLen; - return sqrt(fLen); - } - - /** Set the length of this 3D Vector - - @param fLen - The to be achieved length of the 3D Vector - */ - B3IVector& setLength(double fLen) - { - double fLenNow(scalar(*this)); - - if(!::basegfx::fTools::equalZero(fLenNow)) - { - const double fOne(1.0); - - if(!::basegfx::fTools::equal(fOne, fLenNow)) - { - fLen /= sqrt(fLenNow); - } - - mnX = fround(mnX*fLen); - mnY = fround(mnY*fLen); - mnZ = fround(mnZ*fLen); - } - - return *this; - } - - /** Calculate the Scalar product - - This method calculates the Scalar product between this - and the given 3D Vector. - - @param rVec - A second 3D Vector. - - @return - The Scalar Product of two 3D Vectors - */ - double scalar(const B3IVector& rVec) const - { - return ((mnX * rVec.mnX) + (mnY * rVec.mnY) + (mnZ * rVec.mnZ)); - } - - /** Transform vector by given transformation matrix. - - Since this is a vector, translational components of the - matrix are disregarded. - */ - B3IVector& operator*=( const B3DHomMatrix& rMat ); - - static const B3IVector& getEmptyVector() - { - return (const B3IVector&) ::basegfx::B3ITuple::getEmptyTuple(); - } - }; - - // external operators - ////////////////////////////////////////////////////////////////////////// - - /** Transform vector by given transformation matrix. - - Since this is a vector, translational components of the - matrix are disregarded. - */ - BASEGFX_DLLPUBLIC B3IVector operator*( const B3DHomMatrix& rMat, const B3IVector& rVec ); - - /** Calculate the Cross Product of two 3D Vectors - - @param rVecA - A first 3D Vector. - - @param rVecB - A second 3D Vector. - - @return - The Cross Product of both 3D Vectors - */ - inline B3IVector cross(const B3IVector& rVecA, const B3IVector& rVecB) - { - B3IVector aVec( - rVecA.getY() * rVecB.getZ() - rVecA.getZ() * rVecB.getY(), - rVecA.getZ() * rVecB.getX() - rVecA.getX() * rVecB.getZ(), - rVecA.getX() * rVecB.getY() - rVecA.getY() * rVecB.getX()); - return aVec; - } -} // end of namespace basegfx - -#endif /* _BGFX_VECTOR_B3DVECTOR_HXX */ - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |