Adds possibility to color marks in scatter plots
[scilab.git] / scilab / modules / graphic_objects / includes / NgonPolylineData.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010 - DIGITEO - Manuel Juliachs
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12
13 #ifndef NGON_POLYLINE_DATA_HXX
14 #define NGON_POLYLINE_DATA_HXX
15
16 #include <string>
17
18 #include "NgonGeneralData.hxx"
19
20 extern "C" {
21 #include "BOOL.h"
22
23 #include <stdio.h>
24 }
25
26 /**
27  * A class for polyline data
28  */
29
30 class NgonPolylineData : public NgonGeneralData
31 {
32 private :
33
34     /** Specifies whether zCoordinates have been set */
35     int zCoordinatesSet;
36
37     /** The x-shift coordinates array */
38     double* xShift;
39
40     /** The y-shift coordinates array */
41     double* yShift;
42
43     /** The z-shift coordinates array */
44     double* zShift;
45
46     /** Specifies whether xShift coordinates have been set */
47     int xShiftSet;
48
49     /** Specifies whether yShift coordinates have been set */
50     int yShiftSet;
51
52     /** Specifies whether zShift coordinates have been set */
53     int zShiftSet;
54
55     /** The coordinates shift array */
56     double* coordinatesShift;
57
58     /** data of datatip display function */
59     int* display_function_data;
60     int display_function_data_size;
61
62     /** The colors array */
63     int* colors;
64
65     int numColors;
66
67 public :
68     /**
69      * Constructor
70      */
71     NgonPolylineData(void);
72
73     /**
74      * Destructor
75      */
76     virtual ~NgonPolylineData(void);
77
78     /**
79      * Returns the identifier associated to a property name
80      * @param[in] propertyName the property name
81      * @return the property identifier
82      */
83     int getPropertyFromName(int propertyName);
84
85     /**
86      * Sets a data property
87      * @param[in] property the property identifier
88      * @param[in] value a pointer to the property values
89      * @param[in] numElements the number of elements to set
90      * @return 1 if the property has been successfully set, 0 otherwise
91      */
92     int setDataProperty(int property, void const* value, int numElements);
93
94     /**
95      * Returns a data property
96      * @param[in] property the property identifier
97      * @param[out] a pointer to a pointer to the returned property values
98      */
99     void getDataProperty(int property, void **_pvData);
100
101     /**
102      * Returns the number of elements (number of vertices making up the polyline)
103      * @return the polyline's number of vertices
104      */
105     int getNumElements(void);
106
107     /**
108      * Returns the z coordinates flag
109      * @return the z coordinates flag
110      */
111     int getZCoordinatesSet(void);
112
113     /**
114      * Sets the z coordinates flag
115      * @param[in] zCoordinatesSet the z coordinates flag to set (1 to specify that z coordinates have been set, 0 otherwise)
116      */
117     void setZCoordinatesSet(int zCoordinatesSet);
118
119     /**
120      * Returns the x coordinates shift array
121      * @return a pointer to the x coordinates shift array
122      */
123     double* getXCoordinatesShift(void);
124
125     /**
126      * Sets the x coordinates shift array
127      * Resizes it if required.
128      * @param[in] data a pointer to the x shift array (numElements values)
129      * @param[in] numElements the number of elements in the array
130      */
131     int setXCoordinatesShift(double const* data, int numElements);
132
133     /**
134      * Returns the y coordinates shift array
135      * @return a pointer to the y coordinates shift array
136      */
137     double* getYCoordinatesShift();
138
139     /**
140      * Sets the y coordinates shift array
141      * Resizes it if required.
142      * @param[in] data a pointer to the y shift array (numElements values)
143      * @param[in] numElements the number of elements in the array
144      */
145     int setYCoordinatesShift(double const* data, int numElements);
146
147     /**
148      * Returns the z coordinates shift array
149      * @return a pointer to the z coordinates shift array
150      */
151     double* getZCoordinatesShift();
152
153     /**
154      * Sets the z coordinates shift array
155      * Resizes it if required.
156      * @param data the z shift array (numElements values)
157      * @param numElements the number of elements in the array
158      */
159     int setZCoordinatesShift(double const* data, int numElements);
160
161     /**
162      * Returns the x coordinates shift array flag
163      * @return the x coordinates shift array flag
164      */
165     int getXCoordinatesShiftSet(void);
166
167     /**
168      * Sets the x coordinates shift array flag
169      * Deletes it if xShiftSet equal to 0
170      * @param[in] the x shift array set flag
171      */
172     void setXCoordinatesShiftSet(int xShiftSet);
173
174     /**
175      * Returns the y coordinates shift array flag
176      * @return the y coordinates shift array flag
177      */
178     int getYCoordinatesShiftSet(void);
179
180     /**
181      * Sets the y coordinates shift array flag
182      * Deletes it if yShiftSet equal to 0
183      * @param[in] the y shift array set flag
184      */
185     void setYCoordinatesShiftSet(int yShiftSet);
186
187     /**
188      * Returns the z coordinates shift array flag
189      * @return the z coordinates shift array flag
190      */
191     int getZCoordinatesShiftSet(void);
192
193     /**
194      * Sets the z coordinates shift array flag
195      * Deletes it if zShiftSet equal to 0
196      * @param[in] the z shift array set flag
197      */
198     void setZCoordinatesShiftSet(int zShiftSet);
199
200     /**
201      * Sets the number of elements composing the polyline
202      * (i.e. the number of vertices per gon)
203      * Updates the coordinates shift arrays if required.
204      * The latter probably ought to be done in one of the
205      * Data set methods.
206      * @param[in] numElementsArray a pointer to a 2-element array (always 1, #vertices)
207      * @return 1 if it succeeded, 0 if the allocation failed
208      */
209     int setNumElementsArray(int const* numElementsArray);
210
211     /**
212      * Copies the former shift coordinates array into the new one
213      * and pads with zeroes if the new number of elements exceeds
214      * the former one.
215      * @param[in] newShift a pointer the new shift coordinates array
216      * @param[in] oldShift a pointer to the former shift coordinates array
217      * @param[in] numElementsNew the new array's number of elements
218      */
219     void copyShiftCoordinatesArray(double * newShift, double const* oldShift, int numElementsNew);
220
221     int setColors(int const* newColors, int numElements);
222
223     int * getColors();
224
225     int getNumColors();
226
227     /**
228      * Deletes the coordinates and shift arrays
229      */
230     void deleteCoordinatesArrays(void);
231
232     /**
233      * Sets data for display function
234      * @param data (numElements values)
235      * @param numElements the number of elements in the array
236      */
237     int setDisplayFunctionData(int const* data, int numElements);
238     int getDisplayFunctionDataSize();
239     int* getDisplayFunctionData();
240 };
241
242 #endif