summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorIngrid Halama [iha] <Ingrid.Halama@oracle.com>2010-12-07 19:32:19 +0100
committerIngrid Halama [iha] <Ingrid.Halama@oracle.com>2010-12-07 19:32:19 +0100
commitc80ab47dfbc42e360d30f0018ab207d475a5095c (patch)
tree945461b9e09c68a5cde6335e8ca9604a2d15a82a /chart2
parent23a41b480633914a7a0db19f5b23e61dd28dfca0 (diff)
chart46: #i25706# implement date axis - corrected error bars
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/charttypes/BarChart.cxx2
-rw-r--r--chart2/source/view/charttypes/VSeriesPlotter.cxx41
-rw-r--r--chart2/source/view/inc/VSeriesPlotter.hxx4
3 files changed, 39 insertions, 8 deletions
diff --git a/chart2/source/view/charttypes/BarChart.cxx b/chart2/source/view/charttypes/BarChart.cxx
index 9e4484727a2d..dbf01165bf79 100644
--- a/chart2/source/view/charttypes/BarChart.cxx
+++ b/chart2/source/view/charttypes/BarChart.cxx
@@ -846,7 +846,7 @@ void BarChart::createShapes()
}
//create error bar
- createErrorBar_Y( aUnscaledLogicPosition, **aSeriesIter, nPointIndex, m_xLogicTarget );
+ createErrorBar_Y( aUnscaledLogicPosition, **aSeriesIter, nPointIndex, m_xLogicTarget, &fLogicX );
//------------
//create data point label
diff --git a/chart2/source/view/charttypes/VSeriesPlotter.cxx b/chart2/source/view/charttypes/VSeriesPlotter.cxx
index f03138d869b7..dbafa59c0588 100644
--- a/chart2/source/view/charttypes/VSeriesPlotter.cxx
+++ b/chart2/source/view/charttypes/VSeriesPlotter.cxx
@@ -772,6 +772,17 @@ void lcl_AddErrorBottomLine( const drawing::Position3D& rPosition, ::basegfx::B2
return aMainDirection;
}
+drawing::Position3D lcl_transformMixedToScene( PlottingPositionHelper* pPosHelper
+ , double fX /*scaled*/, double fY /*unscaled*/, double fZ /*unscaled*/, bool bClip )
+{
+ if(!pPosHelper)
+ return drawing::Position3D(0,0,0);
+ pPosHelper->doLogicScaling( 0,&fY,&fZ );
+ if(bClip)
+ pPosHelper->clipScaledLogicValues( &fX,&fY,&fZ );
+ return pPosHelper->transformScaledLogicToScene( fX, fY, fZ, false );
+}
+
} // anonymous namespace
// virtual
@@ -782,6 +793,7 @@ void VSeriesPlotter::createErrorBar(
, const VDataSeries& rVDataSeries
, sal_Int32 nIndex
, bool bYError /* = true */
+ , double* pfScaledLogicX
)
{
if( !ChartTypeHelper::isSupportingStatisticProperties( m_xChartTypeModel, m_nDimension ) )
@@ -816,7 +828,13 @@ void VSeriesPlotter::createErrorBar(
const double fX = aUnscaledLogicPosition.PositionX;
const double fY = aUnscaledLogicPosition.PositionY;
const double fZ = aUnscaledLogicPosition.PositionZ;
- aMiddle = m_pPosHelper->transformLogicToScene( fX, fY, fZ, true );
+ double fScaledX = fX;
+ if( pfScaledLogicX )
+ fScaledX = *pfScaledLogicX;
+ else
+ m_pPosHelper->doLogicScaling( &fScaledX, 0, 0 );
+
+ aMiddle = lcl_transformMixedToScene( m_pPosHelper, fScaledX, fY, fZ, true );
drawing::Position3D aNegative(aMiddle);
drawing::Position3D aPositive(aMiddle);
@@ -831,11 +849,16 @@ void VSeriesPlotter::createErrorBar(
double fLocalX = fX;
double fLocalY = fY;
if( bYError )
+ {
fLocalY+=fLength;
+ aPositive = lcl_transformMixedToScene( m_pPosHelper, fScaledX, fLocalY, fZ, true );
+ }
else
+ {
fLocalX+=fLength;
+ aPositive = m_pPosHelper->transformLogicToScene( fLocalX, fLocalY, fZ, true );
+ }
bCreatePositiveBorder = m_pPosHelper->isLogicVisible(fLocalX, fLocalY, fZ);
- aPositive = m_pPosHelper->transformLogicToScene( fLocalX, fLocalY, fZ, true );
}
else
bShowPositive = false;
@@ -849,12 +872,16 @@ void VSeriesPlotter::createErrorBar(
double fLocalX = fX;
double fLocalY = fY;
if( bYError )
+ {
fLocalY-=fLength;
+ aNegative = lcl_transformMixedToScene( m_pPosHelper, fScaledX, fLocalY, fZ, true );
+ }
else
+ {
fLocalX-=fLength;
-
+ aNegative = m_pPosHelper->transformLogicToScene( fLocalX, fLocalY, fZ, true );
+ }
bCreateNegativeBorder = m_pPosHelper->isLogicVisible( fLocalX, fLocalY, fZ);
- aNegative = m_pPosHelper->transformLogicToScene( fLocalX, fLocalY, fZ, true );
}
else
bShowNegative = false;
@@ -898,7 +925,8 @@ void VSeriesPlotter::createErrorBar(
// virtual
void VSeriesPlotter::createErrorBar_Y( const drawing::Position3D& rUnscaledLogicPosition
, VDataSeries& rVDataSeries, sal_Int32 nPointIndex
- , const uno::Reference< drawing::XShapes >& xTarget )
+ , const uno::Reference< drawing::XShapes >& xTarget
+ , double* pfScaledLogicX )
{
if(m_nDimension!=2)
return;
@@ -912,7 +940,8 @@ void VSeriesPlotter::createErrorBar_Y( const drawing::Position3D& rUnscaledLogic
createErrorBar( xErrorBarsGroup_Shapes
, rUnscaledLogicPosition, xErrorBarProp
, rVDataSeries, nPointIndex
- , true /* bYError */ );
+ , true /* bYError */
+ , pfScaledLogicX );
}
}
diff --git a/chart2/source/view/inc/VSeriesPlotter.hxx b/chart2/source/view/inc/VSeriesPlotter.hxx
index a786c607c73c..8147c3443ec6 100644
--- a/chart2/source/view/inc/VSeriesPlotter.hxx
+++ b/chart2/source/view/inc/VSeriesPlotter.hxx
@@ -381,12 +381,14 @@ protected: //methods
, const VDataSeries& rVDataSeries
, sal_Int32 nIndex
, bool bVertical
+ , double* pfScaledLogicX
);
virtual void createErrorBar_Y( const ::com::sun::star::drawing::Position3D& rUnscaledLogicPosition
, VDataSeries& rVDataSeries, sal_Int32 nPointIndex
, const ::com::sun::star::uno::Reference<
- ::com::sun::star::drawing::XShapes >& xTarget );
+ ::com::sun::star::drawing::XShapes >& xTarget
+ , double* pfScaledLogicX=0 );
virtual void createRegressionCurvesShapes( VDataSeries& rVDataSeries
, const ::com::sun::star::uno::Reference<