diff options
author | Tomaž Vajngerl <quikee@gmail.com> | 2013-12-09 19:53:20 +0100 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2013-12-09 19:56:25 +0100 |
commit | f464bb21c8e8483200feb159cfdf9e5bc29aa27f (patch) | |
tree | 58fb78cbdb7e3099eaaccd5a9d6b33109513c175 /chart2 | |
parent | b4b623c10ca4dbb94cdd7fd8189b40e50fbf9b6e (diff) |
fdo#72137 Allocate enough points in MovingAverageRegression calc.
Change-Id: I9ae058cad678cdb86709a4e40e3d4bd47900d386
Diffstat (limited to 'chart2')
-rw-r--r-- | chart2/source/view/charttypes/VSeriesPlotter.cxx | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx index 1e6c96dd4b75..74322777a79d 100644 --- a/chart2/source/view/charttypes/VSeriesPlotter.cxx +++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx @@ -997,20 +997,15 @@ void VSeriesPlotter::createRegressionCurvesShapes( VDataSeries& rVDataSeries, xProperties->getPropertyValue( "InterceptValue") >>= aInterceptValue; } - double fMinX; - double fMaxX; - double fChartMinX = m_pPosHelper->getLogicMinX(); double fChartMaxX = m_pPosHelper->getLogicMaxX(); + double fMinX = fChartMinX; + double fMaxX = fChartMaxX; + double fPointScale = 1.0; - if( bAverageLine ) - { - fMinX = fChartMinX; - fMaxX = fChartMaxX; - } - else + if( !bAverageLine ) { rVDataSeries.getMinMaxXValue(fMinX, fMaxX); fMaxX += aExtrapolateForward; @@ -1018,6 +1013,7 @@ void VSeriesPlotter::createRegressionCurvesShapes( VDataSeries& rVDataSeries, fPointScale = (fMaxX - fMinX) / (fChartMaxX - fChartMinX); } + xCalculator->setRegressionProperties(aDegree, aForceIntercept, aInterceptValue, aPeriod); xCalculator->recalculateRegression( rVDataSeries.getAllX(), rVDataSeries.getAllY() ); sal_Int32 nPointCount = 100 * fPointScale; @@ -1025,15 +1021,6 @@ void VSeriesPlotter::createRegressionCurvesShapes( VDataSeries& rVDataSeries, if ( nPointCount < 2 ) nPointCount = 2; - drawing::PolyPolygonShape3D aRegressionPoly; - aRegressionPoly.SequenceX.realloc(1); - aRegressionPoly.SequenceY.realloc(1); - aRegressionPoly.SequenceZ.realloc(1); - aRegressionPoly.SequenceX[0].realloc(nPointCount); - aRegressionPoly.SequenceY[0].realloc(nPointCount); - aRegressionPoly.SequenceZ[0].realloc(nPointCount); - sal_Int32 nRealPointCount=0; - std::vector< ExplicitScaleData > aScales( m_pPosHelper->getScales()); uno::Reference< chart2::XScaling > xScalingX; uno::Reference< chart2::XScaling > xScalingY; @@ -1048,7 +1035,19 @@ void VSeriesPlotter::createRegressionCurvesShapes( VDataSeries& rVDataSeries, fMinX, fMaxX, nPointCount, xScalingX, xScalingY, bMaySkipPoints )); - for(sal_Int32 nP=0; nP<aCalculatedPoints.getLength(); nP++) + nPointCount = aCalculatedPoints.getLength(); + + drawing::PolyPolygonShape3D aRegressionPoly; + aRegressionPoly.SequenceX.realloc(1); + aRegressionPoly.SequenceY.realloc(1); + aRegressionPoly.SequenceZ.realloc(1); + aRegressionPoly.SequenceX[0].realloc(nPointCount); + aRegressionPoly.SequenceY[0].realloc(nPointCount); + aRegressionPoly.SequenceZ[0].realloc(nPointCount); + + sal_Int32 nRealPointCount = 0; + + for(sal_Int32 nP = 0; nP < aCalculatedPoints.getLength(); ++nP) { double fLogicX = aCalculatedPoints[nP].X; double fLogicY = aCalculatedPoints[nP].Y; |