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:58:30 +0100 |
commit | 306d6d7f199067594378e2c9d084016d1442367a (patch) | |
tree | 36f577a203904b336a8cb3eb81e730eb6d63919d /chart2 | |
parent | ee107cd95b4e449391da5f1fe9246682bcf1e6ce (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 44e4c5857222..a1749cea1e39 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; |