2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2010 - DIGITEO - Manuel Juliachs
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
15 #include "NgonPolylineData.hxx"
16 #include "DataProperties.hxx"
23 #include "graphicObjectProperties.h"
26 NgonPolylineData::NgonPolylineData(void)
36 coordinatesShift = NULL;
41 NgonPolylineData::~NgonPolylineData(void)
59 int NgonPolylineData::getPropertyFromName(int propertyName)
63 case __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__ :
64 return NUM_ELEMENTS_ARRAY;
65 case __GO_DATA_MODEL_X_COORDINATES_SHIFT__ :
66 return X_COORDINATES_SHIFT;
67 case __GO_DATA_MODEL_Y_COORDINATES_SHIFT__ :
68 return Y_COORDINATES_SHIFT;
69 case __GO_DATA_MODEL_Z_COORDINATES_SHIFT__ :
70 return Z_COORDINATES_SHIFT;
71 case __GO_DATA_MODEL_NUM_ELEMENTS__ :
73 case __GO_DATA_MODEL_X_COORDINATES_SHIFT_SET__ :
74 return X_COORDINATES_SHIFT_SET;
75 case __GO_DATA_MODEL_Y_COORDINATES_SHIFT_SET__ :
76 return Y_COORDINATES_SHIFT_SET;
77 case __GO_DATA_MODEL_Z_COORDINATES_SHIFT_SET__ :
78 return Z_COORDINATES_SHIFT_SET;
79 case __GO_DATA_MODEL_Z_COORDINATES_SET__ :
80 return Z_COORDINATES_SET;
82 return NgonGeneralData::getPropertyFromName(propertyName);
88 int NgonPolylineData::setDataProperty(int property, void const* value, int numElements)
90 if (property == NUM_ELEMENTS_ARRAY)
92 return setNumElementsArray((int const*) value);
94 else if (property == X_COORDINATES_SHIFT)
96 return setXCoordinatesShift((double const*) value, numElements);
98 else if (property == Y_COORDINATES_SHIFT)
100 return setYCoordinatesShift((double const*) value, numElements);
102 else if (property == Z_COORDINATES_SHIFT)
104 return setZCoordinatesShift((double const*) value, numElements);
106 else if (property == X_COORDINATES_SHIFT_SET)
108 setXCoordinatesShiftSet(*((int const*) value));
110 else if (property == Y_COORDINATES_SHIFT_SET)
112 setYCoordinatesShiftSet(*((int const*) value));
114 else if (property == Z_COORDINATES_SHIFT_SET)
116 setZCoordinatesShiftSet(*((int const*) value));
118 else if (property == Z_COORDINATES_SET)
120 setZCoordinatesSet(*((int const*) value));
124 return NgonGeneralData::setDataProperty(property, value, numElements);
130 void NgonPolylineData::getDataProperty(int property, void **_pvData)
132 if (property == X_COORDINATES_SHIFT)
134 *_pvData = getXCoordinatesShift();
136 else if (property == Y_COORDINATES_SHIFT)
138 *_pvData = getYCoordinatesShift();
140 else if (property == Z_COORDINATES_SHIFT)
142 *_pvData = getZCoordinatesShift();
144 else if (property == NUM_ELEMENTS)
146 ((int *) *_pvData)[0] = getNumElements();
148 else if (property == X_COORDINATES_SHIFT_SET)
150 ((int *) *_pvData)[0] = getXCoordinatesShiftSet();
152 else if (property == Y_COORDINATES_SHIFT_SET)
154 ((int *) *_pvData)[0] = getYCoordinatesShiftSet();
156 else if (property == Z_COORDINATES_SHIFT_SET)
158 ((int *) *_pvData)[0] = getZCoordinatesShiftSet();
160 else if (property == Z_COORDINATES_SET)
162 ((int *) *_pvData)[0] = getZCoordinatesSet();
166 NgonGeneralData::getDataProperty(property, _pvData);
171 int NgonPolylineData::getNumElements(void)
173 return numVerticesPerGon;
176 void NgonPolylineData::setZCoordinatesSet(int zCoordinatesSet)
178 this->zCoordinatesSet = zCoordinatesSet;
181 int NgonPolylineData::getZCoordinatesSet(void)
183 return this->zCoordinatesSet;
186 double* NgonPolylineData::getXCoordinatesShift(void)
191 int NgonPolylineData::setXCoordinatesShift(double const* data, int numElements)
198 xShift = new double[numVerticesPerGon];
200 catch (const std::exception& e)
209 for (int i = 0; i < numVerticesPerGon; i++)
217 double* NgonPolylineData::getYCoordinatesShift()
222 int NgonPolylineData::setYCoordinatesShift(double const* data, int numElements)
229 yShift = new double[numVerticesPerGon];
231 catch (const std::exception& e)
240 for (int i = 0; i < numVerticesPerGon; i++)
248 double* NgonPolylineData::getZCoordinatesShift()
253 int NgonPolylineData::getXCoordinatesShiftSet(void)
258 void NgonPolylineData::setXCoordinatesShiftSet(int xShiftSet)
260 if (xShiftSet == 0 && this->xShiftSet == 1)
266 this->xShiftSet = xShiftSet;
269 int NgonPolylineData::getYCoordinatesShiftSet(void)
274 void NgonPolylineData::setYCoordinatesShiftSet(int yShiftSet)
276 if (yShiftSet == 0 && this->yShiftSet == 1)
282 this->yShiftSet = yShiftSet;
285 int NgonPolylineData::getZCoordinatesShiftSet(void)
290 void NgonPolylineData::setZCoordinatesShiftSet(int zShiftSet)
292 if (zShiftSet == 0 && this->zShiftSet == 1)
298 this->zShiftSet = zShiftSet;
301 int NgonPolylineData::setZCoordinatesShift(double const* data, int numElements)
308 zShift = new double[numVerticesPerGon];
310 catch (const std::exception& e)
319 for (int i = 0; i < numVerticesPerGon; i++)
327 int NgonPolylineData::setNumElementsArray(int const* numElementsArray)
329 int newNumElements = 0;
330 int previousNumElements = 0;
333 if (numElementsArray[0] != 1)
338 newNumElements = numElementsArray[0] * numElementsArray[1];
339 previousNumElements = numGons * numVerticesPerGon;
341 if (newNumElements == 0 && previousNumElements > 0)
343 numVerticesPerGon = 0;
345 deleteCoordinatesArrays();
350 if (numGons*numVerticesPerGon != newNumElements)
352 double* newCoordinates = NULL;
353 double* xShiftNew = NULL;
354 double* yShiftNew = NULL;
355 double* zShiftNew = NULL;
361 newCoordinates = new double[3 * newNumElements];
363 catch (const std::exception& e)
373 xShiftNew = new double[newNumElements];
375 catch (const std::exception& e)
386 yShiftNew = new double[newNumElements];
388 catch (const std::exception& e)
399 zShiftNew = new double[newNumElements];
401 catch (const std::exception& e)
410 if (numGons * numVerticesPerGon > 0)
412 delete [] coordinates;
416 * Initialize the new coordinates' z values to 0 in case
417 * they are not set afterwards.
419 for (int i = 0; i < newNumElements; i++)
421 newCoordinates[2 * newNumElements + i] = 0.0;
424 coordinates = newCoordinates;
428 copyShiftCoordinatesArray(xShiftNew, xShift, newNumElements);
435 copyShiftCoordinatesArray(yShiftNew, yShift, newNumElements);
442 copyShiftCoordinatesArray(zShiftNew, zShift, newNumElements);
447 numGons = numElementsArray[0];
448 numVerticesPerGon = numElementsArray[1];
452 /* Delete the temporary arrays and don't set anything */
453 if (newCoordinates != NULL)
455 delete [] newCoordinates;
458 if (xShiftNew != NULL)
463 if (yShiftNew != NULL)
468 if (zShiftNew != NULL)
480 void NgonPolylineData::copyShiftCoordinatesArray(double * newShift, double const* oldShift, int numElementsNew)
482 int numElementsCopied = 0;
484 if (numElementsNew < numVerticesPerGon)
486 numElementsCopied = numElementsNew;
490 numElementsCopied = numVerticesPerGon;
493 for (int i = 0; i < numElementsCopied; i++)
495 newShift[i] = oldShift[i];
498 for (int i = numElementsCopied; i < numElementsNew; i++)
504 void NgonPolylineData::deleteCoordinatesArrays(void)
506 if (coordinates != NULL)
508 delete [] coordinates;