blob: 66cfff8d94d72f1c711d96c6c9b460e7d0c338b4 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_chart2.hxx"
#include "VPolarRadiusAxis.hxx"
#include "VCartesianAxis.hxx"
#include "PlottingPositionHelper.hxx"
#include "CommonConverters.hxx"
#include "Tickmarks_Equidistant.hxx"
#include <rtl/math.hxx>
//.............................................................................
namespace chart
{
//.............................................................................
using namespace ::com::sun::star;
using namespace ::com::sun::star::chart2;
using namespace ::rtl::math;
VPolarRadiusAxis::VPolarRadiusAxis( const AxisProperties& rAxisProperties
, const uno::Reference< util::XNumberFormatsSupplier >& xNumberFormatsSupplier
, sal_Int32 nDimensionCount )
: VPolarAxis( rAxisProperties, xNumberFormatsSupplier, 1/*nDimensionIndex*/, nDimensionCount )
{
m_aAxisProperties.m_fLabelDirectionSign=0.0;
m_aAxisProperties.m_fInnerDirectionSign=0.0;
m_aAxisProperties.m_bIsMainAxis=false;
m_aAxisProperties.m_aLabelAlignment=LABEL_ALIGN_RIGHT;
m_aAxisProperties.init();
m_apAxisWithLabels = std::auto_ptr<VCartesianAxis>( new VCartesianAxis(
m_aAxisProperties,xNumberFormatsSupplier,1/*nDimensionIndex*/,nDimensionCount
,new PolarPlottingPositionHelper() ) );
}
VPolarRadiusAxis::~VPolarRadiusAxis()
{
delete m_pPosHelper;
m_pPosHelper = NULL;
}
void VPolarRadiusAxis::setTransformationSceneToScreen( const drawing::HomogenMatrix& rMatrix)
{
VPolarAxis::setTransformationSceneToScreen( rMatrix );
m_apAxisWithLabels->setTransformationSceneToScreen( rMatrix );
}
void VPolarRadiusAxis::setExplicitScaleAndIncrement(
const ExplicitScaleData& rScale
, const ExplicitIncrementData& rIncrement )
throw (uno::RuntimeException)
{
VPolarAxis::setExplicitScaleAndIncrement( rScale, rIncrement );
m_apAxisWithLabels->setExplicitScaleAndIncrement( rScale, rIncrement );
}
void VPolarRadiusAxis::initPlotter( const uno::Reference< drawing::XShapes >& xLogicTarget
, const uno::Reference< drawing::XShapes >& xFinalTarget
, const uno::Reference< lang::XMultiServiceFactory >& xShapeFactory
, const rtl::OUString& rCID )
throw (uno::RuntimeException)
{
VPolarAxis::initPlotter( xLogicTarget, xFinalTarget, xShapeFactory, rCID );
m_apAxisWithLabels->initPlotter( xLogicTarget, xFinalTarget, xShapeFactory, rCID );
}
void VPolarRadiusAxis::setScales( const std::vector< ExplicitScaleData >& rScales, bool bSwapXAndYAxis )
{
VPolarAxis::setScales( rScales, bSwapXAndYAxis );
m_apAxisWithLabels->setScales( rScales, bSwapXAndYAxis );
}
void VPolarRadiusAxis::initAxisLabelProperties( const ::com::sun::star::awt::Size& rFontReferenceSize
, const ::com::sun::star::awt::Rectangle& rMaximumSpaceForLabels )
{
VPolarAxis::initAxisLabelProperties( rFontReferenceSize, rMaximumSpaceForLabels );
m_apAxisWithLabels->initAxisLabelProperties( rFontReferenceSize, rMaximumSpaceForLabels );
}
sal_Int32 VPolarRadiusAxis::estimateMaximumAutoMainIncrementCount()
{
return 2;
}
bool VPolarRadiusAxis::prepareShapeCreation()
{
//returns true if all is ready for further shape creation and any shapes need to be created
if( !isAnythingToDraw() )
return false;
if( m_xGroupShape_Shapes.is() )
return true;
return true;
}
void VPolarRadiusAxis::createMaximumLabels()
{
m_apAxisWithLabels->createMaximumLabels();
}
void VPolarRadiusAxis::updatePositions()
{
m_apAxisWithLabels->updatePositions();
}
void VPolarRadiusAxis::createLabels()
{
m_apAxisWithLabels->createLabels();
}
void VPolarRadiusAxis::createShapes()
{
if( !prepareShapeCreation() )
return;
const ExplicitScaleData& rAngleScale = m_pPosHelper->getScales()[0];
const ExplicitIncrementData& rAngleIncrement = m_aIncrements[0];
::std::vector< ::std::vector< TickInfo > > aAngleTickInfos;
TickFactory aAngleTickFactory( rAngleScale, rAngleIncrement );
aAngleTickFactory.getAllTicks( aAngleTickInfos );
uno::Reference< XScaling > xInverseScaling( NULL );
if( rAngleScale.Scaling.is() )
xInverseScaling = rAngleScale.Scaling->getInverseScaling();
AxisProperties aAxisProperties(m_aAxisProperties);
sal_Int32 nTick = 0;
EquidistantTickIter aIter( aAngleTickInfos, rAngleIncrement, 0, 0 );
for( TickInfo* pTickInfo = aIter.firstInfo()
; pTickInfo; pTickInfo = aIter.nextInfo(), nTick++ )
{
if( nTick == 0 )
{
m_apAxisWithLabels->createShapes();
continue;
}
//xxxxx pTickInfo->updateUnscaledValue( xInverseScaling );
aAxisProperties.m_pfMainLinePositionAtOtherAxis = new double( pTickInfo->getUnscaledTickValue() );
aAxisProperties.m_bDisplayLabels=false;
//-------------------
VCartesianAxis aAxis(aAxisProperties,m_xNumberFormatsSupplier
,1,2,new PolarPlottingPositionHelper());
aAxis.setExplicitScaleAndIncrement( m_aScale, m_aIncrement );
aAxis.initPlotter(m_xLogicTarget,m_xFinalTarget,m_xShapeFactory, m_aCID );
aAxis.setTransformationSceneToScreen( B3DHomMatrixToHomogenMatrix( m_aMatrixScreenToScene ) );
aAxis.setScales( m_pPosHelper->getScales(), false );
aAxis.initAxisLabelProperties(m_aAxisLabelProperties.m_aFontReferenceSize,m_aAxisLabelProperties.m_aMaximumSpaceForLabels);
aAxis.createShapes();
}
}
//.............................................................................
} //namespace chart
//.............................................................................