Xcos: Avoid some scopes blink on simulation. 25/10525/1
Clément DAVID [Tue, 19 Feb 2013 07:41:30 +0000 (08:41 +0100)]
Change-Id: I555391c8e3082e3b42ba6c004e7b0852f0f028d8

scilab/CHANGES_5.4.X
scilab/modules/graphic_objects/src/cpp/NgonGeneralData.cpp
scilab/modules/scicos_blocks/src/c/canimxy.c
scilab/modules/scicos_blocks/src/c/canimxy3d.c
scilab/modules/scicos_blocks/src/c/cfscope.c
scilab/modules/scicos_blocks/src/c/cmscope.c
scilab/modules/scicos_blocks/src/c/cscope.c
scilab/modules/scicos_blocks/src/c/cscopxy.c
scilab/modules/scicos_blocks/src/c/cscopxy3d.c

index 3477e4a..dbd0ecd 100644 (file)
@@ -101,6 +101,8 @@ Xcos
 
 * Improve block parameters errors (types and sizes) reporting.
 
+* Avoid some scopes blink on simulation.
+
 * Bug #10040 fixed - VARIABLE_DELAY documentation does not fully describe the
                      initial value behavioral.
 
index 5aa3ad2..2422030 100644 (file)
@@ -51,22 +51,22 @@ int NgonGeneralData::getPropertyFromName(int propertyName)
 {
     switch (propertyName)
     {
-    case __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__ :
-        return NUM_ELEMENTS_ARRAY;
-    case __GO_DATA_MODEL_COORDINATES__ :
-        return COORDINATES;
-    case __GO_DATA_MODEL_X__ :
-        return X_COORDINATES;
-    case __GO_DATA_MODEL_Y__ :
-        return Y_COORDINATES;
-    case __GO_DATA_MODEL_Z__ :
-        return Z_COORDINATES;
-    case __GO_DATA_MODEL_COLORS__ :
-        return COLORS;
-    case __GO_DATA_MODEL_NUM_COLORS__ :
-        return NUM_COLORS;
-    default :
-        return NgonData::getPropertyFromName(propertyName);
+        case __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__ :
+            return NUM_ELEMENTS_ARRAY;
+        case __GO_DATA_MODEL_COORDINATES__ :
+            return COORDINATES;
+        case __GO_DATA_MODEL_X__ :
+            return X_COORDINATES;
+        case __GO_DATA_MODEL_Y__ :
+            return Y_COORDINATES;
+        case __GO_DATA_MODEL_Z__ :
+            return Z_COORDINATES;
+        case __GO_DATA_MODEL_COLORS__ :
+            return COLORS;
+        case __GO_DATA_MODEL_NUM_COLORS__ :
+            return NUM_COLORS;
+        default :
+            return NgonData::getPropertyFromName(propertyName);
     }
 }
 
@@ -173,6 +173,7 @@ void NgonGeneralData::setData(double const* data, int numElements)
     {
         delete [] coordinates;
 
+        numVerticesPerGon = numElements / numGons;
         coordinates = new double[3 * numElements];
     }
 
@@ -222,7 +223,7 @@ int NgonGeneralData::setNumElementsArray(int const* numElementsArray)
         return 0;
     }
 
-    if (numGons*numVerticesPerGon != numElementsArray[0]*numElementsArray[1])
+    if (numGons * numVerticesPerGon != numElementsArray[0]*numElementsArray[1])
     {
         try
         {
index d0ce53a..dc60471 100644 (file)
@@ -578,16 +578,13 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row)
     if (pPolyline != NULL)
     {
         /*
-         * Default setup (will crash if removed)
+         * Default setup of the nGons property
          */
         {
-            int polylineSize[2] = { 1, block->ipar[2] };
-            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
+            int nGons = 1;
+            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_GONS__, &nGons, jni_int, 1);
         }
 
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_X__, &d__0, jni_double_vector, 1);
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_Y__, &d__0, jni_double_vector, 1);
-
         color = block->ipar[3];
         markSize = block->ipar[4];
         lineThickness = (double)markSize;
index 0375a20..b388339 100644 (file)
@@ -589,17 +589,13 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row)
     if (pPolyline != NULL)
     {
         /*
-         * Default setup (will crash if removed)
+         * Default setup of the nGons property
          */
         {
-            int polylineSize[2] = { 1, block->ipar[2] };
-            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
+            int nGons = 1;
+            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_GONS__, &nGons, jni_int, 1);
         }
 
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_X__, &d__0, jni_double_vector, 1);
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_Y__, &d__0, jni_double_vector, 1);
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_Z__, &d__0, jni_double_vector, 1);
-
         color = block->ipar[3 + row];
         markSize = block->ipar[3 + block->ipar[1] + row];
         lineThickness = (double)markSize;
index fd41298..6d83d20 100644 (file)
@@ -131,15 +131,6 @@ static char *getAxe(char const* pFigureUID, scicos_block * block, int input);
 static char *getPolyline(char *pAxeUID, scicos_block * block, int row);
 
 /**
- * Set the polylines buffer size
- *
- * \param block the block
- * \param input the input port index
- * \param maxNumberOfPoints the size of the buffer
- */
-static BOOL setPolylinesBuffers(scicos_block * block, int input, int maxNumberOfPoints);
-
-/**
  * Set the polylines bounds
  *
  * \param block the block
@@ -447,14 +438,6 @@ static void appendData(scicos_block * block, int input, double t, double *data)
         // on a full scope, re-alloc
         maxNumberOfPoints = maxNumberOfPoints + block->ipar[2];
         sco = reallocScoData(block, maxNumberOfPoints);
-
-        // reconfigure related graphic objects
-        if (setPolylinesBuffers(block, input, maxNumberOfPoints) == FALSE)
-        {
-            set_block_error(-5);
-            freeScoData(block);
-            sco = NULL;
-        }
     }
 
     /*
@@ -717,11 +700,11 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row)
     {
 
         /*
-         * Default setup (will crash if removed)
+         * Default setup of the nGons property
          */
         {
-            int polylineSize[2] = { 1, block->ipar[2] };
-            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
+            int nGons = 1;
+            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_GONS__, &nGons, jni_int, 1);
         }
 
         color = block->ipar[3 + row];
@@ -754,30 +737,6 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row)
     return sco->scope.cachedPolylinesUIDs[row];
 }
 
-static BOOL setPolylinesBuffers(scicos_block * block, int input, int maxNumberOfPoints)
-{
-    int i;
-
-    char const* pFigureUID;
-    char *pAxeUID;
-    char *pPolylineUID;
-
-    BOOL result = TRUE;
-    int polylineSize[2] = { 1, maxNumberOfPoints };
-    int links_count = block->ipar[15];
-
-    pFigureUID = getFigure(block);
-    pAxeUID = getAxe(pFigureUID, block, input);
-
-    for (i = 0; i < links_count; i++)
-    {
-        pPolylineUID = getPolyline(pAxeUID, block, i);
-        result &= setGraphicObjectProperty(pPolylineUID, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
-    }
-
-    return result;
-}
-
 static BOOL setPolylinesBounds(scicos_block * block, int input, int periodCounter)
 {
     char const* pFigureUID;
index 53e4853..4638d5c 100644 (file)
 #include "AxesModel.h"
 
 // #include <stdio.h>
+
 // #define LOG(...) printf(__VA_ARGS__)
 #define LOG(...)
+// #define PUSH_LOG(...) printf(__VA_ARGS__)
+#define PUSH_LOG(...)
+
 
 #define HISTORY_POINTS_THRESHOLD 4096
 
@@ -693,6 +697,7 @@ static BOOL pushData(scicos_block * block, int input, int row)
     // select the right input and row
     data = sco->internal.bufferCoordinates[input][row];
 
+    PUSH_LOG("%s: %d\n", "pushData", block->ipar[2]);
     return setGraphicObjectProperty(pPolylineUID, __GO_DATA_MODEL_COORDINATES__, data, jni_double_vector, block->ipar[2]);
 }
 
@@ -963,11 +968,11 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int input, int row
     {
 
         /*
-         * Default setup (will crash if removed)
+         * Default setup of the nGons property
          */
         {
-            int polylineSize[2] = { 1, polylineDefaultNumElement };
-            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
+            int nGons = 1;
+            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_GONS__, &nGons, jni_int, 1);
         }
 
         // ipar=[win;size(in,'*');N;wpos(:);wdim(:);in(:);clrs(:);heritance]
@@ -1038,7 +1043,6 @@ static BOOL pushHistory(scicos_block * block, int input, int maxNumberOfPoints)
     sco_data *sco;
 
     BOOL result = TRUE;
-    int polylineSize[2] = { 1, maxNumberOfPoints };
 
     sco = getScoData(block);
     pFigureUID = getFigure(block);
@@ -1057,9 +1061,10 @@ static BOOL pushHistory(scicos_block * block, int input, int maxNumberOfPoints)
     for (i = 0; i < block->insz[input]; i++)
     {
         pPolylineUID = getPolyline(pAxeUID, block, input, i, TRUE);
-        result &= setGraphicObjectProperty(pPolylineUID, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
 
         data = sco->internal.historyCoordinates[input][i];
+
+        PUSH_LOG("%s: %d\n", "pushHistory", maxNumberOfPoints);
         result &= setGraphicObjectProperty(pPolylineUID, __GO_DATA_MODEL_COORDINATES__, data, jni_double_vector, maxNumberOfPoints);
     }
 
index 2c5d6a7..fb6f81e 100644 (file)
@@ -877,13 +877,12 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row, BOOL hist
      */
     if (pPolyline != NULL)
     {
-
         /*
-         * Default setup (will crash if removed)
+         * Default setup of the nGons property
          */
         {
-            int polylineSize[2] = { 1, polylineDefaultNumElement };
-            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
+            int nGons = 1;
+            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_GONS__, &nGons, jni_int, 1);
         }
 
         color = block->ipar[3 + row];
@@ -947,7 +946,6 @@ static BOOL pushHistory(scicos_block * block, int input, int maxNumberOfPoints)
     sco_data *sco;
 
     BOOL result = TRUE;
-    int polylineSize[2] = { 1, maxNumberOfPoints };
 
     sco = getScoData(block);
     pFigureUID = getFigure(block);
@@ -966,7 +964,6 @@ static BOOL pushHistory(scicos_block * block, int input, int maxNumberOfPoints)
     for (i = 0; i < block->insz[input]; i++)
     {
         pPolylineUID = getPolyline(pAxeUID, block, i, TRUE);
-        result &= setGraphicObjectProperty(pPolylineUID, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
 
         data = sco->internal.historyCoordinates[input][i];
         result &= setGraphicObjectProperty(pPolylineUID, __GO_DATA_MODEL_COORDINATES__, data, jni_double_vector, maxNumberOfPoints);
index df1f76f..414d227 100644 (file)
@@ -125,14 +125,6 @@ static char *getAxe(char const* pFigureUID, scicos_block * block);
 static char *getPolyline(char *pAxeUID, scicos_block * block, int row);
 
 /**
- * Set the polylines buffer size
- *
- * \param block the block
- * \param maxNumberOfPoints the size of the buffer
- */
-static BOOL setPolylinesBuffers(scicos_block * block, int maxNumberOfPoints);
-
-/**
  * Set the polylines bounds
  *
  * \param block the block
@@ -360,14 +352,6 @@ static void appendData(scicos_block * block, double *x, double *y)
         // on a full scope, re-alloc
         maxNumberOfPoints = maxNumberOfPoints + block->ipar[2];
         sco = reallocScoData(block, maxNumberOfPoints);
-
-        // reconfigure related graphic objects
-        if (setPolylinesBuffers(block, maxNumberOfPoints) == FALSE)
-        {
-            set_block_error(-5);
-            freeScoData(block);
-            sco = NULL;
-        }
     }
 
     /*
@@ -623,16 +607,13 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row)
     if (pPolyline != NULL)
     {
         /*
-         * Default setup (will crash if removed)
+         * Default setup of the nGons property
          */
         {
-            int polylineSize[2] = { 1, block->ipar[2] };
-            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
+            int nGons = 1;
+            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_GONS__, &nGons, jni_int, 1);
         }
 
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_X__, &d__0, jni_double_vector, 1);
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_Y__, &d__0, jni_double_vector, 1);
-
         color = block->ipar[3];
         markSize = block->ipar[4];
         lineThickness = (double)markSize;
@@ -669,29 +650,6 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row)
     return sco->scope.cachedPolylinesUIDs[row];
 }
 
-static BOOL setPolylinesBuffers(scicos_block * block, int maxNumberOfPoints)
-{
-    int i;
-
-    char const* pFigureUID;
-    char *pAxeUID;
-    char *pPolylineUID;
-
-    BOOL result = TRUE;
-    int polylineSize[2] = { 1, maxNumberOfPoints };
-
-    pFigureUID = getFigure(block);
-    pAxeUID = getAxe(pFigureUID, block);
-
-    for (i = 0; i < block->insz[0]; i++)
-    {
-        pPolylineUID = getPolyline(pAxeUID, block, i);
-        result &= setGraphicObjectProperty(pPolylineUID, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
-    }
-
-    return result;
-}
-
 static BOOL setPolylinesBounds(scicos_block * block)
 {
     char const* pFigureUID;
index 96ee42c..114baa7 100644 (file)
@@ -126,14 +126,6 @@ static char *getAxe(char const* pFigureUID, scicos_block * block);
 static char *getPolyline(char *pAxeUID, scicos_block * block, int row);
 
 /**
- * Set the polylines buffer size
- *
- * \param block the block
- * \param maxNumberOfPoints the size of the buffer
- */
-static BOOL setPolylinesBuffers(scicos_block * block, int maxNumberOfPoints);
-
-/**
  * Set the polylines bounds
  *
  * \param block the block
@@ -368,14 +360,6 @@ static void appendData(scicos_block * block, double *x, double *y, double *z)
         // on a full scope, re-alloc
         maxNumberOfPoints = maxNumberOfPoints + block->ipar[2];
         sco = reallocScoData(block, maxNumberOfPoints);
-
-        // reconfigure related graphic objects
-        if (setPolylinesBuffers(block, maxNumberOfPoints) == FALSE)
-        {
-            set_block_error(-5);
-            freeScoData(block);
-            sco = NULL;
-        }
     }
 
     /*
@@ -640,17 +624,13 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row)
     if (pPolyline != NULL)
     {
         /*
-         * Default setup (will crash if removed)
+         * Default setup of the nGons property
          */
         {
-            int polylineSize[2] = { 1, block->ipar[2] };
-            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
+            int nGons = 1;
+            setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_NUM_GONS__, &nGons, jni_int, 1);
         }
 
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_X__, &d__0, jni_double_vector, 1);
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_Y__, &d__0, jni_double_vector, 1);
-        setGraphicObjectProperty(pPolyline, __GO_DATA_MODEL_Z__, &d__0, jni_double_vector, 1);
-
         color = block->ipar[3 + row];
         markSize = block->ipar[3 + block->ipar[1] + row];
         lineThickness = (double)markSize;
@@ -687,29 +667,6 @@ static char *getPolyline(char *pAxeUID, scicos_block * block, int row)
     return sco->scope.cachedPolylinesUIDs[row];
 }
 
-static BOOL setPolylinesBuffers(scicos_block * block, int maxNumberOfPoints)
-{
-    int i;
-
-    char const* pFigureUID;
-    char *pAxeUID;
-    char *pPolylineUID;
-
-    BOOL result = TRUE;
-    int polylineSize[2] = { 1, maxNumberOfPoints };
-
-    pFigureUID = getFigure(block);
-    pAxeUID = getAxe(pFigureUID, block);
-
-    for (i = 0; i < block->insz[0]; i++)
-    {
-        pPolylineUID = getPolyline(pAxeUID, block, i);
-        result &= setGraphicObjectProperty(pPolylineUID, __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__, polylineSize, jni_int_vector, 2);
-    }
-
-    return result;
-}
-
 static BOOL setPolylinesBounds(scicos_block * block)
 {
     char const* pFigureUID;