1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_chart2.hxx" 30*cdf0e10cSrcweir #include "VCartesianGrid.hxx" 31*cdf0e10cSrcweir #include "Tickmarks.hxx" 32*cdf0e10cSrcweir #include "PlottingPositionHelper.hxx" 33*cdf0e10cSrcweir #include "ShapeFactory.hxx" 34*cdf0e10cSrcweir #include "ObjectIdentifier.hxx" 35*cdf0e10cSrcweir #include "macros.hxx" 36*cdf0e10cSrcweir #include "CommonConverters.hxx" 37*cdf0e10cSrcweir #include "AxisHelper.hxx" 38*cdf0e10cSrcweir #include <com/sun/star/drawing/PointSequenceSequence.hpp> 39*cdf0e10cSrcweir #include <com/sun/star/drawing/LineStyle.hpp> 40*cdf0e10cSrcweir 41*cdf0e10cSrcweir #include <vector> 42*cdf0e10cSrcweir #include <memory> 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir //............................................................................. 45*cdf0e10cSrcweir namespace chart 46*cdf0e10cSrcweir { 47*cdf0e10cSrcweir //............................................................................. 48*cdf0e10cSrcweir using namespace ::com::sun::star; 49*cdf0e10cSrcweir using namespace ::com::sun::star::chart2; 50*cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 51*cdf0e10cSrcweir using ::com::sun::star::uno::Sequence; 52*cdf0e10cSrcweir 53*cdf0e10cSrcweir struct GridLinePoints 54*cdf0e10cSrcweir { 55*cdf0e10cSrcweir Sequence< double > P0; 56*cdf0e10cSrcweir Sequence< double > P1; 57*cdf0e10cSrcweir Sequence< double > P2; 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir GridLinePoints( const PlottingPositionHelper* pPosHelper, sal_Int32 nDimensionIndex 60*cdf0e10cSrcweir , CuboidPlanePosition eLeftWallPos=CuboidPlanePosition_Left 61*cdf0e10cSrcweir , CuboidPlanePosition eBackWallPos=CuboidPlanePosition_Back 62*cdf0e10cSrcweir , CuboidPlanePosition eBottomPos=CuboidPlanePosition_Bottom ); 63*cdf0e10cSrcweir void update( double fScaledTickValue ); 64*cdf0e10cSrcweir 65*cdf0e10cSrcweir sal_Int32 m_nDimensionIndex; 66*cdf0e10cSrcweir }; 67*cdf0e10cSrcweir 68*cdf0e10cSrcweir GridLinePoints::GridLinePoints( const PlottingPositionHelper* pPosHelper, sal_Int32 nDimensionIndex 69*cdf0e10cSrcweir , CuboidPlanePosition eLeftWallPos 70*cdf0e10cSrcweir , CuboidPlanePosition eBackWallPos 71*cdf0e10cSrcweir , CuboidPlanePosition eBottomPos ) 72*cdf0e10cSrcweir : m_nDimensionIndex(nDimensionIndex) 73*cdf0e10cSrcweir { 74*cdf0e10cSrcweir double MinX = pPosHelper->getLogicMinX(); 75*cdf0e10cSrcweir double MinY = pPosHelper->getLogicMinY(); 76*cdf0e10cSrcweir double MinZ = pPosHelper->getLogicMinZ(); 77*cdf0e10cSrcweir double MaxX = pPosHelper->getLogicMaxX(); 78*cdf0e10cSrcweir double MaxY = pPosHelper->getLogicMaxY(); 79*cdf0e10cSrcweir double MaxZ = pPosHelper->getLogicMaxZ(); 80*cdf0e10cSrcweir 81*cdf0e10cSrcweir pPosHelper->doLogicScaling( &MinX,&MinY,&MinZ ); 82*cdf0e10cSrcweir pPosHelper->doLogicScaling( &MaxX,&MaxY,&MaxZ ); 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir if(!pPosHelper->isMathematicalOrientationX()) 85*cdf0e10cSrcweir { 86*cdf0e10cSrcweir double fHelp = MinX; 87*cdf0e10cSrcweir MinX = MaxX; 88*cdf0e10cSrcweir MaxX = fHelp; 89*cdf0e10cSrcweir } 90*cdf0e10cSrcweir if(!pPosHelper->isMathematicalOrientationY()) 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir double fHelp = MinY; 93*cdf0e10cSrcweir MinY = MaxY; 94*cdf0e10cSrcweir MaxY = fHelp; 95*cdf0e10cSrcweir } 96*cdf0e10cSrcweir if(pPosHelper->isMathematicalOrientationZ())//z axis in draw is reverse to mathematical 97*cdf0e10cSrcweir { 98*cdf0e10cSrcweir double fHelp = MinZ; 99*cdf0e10cSrcweir MinZ = MaxZ; 100*cdf0e10cSrcweir MaxZ = fHelp; 101*cdf0e10cSrcweir } 102*cdf0e10cSrcweir bool bSwapXY = pPosHelper->isSwapXAndY(); 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir P0.realloc(3); 105*cdf0e10cSrcweir P1.realloc(3); 106*cdf0e10cSrcweir P2.realloc(3); 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir //P0: point on 'back' wall, not on 'left' wall 109*cdf0e10cSrcweir //P1: point on both walls 110*cdf0e10cSrcweir //P2: point on 'left' wall not on 'back' wall 111*cdf0e10cSrcweir 112*cdf0e10cSrcweir P0[0]=P1[0]=P2[0]= (CuboidPlanePosition_Left == eLeftWallPos || bSwapXY) ? MinX : MaxX; 113*cdf0e10cSrcweir P0[1]=P1[1]=P2[1]= (CuboidPlanePosition_Left == eLeftWallPos || !bSwapXY) ? MinY : MaxY; 114*cdf0e10cSrcweir P0[2]=P1[2]=P2[2]= (CuboidPlanePosition_Back == eBackWallPos) ? MinZ : MaxZ; 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir if(m_nDimensionIndex==0) 117*cdf0e10cSrcweir { 118*cdf0e10cSrcweir P0[1]= (CuboidPlanePosition_Left == eLeftWallPos || !bSwapXY) ? MaxY : MinY; 119*cdf0e10cSrcweir P2[2]= (CuboidPlanePosition_Back == eBackWallPos) ? MaxZ : MinZ; 120*cdf0e10cSrcweir if( CuboidPlanePosition_Bottom != eBottomPos && !bSwapXY ) 121*cdf0e10cSrcweir P2=P1; 122*cdf0e10cSrcweir } 123*cdf0e10cSrcweir else if(m_nDimensionIndex==1) 124*cdf0e10cSrcweir { 125*cdf0e10cSrcweir P0[0]= (CuboidPlanePosition_Left == eLeftWallPos || bSwapXY) ? MaxX : MinX; 126*cdf0e10cSrcweir P2[2]= (CuboidPlanePosition_Back == eBackWallPos) ? MaxZ : MinZ; 127*cdf0e10cSrcweir if( CuboidPlanePosition_Bottom != eBottomPos && bSwapXY ) 128*cdf0e10cSrcweir P2=P1; 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir else if(m_nDimensionIndex==2) 131*cdf0e10cSrcweir { 132*cdf0e10cSrcweir P0[0]= (CuboidPlanePosition_Left == eLeftWallPos || bSwapXY) ? MaxX : MinX; 133*cdf0e10cSrcweir P2[1]= (CuboidPlanePosition_Left == eLeftWallPos || !bSwapXY) ? MaxY : MinY; 134*cdf0e10cSrcweir if( CuboidPlanePosition_Bottom != eBottomPos ) 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir if( !bSwapXY ) 137*cdf0e10cSrcweir P0=P1; 138*cdf0e10cSrcweir else 139*cdf0e10cSrcweir P2=P1; 140*cdf0e10cSrcweir } 141*cdf0e10cSrcweir } 142*cdf0e10cSrcweir } 143*cdf0e10cSrcweir 144*cdf0e10cSrcweir void GridLinePoints::update( double fScaledTickValue ) 145*cdf0e10cSrcweir { 146*cdf0e10cSrcweir P0[m_nDimensionIndex] = P1[m_nDimensionIndex] = P2[m_nDimensionIndex] = fScaledTickValue; 147*cdf0e10cSrcweir } 148*cdf0e10cSrcweir 149*cdf0e10cSrcweir void addLine2D( drawing::PointSequenceSequence& rPoints, sal_Int32 nIndex 150*cdf0e10cSrcweir , const GridLinePoints& rScaledLogicPoints 151*cdf0e10cSrcweir , const Reference< XTransformation > & xTransformation 152*cdf0e10cSrcweir ) 153*cdf0e10cSrcweir { 154*cdf0e10cSrcweir drawing::Position3D aPA = SequenceToPosition3D( xTransformation->transform( rScaledLogicPoints.P0 ) ); 155*cdf0e10cSrcweir drawing::Position3D aPB = SequenceToPosition3D( xTransformation->transform( rScaledLogicPoints.P1 ) ); 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir rPoints[nIndex].realloc(2); 158*cdf0e10cSrcweir rPoints[nIndex][0].X = static_cast<sal_Int32>(aPA.PositionX); 159*cdf0e10cSrcweir rPoints[nIndex][0].Y = static_cast<sal_Int32>(aPA.PositionY); 160*cdf0e10cSrcweir rPoints[nIndex][1].X = static_cast<sal_Int32>(aPB.PositionX); 161*cdf0e10cSrcweir rPoints[nIndex][1].Y = static_cast<sal_Int32>(aPB.PositionY); 162*cdf0e10cSrcweir } 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir void addLine3D( drawing::PolyPolygonShape3D& rPoints, sal_Int32 nIndex 165*cdf0e10cSrcweir , const GridLinePoints& rBasePoints 166*cdf0e10cSrcweir , const Reference< XTransformation > & xTransformation ) 167*cdf0e10cSrcweir { 168*cdf0e10cSrcweir drawing::Position3D aPoint = SequenceToPosition3D( xTransformation->transform( rBasePoints.P0 ) ); 169*cdf0e10cSrcweir AddPointToPoly( rPoints, aPoint, nIndex ); 170*cdf0e10cSrcweir aPoint = SequenceToPosition3D( xTransformation->transform( rBasePoints.P1 ) ); 171*cdf0e10cSrcweir AddPointToPoly( rPoints, aPoint, nIndex ); 172*cdf0e10cSrcweir aPoint = SequenceToPosition3D( xTransformation->transform( rBasePoints.P2 ) ); 173*cdf0e10cSrcweir AddPointToPoly( rPoints, aPoint, nIndex ); 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir //--------------------------------------------------------------------------------- 177*cdf0e10cSrcweir //--------------------------------------------------------------------------------- 178*cdf0e10cSrcweir //--------------------------------------------------------------------------------- 179*cdf0e10cSrcweir //--------------------------------------------------------------------------------- 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir VCartesianGrid::VCartesianGrid( sal_Int32 nDimensionIndex, sal_Int32 nDimensionCount 182*cdf0e10cSrcweir , const Sequence< Reference< beans::XPropertySet > > & rGridPropertiesList ) 183*cdf0e10cSrcweir : VAxisOrGridBase( nDimensionIndex, nDimensionCount ) 184*cdf0e10cSrcweir , m_aGridPropertiesList( rGridPropertiesList ) 185*cdf0e10cSrcweir { 186*cdf0e10cSrcweir m_pPosHelper = new PlottingPositionHelper(); 187*cdf0e10cSrcweir } 188*cdf0e10cSrcweir 189*cdf0e10cSrcweir VCartesianGrid::~VCartesianGrid() 190*cdf0e10cSrcweir { 191*cdf0e10cSrcweir delete m_pPosHelper; 192*cdf0e10cSrcweir m_pPosHelper = NULL; 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir void VCartesianGrid::fillLinePropertiesFromGridModel( ::std::vector<VLineProperties>& rLinePropertiesList 196*cdf0e10cSrcweir , const Sequence< Reference< beans::XPropertySet > > & rGridPropertiesList ) 197*cdf0e10cSrcweir { 198*cdf0e10cSrcweir rLinePropertiesList.clear(); 199*cdf0e10cSrcweir if( !rGridPropertiesList.getLength() ) 200*cdf0e10cSrcweir return; 201*cdf0e10cSrcweir 202*cdf0e10cSrcweir VLineProperties aLineProperties; 203*cdf0e10cSrcweir for( sal_Int32 nN=0; nN < rGridPropertiesList.getLength(); nN++ ) 204*cdf0e10cSrcweir { 205*cdf0e10cSrcweir if(!AxisHelper::isGridVisible( rGridPropertiesList[nN] )) 206*cdf0e10cSrcweir aLineProperties.LineStyle = uno::makeAny( drawing::LineStyle_NONE ); 207*cdf0e10cSrcweir else 208*cdf0e10cSrcweir aLineProperties.initFromPropertySet( rGridPropertiesList[nN] ); 209*cdf0e10cSrcweir rLinePropertiesList.push_back(aLineProperties); 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir }; 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir void VCartesianGrid::createShapes() 214*cdf0e10cSrcweir { 215*cdf0e10cSrcweir if(!m_aGridPropertiesList.getLength()) 216*cdf0e10cSrcweir return; 217*cdf0e10cSrcweir //somehow equal to axis tickmarks 218*cdf0e10cSrcweir 219*cdf0e10cSrcweir //----------------------------------------- 220*cdf0e10cSrcweir //create named group shape 221*cdf0e10cSrcweir Reference< drawing::XShapes > xGroupShape_Shapes( 222*cdf0e10cSrcweir this->createGroupShape( m_xLogicTarget, m_aCID ) ); 223*cdf0e10cSrcweir 224*cdf0e10cSrcweir if(!xGroupShape_Shapes.is()) 225*cdf0e10cSrcweir return; 226*cdf0e10cSrcweir //----------------------------------------- 227*cdf0e10cSrcweir 228*cdf0e10cSrcweir ::std::vector<VLineProperties> aLinePropertiesList; 229*cdf0e10cSrcweir fillLinePropertiesFromGridModel( aLinePropertiesList, m_aGridPropertiesList ); 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir //----------------------------------------- 232*cdf0e10cSrcweir //create all scaled tickmark values 233*cdf0e10cSrcweir std::auto_ptr< TickFactory > apTickFactory( this->createTickFactory() ); 234*cdf0e10cSrcweir TickFactory& aTickFactory = *apTickFactory.get(); 235*cdf0e10cSrcweir ::std::vector< ::std::vector< TickInfo > > aAllTickInfos; 236*cdf0e10cSrcweir aTickFactory.getAllTicks( aAllTickInfos ); 237*cdf0e10cSrcweir 238*cdf0e10cSrcweir //----------------------------------------- 239*cdf0e10cSrcweir //create tick mark line shapes 240*cdf0e10cSrcweir ::std::vector< ::std::vector< TickInfo > >::iterator aDepthIter = aAllTickInfos.begin(); 241*cdf0e10cSrcweir const ::std::vector< ::std::vector< TickInfo > >::const_iterator aDepthEnd = aAllTickInfos.end(); 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir if(aDepthIter == aDepthEnd)//no tickmarks at all 244*cdf0e10cSrcweir return; 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir 247*cdf0e10cSrcweir sal_Int32 nLinePropertiesCount = aLinePropertiesList.size(); 248*cdf0e10cSrcweir for( sal_Int32 nDepth=0 249*cdf0e10cSrcweir ; aDepthIter != aDepthEnd && nDepth < nLinePropertiesCount 250*cdf0e10cSrcweir ; aDepthIter++, nDepth++ ) 251*cdf0e10cSrcweir { 252*cdf0e10cSrcweir if( !aLinePropertiesList[nDepth].isLineVisible() ) 253*cdf0e10cSrcweir continue; 254*cdf0e10cSrcweir 255*cdf0e10cSrcweir Reference< drawing::XShapes > xTarget( xGroupShape_Shapes ); 256*cdf0e10cSrcweir if( nDepth > 0 ) 257*cdf0e10cSrcweir { 258*cdf0e10cSrcweir xTarget.set( this->createGroupShape( m_xLogicTarget 259*cdf0e10cSrcweir , ObjectIdentifier::addChildParticle( m_aCID, ObjectIdentifier::createChildParticleWithIndex( OBJECTTYPE_SUBGRID, nDepth-1 ) ) 260*cdf0e10cSrcweir ) ); 261*cdf0e10cSrcweir if(!xTarget.is()) 262*cdf0e10cSrcweir xTarget.set( xGroupShape_Shapes ); 263*cdf0e10cSrcweir } 264*cdf0e10cSrcweir 265*cdf0e10cSrcweir if(2==m_nDimension) 266*cdf0e10cSrcweir { 267*cdf0e10cSrcweir 268*cdf0e10cSrcweir GridLinePoints aGridLinePoints( m_pPosHelper, m_nDimensionIndex ); 269*cdf0e10cSrcweir 270*cdf0e10cSrcweir sal_Int32 nPointCount = (*aDepthIter).size(); 271*cdf0e10cSrcweir drawing::PointSequenceSequence aPoints(nPointCount); 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir ::std::vector< TickInfo >::const_iterator aTickIter = (*aDepthIter).begin(); 274*cdf0e10cSrcweir const ::std::vector< TickInfo >::const_iterator aTickEnd = (*aDepthIter).end(); 275*cdf0e10cSrcweir sal_Int32 nRealPointCount = 0; 276*cdf0e10cSrcweir for( ; aTickIter != aTickEnd; aTickIter++ ) 277*cdf0e10cSrcweir { 278*cdf0e10cSrcweir if( !(*aTickIter).bPaintIt ) 279*cdf0e10cSrcweir continue; 280*cdf0e10cSrcweir aGridLinePoints.update( (*aTickIter).fScaledTickValue ); 281*cdf0e10cSrcweir addLine2D( aPoints, nRealPointCount, aGridLinePoints, m_pPosHelper->getTransformationScaledLogicToScene() ); 282*cdf0e10cSrcweir nRealPointCount++; 283*cdf0e10cSrcweir } 284*cdf0e10cSrcweir aPoints.realloc(nRealPointCount); 285*cdf0e10cSrcweir m_pShapeFactory->createLine2D( xTarget, aPoints, &aLinePropertiesList[nDepth] ); 286*cdf0e10cSrcweir 287*cdf0e10cSrcweir //prepare polygon for handle shape: 288*cdf0e10cSrcweir drawing::PointSequenceSequence aHandlesPoints(1); 289*cdf0e10cSrcweir sal_Int32 nOldHandleCount = aHandlesPoints[0].getLength(); 290*cdf0e10cSrcweir aHandlesPoints[0].realloc(nOldHandleCount+nRealPointCount); 291*cdf0e10cSrcweir for( sal_Int32 nN = 0; nN<nRealPointCount; nN++) 292*cdf0e10cSrcweir aHandlesPoints[0][nOldHandleCount+nN] = aPoints[nN][1]; 293*cdf0e10cSrcweir 294*cdf0e10cSrcweir //create handle shape: 295*cdf0e10cSrcweir VLineProperties aHandleLineProperties; 296*cdf0e10cSrcweir aHandleLineProperties.LineStyle = uno::makeAny( drawing::LineStyle_NONE ); 297*cdf0e10cSrcweir Reference< drawing::XShape > xHandleShape = 298*cdf0e10cSrcweir m_pShapeFactory->createLine2D( xTarget, aHandlesPoints, &aHandleLineProperties ); 299*cdf0e10cSrcweir m_pShapeFactory->setShapeName( xHandleShape, C2U("HandlesOnly") ); 300*cdf0e10cSrcweir } 301*cdf0e10cSrcweir //----------------------------------------- 302*cdf0e10cSrcweir else //if(2!=m_nDimension) 303*cdf0e10cSrcweir { 304*cdf0e10cSrcweir GridLinePoints aGridLinePoints( m_pPosHelper, m_nDimensionIndex, m_eLeftWallPos, m_eBackWallPos, m_eBottomPos ); 305*cdf0e10cSrcweir 306*cdf0e10cSrcweir sal_Int32 nPointCount = (*aDepthIter).size(); 307*cdf0e10cSrcweir drawing::PolyPolygonShape3D aPoints; 308*cdf0e10cSrcweir aPoints.SequenceX.realloc(nPointCount); 309*cdf0e10cSrcweir aPoints.SequenceY.realloc(nPointCount); 310*cdf0e10cSrcweir aPoints.SequenceZ.realloc(nPointCount); 311*cdf0e10cSrcweir 312*cdf0e10cSrcweir ::std::vector< TickInfo >::const_iterator aTickIter = (*aDepthIter).begin(); 313*cdf0e10cSrcweir const ::std::vector< TickInfo >::const_iterator aTickEnd = (*aDepthIter).end(); 314*cdf0e10cSrcweir sal_Int32 nRealPointCount = 0; 315*cdf0e10cSrcweir sal_Int32 nPolyIndex = 0; 316*cdf0e10cSrcweir for( ; aTickIter != aTickEnd; aTickIter++, nPolyIndex++ ) 317*cdf0e10cSrcweir { 318*cdf0e10cSrcweir if( !(*aTickIter).bPaintIt ) 319*cdf0e10cSrcweir continue; 320*cdf0e10cSrcweir 321*cdf0e10cSrcweir aGridLinePoints.update( (*aTickIter).fScaledTickValue ); 322*cdf0e10cSrcweir addLine3D( aPoints, nPolyIndex, aGridLinePoints, m_pPosHelper->getTransformationScaledLogicToScene() ); 323*cdf0e10cSrcweir nRealPointCount+=3; 324*cdf0e10cSrcweir } 325*cdf0e10cSrcweir aPoints.SequenceX.realloc(nRealPointCount); 326*cdf0e10cSrcweir aPoints.SequenceY.realloc(nRealPointCount); 327*cdf0e10cSrcweir aPoints.SequenceZ.realloc(nRealPointCount); 328*cdf0e10cSrcweir m_pShapeFactory->createLine3D( xTarget, aPoints, aLinePropertiesList[nDepth] ); 329*cdf0e10cSrcweir } 330*cdf0e10cSrcweir } 331*cdf0e10cSrcweir } 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir //............................................................................. 334*cdf0e10cSrcweir } //namespace chart 335*cdf0e10cSrcweir //............................................................................. 336