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 #ifndef __CHART_COMMON_CONVERTERS_HXX
24*b1cdbd2cSJim Jagielski #define __CHART_COMMON_CONVERTERS_HXX
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <tools/poly.hxx>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Point.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Rectangle.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/awt/Size.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/Direction3D.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/HomogenMatrix.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/HomogenMatrix3.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/PointSequenceSequence.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/Position3D.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/text/WritingMode.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/chart2/data/XDataSequence.hpp>
39*b1cdbd2cSJim Jagielski #include <basegfx/matrix/b2dhommatrix.hxx>
40*b1cdbd2cSJim Jagielski #include <basegfx/point/b3dpoint.hxx>
41*b1cdbd2cSJim Jagielski #include <basegfx/vector/b3dvector.hxx>
42*b1cdbd2cSJim Jagielski #include "charttoolsdllapi.hxx"
43*b1cdbd2cSJim Jagielski 
44*b1cdbd2cSJim Jagielski #include <vector>
45*b1cdbd2cSJim Jagielski #include <algorithm>
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski //.............................................................................
48*b1cdbd2cSJim Jagielski namespace chart
49*b1cdbd2cSJim Jagielski {
50*b1cdbd2cSJim Jagielski //.............................................................................
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
53*b1cdbd2cSJim Jagielski /**
54*b1cdbd2cSJim Jagielski diverse methods for class conversions; e.g. ::basegfx::B3DHomMatrix to HomogenMatrix
55*b1cdbd2cSJim Jagielski and operations e.g  drawing::Position3D + drawing::Direction3D
56*b1cdbd2cSJim Jagielski */
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
59*b1cdbd2cSJim Jagielski /** ::basegfx::B3DHomMatrix -> HomogenMatrix
60*b1cdbd2cSJim Jagielski */
61*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::drawing::HomogenMatrix
62*b1cdbd2cSJim Jagielski                  B3DHomMatrixToHomogenMatrix( const ::basegfx::B3DHomMatrix& rM );
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
65*b1cdbd2cSJim Jagielski /** HomogenMatrix -> ::basegfx::B3DHomMatrix
66*b1cdbd2cSJim Jagielski */
67*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::basegfx::B3DHomMatrix HomogenMatrixToB3DHomMatrix( const com::sun::star::drawing::HomogenMatrix& rHM );
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
70*b1cdbd2cSJim Jagielski /** ::basegfx::B3DHomMatrix -> B2DHomMatrix
71*b1cdbd2cSJim Jagielski */
72*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
73*b1cdbd2cSJim Jagielski ::basegfx::B2DHomMatrix IgnoreZ( const ::basegfx::B3DHomMatrix& rM );
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
76*b1cdbd2cSJim Jagielski /** B2DHomMatrix <-> HomogenMatrix3
77*b1cdbd2cSJim Jagielski */
78*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::drawing::HomogenMatrix3
79*b1cdbd2cSJim Jagielski                 B2DHomMatrixToHomogenMatrix3( const ::basegfx::B2DHomMatrix& rM );
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
82*b1cdbd2cSJim Jagielski /** Position3D -> B3DPoint
83*b1cdbd2cSJim Jagielski */
84*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::basegfx::B3DPoint Position3DToB3DPoint( const com::sun::star::drawing::Position3D& rPosition );
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
87*b1cdbd2cSJim Jagielski /** B3DVector -> Direction3D
88*b1cdbd2cSJim Jagielski */
89*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::drawing::Direction3D B3DVectorToDirection3D( const ::basegfx::B3DVector& rVector);
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
92*b1cdbd2cSJim Jagielski /** B3DPoint -> Position3D
93*b1cdbd2cSJim Jagielski */
94*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::drawing::Position3D B3DPointToPosition3D( const ::basegfx::B3DPoint& rPoint);
95*b1cdbd2cSJim Jagielski 
96*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
97*b1cdbd2cSJim Jagielski /** Direction3D -> B3DVector
98*b1cdbd2cSJim Jagielski */
99*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::basegfx::B3DVector Direction3DToB3DVector( const com::sun::star::drawing::Direction3D& rDirection);
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
102*b1cdbd2cSJim Jagielski /** PolyPolygonShape3D + drawing::Position3D -> PolyPolygonShape3D
103*b1cdbd2cSJim Jagielski */
104*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
105*b1cdbd2cSJim Jagielski void AddPointToPoly( ::com::sun::star::drawing::PolyPolygonShape3D& rPoly
106*b1cdbd2cSJim Jagielski                 , const com::sun::star::drawing::Position3D& rPos
107*b1cdbd2cSJim Jagielski                 , sal_Int32 nSequenceIndex=0 );
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
110*b1cdbd2cSJim Jagielski /** get a single Point from a Polygon
111*b1cdbd2cSJim Jagielski */
112*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::com::sun::star::drawing::Position3D getPointFromPoly(
113*b1cdbd2cSJim Jagielski                   const ::com::sun::star::drawing::PolyPolygonShape3D& rPolygon
114*b1cdbd2cSJim Jagielski                 , sal_Int32 nPointIndex, sal_Int32 nPolyIndex=0 );
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
117*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
118*b1cdbd2cSJim Jagielski void addPolygon( com::sun::star::drawing::PolyPolygonShape3D& rRet
119*b1cdbd2cSJim Jagielski 				, const com::sun::star::drawing::PolyPolygonShape3D& rAdd );
120*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
121*b1cdbd2cSJim Jagielski /** PolyPolygonShape3D + PolyPolygonShape3D -> PolyPolygonShape3D
122*b1cdbd2cSJim Jagielski */
123*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
124*b1cdbd2cSJim Jagielski void appendPoly( com::sun::star::drawing::PolyPolygonShape3D& rRet
125*b1cdbd2cSJim Jagielski                 , const com::sun::star::drawing::PolyPolygonShape3D& rAdd );
126*b1cdbd2cSJim Jagielski 
127*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
128*b1cdbd2cSJim Jagielski /** PolyPolygonBezierCoords -> PolyPolygonShape3D
129*b1cdbd2cSJim Jagielski */
130*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
131*b1cdbd2cSJim Jagielski com::sun::star::drawing::PolyPolygonShape3D BezierToPoly(
132*b1cdbd2cSJim Jagielski     const com::sun::star::drawing::PolyPolygonBezierCoords& rBezier );
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
135*b1cdbd2cSJim Jagielski /** PolyPolygonShape3D -> drawing::PointSequenceSequence (2D)
136*b1cdbd2cSJim Jagielski */
137*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
138*b1cdbd2cSJim Jagielski com::sun::star::drawing::PointSequenceSequence PolyToPointSequence(
139*b1cdbd2cSJim Jagielski                 const com::sun::star::drawing::PolyPolygonShape3D& rPolyPolygon );
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
142*b1cdbd2cSJim Jagielski /** drawing::PointSequenceSequence + drawing::PointSequenceSequence
143*b1cdbd2cSJim Jagielski */
144*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
145*b1cdbd2cSJim Jagielski void appendPointSequence( com::sun::star::drawing::PointSequenceSequence& rTarget
146*b1cdbd2cSJim Jagielski                         , com::sun::star::drawing::PointSequenceSequence& rAdd );
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
149*b1cdbd2cSJim Jagielski /** Position3D + Direction3D == Position3D
150*b1cdbd2cSJim Jagielski */
151*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::drawing::Position3D
152*b1cdbd2cSJim Jagielski                 operator+( const com::sun::star::drawing::Position3D& rPos
153*b1cdbd2cSJim Jagielski                            , const com::sun::star::drawing::Direction3D& rDirection);
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
156*b1cdbd2cSJim Jagielski /** Position3D - Position3D == Direction3D
157*b1cdbd2cSJim Jagielski */
158*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::drawing::Direction3D
159*b1cdbd2cSJim Jagielski                 operator-( const com::sun::star::drawing::Position3D& rPos1
160*b1cdbd2cSJim Jagielski                            , const com::sun::star::drawing::Position3D& rPos2);
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
163*b1cdbd2cSJim Jagielski /** Position3D == Position3D ?
164*b1cdbd2cSJim Jagielski */
165*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
166*b1cdbd2cSJim Jagielski bool            operator==( const com::sun::star::drawing::Position3D& rPos1
167*b1cdbd2cSJim Jagielski                            , const com::sun::star::drawing::Position3D& rPos2);
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
170*b1cdbd2cSJim Jagielski /** awt::Rect --> awt::Point (2D)
171*b1cdbd2cSJim Jagielski */
172*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::com::sun::star::awt::Point ToPoint( const com::sun::star::awt::Rectangle& rRectangle );
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
175*b1cdbd2cSJim Jagielski /** awt::Rect --> awt::Size (2D)
176*b1cdbd2cSJim Jagielski */
177*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::com::sun::star::awt::Size ToSize( const com::sun::star::awt::Rectangle& rRectangle );
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
180*b1cdbd2cSJim Jagielski /** Position3D --> awt::Point (2D)
181*b1cdbd2cSJim Jagielski */
182*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::com::sun::star::awt::Point Position3DToAWTPoint( const com::sun::star::drawing::Position3D& rPos );
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
185*b1cdbd2cSJim Jagielski /** Direction3D --> awt::Size (2D)
186*b1cdbd2cSJim Jagielski */
187*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS ::com::sun::star::awt::Size Direction3DToAWTSize( const com::sun::star::drawing::Direction3D& rDirection );
188*b1cdbd2cSJim Jagielski 
189*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
190*b1cdbd2cSJim Jagielski /** B3DPoint -> Sequence<double>
191*b1cdbd2cSJim Jagielski */
192*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::uno::Sequence< double > B3DPointToSequence( const ::basegfx::B3DPoint& rPoint );
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
195*b1cdbd2cSJim Jagielski /** Sequence<double> -> drawing::Position3D
196*b1cdbd2cSJim Jagielski */
197*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::drawing::Position3D
198*b1cdbd2cSJim Jagielski                 SequenceToPosition3D( const com::sun::star::uno::Sequence< double >& rSeq );
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
201*b1cdbd2cSJim Jagielski /** drawing::Position3D -> Sequence<double>
202*b1cdbd2cSJim Jagielski */
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS com::sun::star::uno::Sequence< double >
205*b1cdbd2cSJim Jagielski                 Position3DToSequence( const com::sun::star::drawing::Position3D& rPosition );
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
208*b1cdbd2cSJim Jagielski /** chart2::XDataSequence -> uno::Sequence< double >
209*b1cdbd2cSJim Jagielski */
210*b1cdbd2cSJim Jagielski 
211*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
212*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< double > DataSequenceToDoubleSequence(
213*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Reference<
214*b1cdbd2cSJim Jagielski         ::com::sun::star::chart2::data::XDataSequence > & xDataSequence );
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
217*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< rtl::OUString > DataSequenceToStringSequence(
218*b1cdbd2cSJim Jagielski     const ::com::sun::star::uno::Reference<
219*b1cdbd2cSJim Jagielski         ::com::sun::star::chart2::data::XDataSequence > & xDataSequence );
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski //-----------------------------------------------------------------------------
222*b1cdbd2cSJim Jagielski /** uno::Sequence< uno::Sequence< T > > -> uno::Sequence< T >
223*b1cdbd2cSJim Jagielski  */
224*b1cdbd2cSJim Jagielski template< typename T >
225*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< T >
FlattenSequence(const::com::sun::star::uno::Sequence<::com::sun::star::uno::Sequence<T>> & aSeqSeq)226*b1cdbd2cSJim Jagielski     FlattenSequence( const ::com::sun::star::uno::Sequence<
227*b1cdbd2cSJim Jagielski                          ::com::sun::star::uno::Sequence< T > > & aSeqSeq )
228*b1cdbd2cSJim Jagielski {
229*b1cdbd2cSJim Jagielski     sal_Int32 nOuter, nInner, nCount = 0,
230*b1cdbd2cSJim Jagielski         nResultSize = 0;
231*b1cdbd2cSJim Jagielski     const sal_Int32 nOuterSize = aSeqSeq.getLength();
232*b1cdbd2cSJim Jagielski     for( nOuter=0; nOuter<nOuterSize; ++nOuter )
233*b1cdbd2cSJim Jagielski         nResultSize += aSeqSeq[nOuter].getLength();
234*b1cdbd2cSJim Jagielski     ::com::sun::star::uno::Sequence< T > aResult( nResultSize );
235*b1cdbd2cSJim Jagielski 
236*b1cdbd2cSJim Jagielski     for( nOuter=0; nOuter<nOuterSize; ++nOuter )
237*b1cdbd2cSJim Jagielski     {
238*b1cdbd2cSJim Jagielski         const sal_Int32 nInnerSize = aSeqSeq[nOuter].getLength();
239*b1cdbd2cSJim Jagielski         for( nInner=0; nInner<nInnerSize; ++nInner, ++nCount )
240*b1cdbd2cSJim Jagielski             aResult[nCount] = aSeqSeq[nOuter][nInner];
241*b1cdbd2cSJim Jagielski     }
242*b1cdbd2cSJim Jagielski     return aResult;
243*b1cdbd2cSJim Jagielski }
244*b1cdbd2cSJim Jagielski 
245*b1cdbd2cSJim Jagielski template< typename T >
246*b1cdbd2cSJim Jagielski     ::std::vector< T >
FlattenVector(const::std::vector<::std::vector<T>> & rVecVec)247*b1cdbd2cSJim Jagielski     FlattenVector( const ::std::vector< ::std::vector< T > > & rVecVec )
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski     typedef ::std::vector< T > tFlatVec;
250*b1cdbd2cSJim Jagielski     typedef ::std::vector< tFlatVec > tVecVec;
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski     tFlatVec aResult;
253*b1cdbd2cSJim Jagielski     typename tVecVec::const_iterator aOuterEnd( rVecVec.end());
254*b1cdbd2cSJim Jagielski     for( typename tVecVec::const_iterator aOuterIt( rVecVec.begin()); aOuterIt != aOuterEnd; ++aOuterIt )
255*b1cdbd2cSJim Jagielski         ::std::copy( aOuterIt->begin(), aOuterIt->end(), back_inserter( aResult ));
256*b1cdbd2cSJim Jagielski     return aResult;
257*b1cdbd2cSJim Jagielski }
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
260*b1cdbd2cSJim Jagielski sal_Bool hasDoubleValue( const ::com::sun::star::uno::Any& rAny );
261*b1cdbd2cSJim Jagielski 
262*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
263*b1cdbd2cSJim Jagielski sal_Bool  hasLongOrShortValue( const ::com::sun::star::uno::Any& rAny );
264*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
265*b1cdbd2cSJim Jagielski sal_Int16 getShortForLongAlso( const ::com::sun::star::uno::Any& rAny );
266*b1cdbd2cSJim Jagielski 
267*b1cdbd2cSJim Jagielski OOO_DLLPUBLIC_CHARTTOOLS
268*b1cdbd2cSJim Jagielski bool replaceParamterInString( rtl::OUString & rInOutResourceString,
269*b1cdbd2cSJim Jagielski                             const rtl::OUString & rParamToReplace,
270*b1cdbd2cSJim Jagielski                             const rtl::OUString & rReplaceWith );
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski //.............................................................................
273*b1cdbd2cSJim Jagielski } //namespace chart
274*b1cdbd2cSJim Jagielski //.............................................................................
275*b1cdbd2cSJim Jagielski #endif
276