25#include <osl/diagnose.h>
26#include <com/sun/star/chart2/AxisType.hpp>
30using ::basegfx::B2DVector;
35: fScaledTickValue( 0.0 )
36, xInverseScaling(
std::move( xInverse ))
37, aTickScreenPosition(0.0,0.0)
38, nFactorForLimitedTextWidth(1)
43double TickInfo::getUnscaledTickValue()
const
45 if( xInverseScaling.is() )
46 return xInverseScaling->doScaling( fScaledTickValue );
48 return fScaledTickValue;
51sal_Int32 TickInfo::getScreenDistanceBetweenTicks(
const TickInfo& rOherTickInfo )
const
56 sal_Int32 nRet =
static_cast<sal_Int32
>(
aDistance.getLength());
63 : m_rTickVector(rTickInfoVector)
64 , m_aTickIter(m_rTickVector.
begin())
90 : m_rScale(
std::move( aScale ))
91 , m_rIncrement(
std::move( aIncrement ))
98 OSL_ENSURE(
m_xInverseScaling.is(),
"each Scaling needs to return an inverse Scaling" );
139 ,
const B2DVector& rStartScreenPos,
const B2DVector& rEndScreenPos
140 ,
const B2DVector& rAxisLineToLabelLineShift )
142 , m_aAxisStartScreenPosition2D(rStartScreenPos)
143 , m_aAxisEndScreenPosition2D(rEndScreenPos)
144 , m_aAxisLineToLabelLineShift(rAxisLineToLabelLineShift)
145 , m_fStretch_LogicToScreen(1.0)
146 , m_fOffset_LogicToScreen(0.0)
179 return fInclination < M_PI_4 || fInclination > (M_PI-M_PI_4);
191 return fInclination < M_PI_4 || fInclination > (M_PI-M_PI_4);
201 if(!pSecondTickInfo || !pFirstTickInfo)
216 , sal_Int32 nSequenceIndex
217 ,
double fScaledLogicTickValue,
double fInnerDirectionSign
219 ,
bool bPlaceAtLabels )
const
221 if( fInnerDirectionSign==0.0 )
222 fInnerDirectionSign = 1.0;
230 B2DVector aOrthoDirection(-aMainDirection.getY(),aMainDirection.getX());
231 aOrthoDirection *= fInnerDirectionSign;
232 aOrthoDirection.normalize();
234 B2DVector aStart = aTickScreenPosition + aOrthoDirection*rTickmarkProperties.
RelativePos;
235 B2DVector aEnd = aStart - aOrthoDirection*rTickmarkProperties.
Length;
237 rPoints.getArray()[nSequenceIndex]
238 = { {
static_cast<sal_Int32
>(aStart.getX()),
static_cast<sal_Int32
>(aStart.getY()) },
239 {
static_cast<sal_Int32
>(aEnd.getX()),
static_cast<sal_Int32
>(aEnd.getY()) } };
244 bool bFarAwayLabels =
false;
245 if( rAxisProperties.
m_eLabelPos == css::chart::ChartAxisLabelPosition_OUTSIDE_START
246 || rAxisProperties.
m_eLabelPos == css::chart::ChartAxisLabelPosition_OUTSIDE_END )
247 bFarAwayLabels =
true;
250 if( fInnerDirectionSign==0.0 )
251 fInnerDirectionSign = 1.0;
255 B2DVector aOrthoDirection(-aMainDirection.getY(),aMainDirection.getX());
256 aOrthoDirection *= fInnerDirectionSign;
257 aOrthoDirection.normalize();
259 B2DVector aStart(0,0), aEnd(0,0);
264 aEnd = aStart - aOrthoDirection*aProps.
Length;
271 B2DVector aNewStart = aOrthoDirection*rProps.
RelativePos;
272 B2DVector aNewEnd = aNewStart - aOrthoDirection*rProps.
Length;
273 if(aNewStart.getLength()>aStart.getLength())
275 if(aNewEnd.getLength()>aEnd.getLength())
280 B2DVector aLabelDirection(aStart);
282 aLabelDirection = aEnd;
284 B2DVector aOrthoLabelDirection(aOrthoDirection);
286 aOrthoLabelDirection*=-1.0;
287 aOrthoLabelDirection.normalize();
288 if( bIncludeSpaceBetweenTickAndText )
290 if( bFarAwayLabels && bIncludeFarAwayDistanceIfSo )
292 return aLabelDirection;
306 for (
auto & tickInfos : rAllTickInfos)
308 for (
auto & tickInfo : tickInfos)
310 tickInfo.aTickScreenPosition =
void getAllTicks(TickInfoArraysType &rAllTickInfos) const
void getAllTicksShifted(TickInfoArraysType &rAllTickInfos) const
void getAllTicksShifted(TickInfoArraysType &rAllTickInfos) const
void getAllTicks(TickInfoArraysType &rAllTickInfos) const
virtual ~PureTickIter() override
TickInfoArrayType & m_rTickVector
virtual TickInfo * nextInfo() override
virtual TickInfo * firstInfo() override
TickInfoArrayType::iterator m_aTickIter
::basegfx::B2DVector m_aAxisEndScreenPosition2D
::basegfx::B2DVector getTickScreenPosition2D(double fScaledLogicTickValue) const
static sal_Int32 getTickScreenDistance(TickIter &rIter)
bool isHorizontalAxis() const
void addPointSequenceForTickLine(css::drawing::PointSequenceSequence &rPoints, sal_Int32 nSequenceIndex, double fScaledLogicTickValue, double fInnerDirectionSign, const TickmarkProperties &rTickmarkProperties, bool bPlaceAtLabels) const
::basegfx::B2DVector m_aAxisStartScreenPosition2D
TickFactory2D(const ExplicitScaleData &rScale, const ExplicitIncrementData &rIncrement, const ::basegfx::B2DVector &rStartScreenPos, const ::basegfx::B2DVector &rEndScreenPos, const ::basegfx::B2DVector &rAxisLineToLabelLineShift)
::basegfx::B2DVector getDistanceAxisTickToText(const AxisProperties &rAxisProperties, bool bIncludeFarAwayDistanceIfSo=false, bool bIncludeSpaceBetweenTickAndText=true) const
double m_fStretch_LogicToScreen
bool isVerticalAxis() const
void updateScreenValues(TickInfoArraysType &rAllTickInfos) const
Determine the screen positions of all ticks based on their numeric values.
void createPointSequenceForAxisMainLine(css::drawing::PointSequenceSequence &rPoints) const
virtual ~TickFactory2D() override
::basegfx::B2DVector m_aAxisLineToLabelLineShift
double m_fOffset_LogicToScreen
double m_fScaledVisibleMax
double m_fScaledVisibleMin
ExplicitIncrementData m_rIncrement
css::uno::Reference< css::chart2::XScaling > m_xInverseScaling
ExplicitScaleData m_rScale
TickFactory(ExplicitScaleData aScale, ExplicitIncrementData aIncrement)
void getAllTicksShifted(TickInfoArraysType &rAllTickInfos) const
void getAllTicks(TickInfoArraysType &rAllTickInfos) const
virtual TickInfo * nextInfo()=0
virtual TickInfo * firstInfo()=0
std::vector< TickInfoArrayType > TickInfoArraysType
const sal_Int32 AXIS2D_TICKLABELSPACING
std::vector< TickInfo > TickInfoArrayType
enumrange< T >::Iterator begin(enumrange< T >)
double mfInnerTickDirection
which direction the labels are to be drawn.
static TickmarkProperties getBiggestTickmarkProperties()
AxisLabelAlignment maLabelAlignment
std::vector< TickmarkProperties > m_aTickmarkPropertiesList
css::chart::ChartAxisLabelPosition m_eLabelPos
describes how tickmarks are positioned on the scale of an axis.
This structure contains the explicit values for a scale like Minimum and Maximum.
css::uno::Reference< css::chart2::XScaling > Scaling
css::chart2::AxisOrientation Orientation
sal_Int32 getScreenDistanceBetweenTicks(const TickInfo &rOherTickInfo) const
::basegfx::B2DVector aTickScreenPosition
o3tl::enumarray< SvxBoxItemLine, sal_uInt16 > aDistance