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