Adds possibility to color marks in scatter plots
[scilab.git] / scilab / modules / graphic_objects / src / cpp / NgonPolylineData.cpp
index d28fd2d..989d554 100644 (file)
@@ -40,6 +40,7 @@ NgonPolylineData::NgonPolylineData(void)
     display_function_data = NULL;
     display_function_data_size = 0;
 
+    colors = NULL;
 }
 
 NgonPolylineData::~NgonPolylineData(void)
@@ -63,6 +64,11 @@ NgonPolylineData::~NgonPolylineData(void)
     {
         delete[] display_function_data;
     }
+
+    if (colors)
+    {
+        delete [] colors;
+    }
 }
 
 int NgonPolylineData::getPropertyFromName(int propertyName)
@@ -91,6 +97,10 @@ int NgonPolylineData::getPropertyFromName(int propertyName)
             return DISPLAY_FUNCTION_DATA;
         case __GO_DATA_MODEL_DISPLAY_FUNCTION_SIZE__ :
             return DISPLAY_FUNCTION_DATA_SIZE;
+        case __GO_DATA_MODEL_COLORS__ :
+            return COLORS;
+        case __GO_DATA_MODEL_NUM_COLORS__ :
+            return NUM_COLORS;
         default :
             return NgonGeneralData::getPropertyFromName(propertyName);
     }
@@ -125,11 +135,12 @@ int NgonPolylineData::setDataProperty(int property, void const* value, int numEl
         case DISPLAY_FUNCTION_DATA :
             setDisplayFunctionData((int const*) value, numElements);
             break;
+        case COLORS :
+            setColors((int const*) value, numElements);
+            break;
         default :
             return NgonGeneralData::setDataProperty(property, value, numElements);
     }
-
-    return 1;
 }
 
 void NgonPolylineData::getDataProperty(int property, void **_pvData)
@@ -166,6 +177,12 @@ void NgonPolylineData::getDataProperty(int property, void **_pvData)
         case DISPLAY_FUNCTION_DATA_SIZE :
             ((int *) *_pvData)[0] = getDisplayFunctionDataSize();
             break;
+        case COLORS :
+            *_pvData = getColors();
+            break;
+        case NUM_COLORS :
+            ((int *) *_pvData)[0] = getNumColors();
+            break;
         default :
             NgonGeneralData::getDataProperty(property, _pvData);
     }
@@ -480,6 +497,54 @@ int NgonPolylineData::setNumElementsArray(int const* numElementsArray)
     return result;
 }
 
+int NgonPolylineData::getNumColors(void)
+{
+    return numColors;
+}
+
+int* NgonPolylineData::getColors(void)
+{
+    return colors;
+}
+
+int NgonPolylineData::setColors(int const* newColors, int numElements)
+{
+    int * _newColors = 0;
+
+    if (numElements == 0)
+    {
+        if (colors)
+        {
+            delete[] colors;
+        }
+        colors = NULL;
+        numColors = 0;
+
+        return 1;
+    }
+
+    try
+    {
+        _newColors = new int[numElements];
+    }
+    catch (const std::exception& e)
+    {
+        e.what();
+        return 0;
+    }
+
+    memcpy(_newColors, newColors, numElements * sizeof(int));
+    if (colors)
+    {
+        delete[] colors;
+    }
+
+    colors = _newColors;
+    numColors = numElements;
+
+    return 1;
+}
+
 void NgonPolylineData::copyShiftCoordinatesArray(double * newShift, double const* oldShift, int numElementsNew)
 {
     int numElementsCopied = 0;
@@ -565,4 +630,4 @@ int NgonPolylineData::setDisplayFunctionData(int const* data, int numElements)
 
     memcpy(display_function_data, data, display_function_data_size * sizeof(int));
     return 1;
-}
\ No newline at end of file
+}