summaryrefslogtreecommitdiff
path: root/chart2/source/view/main/PolarLabelPositionHelper.cxx
diff options
context:
space:
mode:
authorVladimir Glazounov <vg@openoffice.org>2007-05-22 18:25:17 +0000
committerVladimir Glazounov <vg@openoffice.org>2007-05-22 18:25:17 +0000
commit97f90d89c418356582eb66ec7efd532d187a6558 (patch)
tree06adb1332ee6b3086e2cd4799bdcd0a26f2588d4 /chart2/source/view/main/PolarLabelPositionHelper.cxx
parent69ce62d8f8cc26d9f9b94e7cc99adab8be736daf (diff)
INTEGRATION: CWS chart2mst3 (1.2.4); FILE MERGED
2006/11/23 17:35:40 iha 1.2.4.7: replace Vector2D with B2DVector 2006/10/18 17:23:59 bm 1.2.4.6: RESYNC: (1.3-1.4); FILE MERGED 2006/08/10 15:59:53 iha 1.2.4.5: Axis Label Layout - Font&Diagram Size 2005/10/07 12:26:06 bm 1.2.4.4: RESYNC: (1.2-1.3); FILE MERGED 2004/05/08 17:54:58 iha 1.2.4.3: polartransformation fixes and pie offset implementation 2004/04/14 08:27:39 iha 1.2.4.2: corrected z position of centered labels 2004/03/23 14:40:30 iha 1.2.4.1: renamed method transform/Scaled/LogicToScreenPosition
Diffstat (limited to 'chart2/source/view/main/PolarLabelPositionHelper.cxx')
-rw-r--r--chart2/source/view/main/PolarLabelPositionHelper.cxx90
1 files changed, 54 insertions, 36 deletions
diff --git a/chart2/source/view/main/PolarLabelPositionHelper.cxx b/chart2/source/view/main/PolarLabelPositionHelper.cxx
index 2e24f698789f..8c2267600e4e 100644
--- a/chart2/source/view/main/PolarLabelPositionHelper.cxx
+++ b/chart2/source/view/main/PolarLabelPositionHelper.cxx
@@ -4,9 +4,9 @@
*
* $RCSfile: PolarLabelPositionHelper.cxx,v $
*
- * $Revision: 1.4 $
+ * $Revision: 1.5 $
*
- * last change: $Author: obo $ $Date: 2006-09-17 13:37:38 $
+ * last change: $Author: vg $ $Date: 2007-05-22 19:25:17 $
*
* The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1.
@@ -40,9 +40,11 @@
#include "PlottingPositionHelper.hxx"
#include "CommonConverters.hxx"
-// header for class Vector2D
-#ifndef _VECTOR2D_HXX
-#include <tools/vector2d.hxx>
+#ifndef _BGFX_VECTOR_B2DVECTOR_HXX
+#include <basegfx/vector/b2dvector.hxx>
+#endif
+#ifndef _BGFX_VECTOR_B2IVECTOR_HXX
+#include <basegfx/vector/b2ivector.hxx>
#endif
//.............................................................................
@@ -66,54 +68,58 @@ PolarLabelPositionHelper::~PolarLabelPositionHelper()
{
}
-awt::Point PolarLabelPositionHelper::getLabelScreenPositionAndAlignment(
- LabelAlignment& rAlignment, bool bOutsidePosition
- , double fStartLogicValueOnAngleAxis, double fEndLogicValueOnAngleAxis
- , double fLogicInnerRadius, double fLogicOuterRadius
- , double fLogicZ) const
+awt::Point PolarLabelPositionHelper::getLabelScreenPositionAndAlignmentForLogicValues(
+ LabelAlignment& rAlignment
+ , double fLogicValueOnAngleAxis
+ , double fLogicValueOnRadiusAxis
+ , double fLogicZ
+ , sal_Int32 nScreenValueOffsetInRadiusDirection ) const
{
- double fWidthAngleDegree = m_pPosHelper->getWidthAngleDegree( fStartLogicValueOnAngleAxis, fEndLogicValueOnAngleAxis );
- double fStartAngleDegree = m_pPosHelper->transformToAngleDegree( fStartLogicValueOnAngleAxis );
- double fAngleDegree = fStartAngleDegree + fWidthAngleDegree/2.0;
- double fAnglePi = fAngleDegree*F_PI/180.0;
+ double fUnitCircleAngleDegree = m_pPosHelper->transformToAngleDegree( fLogicValueOnAngleAxis );
+ double fUnitCircleRadius = m_pPosHelper->transformToRadius( fLogicValueOnRadiusAxis );
- double fInnerRadius = m_pPosHelper->transformToRadius(fLogicInnerRadius);
- double fOuterRadius = m_pPosHelper->transformToRadius(fLogicOuterRadius);
+ return getLabelScreenPositionAndAlignmentForUnitCircleValues(
+ rAlignment, true
+ , fUnitCircleAngleDegree, 0.0
+ , fUnitCircleRadius, fUnitCircleRadius, fLogicZ, nScreenValueOffsetInRadiusDirection );
+}
+awt::Point PolarLabelPositionHelper::getLabelScreenPositionAndAlignmentForUnitCircleValues(
+ LabelAlignment& rAlignment, bool bOutsidePosition
+ , double fUnitCircleStartAngleDegree, double fUnitCircleWidthAngleDegree
+ , double fUnitCircleInnerRadius, double fUnitCircleOuterRadius
+ , double fLogicZ
+ , sal_Int32 nScreenValueOffsetInRadiusDirection ) const
+{
+ double fAngleDegree = fUnitCircleStartAngleDegree + fUnitCircleWidthAngleDegree/2.0;
double fRadius = 0.0;
if( bOutsidePosition ) //e.g. for pure pie chart(one ring only) or for angle axis of polyar coordinate system
{
- fRadius = fOuterRadius;
- if(3!=m_nDimensionCount)
- fRadius += 0.1*fOuterRadius;
+ fRadius = fUnitCircleOuterRadius;
}
else
- fRadius = fInnerRadius + (fOuterRadius-fInnerRadius)/2.0 ;
+ fRadius = fUnitCircleInnerRadius + (fUnitCircleOuterRadius-fUnitCircleInnerRadius)/2.0 ;
- if(3==m_nDimensionCount)
- fAnglePi *= -1.0;
- drawing::Position3D aLogicPos(fRadius*cos(fAnglePi),fRadius*sin(fAnglePi),fLogicZ+0.5);
- awt::Point aRet( this->transformLogicToScreenPosition( aLogicPos ) );
+ awt::Point aRet( this->transformSceneToScreenPosition(
+ m_pPosHelper->transformUnitCircleToScene( fAngleDegree, fRadius, fLogicZ+0.5 ) ) );
- if(3==m_nDimensionCount)
+ if(3==m_nDimensionCount && bOutsidePosition)
{
//check wether the upper or the downer edge is more distant from the center
//take the farest point to put the label to
- drawing::Position3D aLogicPos2(fRadius*cos(fAnglePi),fRadius*sin(fAnglePi),fLogicZ-0.5);
- drawing::Position3D aLogicCenter(0,0,fLogicZ);
- awt::Point aP0( this->transformLogicToScreenPosition(
- drawing::Position3D(0,0,fLogicZ) ) );
+ awt::Point aP0( this->transformSceneToScreenPosition(
+ m_pPosHelper->transformUnitCircleToScene( 0, 0, fLogicZ ) ) );
awt::Point aP1(aRet);
- awt::Point aP2( this->transformLogicToScreenPosition(
- drawing::Position3D(fRadius*cos(fAnglePi),fRadius*sin(fAnglePi),fLogicZ-0.5) ) );
+ awt::Point aP2( this->transformSceneToScreenPosition(
+ m_pPosHelper->transformUnitCircleToScene( fAngleDegree, fRadius, fLogicZ-0.5 ) ) );
- Vector2D aV0( aP0.X, aP0.Y );
- Vector2D aV1( aP1.X, aP1.Y );
- Vector2D aV2( aP2.X, aP2.Y );
+ ::basegfx::B2DVector aV0( aP0.X, aP0.Y );
+ ::basegfx::B2DVector aV1( aP1.X, aP1.Y );
+ ::basegfx::B2DVector aV2( aP2.X, aP2.Y );
- double fL1 = (aV1-aV0).GetLength();
- double fL2 = (aV2-aV0).GetLength();
+ double fL1 = ::basegfx::B2DVector(aV1-aV0).getLength();
+ double fL2 = ::basegfx::B2DVector(aV2-aV0).getLength();
if(fL2>fL1)
aRet = aP2;
@@ -170,6 +176,18 @@ awt::Point PolarLabelPositionHelper::getLabelScreenPositionAndAlignment(
{
rAlignment = LABEL_ALIGN_CENTER;
}
+
+ //add a scaling independent Offset if requested
+ if( nScreenValueOffsetInRadiusDirection != 0)
+ {
+ awt::Point aOrigin( this->transformSceneToScreenPosition(
+ m_pPosHelper->transformUnitCircleToScene( 0.0, 0.0, fLogicZ+0.5 ) ) );
+ basegfx::B2IVector aDirection( aRet.X- aOrigin.X, aRet.Y- aOrigin.Y );
+ aDirection.setLength(nScreenValueOffsetInRadiusDirection);
+ aRet.X += aDirection.getX();
+ aRet.Y += aDirection.getY();
+ }
+
return aRet;
}