Add new function for sci_set.
Jean-baptiste Silvy [Thu, 28 Sep 2006 13:43:23 +0000 (13:43 +0000)]
64 files changed:
scilab/modules/graphics/graphics.vcproj
scilab/modules/graphics/includes/BasicAlgos.h
scilab/modules/graphics/includes/Interaction.h
scilab/modules/graphics/includes/PloEch.h
scilab/modules/graphics/sci_gateway/sci_set.c
scilab/modules/graphics/src/c/BasicAlgos.c
scilab/modules/graphics/src/c/ColorMapManagement.c [new file with mode: 0644]
scilab/modules/graphics/src/c/ColorMapManagement.h [new file with mode: 0644]
scilab/modules/graphics/src/c/Interaction.c
scilab/modules/graphics/src/c/Plo2dEch.c
scilab/modules/graphics/src/c/SetProperty.c
scilab/modules/graphics/src/c/getHandleProperty/SetPropertyStatus.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/SetPropertyStatus.h [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/getPropertyAssignedValue.c
scilab/modules/graphics/src/c/getHandleProperty/getPropertyAssignedValue.h
scilab/modules/graphics/src/c/getHandleProperty/get_data_bounds_property.c
scilab/modules/graphics/src/c/getHandleProperty/setHandleProperty.h
scilab/modules/graphics/src/c/getHandleProperty/set_alignment_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_arrow_size_factor_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_auto_clear_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_auto_dimensionning_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_auto_resize_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_auto_scale_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_bar_layout_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_bar_width_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_clip_box_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_clip_state_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_current_axes_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_data_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_figure_id_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_figure_style_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_fill_mode_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_font_angle_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_font_color_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_font_foreground_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_font_name_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_font_size_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_font_style_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_foreground_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_immediate_drawing_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_interp_color_mode_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_interp_color_vector_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_line_mode_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_line_style_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_mark_background_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_mark_foreground_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_mark_mode_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_mark_size_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_mark_size_unit_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_mark_style_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_old_style_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_polyline_style_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_rotation_style_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_surface_mode_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_text_box_mode_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_text_box_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_text_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_thickness_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_visible_property.c
scilab/modules/graphics/src/c/getHandleProperty/set_x_shift_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_y_shift_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_z_shift_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_zoom_box_property.c [new file with mode: 0644]
scilab/modules/graphics/src/c/getHandleProperty/set_zoom_state_property.c [new file with mode: 0644]

index 9dea2b6..350453f 100644 (file)
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\ColorMapManagement.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\Contour.c"
                                >
                        </File>
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_alignment_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_arrow_size_factor_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_auto_clear_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_auto_dimensionning_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_auto_resize_property.c"
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_auto_scale_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_axes_size_property.c"
                                >
                        </File>
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_bar_layout_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_bar_width_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_clip_box_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_clip_state_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_color_map_property.c"
                                >
                        </File>
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_data_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_default_values_property.c"
                                >
                        </File>
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_fill_mode_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_font_angle_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_font_color_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_font_foreground_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_font_name_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_font_size_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_font_style_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_foreground_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_immediate_drawing_property.c"
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_interp_color_mode_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_interp_color_vector_property.c"
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_line_mode_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_line_style_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_mark_background_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_mark_foreground_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_mark_mode_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_mark_size_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_mark_size_unit_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_mark_style_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_old_style_property.c"
                                >
                        </File>
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_polyline_style_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_rotation_style_property.c"
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_surface_mode_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_text_box_mode_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_text_box_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_text_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_thickness_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\set_visible_property.c"
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\set_x_shift_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_y_shift_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_z_shift_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_zoom_box_property.c"
+                               >
+                       </File>
+                       <File
+                               RelativePath=".\src\c\getHandleProperty\set_zoom_state_property.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\getHandleProperty\setGetHashTable.c"
                                >
                        </File>
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\SetPropertyStatus.c"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\src\c\StringMatrix.c"
                                >
                        </File>
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\ColorMapManagement.h"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\includes\DefaultCommandArg.h"
                                >
                        </File>
                                >
                        </File>
                        <File
+                               RelativePath=".\src\c\getHandleProperty\SetPropertyStatus.h"
+                               >
+                       </File>
+                       <File
                                RelativePath=".\includes\StringMatrix.h"
                                >
                        </File>
index ccea4d9..e6f2e01 100644 (file)
@@ -1,8 +1,8 @@
 /*------------------------------------------------------------------------*/
-/* file: BAsicAlgos.h                                                    */
+/* file: BasicAlgos.h                                                     */
 /* Copyright INRIA 2006                                                   */
 /* Authors : Fabrice Leray, Jean-Baptiste Silvy                           */
-/* desc : Several basic algorithm which can be used in several places in  */
+/* desc : Several basic algorithms which can be used in several places in */
 /*        the code.                                                       */
 /*------------------------------------------------------------------------*/
 
@@ -26,4 +26,32 @@ double sciFindStPosMin( double x[], int n ) ;
  */
 int C2F(entier2d)( integer * n, double * dx,integer * s ) ;
 
+/**
+ * check the strict monotony of a vector
+ * @return  1 if the vector is increasing or constant
+ *         -1 if decreasing and not constant
+ *          0 if not monotonous
+ * @param nbElement must be greater than 2.
+ */
+int checkMonotony( double vector[], int nbElement ) ;
+
+/**
+ * copy an array into an other
+ */
+void doubleArrayCopy( double dest[], const double src[], int nbElement ) ;
+
+/**
+ * set each element of an array to a certain value
+ */
+void setDoubleArraySingleValue( double dest[], double value, int nbElement ) ;
+
+/**
+ * create a new array which is kind of copy of another
+ * the elements are copied beginning with the first
+ * if the array is longer than the other, then the last values are set to 0.0
+ * @param destSize the wanted size for the new array
+ * @return  the newly created array or NULL if an error occured
+ */
+double * createNewArrayFromSource( int destSize, const double src[], int srcSize ) ;
+
 #endif /* _BASIC_ALGOS_H_ */
index f7f23ba..77ec58f 100644 (file)
@@ -27,7 +27,6 @@ extern int sciDelCallback (sciPointObj * pthis); /* INTERACTION */
 
 extern int Objmove (long *hdl, double *d, int m, BOOL opt); /* INTERACTION */
 extern BOOL sciIsAreaZoom(integer *box, integer *box1 ,integer *section); /* INTERACTION */
-extern void scizoom(double bbox[], sciPointObj * pobj); /* INTERACTION */
 
 
 
index 79e5909..4154c76 100644 (file)
@@ -67,6 +67,8 @@ int zoom_box( double * bbox, int * x_pixel, int * y_pixel ) ;
 void unzoom( void ) ;
 void unzoom_one_axes( sciPointObj * psousfen ) ;
 
+extern void scizoom(double bbox[4], sciPointObj * pobj); /* INTERACTION */
+
 extern int XScale(double x);
 extern int XLogScale(double x);
 
index 75073a1..b1fb43c 100644 (file)
@@ -29,6 +29,7 @@
 #include "Format.h"
 #include "pixel_mode.h"
 #include "../src/c/getHandleProperty/setHandleProperty.h"
+#include "../src/c/ColormapManagement.h"
 
 
 #include "MALLOC.h" /* MALLOC */
@@ -38,11 +39,7 @@ extern int versionflag;
 static char error_message[256];
 /*-----------------------------------------------------------------------------------*/
 int setticks(char * xyztick, sciPointObj* psubwin, int * ptrindex, int * numrow, int * numcol);
-int setchampdata(sciPointObj *pobj, int *value, int *numrow, int *numcol, char *fname);
-int setgrayplotdata(sciPointObj *pobj, int *value, int *numrow, int *numcol, char *fname);
-int set3ddata(sciPointObj *pobj, int value[4], int numrow[4], int numcol[4], int flagc, char *fname);
 int sciSet(sciPointObj *pobj, char *marker, int *value, int *numrow, int *numcol);
-int LinearScaling2Colormap(sciPointObj* pobj);
 char ** ReBuildUserTicks( char old_logflag, char new_logflag, double * u_xgrads, int *u_nxgrads, char ** u_xlabels);
 char ** CaseLogflagN2L(int * u_nxgrads, double *u_xgrads, char ** u_xlabels);
 /*-----------------------------------------------------------------------------------*/
@@ -333,100 +330,6 @@ int sci_set(fname,fname_len)
         if(setticks(cstk(l2),pobj, ptrindex, numrow, numcol) != 0) return 0;
 
       }
-    else if(strcmp(cstk(l2),"data") == 0)
-    { /* distinction for "data" treatment for champ and surface objects */
-      if((sciGetEntityType(pobj) == SCI_SEGS) && (pSEGS_FEATURE(pobj)->ptype == 1))
-      {        /* F.Leray Work here*/
-        int address[4],i;
-        for(i=0;i<4;i++) address[i] = 0;
-
-        if(VarType(3) != 16)
-        {
-          Scierror(999,"%s: Incorrect argument, must be a Tlist!\r\n",fname);
-          return -1;
-        }
-
-        GetRhsVar(3,"t",&m3tl,&n3tl,&l3tl);
-
-        if(m3tl != 5 || n3tl != 1)
-        {
-          sciprint("Tlist size must be 1x5\r\n");
-          return -1;
-        }
-
-        GetListRhsVar(3,2,"d",&numrow[0],&numcol[0],&address[0]);
-        GetListRhsVar(3,3,"d",&numrow[1],&numcol[1],&address[1]);
-        GetListRhsVar(3,4,"d",&numrow[2],&numcol[2],&address[2]);
-        GetListRhsVar(3,5,"d",&numrow[3],&numcol[3],&address[3]);
-
-        if (setchampdata(pobj, address, numrow, numcol,fname)!=0)  return 0;
-      }
-      else if((sciGetEntityType(pobj) == SCI_GRAYPLOT) && (pGRAYPLOT_FEATURE(pobj)->type == 0)) /* case 0: real grayplot */
-      {        /* F.Leray Work here*/
-        int address[4],i;
-        for(i=0;i<4;i++) address[i] = 0;
-
-        if(VarType(3) != 16)
-        {
-          Scierror(999,"%s: Incorrect argument, must be a Tlist!\r\n",fname);
-          return -1;
-        }
-
-        GetRhsVar(3,"t",&m3tl,&n3tl,&l3tl);
-
-        if(m3tl != 4 || n3tl != 1)
-        {
-          sciprint("Tlist size must be 1x4\r\n");
-          return -1;
-        }
-
-        GetListRhsVar(3,2,"d",&numrow[0],&numcol[0],&address[0]);
-        GetListRhsVar(3,3,"d",&numrow[1],&numcol[1],&address[1]);
-        GetListRhsVar(3,4,"d",&numrow[2],&numcol[2],&address[2]);
-
-        if (setgrayplotdata(pobj, address, numrow, numcol,fname)!=0) { return 0; }
-      }
-      else if(sciGetEntityType(pobj) == SCI_SURFACE)
-      {        /* F.Leray Work here*/
-        if(VarType(3) != 16)
-        {
-          Scierror(999,"%s: Incorrect argument, must be a Tlist!\r\n",fname);
-          return -1;
-        }
-        GetRhsVar(3,"t",&m3tl,&n3tl,&l3tl);
-
-        /* GetListRhsVar(3,1,"d",&numrow[0],&numcol[0],&lxyzcol[0]); 
-           Not good because 3,1 is the string character "3d x y z [en option col]"*/
-        GetListRhsVar(3,2,"d",&numrow[0],&numcol[0],&lxyzcol[0]);
-        GetListRhsVar(3,3,"d",&numrow[1],&numcol[1],&lxyzcol[1]);
-
-        if(m3tl == 4)
-        {
-          GetListRhsVar(3,4,"d",&numrow[2],&numcol[2],&lxyzcol[2]);
-          flagc = 0;
-        }
-        else if( m3tl == 5)
-        {
-          GetListRhsVar(3,4,"d",&numrow[2],&numcol[2],&lxyzcol[2]);
-          GetListRhsVar(3,5,"d",&numrow[3],&numcol[3],&lxyzcol[3]);
-          flagc = 1;
-        }
-        else
-        {
-          sciprint("Error m3tl must be equal to 4 or 5\r\n");
-          return -1;
-        }
-
-        if (set3ddata(pobj, lxyzcol, numrow, numcol,flagc,fname)!=0) {  return 0; }
-      }
-      else /* F.Leray 02.05.05 : "data" case for others (using sciGetPoint routine inside GetProperty.c) */
-      {
-        if ( ( setStatus = sciSet(pobj, cstk(l2), &l3, &numrow3, &numcol3) ) < 0) {
-          Scierror(999,"%s: %s\r\n",fname,error_message);
-          return 0;
-        }
-      }
-    }
     else /* F.Leray 02.05.05 : main case (using sciGetPoint routine inside GetProperty.c) */
     {
       if ( (setStatus = sciSet(pobj, cstk(l2), &l3, &numrow3, &numcol3)) < 0 ) {
@@ -606,605 +509,6 @@ int setticks(char * xyztick, sciPointObj* psubwin, int * ptrindex, int * numrow,
     }
   return 0;
 }
-/*-----------------------------------------------------------------------------------*/
-/* F.Leray 29.04.05 */
-/* the champ data is now set as a tlist (like for surface objects) */
-/* setchampdata(pobj,cstk(l2), &l3, &numrow3, &numcol3, fname) */
-int setchampdata(sciPointObj *pobj, int *value, int *numrow, int *numcol, char *fname)
-{
-  int i=0;
-  sciSegs * ppsegs = pSEGS_FEATURE (pobj);
-
-  integer m1, n1, l1, m2, n2, l2, m3, n3, l3, m4, n4, l4;
-
-  double * vx = NULL, * vy = NULL;
-  double * vfx = NULL, * vfy = NULL;
-
-  m1 = numrow[0];
-  m2 = numrow[1];
-  m3 = numrow[2];
-  m4 = numrow[3];
-
-  n1 = numcol[0];
-  n2 = numcol[1];
-  n3 = numcol[2];
-  n4 = numcol[3];
-
-  l1 = value[0];
-  l2 = value[1];
-  l3 = value[2];
-  l4 = value[3];
-
-  if (n1 != 1 || n2 != 1){
-    Scierror(999,"%s:  Inside the Tlist : the first argument must be columns vectors\r\n",fname);
-    return 0;
-  }
-
-  if (m3 != m1 || n3 != m2 || m4 != m3 || n4 != n3) {
-    Scierror(999,"%s:  Inside the Tlist : incompatible length in the third and/or fourth argument(s)\r\n",fname);
-    return 0;
-  }
-
-  if (m1 * n1 == 0 || m2 * n2 == 0 || m3 * n3 == 0 || m4 * n4 == 0) { LhsVar(1)=0; return 0;} 
-
-  /* Update the dimensions Nbr1 and Nbr2 */
-  ppsegs->Nbr1 = m1;
-  ppsegs->Nbr2 = m2;
-
-  /* Free the old values... */
-  FREE(ppsegs->vx); ppsegs->vx = NULL;
-  FREE(ppsegs->vy); ppsegs->vy = NULL;
-  FREE(ppsegs->vfx); ppsegs->vfx = NULL;
-  FREE(ppsegs->vfy); ppsegs->vfy = NULL;
-
-  /* allocations:*/
-  if ((vx = MALLOC (m1 * sizeof (double))) == NULL) return -1;
-  if ((vy = MALLOC (m2 * sizeof (double))) == NULL) {
-    FREE(vx); vx = (double *) NULL;
-    return -1;
-  }
-
-  if ((vfx = MALLOC (m3*n3 * sizeof (double))) == NULL) return -1;
-  if ((vfy = MALLOC (m4*n4 * sizeof (double))) == NULL) {
-    FREE(vfx); vfx = (double *) NULL;
-    return -1;
-  }
-
-  /* Copy the new values F.Leray */
-  for(i=0;i< m1;i++)
-    vx[i] = stk(l1)[i];
-
-  for(i=0;i< m2;i++)
-    vy[i] = stk(l2)[i];
-
-  for(i=0;i< m3*n3;i++){ /* vfx and vfy must have the same dimensions */
-    vfx[i] = stk(l3)[i];
-    vfy[i] = stk(l4)[i];
-  }
-
-  ppsegs->vx = vx;
-  ppsegs->vy = vy;
-  ppsegs->vfx = vfx;
-  ppsegs->vfy = vfy;
-
-  return 0;
-}
-
-/*-----------------------------------------------------------------------------------*/
-/* F.Leray 29.04.05 */
-/* the grayplot data is now set as a tlist (like for surface and champ objects) */
-/* setgrayplot(pobj,cstk(l2), &l3, &numrow3, &numcol3, fname) */
-int setgrayplotdata(sciPointObj *pobj, int *value, int *numrow, int *numcol, char *fname)
-{
-  int i=0;
-  sciGrayplot * ppgrayplot = pGRAYPLOT_FEATURE (pobj);
-
-  integer m1, n1, l1, m2, n2, l2, m3, n3, l3;
-
-  double * pvecx = NULL, * pvecy = NULL;
-  double * pvecz = NULL;
-
-  m1 = numrow[0];
-  m2 = numrow[1];
-  m3 = numrow[2];
-
-  n1 = numcol[0];
-  n2 = numcol[1];
-  n3 = numcol[2];
-
-  l1 = value[0];
-  l2 = value[1];
-  l3 = value[2];
-
-  if (n1 != 1 || n2 != 1){
-    Scierror(999,"%s:  Inside the Tlist : the first argument must be columns vectors\r\n",fname);
-    return 0;
-  }
-
-  if (m3 != m1 || n3 != m2) {
-    Scierror(999,"%s:  Inside the Tlist : incompatible length in the third argument\r\n",fname);
-    return 0;
-  }
-
-  if (m1 * n1 == 0 || m2 * n2 == 0 || m3 * n3 == 0 ) { LhsVar(1)=0; return 0;} 
-
-  /* Update the dimensions nx and ny */
-  ppgrayplot->nx = m1;
-  ppgrayplot->ny = m2;
-
-  /* Free the old values... */
-  FREE(ppgrayplot->pvecx); ppgrayplot->pvecx = NULL;
-  FREE(ppgrayplot->pvecy); ppgrayplot->pvecy = NULL;
-  FREE(ppgrayplot->pvecz); ppgrayplot->pvecz = NULL;
-
-  /* allocations:*/
-  if ((pvecx = MALLOC (m1 * sizeof (double))) == NULL) return -1;
-  if ((pvecy = MALLOC (m2 * sizeof (double))) == NULL) {
-    FREE(pvecx); pvecx = (double *) NULL;
-    return -1;
-  }
-
-  if ((pvecz = MALLOC (m3*n3 * sizeof (double))) == NULL)
-    return -1;
-
-
-  /* Copy the new values F.Leray */
-  for(i=0;i< m1;i++)
-    pvecx[i] = stk(l1)[i];
-
-  for(i=0;i< m2;i++)
-    pvecy[i] = stk(l2)[i];
-
-  for(i=0;i< m3*n3;i++){ /* vfx and vfy must have the same dimensions */
-    pvecz[i] = stk(l3)[i];
-  }
-
-  ppgrayplot->pvecx = pvecx;
-  ppgrayplot->pvecy = pvecy;
-  ppgrayplot->pvecz = pvecz;
-
-  return 0;
-}
-/*-----------------------------------------------------------------------------------*/
-/* set3ddata(pobj,cstk(l2), &l3, &numrow3, &numcol3) */
-int set3ddata(sciPointObj *pobj, int value[4], int numrow[4], int numcol[4], int flagc, char *fname)
-{
-  int i=0,j,nc;
-  sciSurface * psurf = pSURFACE_FEATURE (pobj);
-
-
-  integer m1, n1, l1, m2, n2, l2, m3, n3, l3;
-  integer m3n, n3n, l3n, ii;
-
-  double * pvecx = NULL, * pvecy = NULL, * pvecz = NULL;
-  integer /* * zcol = NULL,*/ izcol = 0 ;
-  int dimvectx = 0;
-  int dimvecty = 0;
-
-  m1 = numrow[0]; /* X size */
-  m2 = numrow[1]; /* Y size */
-  m3 = numrow[2]; /* Z size */
-  m3n = numrow[3]; /* F.Leray for color */
-  n1 = numcol[0];
-  n2 = numcol[1];
-  n3 = numcol[2];
-  n3n = numcol[3]; /* F.Leray for color */
-  l1 = value[0];
-  l2 = value[1];
-  l3 = value[2];
-  l3n = value[3]; /* F.Leray for color */
-
-  if ( m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1 )
-  {
-    if ( !(m1 == m2 && m2 == m3 && n1 == n2 && n2 == n3) )
-    {
-      Scierror(999,"%s:  Inside the Tlist (third argument): The three first arguments have incompatible length \r\n",fname);
-      return 0;
-    }
-  }
-  else 
-  {
-    if ( m2 * n2 != n3 )
-    {
-      Scierror(999,"%s:  Inside the Tlist (third argument): The second and third arguments have incompatible length\r\n",fname);
-      return 0;
-    }
-    if ( m1 * n1 != m3 )
-    {
-      Scierror(999,"%s:  Inside the Tlist (third argument): The first and third arguments have incompatible length\r\n",fname);
-      return 0;
-    }
-    if ( m1 * n1 <= 1 || m2 * n2 <= 1 ) 
-    {
-      Scierror(999,"%s: Inside the Tlist (third argument):The first and second arguments should be of size >= 2\r\n",fname);
-      return 0;
-    }
-  }
-
-  if (m1 * n1 == 0 || m2 * n2 == 0 || m3 * n3 == 0)
-  { 
-    LhsVar(1) = 0 ; 
-    return 0;
-  } 
-
-  if(flagc == 1)
-  {
-     
-    if ( m3n * n3n == m3 * n3 )
-    {
-      /* the color is a matrix */
-      izcol = 2 ; 
-    }
-    else
-    {
-      /* a vector */
-      izcol = 1 ;
-    }
-    psurf->izcol = izcol;
-  }
-  else
-  {
-    psurf->izcol = 0;
-  }
-
-  if ( m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1 ) /* NG beg */
-  { /* case isfac=1;*/
-    if( psurf->isfac != 1 )
-    {
-      sciprint("Can not change the typeof3d of graphic object: its type is SCI_PLOT3D\r\n");
-      return 0;
-    }
-  }
-  else
-  { 
-    /* case isfac=0;*/
-    if(psurf->isfac != 0)
-    {
-      sciprint("Can not change the typeof3d of graphic object: its type is SCI_FAC3D\r\n");
-      return 0;
-    }
-  }
-  
-  
-  /* check the monotony on x and y */
-  
-  if ( m1 == 1 ) /* x is a row vector */
-  {
-    dimvectx = n1 ;
-  }
-  else if ( n1 == 1 ) /* x is a column vector */
-  {
-    dimvectx = m1 ;
-  }
-  else /* x is a matrix */
-  {
-    dimvectx = -1 ;
-  }
-  
-  if ( dimvectx > 1 )
-  {
-    /* test the monotony on x*/
-    if( stk(l1)[0] >= stk(l1)[1] ) /* decreasing */
-    {
-      int i;
-      for(i=1;i<dimvectx-1;i++)
-      {
-        if(stk(l1)[i] < stk(l1)[i+1])
-        {
-          Scierror(999,"Objplot3d: x vector is not monotonous \t\n");
-          return 0;
-        }
-      }
-      psurf->flag_x = -1;
-    }
-    else /* x[0] < x[1]*/
-    {
-      for(i=1;i<dimvectx-1;i++)
-      {
-        if(stk(l1)[i] > stk(l1)[i+1])
-        {
-          Scierror(999,"Objplot3d: x vector is not monotonous \t\n");
-          return 0;
-        }
-      }
-      psurf->flag_x = 1;
-    }
-  }
-
-  if(m2 == 1) /* y is a row vector */
-  {
-    dimvecty = n2 ;
-  }
-  else if(n2 == 1) /* y is a column vector */
-  {
-    dimvecty = m2 ;
-  }
-  else /* y is a matrix */
-  {
-    dimvecty = -1 ;
-  }
-  if(dimvecty>1)
-  {
-    /* test the monotony on y*/
-    if(stk(l2)[0] >= stk(l2)[1]) /* decreasing */
-    {
-      int i;
-      for(i=1;i<dimvecty-1;i++)
-      {
-        if(stk(l2)[i] < stk(l2)[i+1])
-        {
-          Scierror(999,"Objplot3d: y vector is not monotonous \t\n");
-          return 0;
-        }
-      }
-      psurf->flag_y = -1;
-    }
-    else /* y[0] < y[1]*/
-    {
-      for(i=1;i<dimvecty-1;i++)
-      {
-        if(stk(l2)[i] > stk(l2)[i+1])
-        {
-          Scierror(999,"Objplot3d: y vector is not monotonous \t\n");
-          return 0;
-        }
-      }
-      psurf->flag_y = 1;
-    }
-  }
-  
-  /* Update of the dimzx, dimzy depends on  m3, n3: */
-  psurf->dimzx = m3;
-  psurf->dimzy = n3;
-  
-
-  /* Free the old values... */
-  FREE(psurf->pvecx); psurf->pvecx = NULL;
-  FREE(psurf->pvecy); psurf->pvecy = NULL;
-  FREE(psurf->pvecz); psurf->pvecz = NULL;
-  /* ...even on zcol wich must have been initialized like others or set to NULL in case there was no color before
-     The FREE macro tests the NULL pointer existence... */
-  FREE(psurf->zcol); psurf->zcol = NULL;
-  /* If we had a previous color matrix/vector and we do not specify a new one, I consider we are losing it.*/
-  /* That's why we make a FREE as follows:*/
-  FREE(psurf->inputCMoV);psurf->inputCMoV = NULL; /* F.Leray 23.03.04*/
-
-  /* allocations:*/
-  if ((pvecx = MALLOC (m1*n1 * sizeof (double))) == NULL) return -1;
-  if ((pvecy = MALLOC (m2*n2 * sizeof (double))) == NULL) {
-    FREE(pvecx); pvecx = (double *) NULL;
-    return -1;
-  } 
-  if ((pvecz = MALLOC (m3*n3 * sizeof (double))) == NULL) {
-    FREE(pvecx); pvecx = (double *) NULL;
-    FREE(pvecy); pvecy = (double *) NULL;
-    return -1;
-  }
-
-  /* Copy the new values F.Leray */
-  for(i=0;i< m1*n1;i++)
-  {
-    pvecx[i] = stk(l1)[i];
-  }
-
-  for(i=0;i< m2*n2;i++)
-  {
-    pvecy[i] = stk(l2)[i];
-  }
-
-  for(i=0;i< m3*n3;i++)
-  {
-    pvecz[i] = stk(l3)[i];
-  }
-
-  if( flagc == 1 ) /* F.Leray There is a color matrix */
-  {
-    if( m3n * n3n != 0 ) /* Normally useless test here: means we have a color vector or matrix */
-    {
-      if (((psurf->inputCMoV = MALLOC (( (m3n)*(n3n) * sizeof (double)))) == NULL))
-      {
-        FREE(pvecx); pvecx = (double *) NULL;
-        FREE(pvecy); pvecy = (double *) NULL;
-        FREE(pvecz); pvecz = (double *) NULL;
-        return -1;
-      }
-
-      for (j = 0;j < (m3n)*(n3n); j++)
-      {
-        psurf->inputCMoV[j] = stk(l3n)[j] ;
-      }
-
-    }
-
-    if( psurf->flagcolor == 2 || psurf->flagcolor == 4 )
-    { /* case of SCI_PLOT3D avoid */
-      nc = psurf->dimzy ;
-    }
-    else if( psurf->flagcolor == 3 )
-    {
-      nc = psurf->dimzx * psurf->dimzy ;
-    }
-    else
-    {
-      nc = 0 ;
-    }
-
-    if ( nc > 0 )
-    {
-      if ((psurf->zcol = MALLOC (nc * sizeof (double))) == NULL)
-      {
-        FREE(pvecx); pvecx = (double *) NULL;
-        FREE(pvecy); pvecy = (double *) NULL;
-        FREE(pvecz); pvecz = (double *) NULL;
-        return -1;
-      }
-    }
-
-    /* case flagcolor == 2*/
-    if( psurf->flagcolor == 2 && ( m3n == 1 || n3n == 1) ) /* it means we have a vector in Color input: 1 color per facet in input*/
-    {
-      /* We have just enough information to fill the psurf->zcol array*/
-      for (j = 0;j < nc; j++)  /* nc value is dimzx*dimzy == m3 * n3 */
-      {
-        psurf->zcol[j] = psurf->inputCMoV[j];  /* DJ.A 2003 */
-      }
-    }
-    else if( psurf->flagcolor == 2 ) /* it means we have a matrix in Color input: 1 color per vertex in input*/
-    {
-      /* We have too much information and we take only the first dimzy colors to fill the psurf->zcol array*/
-      /* NO !! Let's do better; F.Leray 08.05.04 : */
-      /* We compute the average value (sum of the value of the nf=m3n vertices on a facet) / (nb of vertices per facet which is nf=m3n) */
-      /* in our example: m3n=4 and n3n=400 */
-      for ( j = 0 ; j < nc ; j++)   /* nc value is dimzy*/
-      {
-        double tmp = 0.0 ;
-        for(ii=0;ii<m3n;ii++)
-        {
-          tmp = tmp +  psurf->inputCMoV[j * m3n + ii] ;
-        }
-        tmp = tmp / m3n ;
-        psurf->zcol[j] = tmp;
-      }
-    }
-    /* case flagcolor == 3*/
-    else if( psurf->flagcolor==3 && ( m3n==1 || n3n ==1) ) /* it means we have a vector in Color input: 1 color per facet in input*/
-    {
-      /* We have insufficient info. to fill the entire zcol array of dimension nc = dimzx*dimzy*/
-      /* We repeat the data:*/
-      for(i = 0; i< psurf->dimzy; i++)
-      {
-        for (j = 0;j < psurf->dimzx; j++)  /* nc value is dimzx*dimzy == m3n * n3n */
-        {
-          psurf->zcol[psurf->dimzx*i+j] = psurf->inputCMoV[i];  /* DJ.A 2003 */
-        }
-      }
-    }
-    else if( psurf->flagcolor==3 ) /* it means we have a matrix in Color input: 1 color per vertex in input*/
-    {
-      /* We have just enough information to fill the psurf->zcol array*/
-      for (j = 0;j < nc; j++)
-      {   /* nc value is dimzy*/
-        psurf->zcol[j]= psurf->inputCMoV[j] ;
-      }
-    }  
-    /* case flagcolor == 4*/
-    else if(psurf->flagcolor==4 && ( m3n==1 || n3n ==1)) /* it means we have a vector in Color input: 1 color per facet in input*/
-    {
-      /* We have insufficient info. to fill the entire zcol array of dimension nc = dimzx*dimzy*/
-      /* We repeat the data:*/
-      for (j = 0;j < nc; j++)  /* nc value is dimzx*dimzy == m3n * n3n */
-      {
-        psurf->zcol[j] = psurf->inputCMoV[j];
-      }
-    }
-    else if ( psurf->flagcolor == 4 ) /* it means we have a matrix in Color input: 1 color per vertex in input*/
-    {
-      /* input : color matrix , we use 1 color per facet with Matlab selection mode (no average computed) */
-      /* HERE is the difference with case 2 */
-      for ( j = 0 ; j < nc ; j++ )   /* nc value is dimzy*/
-      {
-        psurf->zcol[j] = psurf->inputCMoV[j*m3n] ;
-      }
-    }
-
-  }
-  else /* else we put the value of the color_mode flag[0]*/
-  {
-
-    if(psurf->flagcolor == 2 || psurf->flagcolor == 4)
-    { /* case of SCI_PLOT3D avoid */
-      nc = psurf->dimzy;
-    }
-    else if(psurf->flagcolor == 3)
-    {
-      nc = psurf->dimzx *  psurf->dimzy;
-    } 
-    else
-    {
-      nc=0;
-    }
-
-    if ( nc > 0)
-    {
-      if ((psurf->zcol = MALLOC (nc * sizeof (double))) == NULL)
-      {
-        FREE(pvecx); pvecx = (double *) NULL;
-        FREE(pvecy); pvecy = (double *) NULL;
-        FREE(pvecz); pvecz = (double *) NULL;
-        return -1;
-      }
-    }
-
-    /* case flagcolor == 2*/
-    if(psurf->flagcolor==2 || psurf->flagcolor==4) /* we have to fill a Color vector */
-    {
-      for (j = 0;j < nc; j++)  /* nc value is dimzx*dimzy == m3n * n3n */
-      {
-        psurf->zcol[j] = psurf->flag[0];
-      }
-    }
-    else if(psurf->flagcolor==3) /* we have to fill a color matrix */
-    {
-      for ( i = 0 ; i < psurf->dimzx * psurf->dimzy ; i++ )
-      {
-        psurf->zcol[i] = psurf->flag[0];
-      }
-    }
-    else
-    {
-      /* case flagcolor == 0 or 1 */
-      psurf->zcol = NULL;
-      psurf->izcol = 0;
-    }
-  }
-
-  psurf->pvecx = pvecx;
-  psurf->pvecy = pvecy;
-  psurf->pvecz = pvecz;
-
-  psurf->nc = nc; /*Adding F.Leray 23.03.04*/
-
-  psurf->m1 = m1;
-  psurf->m2 = m2;
-  psurf->m3 = m3;
-  psurf->n1 = n1;
-  psurf->n2 = n2;
-  psurf->n3 = n3;
-  psurf->m3n = m3n; /* If m3n and n3n are 0, then it means that no color matrix/vector was in input*/
-  psurf->n3n = n3n;
-
-  /* We need to rebuild ...->color matrix */
-  if( psurf->flagcolor != 0 && psurf->flagcolor != 1 )
-  { 
-    if(psurf->cdatamapping == 0)
-    {
-      /* scaled */
-      FREE(psurf->color);
-      LinearScaling2Colormap(pobj);
-    }
-    else
-    {
-      int nc = psurf->nc;
-
-      FREE(psurf->color);
-
-      if(nc>0)
-      {
-       if ((psurf->color = MALLOC (nc * sizeof (double))) == NULL)
-        {
-         return -1;
-        }
-      }
-
-      for(i=0;i<nc;i++)
-      {
-       psurf->color[i] = psurf->zcol[i];
-      }
-      /* copy zcol that has just been freed and re-alloc + filled in */
-    }
-  }
-  return 0;
-}
 
 /*-----------------------------------------------------------------------------------*/
 /**@name int sciset(sciPointObj *pobj,char *marker, long *x, long *y, long *w, long *h)
@@ -1291,7 +595,6 @@ int sciSet(sciPointObj *pobj, char *marker, int *value, int *numrow, int *numcol
   {
     return set_current_figure_property( pobj, *value, *numrow, *numcol ) ;
   }
-
   /************************  figure Properties *****************************/ 
   else if (strcmp(marker,"figure_position") == 0)
   {
@@ -1335,472 +638,159 @@ int sciSet(sciPointObj *pobj, char *marker, int *value, int *numrow, int *numcol
     return set_interp_color_vector_property( pobj, *value, *numrow, *numcol ) ;
   }
   else if (strcmp(marker,"interp_color_mode") == 0)
-    {
-      if((sciGetEntityType(pobj) != SCI_POLYLINE))
-       {strcpy(error_message,"interp_color_mode can only be set on Polyline objects"); return -1;}
-
-      if(strcmp(cstk(*value),"on")==0 ){
-       if(sciGetInterpVector(pobj) == NULL)
-         {strcpy(error_message,"You must first specify an interp_color_vector for this object"); return -1;}
-       else
-         pPOLYLINE_FEATURE (pobj)->isinterpshaded = TRUE;
-      }
-      else
-       pPOLYLINE_FEATURE (pobj)->isinterpshaded = FALSE;
-    } 
+  {
+    return set_interp_color_mode_property( pobj, *value, *numrow, *numcol ) ;
+  } 
   else if (strcmp(marker,"foreground") == 0)
-    {
-      return sciSetForeground((sciPointObj *)pobj, (int) stk(*value)[0]);
-    }
+  {
+    return set_foreground_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"fill_mode") == 0)
-  { 
-    if ( strcmp(cstk(*value),"on") == 0 )
-    {
-      return sciSetIsFilled( pobj, TRUE ) ;
-    }
-    else if (strcmp(cstk(*value),"off")==0 )
-    {
-      return sciSetIsFilled( pobj, FALSE ) ;
-    }
-    else
-    {
-      strcpy(error_message,"Nothing to do (value must be 'on/off')");
-      return -1;
-    }
+  {
+    return set_fill_mode_property( pobj, *value, *numrow, *numcol ) ;
   }  
   else if (strcmp(marker,"thickness") == 0) 
   {
-    return sciSetLineWidth( pobj, (int) *stk(*value) ) ;
+    return set_thickness_property( pobj, *value, *numrow, *numcol ) ;
   }
-  else if (strcmp(marker,"arrow_size_factor") == 0)  {
-    if(sciGetEntityType(pobj) == SCI_POLYLINE)
-      pPOLYLINE_FEATURE(pobj)->arsize_factor = *stk(*value);
+  else if (strcmp(marker,"arrow_size_factor") == 0)
+  {
+    return set_arrow_size_factor_property( pobj, *value, *numrow, *numcol ) ;
   }
-  else if (strcmp(marker,"line_style") == 0) {
-    return sciSetLineStyle((sciPointObj *) pobj,(int) *stk(*value));
+  else if (strcmp(marker,"line_style") == 0)
+  {
+    return set_line_style_property( pobj, *value, *numrow, *numcol ) ;
   }
-  else if (strcmp(marker,"line_mode") == 0) {
-    if (strcmp(cstk(*value),"on")==0 )
-      return sciSetIsLine((sciPointObj *) pobj,1);
-    else if (strcmp(cstk(*value),"off")==0 )
-      return sciSetIsLine((sciPointObj *) pobj,0);
-    else  {strcpy(error_message,"Value must be 'on/off'"); return -1;}
+  else if (strcmp(marker,"line_mode") == 0)
+  {
+    return set_line_mode_property( pobj, *value, *numrow, *numcol ) ;
   }
-  else if (strcmp(marker,"surface_mode") == 0) {
-    if((sciGetEntityType(pobj) == SCI_PLOT3D) ||
-       (sciGetEntityType(pobj) == SCI_FAC3D)  ||
-       (sciGetEntityType(pobj) == SCI_SURFACE)){
-      if (strcmp(cstk(*value),"on")==0 )
-       return sciSetIsLine((sciPointObj *) pobj,1);
-      else if (strcmp(cstk(*value),"off")==0 )
-       return sciSetIsLine((sciPointObj *) pobj,0);
-      else  {strcpy(error_message,"Value must be 'on/off'"); return -1;}
-    }
-    else {strcpy(error_message,"Surface_mode can not be set with this object, use line_mode"); return -1;}
+  else if (strcmp(marker,"surface_mode") == 0)
+  {
+    return set_surface_mode_property( pobj, *value, *numrow, *numcol ) ;
   }
   else if (strcmp(marker,"mark_style") == 0)
   {
-    int status1 ;
-    int status2 ;
-    status1 = sciSetIsMark((sciPointObj *) pobj, TRUE);
-    status2 = sciSetMarkStyle((sciPointObj *) pobj,(int) *stk(*value));
-    return sciSetFinalStatus( status1, status2 ) ;
-  }
-  else if (strcmp(marker,"mark_mode") == 0) {
-    if (strcmp(cstk(*value),"on")==0 )
-      return sciSetIsMark((sciPointObj *) pobj,1);
-    else if (strcmp(cstk(*value),"off")==0 )
-      return sciSetIsMark((sciPointObj *) pobj,0);
-    else  {strcpy(error_message,"Value must be 'on/off'"); return -1;}
-  }
-  else if (strcmp(marker,"mark_size_unit") == 0) {
-    if (strcmp(cstk(*value),"point")==0 )
-      return sciSetMarkSizeUnit((sciPointObj *) pobj, 1); /* 1 : points, 2 : tabulated */
-    else if (strcmp(cstk(*value),"tabulated")==0 )
-      return sciSetMarkSizeUnit((sciPointObj *) pobj, 2);
-    else  {strcpy(error_message,"Value must be 'point/tabulated'"); return -1;}
-  }
-  else if (strcmp(marker,"mark_size") == 0) {
-    /* sciSetIsMark((sciPointObj *) pobj, TRUE); */ 
-    /* F.Leray 27.01.05 commented because mark_size is automatically launched */
-    /* in tcl/tk editor (which causes marks appearance even when unwanted). */
-    return sciSetMarkSize((sciPointObj *) pobj, (int)*stk(*value));
-  }
-  else if (strcmp(marker,"mark_foreground") == 0) {
-    /*    sciSetIsMark((sciPointObj *) pobj, TRUE); */
-    /* F.Leray 27.01.05 commented because mark_size is automatically launched */
-    /* in tcl/tk editor (which causes marks appearance even when unwanted). */
-    return sciSetMarkForeground((sciPointObj *) pobj, (int)*stk(*value));
-  }
-  else if (strcmp(marker,"mark_background") == 0) {
-    /*   sciSetIsMark((sciPointObj *) pobj, TRUE); */
-    /* F.Leray 27.01.05 commented because mark_size is automatically launched */
-    /* in tcl/tk editor (which causes marks appearance even when unwanted). */
-    return sciSetMarkBackground((sciPointObj *) pobj, (int)*stk(*value));
+    return set_mark_style_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if (strcmp(marker,"mark_mode") == 0)
+  {
+    return set_mark_mode_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if (strcmp(marker,"mark_size_unit") == 0)
+  {
+    return set_mark_size_unit_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if (strcmp(marker,"mark_size") == 0)
+  {
+    return set_mark_size_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if (strcmp(marker,"mark_foreground") == 0)
+  {
+    return set_mark_foreground_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if (strcmp(marker,"mark_background") == 0)
+  {
+    return set_mark_background_property( pobj, *value, *numrow, *numcol ) ;
   }
   else if (strcmp(marker,"bar_width") == 0)
-    {  
-      if (sciGetEntityType (pobj) == SCI_POLYLINE){
-       double valeur = stk(*value)[0];
-       pPOLYLINE_FEATURE (pobj)->bar_width = valeur;
-      }
-      else
-       {strcpy(error_message,"Object has no bar shift");return -1;}
-    }
+  {
+    return set_bar_width_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"bar_layout") == 0)
-    {  
-      if (sciGetEntityType (pobj) == SCI_POLYLINE){
-       if(strcmp(cstk(*value),"grouped") == 0)
-         pPOLYLINE_FEATURE (pobj)->bar_layout = 0;
-       else if(strcmp(cstk(*value),"stacked") == 0)
-         pPOLYLINE_FEATURE (pobj)->bar_layout = 1;
-       else
-         {strcpy(error_message,"Bad property specified for bar_layout");return -1;}
-      }
-      else
-       {strcpy(error_message,"Object has no bar style");return -1;}
-    }
+  {
+    return set_bar_layout_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"x_shift") == 0)
-    {  
-      if (sciGetEntityType (pobj) == SCI_POLYLINE){
-       int num = 0;
-       if(*numcol > 1 && *numrow > 1){
-         strcpy(error_message,"Bad input, x_shift should be a row or column vector.");
-         return -1;
-       }
-       num = (*numrow)*(*numcol);
-
-       if (num != 0 && num!=pPOLYLINE_FEATURE (pobj)->n1) /* we can specify [] (null vector) to reset to default */
-         {
-           strcpy(error_message,"Wrong size for input vector.");
-           return -1;
-         }
-      
-       FREE(pPOLYLINE_FEATURE (pobj)->x_shift);
-       pPOLYLINE_FEATURE (pobj)->x_shift = (double *) NULL;
-       
-       if(num != 0){
-         if ((pPOLYLINE_FEATURE (pobj)->x_shift = (double *) MALLOC (num * sizeof (double))) == NULL){
-           strcpy(error_message,"No memory left for allocating temporary tics_coord");return -1;}
-         
-         for (i=0;i<num;i++)
-           pPOLYLINE_FEATURE (pobj)->x_shift[i] = *stk(*value+i);
-       }
-      }
-      else
-       {strcpy(error_message,"Object has no x_shift");return -1;}
-    }
+  {
+    return set_x_shift_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"y_shift") == 0)
-    {  
-      if (sciGetEntityType (pobj) == SCI_POLYLINE){
-       int num = 0;
-       if(*numcol > 1 && *numrow > 1){
-         strcpy(error_message,"Bad input, y_shift should be a row or column vector.");
-         return -1;
-       }
-       num = (*numrow)*(*numcol);
-
-       if (num != 0 && num!=pPOLYLINE_FEATURE (pobj)->n1) /* we can specify [] (null vector) to reset to default */
-         {
-           strcpy(error_message,"Wrong size for input vector.");
-           return -1;
-         }
-      
-       FREE(pPOLYLINE_FEATURE (pobj)->y_shift);
-       pPOLYLINE_FEATURE (pobj)->y_shift = (double *) NULL;
-
-       if(num != 0){
-         if ((pPOLYLINE_FEATURE (pobj)->y_shift = (double *) MALLOC (num * sizeof (double))) == NULL){
-           strcpy(error_message,"No memory left for allocating temporary tics_coord");return -1;}
-         
-         for (i=0;i<num;i++)
-           pPOLYLINE_FEATURE (pobj)->y_shift[i] = *stk(*value+i);
-       }
-      }
-      else
-       {strcpy(error_message,"Object has no y_shift");return -1;}
-    }
+  {
+    return set_y_shift_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"z_shift") == 0)
-    {  
-      if (sciGetEntityType (pobj) == SCI_POLYLINE){
-       int num = 0;
-       if(*numcol > 1 && *numrow > 1){
-         strcpy(error_message,"Bad input, z_shift should be a row or column vector.");
-         return -1;
-       }
-       num = (*numrow)*(*numcol);
-
-       if (num != 0 && num!=pPOLYLINE_FEATURE (pobj)->n1) /* we can specify [] (null vector) to reset to default */
-         {
-           strcpy(error_message,"Wrong size for input vector.");
-           return -1;
-         }
-      
-       FREE(pPOLYLINE_FEATURE (pobj)->z_shift);
-       pPOLYLINE_FEATURE (pobj)->z_shift = (double *) NULL;
-       
-       if(num != 0){
-         if ((pPOLYLINE_FEATURE (pobj)->z_shift = (double *) MALLOC (num * sizeof (double))) == NULL){
-           strcpy(error_message,"No memory left for allocating temporary tics_coord");return -1;}
-         
-         for (i=0;i<num;i++)
-           pPOLYLINE_FEATURE (pobj)->z_shift[i] = *stk(*value+i);
-       }
-      }
-      else
-       {strcpy(error_message,"Object has no z_shift");return -1;}
-    }
-
+  {
+    return set_z_shift_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"polyline_style") == 0)
-    {  
-      if (sciGetEntityType (pobj) == SCI_POLYLINE){
-       int valeur = (int)stk(*value)[0];
-       if ((valeur==1) || (valeur==2) ||
-           (valeur==3) || (valeur==4) ||
-           (valeur==5) || (valeur==6) ||
-           (valeur==7)){
-         pPOLYLINE_FEATURE (pobj)->plot = valeur;
-       }
-       else
-         {strcpy(error_message,"Style must be 1,2,3,4,5,6 or 7");return -1;}
-      }
-      else
-       {strcpy(error_message,"Object is not a Polyline");return -1;}
-    }
-
+  {
+    return set_polyline_style_property( pobj, *value, *numrow, *numcol ) ;
+  }
   /************* font properties *********/
   else if (strcmp(marker,"font_size") == 0)
-    {
-      xtmp = (int)stk(*value)[0];
-      return sciSetFontDeciWidth((sciPointObj *) pobj, xtmp*100);
-    }
+  {
+    return set_font_size_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"font_angle") == 0)
-    {
-      int status1 = 1 ;
-      int status2 ;
-      xtmp = (int)stk(*value)[0];
-      if ( sciGetAutoRotation( pobj ) )
-      {
-        status1 = sciSetAutoRotation( pobj, FALSE ) ;
-      }
-      status2 = sciSetFontOrientation((sciPointObj *) pobj,(int) (*stk(*value)*10));
-      return sciSetFinalStatus( status1, status2 ) ;
-    }
+  {
+    return set_font_angle_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"font_foreground") == 0)
-    {
-      xtmp = (int) *stk(*value);
-      return sciSetFontForeground((sciPointObj *) pobj, xtmp);
-    }
-  else if (strcmp(marker,"font_color") == 0)   {
-    if (sciGetEntityType (pobj) == SCI_AXES)
-      pAXES_FEATURE (pobj)->textcolor=(int)*stk(*value);
-    else if (sciGetEntityType (pobj) == SCI_SUBWIN || sciGetEntityType (pobj) == SCI_FIGURE){
-      return sciSetFontForeground(pobj,(int)*stk(*value));} /* F.Leray 08.04.04 */
-    else
-      {strcpy(error_message,"font_color property does not exist for this handle");return -1;}
+  {
+    return set_font_foreground_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if (strcmp(marker,"font_color") == 0)
+  {
+    return set_font_color_property( pobj, *value, *numrow, *numcol ) ;
   }    
   else if (strcmp(marker,"font_style") == 0)
-    {
-      xtmp = (int) *stk(*value);
-      if ( (xtmp > 10) || xtmp < 0)
-       {strcpy(error_message,"The value must be in [0 10]");return -1;}
-      else
-       return sciSetFontStyle((sciPointObj *) pobj, xtmp);
-    }
-  else if (strcmp(marker,"font_name") == 0) {
-    return sciSetFontName((sciPointObj *)pobj, cstk(*value), (*numcol)*(*numrow));
+  {
+    return set_font_style_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if (strcmp(marker,"font_name") == 0)
+  {
+    return set_font_name_property( pobj, *value, *numrow, *numcol ) ;
   }
-
   else if (strcmp(marker,"text_box_mode") == 0)
   {
-    if (sciGetEntityType (pobj) == SCI_TEXT)
-    {
-      if ( strcmp(cstk(*value),"off") == 0 )
-      {
-        int status1 = sciSetCenterPos( pobj, FALSE ) ;
-        int status2 = sciSetAutoSize(  pobj, TRUE  ) ;
-        return sciSetFinalStatus( status1, status2 ) ;
-      }
-      else if ( strcmp(cstk(*value),"centered") == 0 )
-      {
-        int status1 = sciSetCenterPos( pobj, TRUE  ) ;
-        int status2 = sciSetAutoSize(  pobj, TRUE  ) ;
-        return sciSetFinalStatus( status1, status2 ) ;
-      }
-      else if ( strcmp(cstk(*value),"filled") ==  0 )
-      {
-        int status1 = sciSetCenterPos( pobj, TRUE  ) ;
-        int status2 = sciSetAutoSize(  pobj, FALSE ) ;
-        return sciSetFinalStatus( status1, status2 ) ;
-      }
-      else
-      {
-        strcpy(error_message,"Value must be 'off', 'centered' or 'filled'");
-        return -1;
-      }
-    }
-    else
-    {
-      strcpy(error_message,"text_box_mode property does not exist for this handle");
-      return -1;
-    }
+    return set_text_box_mode_property( pobj, *value, *numrow, *numcol ) ;
   }
   else if ( strcmp(marker,"auto_dimensionning") == 0 )
   {
-    if ( sciGetEntityType( pobj ) == SCI_TEXT )
-    {
-      if ( strcmp(cstk(*value),"on") == 0 )
-      {
-        return sciSetAutoSize( pobj, TRUE ) ;
-      }
-      else if ( strcmp(cstk(*value),"off") == 0 )
-      {
-        return sciSetAutoSize( pobj, FALSE ) ;
-      }
-      else
-      {
-        strcpy(error_message,"Value must be 'on/off'");
-        return -1;
-      }
-    }
-    else
-    {
-      strcpy(error_message,"auto_dimensionning property does not exist for this handle");
-      return -1;
-    }
+    return set_auto_dimensionning_property( pobj, *value, *numrow, *numcol ) ;
   }
   else if ( strcmp(marker,"alignment") == 0 )
   {
-    if ( sciGetEntityType( pobj ) == SCI_TEXT )
-    {
-      if ( strcmp(cstk(*value),"left") == 0 )
-      {
-        return sciSetAlignment( pobj, ALIGN_LEFT ) ;
-      }
-      else if ( strcmp(cstk(*value),"center") == 0 )
-      {
-        return sciSetAlignment( pobj, ALIGN_CENTER ) ;
-      }
-      else if ( strcmp(cstk(*value),"right") == 0 )
-      {
-        return sciSetAlignment( pobj, ALIGN_RIGHT ) ;
-      }
-      strcpy(error_message,"Second argument must be 'left','center' or 'right'.");
-      return -1 ;
-    }
-    else
-    {
-      strcpy(error_message,"alignment property does not exist for this handle");
-      return -1 ;
-    }
+    return set_alignment_property( pobj, *value, *numrow, *numcol ) ;
   }
   else if (strcmp(marker,"text_box") == 0)
-    {
-      if (sciGetEntityType (pobj) == SCI_TEXT)
-      {
-        if ( *numcol * *numrow != 2 )
-        {
-          strcpy(error_message,"text_box must be a 2D vector.");
-          return -1 ;
-        }
-       return sciSetUserSize( pobj, stk(*value)[0], stk(*value)[1] ) ;
-      }
-      else
-      {
-        strcpy(error_message,"text_box property does not exist for this handle");
-        return -1;
-      }
-    }
+  {
+    return set_text_box_property( pobj, *value, *numrow, *numcol ) ;
+  }
   else if (strcmp(marker,"text") == 0)
   {
-    char *** pStrings = (char ***) value ;
-    return sciSetText( pobj, *pStrings, *numrow, *numcol ) ;
+    return set_text_property( pobj, *value, *numrow, *numcol ) ;
   }
   /******************/
-  else if (strcmp(marker,"auto_clear") == 0) {
-    if (strcmp(cstk(*value),"on")==0 )
-      return sciSetAddPlot((sciPointObj *) pobj,FALSE);
-    else if (strcmp(cstk(*value),"off")==0 )
-      return sciSetAddPlot((sciPointObj *) pobj,TRUE);
-    else  {strcpy(error_message,"Value must be 'on/off'"); return -1;}
-  }
-  else if (strcmp(marker,"auto_scale") == 0) {
-    if (strcmp(cstk(*value),"on")==0 )
-      return sciSetAutoScale((sciPointObj *) pobj, TRUE);
-    else if (strcmp(cstk(*value),"off")==0 )
-      return sciSetAutoScale((sciPointObj *) pobj, FALSE);
-    else  {strcpy(error_message,"Value must be 'on/off'"); return -1;}
-  }
-  else if ((strcmp(marker,"zoom_box") == 0) && (sciGetEntityType (pobj) == SCI_SUBWIN)) { 
-    /* On doit avoir avoir une matrice 4x1 */
-    if (*numcol * *numrow == 4)
-      scizoom(stk(*value),pobj);  
-    else if (*numcol * *numrow == 0)
-      unzoom();
-    else
-      {strcpy(error_message,"Argument must be a vector of size 4");return -1;}
-
+  else if (strcmp(marker,"auto_clear") == 0)
+  {
+    return set_auto_clear_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if (strcmp(marker,"auto_scale") == 0)
+  {
+    return set_auto_scale_property( pobj, *value, *numrow, *numcol ) ;
+  }
+  else if ( strcmp(marker,"zoom_box") == 0 )
+  {
+    return set_zoom_box_property( pobj, *value, *numrow, *numcol ) ;
   } 
-  else if ((strcmp(marker,"zoom_state") == 0)  && (sciGetEntityType (pobj) == SCI_SUBWIN)){
-    if ((strcmp(cstk(*value),"on") == 0))
-      { 
-       if (!sciGetZooming((sciPointObj *)pobj))
-         {strcpy(error_message,"set zoom box ( set('zoom_box',[xmin ymin xmax ymax]))");return -1;}
-       else
-         {strcpy(error_message,"Object is already zoomed");return -1;}
-      }
-    else if ((strcmp(cstk(*value),"off") == 0)) 
-      { 
-        unzoom();
-        return sciSetZooming((sciPointObj *)pobj,FALSE);
-      }
-    else
-      {strcpy(error_message,"Value must be 'on/off'");       return -1;}
+  else if ( strcmp(marker,"zoom_state") == 0 )
+  {
+    return set_zoom_state_property( pobj, *value, *numrow, *numcol ) ;
   }
   /***********************************************/
-  else if (strcmp(marker,"clip_box") == 0)  { 
-    /* On doit avoir avoir une matrice 4x1 */
-    if (*numcol * *numrow == 4){
-      int status1 ;
-      int status2 ;
-      status1 = sciSetClipping((sciPointObj *)pobj, stk(*value));
-      status2 = sciSetIsClipping(pobj, 1);
-      return sciSetFinalStatus( status1, status2 ) ;
-    }
-    else {strcpy(error_message,"Argument must be a vector of size 4");return -1;}
-
+  else if (strcmp(marker,"clip_box") == 0)
+  {
+    return set_clip_box_property( pobj, *value, *numrow, *numcol ) ;
   } 
-  else if (strcmp(marker,"clip_state") == 0) {
-    if ((strcmp(cstk(*value),"clipgrf") == 0))
-    {
-      return sciSetIsClipping( (sciPointObj *)pobj,0);
-    }
-    else if ((strcmp(cstk(*value),"off") == 0))
-    {
-      return sciSetIsClipping( (sciPointObj *)pobj,-1);
-    }
-    else if ((strcmp(cstk(*value),"on") == 0))
-    {
-      /*       if(sciGetClipping(pobj) != NULL){ */
-      if(sciGetIsClipRegionValuated(pobj) == 1)
-      {
-       return sciSetIsClipping( (sciPointObj *)pobj,1);
-      }
-      else
-      {
-       return sciSetIsClipping( (sciPointObj *)pobj,0);
-      }
-    }
-    else
-      {strcpy(error_message,"Value must be 'clipgrf', 'on' or 'off'"); return -1;}
+  else if (strcmp(marker,"clip_state") == 0)
+  {
+    return set_clip_state_property( pobj, *value, *numrow, *numcol ) ;
   }            
-  else if (strcmp(marker,"data") == 0){
-    CheckAndUpdate_x_shift(pobj,*numrow); /* used only on Polyline */
-    CheckAndUpdate_y_shift(pobj,*numrow); /* used only on Polyline */
-    CheckAndUpdate_z_shift(pobj,*numrow); /* used only on Polyline */
-    
-    return sciSetPoint((sciPointObj *)pobj, stk(*value), numrow, numcol);
-    
+  else if (strcmp(marker,"data") == 0)
+  {
+    return set_data_property( pobj, *value, *numrow, *numcol ) ; 
   }
 
   /**************** callback *********************/
@@ -3257,59 +2247,6 @@ int sciSet(sciPointObj *pobj, char *marker, int *value, int *numrow, int *numcol
        }
   return 0;
 }
-
-/*-----------------------------------------------------------------------------------*/
-int LinearScaling2Colormap(sciPointObj* pobj)
-{
-  int i;
-  int nbcol =  sciGetNumColors (pobj); /* the number of the colors inside the current colormap */
-  sciSurface * psurf = pSURFACE_FEATURE (pobj);
-
-  double min,max;
-
-  double indexmin = 1.;
-  double indexmax = (double) nbcol;
-
-  int nc = psurf->nc; /* the number of colors contained inside zcol matrix */
-
-
-  if(psurf->zcol == NULL){
-    sciprint("Color matrix is NULL ; can not build color scaled linearly into the current colormap");
-    return -1;
-  }
-
-  if (((psurf->color = MALLOC (nc * sizeof (double))) == NULL)){
-    sciprint("Allocation failed for color in LinearScaling2Colormap");
-    return -1;
-  }
-
-  /* get the min inside zcol */
-  min = psurf->zcol[0];
-  for(i=0;i<nc;i++)
-    if(min > psurf->zcol[i]) min = psurf->zcol[i];
-
-  /* get the max inside zcol */
-  max = psurf->zcol[0];
-  for(i=0;i<nc;i++)
-    if(max < psurf->zcol[i]) max = psurf->zcol[i];
-
-  if(min != max)
-    {
-      /* linear interpolation */
-      double A = (indexmin-indexmax)/(min-max); 
-      double B = (min*indexmax-indexmin*max)/(min-max);
-      for(i=0;i<nc;i++)
-       psurf->color[i] = A*psurf->zcol[i] + B + 0.1;
-    }
-  else
-    {
-      double C = (indexmin+indexmax)/2;
-      for(i=0;i<nc;i++)
-       psurf->color[i] = C;
-    }
-
-  return 0;
-}
 /*-----------------------------------------------------------------------------------*/
 /* Called by a.log_flags='nn','ln','nl', or 'll'*/
 /* For the moment, z has no logflag F.Leray 05.10.04 */
@@ -3388,209 +2325,4 @@ char ** CaseLogflagN2L(int * u_nxgrads, double *u_xgrads, char ** u_xlabels)
 
   return u_xlabels;
 }
-
-
-int CheckAndUpdate_x_shift(sciPointObj * pobj, int numrow)
-{
-  sciPolyline * ppolyline = NULL;
-  int i;
-
-  if(sciGetEntityType(pobj) != SCI_POLYLINE)
-    return 0;
-  
-  ppolyline = pPOLYLINE_FEATURE(pobj);
-
-
-  if(ppolyline->x_shift == (double *) NULL)
-    return 0;
-  else
-    {
-      int size_x_old = ppolyline->n1; /* number of x data */
-      if(size_x_old == numrow)
-       return 0;
-      else if(size_x_old > numrow)
-       {
-         double * new_bar = NULL;
-         
-         if((new_bar = (double *) MALLOC(numrow*sizeof(double))) == NULL)
-           {
-             strcpy(error_message,"No more place to allocate new_bar");
-             return -1;
-           }
-         
-         for(i=0;i<numrow;i++)
-           new_bar[i] = ppolyline->x_shift[i];
-         
-         FREE(ppolyline->x_shift);
-         
-         ppolyline->x_shift = new_bar;
-         
-       }
-      else /* case where size_x_old < numrow */
-       {
-         double * new_bar = NULL;
-         
-         if((new_bar = (double *) MALLOC(numrow*sizeof(double))) == NULL)
-           {
-             strcpy(error_message,"No more place to allocate new_bar");
-             return -1;
-           }
-         
-         for(i=0;i<size_x_old;i++)
-           new_bar[i] = ppolyline->x_shift[i];
-         
-         for(i=size_x_old;i<numrow;i++)
-           new_bar[i] = 0.;
-         
-         FREE(ppolyline->x_shift);
-         
-         ppolyline->x_shift = new_bar;
-       }
-    }
-  
-  return 0;
-}
-
-int CheckAndUpdate_y_shift(sciPointObj * pobj, int numrow)
-{
-  sciPolyline * ppolyline = NULL;
-  int i;
-
-  if(sciGetEntityType(pobj) != SCI_POLYLINE)
-    return 0;
-  
-  ppolyline = pPOLYLINE_FEATURE(pobj);
-
-
-  if(ppolyline->y_shift == (double *) NULL)
-    return 0;
-  else
-    {
-      int size_x_old = ppolyline->n1; /* number of x data */
-      if(size_x_old == numrow)
-       return 0;
-      else if(size_x_old > numrow)
-       {
-         double * new_bar = NULL;
-         
-         if((new_bar = (double *) MALLOC(numrow*sizeof(double))) == NULL)
-           {
-             strcpy(error_message,"No more place to allocate new_bar");
-             return -1;
-           }
-         
-         for(i=0;i<numrow;i++)
-           new_bar[i] = ppolyline->y_shift[i];
-         
-         FREE(ppolyline->y_shift);
-         
-         ppolyline->y_shift = new_bar;
-         
-       }
-      else /* case where size_x_old < numrow */
-       {
-         double * new_bar = NULL;
-         
-         if((new_bar = (double *) MALLOC(numrow*sizeof(double))) == NULL)
-           {
-             strcpy(error_message,"No more place to allocate new_bar");
-             return -1;
-           }
-         
-         for(i=0;i<size_x_old;i++)
-           new_bar[i] = ppolyline->y_shift[i];
-         
-         for(i=size_x_old;i<numrow;i++)
-           new_bar[i] = 0.;
-         
-         FREE(ppolyline->y_shift);
-         
-         ppolyline->x_shift = new_bar;
-       }
-    }
-  
-  return 0;
-}
-
-int CheckAndUpdate_z_shift(sciPointObj * pobj, int numrow)
-{
-  sciPolyline * ppolyline = NULL;
-  int i;
-
-  if(sciGetEntityType(pobj) != SCI_POLYLINE)
-    return 0;
-  
-  ppolyline = pPOLYLINE_FEATURE(pobj);
-
-
-  if(ppolyline->z_shift == (double *) NULL)
-    return 0;
-  else
-    {
-      int size_x_old = ppolyline->n1; /* number of x data */
-      if(size_x_old == numrow)
-       return 0;
-      else if(size_x_old > numrow)
-       {
-         double * new_bar = NULL;
-         
-         if((new_bar = (double *) MALLOC(numrow*sizeof(double))) == NULL)
-           {
-             strcpy(error_message,"No more place to allocate new_bar");
-             return -1;
-           }
-         
-         for(i=0;i<numrow;i++)
-           new_bar[i] = ppolyline->z_shift[i];
-         
-         FREE(ppolyline->z_shift);
-         
-         ppolyline->z_shift = new_bar;
-         
-       }
-      else /* case where size_x_old < numrow */
-       {
-         double * new_bar = NULL;
-         
-         if((new_bar = (double *) MALLOC(numrow*sizeof(double))) == NULL)
-           {
-             strcpy(error_message,"No more place to allocate new_bar");
-             return -1;
-           }
-         
-         for(i=0;i<size_x_old;i++)
-           new_bar[i] = ppolyline->z_shift[i];
-         
-         for(i=size_x_old;i<numrow;i++)
-           new_bar[i] = 0.;
-         
-         FREE(ppolyline->z_shift);
-         
-         ppolyline->x_shift = new_bar;
-       }
-    }
-  
-  return 0;
-}
-/*-----------------------------------------------------------------------------------*/
-
-int sciSetFinalStatus( int status1, int status2 )
-{
-  if ( status1 < 0 || status2 < 0 )
-  {
-    /* problem */
-    return -1 ;
-  }
-  else if ( status1 == 1 && status2 == 1 )
-  {
-    /* nothing changed */
-    return 1 ;
-  }
-  else
-  {
-    /* everything should be ok */
-    return 0 ;
-  }
-}
-
 /*-----------------------------------------------------------------------------------*/
index acac3c4..0a9b4f6 100644 (file)
@@ -2,11 +2,13 @@
 /* file: BasicAlgos.c                                                     */
 /* Copyright INRIA 2006                                                   */
 /* Authors : Fabrice Leray, Jean-Baptiste Silvy                           */
-/* desc : Several basic algorithm which can be used in several places in  */
+/* desc : Several basic algorithms which can be used in several places in */
 /*        the code.                                                       */
 /*------------------------------------------------------------------------*/
 
 #include "BasicAlgos.h"
+#include "MALLOC.h"
+#include "core_math.h"
 
 /*------------------------------------------------------------------------*/
 double sciFindStPosMin( double x[], int n )
@@ -40,3 +42,75 @@ int C2F(entier2d)( integer * n, double * dx,integer * s )
   return 0;
 }  
 /*------------------------------------------------------------------------*/
+int checkMonotony( double vector[], int nbElement )
+{
+  int i ;
+  if( vector[1] >= vector[0] )
+  {
+    /* might be incresing */
+    for ( i = 1 ; i < nbElement - 1 ; i++ )
+    {
+      if ( vector[i+1] < vector[i] )
+      {
+        /* not increasing */
+        return 0 ;
+      }
+    }
+    return 1 ;
+  }
+  else
+  {
+    /* might be decreasing */
+    for ( i = 1 ; i < nbElement - 1 ; i++ )
+    {
+      if ( vector[i+1] > vector[i] )
+      {
+        /* not decreasing */
+        return 0 ;
+      }
+    }
+    return -1 ;
+
+  }
+  return 0 ;
+
+}
+/*------------------------------------------------------------------------*/
+void doubleArrayCopy( double dest[], const double src[], int nbElement )
+{
+  memcpy( dest, src, nbElement * sizeof(double) ) ;
+}
+/*------------------------------------------------------------------------*/
+void setDoubleArraySingleValue( double dest[], double value, int nbElement )
+{
+  int i ;
+  for ( i = 0 ; i < nbElement ; i++ )
+  {
+    dest[i] = value ;
+  }
+}
+/*------------------------------------------------------------------------*/
+double * createNewArrayFromSource( int destSize, const double src[], int srcSize )
+{
+  int i ;
+  int endCopy = Min( destSize, srcSize ) ;
+  /* create new array */
+  double * dest = MALLOC( destSize * sizeof(double) ) ;
+
+  if ( dest == NULL )
+  {
+    return NULL ;
+  }
+
+  /* copy the element which needs to be copied */
+  memcpy( dest, src, endCopy * sizeof( double ) ) ;
+
+  for ( i = endCopy ; i < destSize ; i++ )
+  {
+    dest[i] = 0.0 ;
+  }
+
+  return dest ;
+
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/ColorMapManagement.c b/scilab/modules/graphics/src/c/ColorMapManagement.c
new file mode 100644 (file)
index 0000000..6e97832
--- /dev/null
@@ -0,0 +1,65 @@
+/*------------------------------------------------------------------------*/
+/* file: ColorMapManagement.c                                             */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Jean-Baptiste Silvy                           */
+/* desc : Several algorithm to deal with colormaps                        */
+/*------------------------------------------------------------------------*/
+
+#include "GetProperty.h"
+#include "sciprint.h"
+#include "getHandleProperty/SetPropertyStatus.h"
+#include "MALLOC.h"
+
+/*------------------------------------------------------------------------*/
+int LinearScaling2Colormap( sciPointObj * pobj )
+{
+  int i;
+  int nbcol =  sciGetNumColors (pobj); /* the number of the colors inside the current colormap */
+  sciSurface * psurf = pSURFACE_FEATURE (pobj);
+
+  double min,max;
+
+  double indexmin = 1.;
+  double indexmax = (double) nbcol;
+
+  int nc = psurf->nc; /* the number of colors contained inside zcol matrix */
+
+
+  if(psurf->zcol == NULL){
+    sciprint("Color matrix is NULL ; can not build color scaled linearly into the current colormap");
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if (((psurf->color = MALLOC (nc * sizeof (double))) == NULL)){
+    sciprint("Allocation failed for color in LinearScaling2Colormap");
+    return SET_PROPERTY_ERROR ;
+  }
+
+  /* get the min inside zcol */
+  min = psurf->zcol[0];
+  for(i=0;i<nc;i++)
+    if(min > psurf->zcol[i]) min = psurf->zcol[i];
+
+  /* get the max inside zcol */
+  max = psurf->zcol[0];
+  for(i=0;i<nc;i++)
+    if(max < psurf->zcol[i]) max = psurf->zcol[i];
+
+  if(min != max)
+  {
+    /* linear interpolation */
+    double A = (indexmin-indexmax)/(min-max); 
+    double B = (min*indexmax-indexmin*max)/(min-max);
+    for(i=0;i<nc;i++)
+      psurf->color[i] = A*psurf->zcol[i] + B + 0.1;
+  }
+  else
+  {
+    double C = (indexmin+indexmax)/2;
+    for(i=0;i<nc;i++)
+      psurf->color[i] = C;
+  }
+
+  return SET_PROPERTY_SUCCEED ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/ColorMapManagement.h b/scilab/modules/graphics/src/c/ColorMapManagement.h
new file mode 100644 (file)
index 0000000..e8e2cf2
--- /dev/null
@@ -0,0 +1,15 @@
+/*------------------------------------------------------------------------*/
+/* file: ColorMapManagement.h                                             */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Jean-Baptiste Silvy                           */
+/* desc : Several algorithm to deal with colormaps                        */
+/*------------------------------------------------------------------------*/
+
+#ifndef _COLOR_MAP_MANAGEMENT_H_
+#define _COLOR_MAP_MANAGEMENT_H_
+
+#include "ObjectStructure.h"
+
+int LinearScaling2Colormap( sciPointObj * pobj ) ;
+
+#endif /* _COLOR_MAP_MANAGEMENT_H_ */
index 741c4ac..3919dc9 100644 (file)
@@ -798,62 +798,3 @@ BOOL sciIsAreaZoom(box,box1,section)
   return FALSE;
 
 }
-
-
-void scizoom(bbox,pobj)
-     double bbox[4];
-     sciPointObj * pobj;
-{
-  sciPointObj *psousfen;
-  double fmin,fmax,lmin,lmax;
-  integer min,max,puiss,deux=2,dix=10;
-  psousfen= pobj; /* ??? */
-
-  if ( !( sciGetZooming(pobj) ) )
-  {
-    sciSetZooming(psousfen, 1);
-    /*    pSUBWIN_FEATURE (psousfen)->ZRect_kp[0]   = pSUBWIN_FEATURE (psousfen)->ZRect[0]; */
-    /*       pSUBWIN_FEATURE (psousfen)->ZRect_kp[1]   = pSUBWIN_FEATURE (psousfen)->ZRect[1]; */
-    /*       pSUBWIN_FEATURE (psousfen)->ZRect_kp[2]   = pSUBWIN_FEATURE (psousfen)->ZRect[2]; */
-    /*       pSUBWIN_FEATURE (psousfen)->ZRect_kp[3]   = pSUBWIN_FEATURE (psousfen)->ZRect[3]; */
-  }
-  /** regraduation de l'axe des axes ***/
-  fmin=  bbox[0];
-  fmax=  bbox[2];
-  if( pSUBWIN_FEATURE (psousfen)->logflags[0] == 'n' )
-  {
-    C2F(graduate)(&fmin, &fmax,&lmin,&lmax,&deux,&dix,&min,&max,&puiss) ;
-    pSUBWIN_FEATURE(psousfen)->axes.xlim[2]=puiss;
-    pSUBWIN_FEATURE (psousfen)->ZRect[0]=lmin;
-    pSUBWIN_FEATURE (psousfen)->ZRect[2]=lmax;
-  }
-  else
-  {
-    pSUBWIN_FEATURE(psousfen)->axes.xlim[2]=0;
-    pSUBWIN_FEATURE (psousfen)->ZRect[0]=fmin;
-    pSUBWIN_FEATURE (psousfen)->ZRect[2]=fmax;
-  }
-  
-  fmin= bbox[1]; 
-  fmax= bbox[3];
-  if ( pSUBWIN_FEATURE (psousfen)->logflags[1] == 'n' )
-  {
-    C2F(graduate)(&fmin, &fmax,&lmin,&lmax,&deux,&dix,&min,&max,&puiss) ;
-    pSUBWIN_FEATURE(psousfen)->axes.ylim[2]=puiss;
-    pSUBWIN_FEATURE (psousfen)->ZRect[1]=lmin;
-    pSUBWIN_FEATURE (psousfen)->ZRect[3]=lmax;
-  }
-  else
-  {
-    pSUBWIN_FEATURE(psousfen)->axes.ylim[2]=0;
-    pSUBWIN_FEATURE (psousfen)->ZRect[1]=fmin;
-    pSUBWIN_FEATURE (psousfen)->ZRect[3]=fmax;
-  }
-
-  /* default values when zooming in 3d */
-  /* and scizoom takes only xmin ymin xmax ymax AND not zmin zmax (for now at least) */
-  /* F.Leray 29.09.05 */
-  pSUBWIN_FEATURE (psousfen)->ZRect[4] = pSUBWIN_FEATURE (psousfen)->SRect[4];
-  pSUBWIN_FEATURE (psousfen)->ZRect[5] = pSUBWIN_FEATURE (psousfen)->SRect[5];
-  
-}
index ca0846f..e28e333 100644 (file)
@@ -1926,3 +1926,58 @@ static void zoom_rect2(int xpix_ini, int ypix_ini, int xpix_fin, int ypix_fin)
 #endif
 }
 
+void scizoom( double bbox[4], sciPointObj * pobj )
+{
+  sciPointObj *psousfen;
+  double fmin,fmax,lmin,lmax;
+  integer min,max,puiss,deux=2,dix=10;
+  psousfen= pobj; /* ??? */
+
+  if ( !( sciGetZooming(pobj) ) )
+  {
+    sciSetZooming(psousfen, 1);
+    /*    pSUBWIN_FEATURE (psousfen)->ZRect_kp[0]   = pSUBWIN_FEATURE (psousfen)->ZRect[0]; */
+    /*       pSUBWIN_FEATURE (psousfen)->ZRect_kp[1]   = pSUBWIN_FEATURE (psousfen)->ZRect[1]; */
+    /*       pSUBWIN_FEATURE (psousfen)->ZRect_kp[2]   = pSUBWIN_FEATURE (psousfen)->ZRect[2]; */
+    /*       pSUBWIN_FEATURE (psousfen)->ZRect_kp[3]   = pSUBWIN_FEATURE (psousfen)->ZRect[3]; */
+  }
+  /** regraduation de l'axe des axes ***/
+  fmin=  bbox[0];
+  fmax=  bbox[2];
+  if( pSUBWIN_FEATURE (psousfen)->logflags[0] == 'n' )
+  {
+    C2F(graduate)(&fmin, &fmax,&lmin,&lmax,&deux,&dix,&min,&max,&puiss) ;
+    pSUBWIN_FEATURE(psousfen)->axes.xlim[2]=puiss;
+    pSUBWIN_FEATURE (psousfen)->ZRect[0]=lmin;
+    pSUBWIN_FEATURE (psousfen)->ZRect[2]=lmax;
+  }
+  else
+  {
+    pSUBWIN_FEATURE(psousfen)->axes.xlim[2]=0;
+    pSUBWIN_FEATURE (psousfen)->ZRect[0]=fmin;
+    pSUBWIN_FEATURE (psousfen)->ZRect[2]=fmax;
+  }
+
+  fmin= bbox[1]; 
+  fmax= bbox[3];
+  if ( pSUBWIN_FEATURE (psousfen)->logflags[1] == 'n' )
+  {
+    C2F(graduate)(&fmin, &fmax,&lmin,&lmax,&deux,&dix,&min,&max,&puiss) ;
+    pSUBWIN_FEATURE(psousfen)->axes.ylim[2]=puiss;
+    pSUBWIN_FEATURE (psousfen)->ZRect[1]=lmin;
+    pSUBWIN_FEATURE (psousfen)->ZRect[3]=lmax;
+  }
+  else
+  {
+    pSUBWIN_FEATURE(psousfen)->axes.ylim[2]=0;
+    pSUBWIN_FEATURE (psousfen)->ZRect[1]=fmin;
+    pSUBWIN_FEATURE (psousfen)->ZRect[3]=fmax;
+  }
+
+  /* default values when zooming in 3d */
+  /* and scizoom takes only xmin ymin xmax ymax AND not zmin zmax (for now at least) */
+  /* F.Leray 29.09.05 */
+  pSUBWIN_FEATURE (psousfen)->ZRect[4] = pSUBWIN_FEATURE (psousfen)->SRect[4];
+  pSUBWIN_FEATURE (psousfen)->ZRect[5] = pSUBWIN_FEATURE (psousfen)->SRect[5];
+
+}
index dfe7351..677e89a 100644 (file)
@@ -2632,7 +2632,7 @@ int sciInitIsClipping( sciPointObj * pobj, int value )
 
 /**sciSetIsClipping*/
 int
-sciSetIsClipping (sciPointObj * pobj, int value)
+sciSetIsClipping( sciPointObj * pobj, int value )
 {
 
   if ( sciGetIsClipping( pobj ) == value )
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/SetPropertyStatus.c b/scilab/modules/graphics/src/c/getHandleProperty/SetPropertyStatus.c
new file mode 100644 (file)
index 0000000..a22ef13
--- /dev/null
@@ -0,0 +1,31 @@
+/*------------------------------------------------------------------------*/
+/* file: SetPropertySatus.c                                               */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Jean-Baptiste Silvy                                          */
+/* desc : define the different type of return status for the sci_set      */
+/*        routine                                                         */
+/*------------------------------------------------------------------------*/
+
+#include "SetPropertyStatus.h"
+
+/*-----------------------------------------------------------------------------------*/
+SetPropertyStatus sciSetFinalStatus( SetPropertyStatus status1, SetPropertyStatus status2 )
+{
+  if ( status1 == SET_PROPERTY_ERROR || status2 == SET_PROPERTY_ERROR )
+  {
+    /* problem */
+    return -1 ;
+  }
+  else if ( status1 == SET_PROPERTY_UNCHANGED && status2 == SET_PROPERTY_UNCHANGED )
+  {
+    /* nothing changed */
+    return 1 ;
+  }
+  else
+  {
+    /* everything should be ok */
+    return 0 ;
+  }
+}
+
+/*-----------------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/SetPropertyStatus.h b/scilab/modules/graphics/src/c/getHandleProperty/SetPropertyStatus.h
new file mode 100644 (file)
index 0000000..ab94e26
--- /dev/null
@@ -0,0 +1,30 @@
+/*------------------------------------------------------------------------*/
+/* file: SetPropertySatus.h                                               */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Jean-Baptiste Silvy                                          */
+/* desc : define the different type of return status for the sci_set      */
+/*        routine                                                         */
+/*------------------------------------------------------------------------*/
+
+#ifndef _SET_PROPERTY_STATUS_
+#define _SET_PROPERTY_STATUS_
+
+/**
+ * define the diffrent type of return for a set function :
+ * - SET_PROPERTY_ERROR when an error occured during the set
+ * - SET_PROPERTY_UNCHANGED when the property was already set to the value,
+ *   then nothing should be done
+ * - SET_PROPERTY_SUCCEED when the property was successfully modified
+ */
+typedef enum
+{ SET_PROPERTY_ERROR     = -1,
+  SET_PROPERTY_SUCCEED   =  0 ,
+  SET_PROPERTY_UNCHANGED =  1  } SetPropertyStatus ;
+
+/**
+ * when two properties are set at the same time
+ * return only one which can be used after
+ */
+SetPropertyStatus sciSetFinalStatus( SetPropertyStatus status1, SetPropertyStatus status2 ) ;
+
+#endif /* _SET_PROPERTY_STATUS_ */
\ No newline at end of file
index 6026686..c377e5b 100644 (file)
@@ -9,6 +9,8 @@
 
 #include "getPropertyAssignedValue.h"
 #include "stack-c.h"
+#include "sciprint.h"
+#include "MALLOC.h"
 
 /*-----------------------------------------------------------------------------------*/
 BOOL isParameterHandle( int paramNum )
@@ -21,6 +23,11 @@ BOOL isParameterDoubleMatrix( int paramNum )
   return ( VarType( paramNum ) == 1 ) ;
 }
 /*-----------------------------------------------------------------------------------*/
+BOOL isParameterTlist( int paramNum )
+{
+  return ( VarType( paramNum ) == 16 ) ;
+}
+/*-----------------------------------------------------------------------------------*/
 double getDoubleFromStack( int stackPointer )
 {
   return *(stk( stackPointer ));
@@ -31,11 +38,28 @@ double * getDoubleMatrixFromStack( int stackPointer )
   return stk( stackPointer ) ;
 }
 /*-----------------------------------------------------------------------------------*/
+void copyDoubleVectorFromStack( int stackPointer, double dest[], int nbElement )
+{
+  int i ;
+  double * stackValue = getDoubleMatrixFromStack( stackPointer ) ;
+  
+  for ( i = 0 ; i < nbElement ; i++ )
+  {
+    dest[i] = stackValue[i] ;
+  }
+}
+/*-----------------------------------------------------------------------------------*/
 char * getStringFromStack( int stackPointer )
 {
   return cstk( stackPointer ) ;
 }
 /*-----------------------------------------------------------------------------------*/
+char ** getStringMatrixFromStack( int stackPointer )
+{
+  /* strange but it was taken from sci_set */
+  return (char **) stackPointer ;
+}
+/*-----------------------------------------------------------------------------------*/
 unsigned long getHandleFromStack( int stackPointer )
 {
   return (unsigned long) *(hstk( stackPointer )) ;
@@ -54,3 +78,106 @@ BOOL isStringParamEqual( int stackPointer, const char * str )
   return FALSE ;
 }
 /*-----------------------------------------------------------------------------------*/
+/*-----------------------------------------------------------------------------------*/
+int getStackListNbElement( int paramNum )
+{
+  int nbRow        = 0 ;
+  int nbCol        = 0 ;
+  int stackPointer = 0 ;
+
+  GetRhsVar( paramNum, "t", &nbRow, &nbCol, &stackPointer ) ;
+
+  return nbRow - 1 ;
+
+ }
+/*-----------------------------------------------------------------------------------*/
+AssignedList * createAssignedList( int paramNum, int nbElement )
+{
+  AssignedList * newList = NULL ;
+  int nbRow = 0 ;
+  int nbCol = 0 ;
+
+  newList = MALLOC( sizeof(AssignedList) ) ;
+
+  if ( newList == NULL )
+  {
+    return NULL ;
+  }
+
+  newList->nbElement   = nbElement + 1 ;
+  newList->curElement  = 2 ; /* begin with 1 and 1 are the names */
+  newList->paramNumber = paramNum ;
+
+  /* get the stack pointer */
+  GetRhsVar( paramNum, "t", &nbRow, &nbCol, &(newList->stackPointer) ) ;
+
+  /* check the size */
+  if ( nbRow != newList->nbElement || nbCol != 1 )
+  {
+    sciprint( "Wrong size for tlist.\n" ) ;
+    return NULL ;
+  }
+  return newList ;
+}
+/*-----------------------------------------------------------------------------------*/
+void destroyAssignedList( AssignedList * list )
+{
+  FREE( list ) ;
+}
+/*-----------------------------------------------------------------------------------*/
+int getAssignedListNbElement( AssignedList * list )
+{
+  return list->nbElement - 1 ;
+}
+/*-----------------------------------------------------------------------------------*/
+void rewindAssingnedList( AssignedList * list )
+{
+  list->curElement = 2 ;
+}
+/*-----------------------------------------------------------------------------------*/
+double * getDoubleMatrixFromList( AssignedList * list, int rank, int * nbRow, int * nbCol )
+{
+  int valueStackPointer = 0 ;
+  GetListRhsVar( list->paramNumber, rank, "d", nbRow, nbCol, &valueStackPointer ) ;
+  
+  return getDoubleMatrixFromStack( valueStackPointer ) ;
+}
+/*-----------------------------------------------------------------------------------*/
+double * getCurrentDoubleMatrixFromList( AssignedList * list, int * nbRow, int * nbCol )
+{
+  double * res = NULL ;
+  if ( list->curElement > list->nbElement )
+  {
+    *nbRow = 0 ;
+    *nbCol = 0 ;
+    return NULL ;
+  }
+
+  res = getDoubleMatrixFromList( list, list->curElement, nbRow, nbCol ) ;
+  list->curElement++ ;
+  return res ;
+}
+/*-----------------------------------------------------------------------------------*/
+double * createCopyDoubleMatrixFromList( AssignedList * list, int * nbRow, int * nbCol )
+{
+  int i ;
+  /* get the matrix */
+  double * stackValues = getCurrentDoubleMatrixFromList( list, nbRow, nbCol ) ;
+
+  /* copy */
+  double * copyMatrix = MALLOC( (*nbRow) * (*nbCol) * sizeof( double ) ) ;
+
+  if ( copyMatrix == NULL )
+  {
+    return NULL ;
+  }
+
+  for ( i = 0 ; i < (*nbRow) * (*nbCol) ; i++ )
+  {
+    copyMatrix[i] = stackValues[i] ;
+  }
+
+  return copyMatrix ;
+
+}
+/*-----------------------------------------------------------------------------------*/
\ No newline at end of file
index 9c7c6fd..d1bbee1 100644 (file)
@@ -11,6 +11,8 @@
 
 #include "machine.h"
 
+/*---------------------------------------------------------------------------------------*/
+/* Basic type parameters */
 /**
  * return if a stack parameter is a Handle
  * @param paramNum Rank of the parameter in the called primitive
 BOOL isParameterHandle( int paramNum ) ;
 
 /**
-* return if a stack parameter is a Handle
-* @param paramNum Rank of the parameter in the called primitive
-*/
+ * return if a stack parameter is a Handle
+ * @param paramNum Rank of the parameter in the called primitive
+ */
 BOOL isParameterDoubleMatrix( int paramNum ) ;
 
 /**
+ * return if a stack parameter is a tlist
+ * @param paramNum Rank of the parameter in the called primitive
+ **/
+BOOL isParameterTlist( int paramNum ) ;
+
+/**
  * retrieve a single double from the stack
  */
 double getDoubleFromStack( int stackPointer ) ;
@@ -34,11 +42,21 @@ double getDoubleFromStack( int stackPointer ) ;
 double * getDoubleMatrixFromStack( int stackPointer ) ;
 
 /**
- * retireve a string on from the scilab stack
+ * copy a double vector from the scilab stack
+ */
+void copyDoubleVectorFromStack( int stackPointer, double dest[], int nbElement ) ;
+
+/**
+ * retrieve a string on from the scilab stack
  */
 char * getStringFromStack( int stackPointer ) ;
 
 /**
+ * retrieve a string matrix on from the scilab stack
+ */
+char ** getStringMatrixFromStack( int stackPointer ) ;
+
+/**
 * retireve a string on from the scilab stack
 */
 unsigned long getHandleFromStack( int stackPointer ) ;
@@ -49,5 +67,70 @@ unsigned long getHandleFromStack( int stackPointer ) ;
  *         FALSE otherwise
  */
 BOOL isStringParamEqual( int stackPointer, const char * str ) ;
+/*---------------------------------------------------------------------------------------*/
+/* Tlist */
+typedef struct 
+{
+  int nbElement ; /**< number of elements in the tlist */
+  int curElement ; /**< currently read element */
+  int paramNumber ; /**< rank of the tlist within the Rhs parameters */
+  int stackPointer ; /**< pointer of the tlist in the stack */
+} AssignedList ;
+
+/**
+ * get the number of element of a tlist stored in the rhs
+ * @param paramNum rank of the list within the Rhs parameters
+ */
+int getStackListNbElement( int paramNum ) ;
+
+/**
+ * create a new instance of an object used to retrieve fields of a tlist
+ * stored on the stack
+ * @param paramNum rank of the list within the Rhs parameters
+ * @param nbElement number of element in the list
+ */
+AssignedList * createAssignedList( int paramNum, int nbElement ) ;
+
+/**
+ * destroy the object used to glance through a tlist
+ */
+void destroyAssignedList( AssignedList * list ) ;
+
+/**
+ * return the number of element of a tlist
+ */
+int getAssignedListNbElement( AssignedList * list ) ;
+
+/**
+ * set the current element to the first
+ */
+void rewindAssingnedList( AssignedList * list ) ;
+
+/**
+ * retrieve a field of a tlist
+ * @param[in]  list object used to retrieve elements
+ * @param      rank position of the element in the list ( first, second, ...)
+ *             Note that is it not possible to get the properties names with this function
+ * @param[out] nbRow number of row of the returned matrix
+ * @param[out] nbCol number of column of the returned matrix
+ */
+double * getDoubleMatrixFromList( AssignedList * list, int rank, int * nbRow, int * nbCol ) ;
+
+/**
+ * retrieve the current property of a tlist and move to the next
+ * @param[in/out] list object used to retrieve elements
+ * @param[out]    nbRow number of row of the returned matrix
+ * @param[out]    nbCol number of column of the returned matrix
+ */
+double * getCurrentDoubleMatrixFromList( AssignedList * list, int * nbRow, int * nbCol ) ;
+
+/**
+ * create a copy of the current matrix in the tlist
+ * @param[in/out] list object used to retrieve elements
+ * @param[out]    nbRow number of row of the returned matrix
+ * @param[out]    nbCol number of column of the returned matrix
+ */
+double * createCopyDoubleMatrixFromList( AssignedList * list, int * nbRow, int * nbCol ) ;
 
+/*---------------------------------------------------------------------------------------*/
 #endif /* _GET_PROPERTY_ASSIGNEMENT_VALUE_H_ */
index 3efe2ba..de29e39 100644 (file)
@@ -20,11 +20,11 @@ int get_data_bounds_property( sciPointObj * pobj )
     /**DJ.Abdemouche 2003**/
     if ( sciGetIs3d( pobj ) )
     {
-      return sciReturnRowVector( pSUBWIN_FEATURE (pobj)->SRect, 6 ) ;
+      return sciReturnMatrix( pSUBWIN_FEATURE (pobj)->SRect, 2, 3 ) ;
     }
     else
     {
-      return sciReturnRowVector( pSUBWIN_FEATURE (pobj)->SRect, 4 ) ;
+      return sciReturnRowVector( pSUBWIN_FEATURE (pobj)->SRect, 2, 2 ) ;
     }
   }
   else if ( sciGetEntityType (pobj) == SCI_SURFACE )
index 62818d8..1f51ab6 100644 (file)
@@ -36,5 +36,43 @@ int set_immediate_drawing_property( sciPointObj * pobj, int stackPointer, int nb
 int set_pixmap_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
 int set_background_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
 int set_interp_color_vector_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_interp_color_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_foreground_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_fill_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_thickness_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_arrow_size_factor_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_line_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_line_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_surface_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_mark_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_mark_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_mark_size_unit_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_mark_size_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_mark_foreground_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_mark_background_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_bar_width_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_bar_layout_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_x_shift_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_y_shift_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_z_shift_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_polyline_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_font_size_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_font_angle_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_font_foreground_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_font_color_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_font_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_font_name_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_text_box_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_auto_dimensionning_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_alignment_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_text_box_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_text_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_auto_clear_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_auto_scale_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_zoom_box_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_zoom_state_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_clip_box_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_clip_state_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
+int set_data_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol ) ;
 
 #endif /* _SET_HANDLE_PROPERTY_H_ */
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_alignment_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_alignment_property.c
new file mode 100644 (file)
index 0000000..0f927a5
--- /dev/null
@@ -0,0 +1,45 @@
+/*------------------------------------------------------------------------*/
+/* file: set_alignment_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the alignment field of             */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "SetPropertyStatus.h"
+#include "GetProperty.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_alignment_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetEntityType( pobj ) != SCI_TEXT )
+  {
+    sciprint("alignment property does not exist for this handle.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if ( isStringParamEqual( stackPointer, "left" ) )
+  {
+    return sciSetAlignment( pobj, ALIGN_LEFT ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "center" ) )
+  {
+    return sciSetAlignment( pobj, ALIGN_CENTER ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "right" ) )
+  {
+    return sciSetAlignment( pobj, ALIGN_RIGHT ) ;
+  }
+  else
+  {
+    sciprint("Second argument must be 'left','center' or 'right'.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+  return SET_PROPERTY_ERROR ;
+
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_arrow_size_factor_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_arrow_size_factor_property.c
new file mode 100644 (file)
index 0000000..81a4f38
--- /dev/null
@@ -0,0 +1,26 @@
+/*------------------------------------------------------------------------*/
+/* file: set_arrow_size_factor_property.c                                 */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the arrow_size_factor field of     */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "GetProperty.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_arrow_size_factor_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetEntityType(pobj) != SCI_POLYLINE )
+  {
+    sciprint( "arrow_size_factor property undefined for this handle.\n" ) ;
+    return -1 ;
+  }
+  pPOLYLINE_FEATURE(pobj)->arsize_factor = getDoubleFromStack( stackPointer ) ;
+  return 0 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_auto_clear_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_auto_clear_property.c
new file mode 100644 (file)
index 0000000..c616f08
--- /dev/null
@@ -0,0 +1,34 @@
+/*------------------------------------------------------------------------*/
+/* file: set_auto_clear_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the auto_clear field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "GetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "SetPropertyStatus.h"
+
+/*------------------------------------------------------------------------*/
+int set_auto_clear_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( isStringParamEqual( stackPointer, "on" ) )
+  {
+    return sciSetAddPlot( pobj, FALSE ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    return sciSetAddPlot( pobj, TRUE ) ;
+  }
+  else
+  {
+    sciprint("Value must be 'on/off'.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+  return SET_PROPERTY_ERROR ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_auto_dimensionning_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_auto_dimensionning_property.c
new file mode 100644 (file)
index 0000000..b9542c9
--- /dev/null
@@ -0,0 +1,41 @@
+/*------------------------------------------------------------------------*/
+/* file: set_auto_dimensionning_property.c                                */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the auto_dimensionning field of    */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "SetPropertyStatus.h"
+#include "GetProperty.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_auto_dimensionning_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetEntityType( pobj ) != SCI_TEXT )
+  {
+    sciprint( "auto_dimensionning property does not exist for this handle.\n" ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if ( isStringParamEqual( stackPointer, "on" ) )
+  {
+    return sciSetAutoSize( pobj, TRUE ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    return sciSetAutoSize( pobj, FALSE ) ;
+  }
+  else
+  {
+    sciprint("Value must be 'on/off'.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+  return SET_PROPERTY_ERROR ;
+
+}
+/*------------------------------------------------------------------------*/
index 3eb4c86..f2b07f1 100644 (file)
 /*------------------------------------------------------------------------*/
 int set_auto_resize_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
 {
-  char * value = getStringFromStack( stackPointer ) ;
-  if ( strcmp(value,"on") == 0 )
+  if ( isStringParamEqual( stackPointer, "on" ) )
   {
     return sciSetResize( pobj, TRUE );
   }
-  else if ( strcmp(value,"off") == 0 )
+  else if ( isStringParamEqual( stackPointer, "off" ) )
   {
     return sciSetResize( pobj, FALSE );
   }
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_auto_scale_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_auto_scale_property.c
new file mode 100644 (file)
index 0000000..07479f6
--- /dev/null
@@ -0,0 +1,34 @@
+/*------------------------------------------------------------------------*/
+/* file: set_auto_scale_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the auto_scale field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "GetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "SetPropertyStatus.h"
+
+/*------------------------------------------------------------------------*/
+int set_auto_scale_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( isStringParamEqual( stackPointer, "on" ) )
+  {
+    return sciSetAutoScale( pobj, TRUE ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    return sciSetAutoScale( pobj, FALSE ) ;
+  }
+  else
+  {
+    sciprint("Value must be 'on/off'.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+  return SET_PROPERTY_ERROR ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_bar_layout_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_bar_layout_property.c
new file mode 100644 (file)
index 0000000..a654f8a
--- /dev/null
@@ -0,0 +1,40 @@
+/*------------------------------------------------------------------------*/
+/* file: set_bar_layout_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the bar_layout field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "GetProperty.h"
+
+/*------------------------------------------------------------------------*/
+int set_bar_layout_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetEntityType(pobj) != SCI_POLYLINE )
+  {
+    sciprint( "bar_layout property does not exist for this handle.\n" ) ;
+    return -1 ;
+  }
+  
+  if( isStringParamEqual( stackPointer, "grouped" ) )
+  {
+    pPOLYLINE_FEATURE (pobj)->bar_layout = 0 ;
+  }
+  else if( isStringParamEqual( stackPointer, "stacked" ) )
+  {
+    pPOLYLINE_FEATURE (pobj)->bar_layout = 1 ;
+  }
+  else
+  {
+    sciprint( "bar_layout must be set to 'grouped' or 'stacked'.\n" ) ;
+    return -1;
+  }
+
+  return -1 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_bar_width_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_bar_width_property.c
new file mode 100644 (file)
index 0000000..a928927
--- /dev/null
@@ -0,0 +1,26 @@
+/*------------------------------------------------------------------------*/
+/* file: set_bar_width_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the bar_width field of             */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "GetProperty.h"
+
+/*------------------------------------------------------------------------*/
+int set_bar_width_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetEntityType (pobj) != SCI_POLYLINE )
+  {
+    sciprint( "Object has no bar shift.\n" ) ;
+    return -1 ;
+  }
+  pPOLYLINE_FEATURE (pobj)->bar_width = getDoubleFromStack( stackPointer ) ;
+  return 0 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_clip_box_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_clip_box_property.c
new file mode 100644 (file)
index 0000000..c090c5d
--- /dev/null
@@ -0,0 +1,33 @@
+/*------------------------------------------------------------------------*/
+/* file: set_clip_box_property.c                                          */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the clip_box field of              */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "GetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "SetPropertyStatus.h"
+
+/*------------------------------------------------------------------------*/
+int set_clip_box_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  int status1 ;
+  int status2 ;
+
+  /* On doit avoir avoir une matrice 4x1 */
+  if ( nbRow * nbCol != 4 )
+  {
+    sciprint("Argument must be a vector of size 4.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+  status1 = sciSetClipping( pobj, getDoubleMatrixFromStack( stackPointer ) ) ;
+  status2 = sciSetIsClipping( pobj, 1 ) ;
+  return sciSetFinalStatus( status1, status2 ) ;
+
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_clip_state_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_clip_state_property.c
new file mode 100644 (file)
index 0000000..ad0a9b7
--- /dev/null
@@ -0,0 +1,45 @@
+/*------------------------------------------------------------------------*/
+/* file: set_clip_state_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the clip_state field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "GetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "SetPropertyStatus.h"
+
+/*------------------------------------------------------------------------*/
+int set_clip_state_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( isStringParamEqual( stackPointer, "clipgrf" ) )
+  {
+    return sciSetIsClipping( pobj, 0 ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    return sciSetIsClipping(  pobj, -1 ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "on" ) )
+  {
+    if ( sciGetIsClipRegionValuated(pobj) == 1 )
+    {
+      return sciSetIsClipping( pobj, 1 ) ;
+    }
+    else
+    {
+      return sciSetIsClipping( pobj, 0 ) ;
+    }
+  }
+  else
+  {
+    sciprint("Value must be 'clipgrf', 'on' or 'off'.\n") ;
+    return SET_PROPERTY_ERROR ;
+  }
+  return SET_PROPERTY_ERROR ;
+}
+/*------------------------------------------------------------------------*/
index be741a5..2d9f5d6 100644 (file)
@@ -12,6 +12,7 @@
 #include "getPropertyAssignedValue.h"
 #include "sciprint.h"
 #include "Xcall1.h"
+#include "SetPropertyStatus.h"
 
 /*------------------------------------------------------------------------*/
 int set_current_axes_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
@@ -20,6 +21,8 @@ int set_current_axes_property( sciPointObj * pobj, int stackPointer, int nbRow,
   sciPointObj * parentFig = NULL ;
   int num = -1 ;
   int v    = 1 ;
+  int status1 = 1 ;
+  int status2 = 1 ;
   
   if ( curAxes == NULL)
   {
@@ -32,21 +35,17 @@ int set_current_axes_property( sciPointObj * pobj, int stackPointer, int nbRow,
     return -1 ;
   }
 
-  sciSetSelectedSubWin( curAxes ) ;
+  status1 = sciSetSelectedSubWin( curAxes ) ;
   /* F.Leray 11.02.05 : if the new selected subwin is not inside the current figure, */
   /* we must also set the current figure to subwin->parent */
   parentFig = sciGetParentFigure( curAxes );
 
   num  = sciGetNum( parentFig ) ;
-  C2F(dr1)("xset","window",&num,&v,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,4L,6L);
 
-  if ( sciSwitchWindow(&num) != 0 )
-  {
-    sciprint("An error occured during window creation. Action can not be performed.\n");
-    return -1;
-  }
+  status2 = sciSetUsedWindow( num ) ;
+
   /* End modif. on the 11.02.05 */
-  return -1 ;
+  return sciSetFinalStatus( status1, status2 ) ;
 
 }
 /*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_data_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_data_property.c
new file mode 100644 (file)
index 0000000..e838b2a
--- /dev/null
@@ -0,0 +1,707 @@
+/*------------------------------------------------------------------------*/
+/* file: set_data_property.c                                              */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the data field of                  */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "GetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "SetPropertyStatus.h"
+#include "returnProperty.h"
+#include "BasicAlgos.h"
+#include "../ColorMapManagement.h"
+#include "MALLOC.h"
+
+/*-----------------------------------------------------------------------------------*/
+/* F.Leray 29.04.05 */
+/* the champ data is now set as a tlist (like for surface objects) */
+/* setchampdata(pobj,cstk(l2), &l3, &numrow3, &numcol3, fname) */
+int setchampdata( sciPointObj * pobj, AssignedList * tlist )
+{
+
+  sciSegs * ppsegs = pSEGS_FEATURE (pobj);
+
+  int nbRow[4] ;
+  int nbCol[4] ;
+
+  double * vx  = NULL ;
+  double * vy  = NULL ;
+  double * vfx = NULL ;
+  double * vfy = NULL ;
+
+  /* get parameters */
+
+  vx  = createCopyDoubleMatrixFromList( tlist, &nbRow[0], &nbCol[0] ) ;
+  vy  = createCopyDoubleMatrixFromList( tlist, &nbRow[1], &nbCol[1] ) ;
+  vfx = createCopyDoubleMatrixFromList( tlist, &nbRow[2], &nbCol[2] ) ;
+  vfy = createCopyDoubleMatrixFromList( tlist, &nbRow[3], &nbCol[3] ) ;
+
+  /* check dim */
+  if ( nbCol[0] != 1 || nbCol[1] != 1 )
+  {
+    sciprint("Inside the Tlist : the first argument must be columns vectors\r\n") ;
+    FREE( vx  ) ;
+    FREE( vy  ) ;
+    FREE( vfx ) ;
+    FREE( vfy ) ;
+
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if ( nbRow[2] != nbRow[0] || nbCol[2] != nbRow[1] || nbRow[3] != nbRow[2] || nbCol[3] != nbCol[2] )
+  {
+    sciprint( "Inside the Tlist : incompatible length in the third and/or fourth argument(s)\r\n" ) ;
+    FREE( vx  ) ;
+    FREE( vy  ) ;
+    FREE( vfx ) ;
+    FREE( vfy ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if ( nbRow[0] * nbCol[0] == 0 || nbRow[1] * nbCol[1] == 0 || nbRow[2] * nbCol[2] == 0 || nbRow[3] * nbCol[3] == 0 )
+  {
+    FREE( vx  ) ;
+    FREE( vy  ) ;
+    FREE( vfx ) ;
+    FREE( vfy ) ;
+    return sciReturnEmptyMatrix() ;
+  } 
+
+  /* ok everything ok we can allocate new values */
+  /* Update the dimensions Nbr1 and Nbr2 */
+  ppsegs->Nbr1 = nbRow[0] ;
+  ppsegs->Nbr2 = nbRow[1] ;
+
+  FREE( ppsegs->vx  ) ;
+  FREE( ppsegs->vy  ) ;
+  FREE( ppsegs->vfx ) ;
+  FREE( ppsegs->vfy ) ;
+  ppsegs->vx = vx;
+  ppsegs->vy = vy;
+  ppsegs->vfx = vfx;
+  ppsegs->vfy = vfy;
+
+  return SET_PROPERTY_SUCCEED ;
+}
+
+/*-----------------------------------------------------------------------------------*/
+/* F.Leray 29.04.05 */
+/* the grayplot data is now set as a tlist (like for surface and champ objects) */
+/* setgrayplot(pobj,cstk(l2), &l3, &numrow3, &numcol3, fname) */
+int setgrayplotdata( sciPointObj * pobj, AssignedList * tlist )
+{
+
+  sciGrayplot * ppgrayplot = pGRAYPLOT_FEATURE (pobj);
+
+  int nbRow[3] ;
+  int nbCol[3] ;
+
+  double * pvecx = NULL ;
+  double * pvecy = NULL ;
+  double * pvecz = NULL ;
+
+  pvecx = createCopyDoubleMatrixFromList( tlist, &nbRow[0], &nbCol[0] ) ;
+  pvecy = createCopyDoubleMatrixFromList( tlist, &nbRow[1], &nbCol[1] ) ;
+  pvecz = createCopyDoubleMatrixFromList( tlist, &nbRow[2], &nbCol[2] ) ;
+
+  if ( nbCol[0] != 1 || nbCol[1] != 1 )
+  {
+    sciprint("the Tlist : the first argument must be columns vectors\r\n" ) ;
+    FREE( pvecx ) ;
+    FREE( pvecy ) ;
+    FREE( pvecz ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if ( nbRow[2] != nbRow[0] || nbCol[2] != nbRow[1] )
+  {
+    sciprint("the Tlist : incompatible length in the third argument\r\n" ) ;
+    FREE( pvecx ) ;
+    FREE( pvecy ) ;
+    FREE( pvecz ) ;
+    return 0;
+  }
+
+  if ( nbRow[0] * nbCol[0] == 0 || nbRow[1] * nbCol[1] == 0 || nbRow[2] * nbCol[2] == 0 )
+  {
+    FREE( pvecx ) ;
+    FREE( pvecy ) ;
+    FREE( pvecz ) ;
+    return sciReturnEmptyMatrix() ;
+  } 
+
+  /* Update the dimensions nx and ny */
+  ppgrayplot->nx = nbRow[0] ;
+  ppgrayplot->ny = nbRow[1] ;
+
+  /* Free the old values... */
+  FREE(ppgrayplot->pvecx) ;
+  FREE(ppgrayplot->pvecy) ;
+  FREE(ppgrayplot->pvecz) ;
+  ppgrayplot->pvecx = pvecx;
+  ppgrayplot->pvecy = pvecy;
+  ppgrayplot->pvecz = pvecz;
+
+  return SET_PROPERTY_SUCCEED ;
+}
+/*-----------------------------------------------------------------------------------*/
+/* set3ddata(pobj,cstk(l2), &l3, &numrow3, &numcol3) */
+int set3ddata( sciPointObj * pobj, AssignedList * tlist )
+{
+  sciSurface * psurf = pSURFACE_FEATURE (pobj);
+
+
+  integer m1, n1, m2, n2, m3, n3 ;
+  integer m3n, n3n, ii;
+
+  double * pvecx = NULL ;
+  double * pvecy = NULL ;
+  double * pvecz = NULL ;
+  int dimvectx = 0 ;
+  int dimvecty = 0 ;
+  int nc = 0 ;
+
+  /* no copy now we just perfrom tests on the matrices */
+  pvecx = getCurrentDoubleMatrixFromList( tlist, &m1, &n1 ) ;
+  pvecy = getCurrentDoubleMatrixFromList( tlist, &m2, &n2 ) ;
+  pvecz = getCurrentDoubleMatrixFromList( tlist, &m3, &n3 ) ;
+
+  if ( m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1 )
+  {
+    if ( !(m1 == m2 && m2 == m3 && n1 == n2 && n2 == n3) )
+    {
+      sciprint("Inside the Tlist (third argument): The three first arguments have incompatible length \r\n") ;
+      return SET_PROPERTY_ERROR ;
+    }
+  }
+  else 
+  {
+    if ( m2 * n2 != n3 )
+    {
+      sciprint( "Inside the Tlist (third argument): The second and third arguments have incompatible length\r\n" ) ;
+      return SET_PROPERTY_ERROR ;
+    }
+    if ( m1 * n1 != m3 )
+    {
+      sciprint( "Inside the Tlist (third argument): The first and third arguments have incompatible length\r\n");
+      return SET_PROPERTY_ERROR ;
+    }
+    if ( m1 * n1 <= 1 || m2 * n2 <= 1 ) 
+    {
+      sciprint( "Inside the Tlist (third argument):The first and second arguments should be of size >= 2\r\n");
+      return SET_PROPERTY_ERROR ;
+    }
+  }
+
+  if ( m1 * n1 == 0 || m2 * n2 == 0 || m3 * n3 == 0 )
+  {
+    return sciReturnEmptyMatrix() ;
+  } 
+
+  /* get color size if exists */
+  if ( getAssignedListNbElement( tlist ) == 4 )
+  {
+    getCurrentDoubleMatrixFromList( tlist, &m3n, &n3n ) ;
+    if ( m3n * n3n == m3 * n3 )
+    {
+      /* the color is a matrix */
+      psurf->izcol = 2 ; 
+    }
+    else
+    {
+      /* a vector */
+      psurf->izcol = 1 ;
+    }
+  }
+  else
+  {
+    m3n = 0 ;
+    n3n = 0 ;
+    psurf->izcol = 0;
+  }
+
+  if ( m1 * n1 == m3 * n3 && m1 * n1 == m2 * n2 && m1 * n1 != 1 ) /* NG beg */
+  { /* case isfac=1;*/
+    if( psurf->isfac != 1 )
+    {
+      sciprint("Can not change the typeof3d of graphic object: its type is SCI_PLOT3D\r\n");
+      return SET_PROPERTY_ERROR ;
+    }
+  }
+  else
+  { 
+    /* case isfac=0;*/
+    if(psurf->isfac != 0)
+    {
+      sciprint("Can not change the typeof3d of graphic object: its type is SCI_FAC3D\r\n");
+      return SET_PROPERTY_ERROR ;
+    }
+  }
+
+
+  /* check the monotony on x and y */
+
+  if ( m1 == 1 ) /* x is a row vector */
+  {
+    dimvectx = n1 ;
+  }
+  else if ( n1 == 1 ) /* x is a column vector */
+  {
+    dimvectx = m1 ;
+  }
+  else /* x is a matrix */
+  {
+    dimvectx = -1 ;
+  }
+
+  if ( dimvectx > 1 )
+  {
+    int monotony = checkMonotony( pvecx, dimvectx ) ;
+    if ( monotony == 0 )
+    {
+      sciprint("Objplot3d: x vector is not monotonous \t\n.");
+      return 0;
+    }
+
+    psurf->flag_x = monotony ;
+  }
+
+  if(m2 == 1) /* y is a row vector */
+  {
+    dimvecty = n2 ;
+  }
+  else if(n2 == 1) /* y is a column vector */
+  {
+    dimvecty = m2 ;
+  }
+  else /* y is a matrix */
+  {
+    dimvecty = -1 ;
+  }
+  if( dimvecty > 1 )
+  {
+    int monotony = checkMonotony( pvecx, dimvectx ) ;
+    if ( monotony == 0 )
+    {
+      sciprint("Objplot3d: x vector is not monotonous \t\n.");
+      return 0;
+    }
+
+    psurf->flag_y = monotony ;
+  }
+
+  /* Update of the dimzx, dimzy depends on  m3, n3: */
+  psurf->dimzx = m3;
+  psurf->dimzy = n3;
+
+
+  /* Free the old values... */
+  FREE(psurf->pvecx); psurf->pvecx = NULL;
+  FREE(psurf->pvecy); psurf->pvecy = NULL;
+  FREE(psurf->pvecz); psurf->pvecz = NULL;
+  /* ...even on zcol wich must have been initialized like others or set to NULL in case there was no color before
+  The FREE macro tests the NULL pointer existence... */
+  FREE(psurf->zcol); psurf->zcol = NULL;
+  /* If we had a previous color matrix/vector and we do not specify a new one, I consider we are losing it.*/
+  /* That's why we make a FREE as follows:*/
+  FREE(psurf->inputCMoV);psurf->inputCMoV = NULL; /* F.Leray 23.03.04*/
+
+  /* copy the values now */
+  rewindAssingnedList( tlist ) ;
+  pvecx = createCopyDoubleMatrixFromList( tlist, &m1, &n1 ) ;
+  pvecy = createCopyDoubleMatrixFromList( tlist, &m2, &n2 ) ;
+  pvecz = createCopyDoubleMatrixFromList( tlist, &m3, &n3 ) ;
+
+
+  if( getAssignedListNbElement( tlist ) == 4 ) /* F.Leray There is a color matrix */
+  {
+    int nc = 0 ;
+    int j ;
+    int i ;
+
+    psurf->inputCMoV = createCopyDoubleMatrixFromList( tlist, &m3n, &n3n ) ;
+
+
+    if( psurf->flagcolor == 2 || psurf->flagcolor == 4 )
+    { /* case of SCI_PLOT3D avoid */
+      nc = psurf->dimzy ;
+    }
+    else if( psurf->flagcolor == 3 )
+    {
+      nc = psurf->dimzx * psurf->dimzy ;
+    }
+    else
+    {
+      nc = 0 ;
+    }
+
+    if ( nc > 0 )
+    {
+      if ((psurf->zcol = MALLOC (nc * sizeof (double))) == NULL)
+      {
+        FREE(pvecx); pvecx = (double *) NULL;
+        FREE(pvecy); pvecy = (double *) NULL;
+        FREE(pvecz); pvecz = (double *) NULL;
+        return SET_PROPERTY_ERROR ;
+      }
+    }
+
+    /* case flagcolor == 2*/
+    if( psurf->flagcolor == 2 && ( m3n == 1 || n3n == 1) ) /* it means we have a vector in Color input: 1 color per facet in input*/
+    {
+      /* We have just enough information to fill the psurf->zcol array*/
+      for (j = 0;j < nc; j++)  /* nc value is dimzx*dimzy == m3 * n3 */
+      {
+        psurf->zcol[j] = psurf->inputCMoV[j];  /* DJ.A 2003 */
+      }
+    }
+    else if( psurf->flagcolor == 2 ) /* it means we have a matrix in Color input: 1 color per vertex in input*/
+    {
+      /* We have too much information and we take only the first dimzy colors to fill the psurf->zcol array*/
+      /* NO !! Let's do better; F.Leray 08.05.04 : */
+      /* We compute the average value (sum of the value of the nf=m3n vertices on a facet) / (nb of vertices per facet which is nf=m3n) */
+      /* in our example: m3n=4 and n3n=400 */
+      for ( j = 0 ; j < nc ; j++)   /* nc value is dimzy*/
+      {
+        double tmp = 0.0 ;
+        for(ii=0;ii<m3n;ii++)
+        {
+          tmp = tmp +  psurf->inputCMoV[j * m3n + ii] ;
+        }
+        tmp = tmp / m3n ;
+        psurf->zcol[j] = tmp;
+      }
+    }
+    /* case flagcolor == 3*/
+    else if( psurf->flagcolor==3 && ( m3n==1 || n3n ==1) ) /* it means we have a vector in Color input: 1 color per facet in input*/
+    {
+      /* We have insufficient info. to fill the entire zcol array of dimension nc = dimzx*dimzy*/
+      /* We repeat the data:*/
+      for(i = 0; i< psurf->dimzy; i++)
+      {
+        for (j = 0;j < psurf->dimzx; j++)  /* nc value is dimzx*dimzy == m3n * n3n */
+        {
+          psurf->zcol[psurf->dimzx*i+j] = psurf->inputCMoV[i];  /* DJ.A 2003 */
+        }
+      }
+    }
+    else if( psurf->flagcolor==3 ) /* it means we have a matrix in Color input: 1 color per vertex in input*/
+    {
+      /* We have just enough information to fill the psurf->zcol array*/
+      for (j = 0;j < nc; j++)
+      {   /* nc value is dimzy*/
+        psurf->zcol[j]= psurf->inputCMoV[j] ;
+      }
+    }  
+    /* case flagcolor == 4*/
+    else if(psurf->flagcolor==4 && ( m3n==1 || n3n ==1)) /* it means we have a vector in Color input: 1 color per facet in input*/
+    {
+      /* We have insufficient info. to fill the entire zcol array of dimension nc = dimzx*dimzy*/
+      /* We repeat the data:*/
+      for (j = 0;j < nc; j++)  /* nc value is dimzx*dimzy == m3n * n3n */
+      {
+        psurf->zcol[j] = psurf->inputCMoV[j];
+      }
+    }
+    else if ( psurf->flagcolor == 4 ) /* it means we have a matrix in Color input: 1 color per vertex in input*/
+    {
+      /* input : color matrix , we use 1 color per facet with Matlab selection mode (no average computed) */
+      /* HERE is the difference with case 2 */
+      for ( j = 0 ; j < nc ; j++ )   /* nc value is dimzy*/
+      {
+        psurf->zcol[j] = psurf->inputCMoV[j*m3n] ;
+      }
+    }
+
+  }
+  else /* else we put the value of the color_mode flag[0]*/
+  {
+    if(psurf->flagcolor == 2 || psurf->flagcolor == 4)
+    { /* case of SCI_PLOT3D avoid */
+      nc = psurf->dimzy;
+    }
+    else if(psurf->flagcolor == 3)
+    {
+      nc = psurf->dimzx *  psurf->dimzy;
+    } 
+    else
+    {
+      nc=0;
+    }
+
+    if ( nc > 0)
+    {
+      if ((psurf->zcol = MALLOC (nc * sizeof (double))) == NULL)
+      {
+        FREE(pvecx); pvecx = (double *) NULL;
+        FREE(pvecy); pvecy = (double *) NULL;
+        FREE(pvecz); pvecz = (double *) NULL;
+        return -1;
+      }
+    }
+
+    /* case flagcolor == 2*/
+    if(psurf->flagcolor==2 || psurf->flagcolor==4) /* we have to fill a Color vector */
+    {
+      int j ;
+      for (j = 0;j < nc; j++)  /* nc value is dimzx*dimzy == m3n * n3n */
+      {
+        psurf->zcol[j] = psurf->flag[0];
+      }
+    }
+    else if(psurf->flagcolor==3) /* we have to fill a color matrix */
+    {
+      int i ;
+      for ( i = 0 ; i < psurf->dimzx * psurf->dimzy ; i++ )
+      {
+        psurf->zcol[i] = psurf->flag[0];
+      }
+    }
+    else
+    {
+      /* case flagcolor == 0 or 1 */
+      psurf->zcol = NULL;
+      psurf->izcol = 0;
+    }
+  }
+
+  psurf->pvecx = pvecx;
+  psurf->pvecy = pvecy;
+  psurf->pvecz = pvecz;
+
+  psurf->nc = nc; /*Adding F.Leray 23.03.04*/
+
+  psurf->m1 = m1;
+  psurf->m2 = m2;
+  psurf->m3 = m3;
+  psurf->n1 = n1;
+  psurf->n2 = n2;
+  psurf->n3 = n3;
+  psurf->m3n = m3n; /* If m3n and n3n are 0, then it means that no color matrix/vector was in input*/
+  psurf->n3n = n3n;
+
+  /* We need to rebuild ...->color matrix */
+  if( psurf->flagcolor != 0 && psurf->flagcolor != 1 )
+  { 
+    if(psurf->cdatamapping == 0)
+    {
+      /* scaled */
+      FREE(psurf->color);
+      LinearScaling2Colormap(pobj);
+    }
+    else
+    {
+      int i ;
+
+      FREE(psurf->color);
+
+      if( nc > 0 )
+      {
+        if ((psurf->color = MALLOC (nc * sizeof (double))) == NULL)
+        {
+          return -1;
+        }
+      }
+
+      for(i=0;i<nc;i++)
+      {
+        psurf->color[i] = psurf->zcol[i];
+      }
+      /* copy zcol that has just been freed and re-alloc + filled in */
+    }
+  }
+  return SET_PROPERTY_SUCCEED ;
+}
+/*-----------------------------------------------------------------------------------*/
+int CheckAndUpdate_x_shift(sciPointObj * pobj, int numrow)
+{
+  sciPolyline * ppolyline = pPOLYLINE_FEATURE(pobj) ;
+  double * new_bar = NULL ;
+
+  if( ppolyline->x_shift == NULL )
+  {
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if( ppolyline->n1 == numrow )
+  {
+    return SET_PROPERTY_UNCHANGED ;
+  }
+
+  new_bar = createNewArrayFromSource( numrow, ppolyline->x_shift, ppolyline->n1 ) ;
+
+  if ( new_bar == NULL )
+  {
+    sciprint( "Error creating new x_shift, memory full.\n" ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  FREE( ppolyline->x_shift ) ;
+  ppolyline->x_shift = new_bar ;
+
+  return SET_PROPERTY_SUCCEED ;
+}
+/*-----------------------------------------------------------------------------------*/
+int CheckAndUpdate_y_shift(sciPointObj * pobj, int numrow)
+{
+  sciPolyline * ppolyline = pPOLYLINE_FEATURE(pobj) ;
+  double * new_bar = NULL ;
+
+  if( ppolyline->y_shift == NULL )
+  {
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if( ppolyline->n1 == numrow )
+  {
+    return SET_PROPERTY_UNCHANGED ;
+  }
+
+  new_bar = createNewArrayFromSource( numrow, ppolyline->y_shift, ppolyline->n1 ) ;
+
+  if ( new_bar == NULL )
+  {
+    sciprint( "Error creating new y_shift, memory full.\n" ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  FREE( ppolyline->y_shift ) ;
+  ppolyline->y_shift = new_bar ;
+
+  return SET_PROPERTY_SUCCEED ;
+}
+/*-----------------------------------------------------------------------------------*/
+int CheckAndUpdate_z_shift(sciPointObj * pobj, int numrow)
+{
+  sciPolyline * ppolyline = pPOLYLINE_FEATURE(pobj) ;
+  double * new_bar = NULL ;
+
+  if( ppolyline->z_shift == NULL )
+  {
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if( ppolyline->n1 == numrow )
+  {
+    return SET_PROPERTY_UNCHANGED ;
+  }
+
+  new_bar = createNewArrayFromSource( numrow, ppolyline->z_shift, ppolyline->n1 ) ;
+
+  if ( new_bar == NULL )
+  {
+    sciprint( "Error creating new z_shift, memory full.\n" ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  FREE( ppolyline->z_shift ) ;
+  ppolyline->z_shift = new_bar ;
+
+  return SET_PROPERTY_SUCCEED ;
+}
+/*------------------------------------------------------------------------*/
+int set_data_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if( sciGetEntityType(pobj) == SCI_SEGS && pSEGS_FEATURE(pobj)->ptype == 1 )
+  {
+    AssignedList * tlist = NULL ;
+    int status = -1 ;
+
+    if( !isParameterTlist(3) )
+    {
+      sciprint( "Incorrect argument, must be a Tlist!\r\n" ) ;
+      return SET_PROPERTY_ERROR ;
+    }
+  
+    /* we should have 4 properties in the tlist */
+    tlist = createAssignedList( 3, 4 ) ;
+    if ( tlist == NULL )
+    {
+      return SET_PROPERTY_ERROR ;
+    }
+
+    status = setchampdata( pobj, tlist ) ;
+    destroyAssignedList( tlist ) ;
+    return status ;
+  }
+  else if((sciGetEntityType(pobj) == SCI_GRAYPLOT) && (pGRAYPLOT_FEATURE(pobj)->type == 0)) /* case 0: real grayplot */
+  {
+    AssignedList * tlist = NULL ;
+    int status = -1 ;
+
+    if( !isParameterTlist(3) )
+    {
+      sciprint( "Incorrect argument, must be a Tlist!\r\n" ) ;
+      return SET_PROPERTY_ERROR ;
+    }
+
+    /* we should have 3 properties in the tlist */
+    tlist = createAssignedList( 3, 3 ) ;
+    if ( tlist == NULL )
+    {
+      return SET_PROPERTY_ERROR ;
+    }
+
+    status = setgrayplotdata( pobj, tlist ) ;
+    destroyAssignedList( tlist ) ;
+    return status ;
+  }
+  else if(sciGetEntityType(pobj) == SCI_SURFACE)
+  {
+    AssignedList * tlist = NULL ;
+    int status = -1 ;
+    int listSize = 0 ;
+
+    if( !isParameterTlist(3) )
+    {
+      sciprint( "Incorrect argument, must be a Tlist!\r\n" ) ;
+      return SET_PROPERTY_ERROR ;
+    }
+
+    listSize = getStackListNbElement( 3 ) ;
+
+    if ( listSize == 3 )
+    {
+      tlist = createAssignedList( 3, 3 ) ;
+    }
+    else if ( listSize == 4 )
+    {
+      tlist = createAssignedList( 3, 4 ) ;
+    }
+    else
+    {
+      sciprint("Error the tlist size must be equal to 4 or 5\r\n");
+      return SET_PROPERTY_ERROR ;
+    }
+
+    if ( tlist == NULL )
+    {
+      return SET_PROPERTY_ERROR ;
+    }
+
+    status = set3ddata( pobj, tlist ) ;
+    destroyAssignedList( tlist ) ;
+    return status ;
+
+  }
+  else if ( sciGetEntityType(pobj) == SCI_POLYLINE ) /* F.Leray 02.05.05 : "data" case for others (using sciGetPoint routine inside GetProperty.c) */
+  {
+    CheckAndUpdate_x_shift( pobj, nbRow ) ; /* used only on Polyline */
+    CheckAndUpdate_y_shift( pobj, nbRow ) ; /* used only on Polyline */
+    CheckAndUpdate_z_shift( pobj, nbRow ) ; /* used only on Polyline */
+
+    return sciSetPoint( pobj, getDoubleMatrixFromStack( stackPointer ), &nbRow, &nbCol );
+  }
+  else
+  {
+    return sciSetPoint( pobj, getDoubleMatrixFromStack( stackPointer ), &nbRow, &nbCol );
+  }
+  return SET_PROPERTY_ERROR ;
+  
+}
+/*------------------------------------------------------------------------*/
index b9385fa..c7e4830 100644 (file)
@@ -12,6 +12,7 @@
 #include "sciprint.h"
 #include "InitObjects.h"
 #include "GetProperty.h"
+#include "SetPropertyStatus.h"
 
 /*------------------------------------------------------------------------*/
 int set_figure_id_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
@@ -19,21 +20,18 @@ int set_figure_id_property( sciPointObj * pobj, int stackPointer, int nbRow, int
   int id = (int) getDoubleFromStack( stackPointer ) ;
   if ( sciGetEntityType(pobj) != SCI_FIGURE )
   {
-    sciprint("figure_id property undefined for this object") ;
-    return -1;
+    sciprint("figure_id property undefined for this object.\n") ;
+    return SET_PROPERTY_ERROR ;
   }
 
   if ( pobj != getFigureModel() )
   {
-    if ( sciInitUsedWindow( id ) != 0 )
-    {
-      sciprint( "It was not possible to create the requested figure.\n" ) ;
-      return -1 ;
-    }
+    return sciInitUsedWindow( id ) ;
   }
   else
   {
     return sciSetNum( getFigureModel(), &id ) ;
   }
+  return SET_PROPERTY_ERROR ;
 }
 /*------------------------------------------------------------------------*/
index 8ba170f..91d3a4e 100644 (file)
@@ -46,8 +46,6 @@ void updateMenus( struct BCG * XGC )
 /*------------------------------------------------------------------------*/
 int set_figure_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
 {
-
-  char * value = getStringFromStack( stackPointer ) ;
   struct BCG * XGC = NULL ;
   int    verb = 0   ;
   int    v    = 1   ;
@@ -62,7 +60,7 @@ int set_figure_style_property( sciPointObj * pobj, int stackPointer, int nbRow,
     return -1;
   }
     
-  if ( strcmp(value,"old") == 0 )
+  if ( isStringParamEqual( stackPointer, "old" ) )
   {
     if ( version_flag() == 0 )
     {
@@ -94,7 +92,7 @@ int set_figure_style_property( sciPointObj * pobj, int stackPointer, int nbRow,
       return 0 ;
     }
   }
-  else if ( strcmp(value,"new") == 0 )
+  else if ( isStringParamEqual( stackPointer, "new" ) )
   {   
     if ( version_flag() == 1 ) 
     {
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_fill_mode_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_fill_mode_property.c
new file mode 100644 (file)
index 0000000..04f534f
--- /dev/null
@@ -0,0 +1,32 @@
+/*------------------------------------------------------------------------*/
+/* file: set_fill_mode_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the fill_mode field of             */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_fill_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( isStringParamEqual( stackPointer, "on" ) )
+  {
+    return sciSetIsFilled( pobj, TRUE ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    return sciSetIsFilled( pobj, FALSE ) ;
+  }
+  else
+  {
+    sciprint( "Nothing to do (value must be 'on/off').\n" ) ;
+    return -1;
+  }
+  return -1 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_font_angle_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_font_angle_property.c
new file mode 100644 (file)
index 0000000..c34d1c6
--- /dev/null
@@ -0,0 +1,24 @@
+/*------------------------------------------------------------------------*/
+/* file: set_font_angle_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the font_angle field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "GetProperty.h"
+
+/*------------------------------------------------------------------------*/
+int set_font_angle_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetAutoRotation( pobj ) )
+  {
+    sciSetAutoRotation( pobj, FALSE ) ;
+  }
+  return sciSetFontOrientation( pobj,(int) ( getDoubleFromStack(stackPointer) * 10 ) ) ;
+
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_font_color_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_font_color_property.c
new file mode 100644 (file)
index 0000000..dd1ee23
--- /dev/null
@@ -0,0 +1,35 @@
+/*------------------------------------------------------------------------*/
+/* file: set_font_color_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the font_color field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "GetProperty.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_font_color_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  int value = (int) getDoubleFromStack( stackPointer ) ;
+  if ( sciGetEntityType(pobj) != SCI_AXES )
+  {
+    pAXES_FEATURE (pobj)->textcolor = value ;
+    return 0 ;
+  }
+  else if ( sciGetEntityType(pobj) == SCI_SUBWIN || sciGetEntityType(pobj) == SCI_FIGURE )
+  {
+    return sciSetFontForeground( pobj,value ) ;
+  } /* F.Leray 08.04.04 */
+  else
+  {
+    sciprint( "font_color property does not exist for this handle.\n" ) ;
+    return -1 ;
+  }
+  return -1 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_font_foreground_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_font_foreground_property.c
new file mode 100644 (file)
index 0000000..e8c58a8
--- /dev/null
@@ -0,0 +1,19 @@
+/*------------------------------------------------------------------------*/
+/* file: set_font_foreground_property.c                                   */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the font_angle field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "GetProperty.h"
+
+/*------------------------------------------------------------------------*/
+int set_font_foreground_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  return sciSetFontForeground( pobj, (int) getDoubleFromStack( stackPointer ) ) ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_font_name_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_font_name_property.c
new file mode 100644 (file)
index 0000000..91934a5
--- /dev/null
@@ -0,0 +1,18 @@
+/*------------------------------------------------------------------------*/
+/* file: set_font_name_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the font_style field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+
+/*------------------------------------------------------------------------*/
+int set_font_name_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  return sciSetFontName( pobj, getStringFromStack(stackPointer), nbRow * nbCol );
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_font_size_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_font_size_property.c
new file mode 100644 (file)
index 0000000..48fb316
--- /dev/null
@@ -0,0 +1,18 @@
+/*------------------------------------------------------------------------*/
+/* file: set_font_size_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the polyline_style field of        */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+
+/*------------------------------------------------------------------------*/
+int set_font_size_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  return sciSetFontDeciWidth( pobj, ((int)getDoubleFromStack( stackPointer )) );
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_font_style_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_font_style_property.c
new file mode 100644 (file)
index 0000000..c6ade96
--- /dev/null
@@ -0,0 +1,27 @@
+/*------------------------------------------------------------------------*/
+/* file: set_font_style_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the font_style field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "GetProperty.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_font_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  int value = (int) getDoubleFromStack( stackPointer ) ;
+  if ( value > 10 || value < 0 )
+  {
+    sciprint( "The value must be in [0 10].\n" ) ;
+    return -1 ;
+  }
+  
+  return sciSetFontStyle( pobj, value ) ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_foreground_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_foreground_property.c
new file mode 100644 (file)
index 0000000..a4b98f4
--- /dev/null
@@ -0,0 +1,18 @@
+/*------------------------------------------------------------------------*/
+/* file: set_foreground_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the interp_color_mode field of     */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+
+/*------------------------------------------------------------------------*/
+int set_foreground_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  return sciSetForeground( pobj, (int) getDoubleFromStack( stackPointer ) ) ;
+}
+/*------------------------------------------------------------------------*/
index b84ffe4..895348d 100644 (file)
@@ -15,7 +15,6 @@
 /*------------------------------------------------------------------------*/
 int set_immediate_drawing_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
 {
-  char * value = getStringFromStack( stackPointer ) ;
   
   if ( sciGetEntityType (pobj) != SCI_FIGURE )
   {
@@ -23,12 +22,12 @@ int set_immediate_drawing_property( sciPointObj * pobj, int stackPointer, int nb
     return -1;
   }
   
-  if ( strcmp(value,"on") == 0 )
+  if ( isStringParamEqual( stackPointer, "on" ) )
   {
     pFIGURE_FEATURE((sciPointObj *)pobj)->auto_redraw = TRUE ;
     return 0 ;
   }
-  else if ( strcmp(value,"off") == 0 )
+  else if ( isStringParamEqual( stackPointer, "off" ) )
   {
     pFIGURE_FEATURE((sciPointObj *)pobj)->auto_redraw = FALSE ;
     return 0 ;
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_interp_color_mode_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_interp_color_mode_property.c
new file mode 100644 (file)
index 0000000..baa1fcc
--- /dev/null
@@ -0,0 +1,48 @@
+/*------------------------------------------------------------------------*/
+/* file: set_interp_color_mode_property.c                                 */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the interp_color_mode field of     */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "GetProperty.h"
+
+/*------------------------------------------------------------------------*/
+int set_interp_color_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if( sciGetEntityType(pobj) != SCI_POLYLINE )
+  {
+    sciprint("interp_color_mode can only be set on Polyline objects.\n") ;
+    return -1 ;
+  }
+
+  if( isStringParamEqual( stackPointer, "on" ) )
+  {
+    if ( sciGetInterpVector(pobj) == NULL )
+    {
+      sciprint("You must first specify an interp_color_vector for this object.\n") ;
+      return -1 ;
+    }
+    else
+    {
+      pPOLYLINE_FEATURE (pobj)->isinterpshaded = TRUE ;
+    }
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    pPOLYLINE_FEATURE (pobj)->isinterpshaded = FALSE ;
+  }
+  else
+  {
+    sciprint("Property must be set to 'on' or 'off'.\n") ;
+    return -1 ;
+  }
+  return 0 ;
+
+}
+/*------------------------------------------------------------------------*/
index 0c28bd9..db37e68 100644 (file)
@@ -15,7 +15,7 @@
 /*------------------------------------------------------------------------*/
 int set_interp_color_vector_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
 {
-  if(sciGetEntityType(pobj) != SCI_POLYLINE)
+  if( sciGetEntityType(pobj) != SCI_POLYLINE )
   {
     sciprint("interp_color_vector can only be set on Polyline objects.\n");
     return -1 ;
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_line_mode_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_line_mode_property.c
new file mode 100644 (file)
index 0000000..7bd4b89
--- /dev/null
@@ -0,0 +1,32 @@
+/*------------------------------------------------------------------------*/
+/* file: set_line_mode_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the line_mode field of             */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_line_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( isStringParamEqual( stackPointer, "on" ) )
+  {
+    return sciSetIsLine( pobj, TRUE ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    return sciSetIsLine( pobj, FALSE ) ;
+  }
+  else
+  {
+    sciprint("Value must be 'on/off'.\n");
+    return -1;
+  }
+  return -1 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_line_style_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_line_style_property.c
new file mode 100644 (file)
index 0000000..72e03b8
--- /dev/null
@@ -0,0 +1,19 @@
+/*------------------------------------------------------------------------*/
+/* file: set_line_style_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the line_style field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_line_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  return sciSetLineStyle( pobj, (int) getDoubleFromStack( stackPointer ) ) ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_mark_background_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_mark_background_property.c
new file mode 100644 (file)
index 0000000..a7c0676
--- /dev/null
@@ -0,0 +1,22 @@
+/*------------------------------------------------------------------------*/
+/* file: set_mark_background_property.c                                   */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the mark_background field of       */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_mark_background_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  /*   sciSetIsMark((sciPointObj *) pobj, TRUE); */
+  /* F.Leray 27.01.05 commented because mark_size is automatically launched */
+  /* in tcl/tk editor (which causes marks appearance even when unwanted). */
+  return sciSetMarkBackground( pobj, (int) getDoubleFromStack( stackPointer ) ) ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_mark_foreground_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_mark_foreground_property.c
new file mode 100644 (file)
index 0000000..c52f123
--- /dev/null
@@ -0,0 +1,22 @@
+/*------------------------------------------------------------------------*/
+/* file: set_mark_foreground_property.c                                   */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the mark_foreground field of       */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_mark_foreground_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  /*    sciSetIsMark((sciPointObj *) pobj, TRUE); */
+  /* F.Leray 27.01.05 commented because mark_size is automatically launched */
+  /* in tcl/tk editor (which causes marks appearance even when unwanted). */
+  return sciSetMarkForeground( pobj, (int) getDoubleFromStack( stackPointer ) ) ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_mark_mode_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_mark_mode_property.c
new file mode 100644 (file)
index 0000000..a378d9f
--- /dev/null
@@ -0,0 +1,31 @@
+/*------------------------------------------------------------------------*/
+/* file: set_mark_mode_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the mark_mode field of             */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_mark_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( isStringParamEqual( stackPointer, "on" ) )
+  {
+    return sciSetIsMark( pobj, TRUE ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    return sciSetIsMark( pobj, FALSE ) ;
+  }
+  else
+  {
+    sciprint("Value must be 'on/off'.\n") ;
+    return -1 ;
+  }
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_mark_size_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_mark_size_property.c
new file mode 100644 (file)
index 0000000..4e7c3ab
--- /dev/null
@@ -0,0 +1,22 @@
+/*------------------------------------------------------------------------*/
+/* file: set_mark_size_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the mark_size field of             */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_mark_size_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  /* sciSetIsMark((sciPointObj *) pobj, TRUE); */ 
+  /* F.Leray 27.01.05 commented because mark_size is automatically launched */
+  /* in tcl/tk editor (which causes marks appearance even when unwanted). */
+  return sciSetMarkSize( pobj, (int) getDoubleFromStack( stackPointer ) ) ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_mark_size_unit_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_mark_size_unit_property.c
new file mode 100644 (file)
index 0000000..b8247a3
--- /dev/null
@@ -0,0 +1,32 @@
+/*------------------------------------------------------------------------*/
+/* file: set_mark_size_unit_property.c                                    */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the mark_size_unit field of        */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_mark_size_unit_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( isStringParamEqual( stackPointer, "point") )
+  {
+    return sciSetMarkSizeUnit( pobj, 1 ) ; /* 1 : points, 2 : tabulated */
+  }
+  else if ( isStringParamEqual( stackPointer, "tabulated" ) )
+  {
+    return sciSetMarkSizeUnit( pobj, 2) ;
+  }
+  else
+  {
+    sciprint("Value must be 'point/tabulated'.\n") ;
+    return -1 ;
+  }
+  return -1 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_mark_style_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_mark_style_property.c
new file mode 100644 (file)
index 0000000..f321311
--- /dev/null
@@ -0,0 +1,22 @@
+/*------------------------------------------------------------------------*/
+/* file: set_mark_style_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the mark_style field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "SetPropertyStatus.h"
+
+/*------------------------------------------------------------------------*/
+int set_mark_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  int status1 = sciSetIsMark( pobj, TRUE ) ;
+  int status2 = sciSetMarkStyle( pobj, (int) getDoubleFromStack(stackPointer) ) ;
+
+  return sciSetFinalStatus( status1, status2 ) ;
+}
+/*------------------------------------------------------------------------*/
index c72c496..05ce2b5 100644 (file)
 int set_old_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
 {
   char * value = getStringFromStack( stackPointer ) ;
-  if ( strcmp(value,"on") == 0 )
+  if ( isStringParamEqual( stackPointer, "on" ) )
   {
     setVersionFlag( 1 ) ;
     return 0 ;
   }
-  else if ( strcmp(value,"off") == 0 )
+  else if ( isStringParamEqual( stackPointer, "off" ) )
   {
     setVersionFlag( 0 ) ;
     return 0 ;
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_polyline_style_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_polyline_style_property.c
new file mode 100644 (file)
index 0000000..fcfa962
--- /dev/null
@@ -0,0 +1,36 @@
+/*------------------------------------------------------------------------*/
+/* file: set_polyline_style_property.c                                    */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the polyline_style field of        */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "GetProperty.h"
+
+/*------------------------------------------------------------------------*/
+int set_polyline_style_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  int value = 0 ;
+  if (sciGetEntityType (pobj) != SCI_POLYLINE)
+  {
+    sciprint( "polyline_style property does not exist for this handle.\n" ) ;
+    return -1 ;
+  }
+    
+  value = (int) getDoubleFromStack( stackPointer ) ;
+  if ( value < 1 || value > 7 )
+  {
+    sciprint("Style must be 1,2,3,4,5,6 or 7.\n") ;
+    return -1 ;
+  }
+
+  pPOLYLINE_FEATURE (pobj)->plot = value ;
+  return 0 ;
+  
+}
+/*------------------------------------------------------------------------*/
index de72e0e..ed4e80c 100644 (file)
@@ -23,12 +23,12 @@ int set_rotation_style_property( sciPointObj * pobj, int stackPointer, int nbRow
     return -1;
   }
 
-  if ( strcmp(value,"unary") == 0 )
+  if ( isStringParamEqual( stackPointer, "unary" ) )
   {
     pFIGURE_FEATURE(pobj)->rotstyle = 0 ;
     return 0 ;
   }
-  else if ( strcmp(value,"multiple") == 0 )
+  else if ( isStringParamEqual( stackPointer, "multiple" ) )
   {
     pFIGURE_FEATURE(pobj)->rotstyle = 1 ;
     return 0 ;
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_surface_mode_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_surface_mode_property.c
new file mode 100644 (file)
index 0000000..872b97f
--- /dev/null
@@ -0,0 +1,42 @@
+/*------------------------------------------------------------------------*/
+/* file: set_surface_mode_property.c                                      */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the surface_mode field of          */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "GetProperty.h"
+
+/*------------------------------------------------------------------------*/
+int set_surface_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  
+  if ( sciGetEntityType(pobj) != SCI_PLOT3D &&
+       sciGetEntityType(pobj) != SCI_FAC3D  &&
+       sciGetEntityType(pobj) != SCI_SURFACE   )
+  {
+    sciprint( "Surface_mode can not be set with this object, use line_mode.\n" ) ;
+    return -1 ;
+  }
+
+  if ( isStringParamEqual( stackPointer, "on" ) )
+  {
+    return sciSetIsLine( pobj, TRUE ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    return sciSetIsLine( pobj, FALSE ) ;
+  }
+  else
+  {
+    sciprint( "Value must be 'on/off'.\n" ) ;
+    return -1 ;
+  }
+  return -1 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_text_box_mode_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_text_box_mode_property.c
new file mode 100644 (file)
index 0000000..178aa1f
--- /dev/null
@@ -0,0 +1,51 @@
+/*------------------------------------------------------------------------*/
+/* file: set_text_box_mode_property.c                                     */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the text_box_mode field of         */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "SetPropertyStatus.h"
+#include "GetProperty.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_text_box_mode_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetEntityType(pobj) != SCI_TEXT )
+  {
+    sciprint( "text_box_mode property does not exist for this handle.\n" ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if ( isStringParamEqual( stackPointer, "off" ) )
+  {
+    int status1 = sciSetCenterPos( pobj, FALSE ) ;
+    int status2 = sciSetAutoSize(  pobj, TRUE  ) ;
+    return sciSetFinalStatus( status1, status2 ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "centered" ) )
+  {
+    int status1 = sciSetCenterPos( pobj, TRUE  ) ;
+    int status2 = sciSetAutoSize(  pobj, TRUE  ) ;
+    return sciSetFinalStatus( status1, status2 ) ;
+  }
+  else if ( isStringParamEqual( stackPointer, "filled" ) )
+  {
+    int status1 = sciSetCenterPos( pobj, TRUE  ) ;
+    int status2 = sciSetAutoSize(  pobj, FALSE ) ;
+    return sciSetFinalStatus( status1, status2 ) ;
+  }
+  else
+  {
+    sciprint( "Value must be 'off', 'centered' or 'filled'.\n" );
+    return SET_PROPERTY_ERROR ;
+  }
+  return SET_PROPERTY_ERROR ;
+
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_text_box_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_text_box_property.c
new file mode 100644 (file)
index 0000000..c13fda0
--- /dev/null
@@ -0,0 +1,35 @@
+/*------------------------------------------------------------------------*/
+/* file: set_text_box_property.c                                          */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the text_box field of              */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "SetPropertyStatus.h"
+#include "GetProperty.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_text_box_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  double * values = getDoubleMatrixFromStack( stackPointer ) ;
+  if (sciGetEntityType (pobj) != SCI_TEXT)
+  {
+    sciprint("text_box property does not exist for this handle.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if ( nbRow * nbCol != 2 )
+  {
+    sciprint("text_box must be a 2D vector.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+  return sciSetUserSize( pobj, values[0], values[1] ) ;
+
+
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_text_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_text_property.c
new file mode 100644 (file)
index 0000000..49d84a8
--- /dev/null
@@ -0,0 +1,21 @@
+/*------------------------------------------------------------------------*/
+/* file: set_text_property.c                                              */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the text field of                  */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "SetPropertyStatus.h"
+#include "GetProperty.h"
+#include "sciprint.h"
+
+/*------------------------------------------------------------------------*/
+int set_text_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  return sciSetText( pobj, getStringMatrixFromStack( stackPointer ), nbRow, nbCol ) ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_thickness_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_thickness_property.c
new file mode 100644 (file)
index 0000000..3297c23
--- /dev/null
@@ -0,0 +1,18 @@
+/*------------------------------------------------------------------------*/
+/* file: set_thickness_property.c                                         */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the thickness field of             */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+
+/*------------------------------------------------------------------------*/
+int set_thickness_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  return sciSetLineWidth( pobj, (int) getDoubleFromStack( stackPointer ) ) ;
+}
+/*------------------------------------------------------------------------*/
index 421df1d..58ad126 100644 (file)
 int set_visible_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
 {
   char * value = getStringFromStack( stackPointer ) ;
-  if ( strcmp(value,"on") == 0 )
+  if ( isStringParamEqual( stackPointer, "on" ) )
   {
     return sciSetVisibility( pobj, TRUE ) ;
   }
-  else if ( strcmp(value,"off") == 0 )
+  else if ( isStringParamEqual( stackPointer, "off" ) )
   {
     return sciSetVisibility( pobj, FALSE ) ;
   }
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_x_shift_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_x_shift_property.c
new file mode 100644 (file)
index 0000000..71190fd
--- /dev/null
@@ -0,0 +1,57 @@
+/*------------------------------------------------------------------------*/
+/* file: set_x_shift_property.c                                           */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the x_shift field of               */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "GetProperty.h"
+#include "MALLOC.h"
+
+/*------------------------------------------------------------------------*/
+int set_x_shift_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+
+  int nbElement = nbRow * nbCol ;
+
+  if ( sciGetEntityType(pobj) != SCI_POLYLINE )
+  {
+    sciprint( "This handle has no x_shift property.\n" ) ;
+    return -1;
+  }
+
+  if ( nbRow > 1 && nbCol > 1 )
+  {
+    sciprint( "Bad input, x_shift should be a row or column vector.\n" ) ;
+    return -1;
+  }
+
+  if ( nbElement != 0 && nbElement != pPOLYLINE_FEATURE (pobj)->n1 ) /* we can specify [] (null vector) to reset to default */
+  {
+    sciprint("Wrong size for input vector.\n");
+    return -1;
+  }
+
+  FREE( pPOLYLINE_FEATURE(pobj)->x_shift ) ;
+  pPOLYLINE_FEATURE(pobj)->x_shift = NULL;
+
+  if( nbElement != 0 )
+  {
+    pPOLYLINE_FEATURE(pobj)->x_shift = MALLOC( nbElement * sizeof (double) ) ;
+
+    if ( pPOLYLINE_FEATURE (pobj)->x_shift == NULL )
+    {
+      sciprint("No memory left for allocating temporary tics_coord.\n") ;
+      return -1;
+    }
+
+    copyDoubleVectorFromStack( stackPointer, pPOLYLINE_FEATURE(pobj)->x_shift, nbElement ) ;
+  }
+  return 0 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_y_shift_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_y_shift_property.c
new file mode 100644 (file)
index 0000000..78768b0
--- /dev/null
@@ -0,0 +1,57 @@
+/*------------------------------------------------------------------------*/
+/* file: set_y_shift_property.c                                           */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the y_shift field of               */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "GetProperty.h"
+#include "MALLOC.h"
+
+/*------------------------------------------------------------------------*/
+int set_y_shift_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+
+  int nbElement = nbRow * nbCol ;
+
+  if ( sciGetEntityType(pobj) != SCI_POLYLINE )
+  {
+    sciprint( "This handle has no y_shift property.\n" ) ;
+    return -1;
+  }
+
+  if ( nbRow > 1 && nbCol > 1 )
+  {
+    sciprint( "Bad input, y_shift should be a row or column vector.\n" ) ;
+    return -1;
+  }
+
+  if ( nbElement != 0 && nbElement != pPOLYLINE_FEATURE (pobj)->n1 ) /* we can specify [] (null vector) to reset to default */
+  {
+    sciprint("Wrong size for input vector.\n");
+    return -1;
+  }
+
+  FREE( pPOLYLINE_FEATURE(pobj)->y_shift ) ;
+  pPOLYLINE_FEATURE(pobj)->y_shift = NULL;
+
+  if( nbElement != 0 )
+  {
+    pPOLYLINE_FEATURE (pobj)->y_shift = MALLOC( nbElement * sizeof (double) ) ;
+
+    if ( pPOLYLINE_FEATURE(pobj)->y_shift == NULL )
+    {
+      sciprint("No memory left for allocating temporary tics_coord.\n") ;
+      return -1;
+    }
+
+    copyDoubleVectorFromStack( stackPointer, pPOLYLINE_FEATURE(pobj)->y_shift, nbElement ) ;
+  }
+  return 0 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_z_shift_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_z_shift_property.c
new file mode 100644 (file)
index 0000000..49e9375
--- /dev/null
@@ -0,0 +1,57 @@
+/*------------------------------------------------------------------------*/
+/* file: set_z_shift_property.c                                           */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the z_shift field of               */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "GetProperty.h"
+#include "MALLOC.h"
+
+/*------------------------------------------------------------------------*/
+int set_z_shift_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+
+  int nbElement = nbRow * nbCol ;
+
+  if ( sciGetEntityType(pobj) != SCI_POLYLINE )
+  {
+    sciprint( "This handle has no z_shift property.\n" ) ;
+    return -1;
+  }
+
+  if ( nbRow > 1 && nbCol > 1 )
+  {
+    sciprint( "Bad input, z_shift should be a row or column vector.\n" ) ;
+    return -1;
+  }
+
+  if ( nbElement != 0 && nbElement != pPOLYLINE_FEATURE (pobj)->n1 ) /* we can specify [] (null vector) to reset to default */
+  {
+    sciprint("Wrong size for input vector.\n");
+    return -1;
+  }
+
+  FREE( pPOLYLINE_FEATURE (pobj)->z_shift ) ;
+  pPOLYLINE_FEATURE(pobj)->z_shift = NULL;
+
+  if( nbElement != 0 )
+  {
+    pPOLYLINE_FEATURE(pobj)->z_shift = MALLOC( nbElement * sizeof (double) ) ;
+
+    if ( pPOLYLINE_FEATURE(pobj)->z_shift == NULL )
+    {
+      sciprint("No memory left for allocating temporary tics_coord.\n") ;
+      return -1 ;
+    }
+
+    copyDoubleVectorFromStack( stackPointer, pPOLYLINE_FEATURE(pobj)->z_shift, nbElement ) ;
+  }
+  return 0 ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_zoom_box_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_zoom_box_property.c
new file mode 100644 (file)
index 0000000..aac4de1
--- /dev/null
@@ -0,0 +1,42 @@
+/*------------------------------------------------------------------------*/
+/* file: set_zoom_box_property.c                                          */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the zoom_box field of              */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "GetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "SetPropertyStatus.h"
+#include "PloEch.h"
+
+/*------------------------------------------------------------------------*/
+int set_zoom_box_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetEntityType(pobj) != SCI_SUBWIN )
+  {
+    sciprint( "zoom_box property does nor exist for this handle.\n" ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  /* On doit avoir avoir une matrice 4x1 */
+  if ( nbRow * nbCol == 4 )
+  {
+    scizoom( getDoubleMatrixFromStack( stackPointer ), pobj ) ;
+  }
+  else if ( nbCol * nbRow == 0 )
+  {
+    unzoom() ;
+  }
+  else
+  {
+    sciprint("Argument must be a vector of size 4.\n");
+    return SET_PROPERTY_ERROR ;
+  }
+  return SET_PROPERTY_ERROR ;
+}
+/*------------------------------------------------------------------------*/
diff --git a/scilab/modules/graphics/src/c/getHandleProperty/set_zoom_state_property.c b/scilab/modules/graphics/src/c/getHandleProperty/set_zoom_state_property.c
new file mode 100644 (file)
index 0000000..3ddc55c
--- /dev/null
@@ -0,0 +1,51 @@
+/*------------------------------------------------------------------------*/
+/* file: set_zoom_state_property.c                                        */
+/* Copyright INRIA 2006                                                   */
+/* Authors : Fabrice Leray, Allan Cornet, Jean-Baptiste Silvy             */
+/* desc : function to modify in Scilab the zoom_state field of            */
+/*        a handle                                                        */
+/*------------------------------------------------------------------------*/
+
+#include "setHandleProperty.h"
+#include "SetProperty.h"
+#include "GetProperty.h"
+#include "getPropertyAssignedValue.h"
+#include "sciprint.h"
+#include "SetPropertyStatus.h"
+#include "PloEch.h"
+
+/*------------------------------------------------------------------------*/
+int set_zoom_state_property( sciPointObj * pobj, int stackPointer, int nbRow, int nbCol )
+{
+  if ( sciGetEntityType(pobj) != SCI_SUBWIN )
+  {
+    sciprint( "zoom_state property does not exist for this handle.\n" ) ;
+    return SET_PROPERTY_ERROR ;
+  }
+
+  if ( isStringParamEqual( stackPointer, "on" ) )
+  { 
+    if ( ! sciGetZooming(pobj) )
+    {
+      sciprint("Object is already zoomed.\n") ;
+      return SET_PROPERTY_ERROR ;
+    }
+    else
+    {
+      sciprint("set zoom box ( set('zoom_box',[xmin ymin xmax ymax])).\n") ;
+      return SET_PROPERTY_ERROR ;
+    }
+  }
+  else if ( isStringParamEqual( stackPointer, "off" ) ) 
+  { 
+    unzoom();
+    return sciSetZooming( pobj, FALSE ) ;
+  }
+  else
+  {
+    sciprint("Value must be 'on/off'.\n") ;
+    return SET_PROPERTY_ERROR ;
+  }
+  return SET_PROPERTY_ERROR ;
+}
+/*------------------------------------------------------------------------*/