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