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)
92 case NUM_ELEMENTS_ARRAY :
93 return setNumElementsArray((int const*) value);
94 case X_COORDINATES_SHIFT :
95 return setXCoordinatesShift((double const*) value, numElements);
96 case Y_COORDINATES_SHIFT :
97 return setYCoordinatesShift((double const*) value, numElements);
98 case Z_COORDINATES_SHIFT :
99 return setZCoordinatesShift((double const*) value, numElements);
100 case X_COORDINATES_SHIFT_SET :
101 setXCoordinatesShiftSet(*((int const*) value));
103 case Y_COORDINATES_SHIFT_SET :
104 setYCoordinatesShiftSet(*((int const*) value));
106 case Z_COORDINATES_SHIFT_SET :
107 setZCoordinatesShiftSet(*((int const*) value));
109 case Z_COORDINATES_SET :
110 setZCoordinatesSet(*((int const*) value));
113 return NgonGeneralData::setDataProperty(property, value, numElements);
119 void NgonPolylineData::getDataProperty(int property, void **_pvData)
123 case X_COORDINATES_SHIFT :
124 *_pvData = getXCoordinatesShift();
126 case Y_COORDINATES_SHIFT :
127 *_pvData = getYCoordinatesShift();
129 case Z_COORDINATES_SHIFT :
130 *_pvData = getZCoordinatesShift();
133 ((int *) *_pvData)[0] = getNumElements();
135 case X_COORDINATES_SHIFT_SET :
136 ((int *) *_pvData)[0] = getXCoordinatesShiftSet();
138 case Y_COORDINATES_SHIFT_SET :
139 ((int *) *_pvData)[0] = getYCoordinatesShiftSet();
141 case Z_COORDINATES_SHIFT_SET :
142 ((int *) *_pvData)[0] = getZCoordinatesShiftSet();
144 case Z_COORDINATES_SET :
145 ((int *) *_pvData)[0] = getZCoordinatesSet();
148 NgonGeneralData::getDataProperty(property, _pvData);
152 int NgonPolylineData::getNumElements(void)
154 return numVerticesPerGon;
157 void NgonPolylineData::setZCoordinatesSet(int zCoordinatesSet)
159 this->zCoordinatesSet = zCoordinatesSet;
162 int NgonPolylineData::getZCoordinatesSet(void)
164 return this->zCoordinatesSet;
167 double* NgonPolylineData::getXCoordinatesShift(void)
172 int NgonPolylineData::setXCoordinatesShift(double const* data, int numElements)
179 xShift = new double[numVerticesPerGon];
181 catch (const std::exception& e)
190 for (int i = 0; i < numVerticesPerGon; i++)
198 double* NgonPolylineData::getYCoordinatesShift()
203 int NgonPolylineData::setYCoordinatesShift(double const* data, int numElements)
210 yShift = new double[numVerticesPerGon];
212 catch (const std::exception& e)
221 for (int i = 0; i < numVerticesPerGon; i++)
229 double* NgonPolylineData::getZCoordinatesShift()
234 int NgonPolylineData::getXCoordinatesShiftSet(void)
239 void NgonPolylineData::setXCoordinatesShiftSet(int xShiftSet)
241 if (xShiftSet == 0 && this->xShiftSet == 1)
247 this->xShiftSet = xShiftSet;
250 int NgonPolylineData::getYCoordinatesShiftSet(void)
255 void NgonPolylineData::setYCoordinatesShiftSet(int yShiftSet)
257 if (yShiftSet == 0 && this->yShiftSet == 1)
263 this->yShiftSet = yShiftSet;
266 int NgonPolylineData::getZCoordinatesShiftSet(void)
271 void NgonPolylineData::setZCoordinatesShiftSet(int zShiftSet)
273 if (zShiftSet == 0 && this->zShiftSet == 1)
279 this->zShiftSet = zShiftSet;
282 int NgonPolylineData::setZCoordinatesShift(double const* data, int numElements)
289 zShift = new double[numVerticesPerGon];
291 catch (const std::exception& e)
300 for (int i = 0; i < numVerticesPerGon; i++)
308 int NgonPolylineData::setNumElementsArray(int const* numElementsArray)
310 int newNumElements = 0;
311 int previousNumElements = 0;
314 if (numElementsArray[0] != 1)
319 newNumElements = numElementsArray[0] * numElementsArray[1];
320 previousNumElements = numGons * numVerticesPerGon;
322 if (newNumElements == 0 && previousNumElements > 0)
324 numVerticesPerGon = 0;
326 deleteCoordinatesArrays();
331 if (numGons * numVerticesPerGon != newNumElements)
333 double* newCoordinates = NULL;
334 double* xShiftNew = NULL;
335 double* yShiftNew = NULL;
336 double* zShiftNew = NULL;
342 newCoordinates = new double[3 * newNumElements];
344 catch (const std::exception& e)
354 xShiftNew = new double[newNumElements];
356 catch (const std::exception& e)
367 yShiftNew = new double[newNumElements];
369 catch (const std::exception& e)
380 zShiftNew = new double[newNumElements];
382 catch (const std::exception& e)
391 if (numGons * numVerticesPerGon > 0)
393 delete [] coordinates;
397 * Initialize the new coordinates' z values to 0 in case
398 * they are not set afterwards.
400 for (int i = 0; i < newNumElements; i++)
402 newCoordinates[2 * newNumElements + i] = 0.0;
405 coordinates = newCoordinates;
409 copyShiftCoordinatesArray(xShiftNew, xShift, newNumElements);
416 copyShiftCoordinatesArray(yShiftNew, yShift, newNumElements);
423 copyShiftCoordinatesArray(zShiftNew, zShift, newNumElements);
428 numGons = numElementsArray[0];
429 numVerticesPerGon = numElementsArray[1];
433 /* Delete the temporary arrays and don't set anything */
434 if (newCoordinates != NULL)
436 delete [] newCoordinates;
439 if (xShiftNew != NULL)
444 if (yShiftNew != NULL)
449 if (zShiftNew != NULL)
461 void NgonPolylineData::copyShiftCoordinatesArray(double * newShift, double const* oldShift, int numElementsNew)
463 int numElementsCopied = 0;
465 if (numElementsNew < numVerticesPerGon)
467 numElementsCopied = numElementsNew;
471 numElementsCopied = numVerticesPerGon;
474 for (int i = 0; i < numElementsCopied; i++)
476 newShift[i] = oldShift[i];
479 for (int i = numElementsCopied; i < numElementsNew; i++)
485 void NgonPolylineData::deleteCoordinatesArrays(void)
487 if (coordinates != NULL)
489 delete [] coordinates;