Remove the oldcontour routine which was only old graphic mode.
Jean-baptiste Silvy [Thu, 11 Jan 2007 16:13:08 +0000 (16:13 +0000)]
15 files changed:
scilab/modules/graphics/graphics.vcproj
scilab/modules/graphics/includes/Axes.h
scilab/modules/graphics/includes/BasicAlgos.h
scilab/modules/graphics/includes/Graphics.h
scilab/modules/graphics/includes/Plo3d.h
scilab/modules/graphics/includes/gw_graphics.h
scilab/modules/graphics/sci_gateway/graphics
scilab/modules/graphics/sci_gateway/gw_graphics.c
scilab/modules/graphics/sci_gateway/sci_contour.c
scilab/modules/graphics/sci_gateway/sci_geom3d.c
scilab/modules/graphics/src/c/Axes.c
scilab/modules/graphics/src/c/BasicAlgos.c
scilab/modules/graphics/src/c/Contour.c
scilab/modules/graphics/src/c/DrawObjects.c
scilab/modules/graphics/src/c/Plo3d.c

index ee9f6d6..266f05b 100644 (file)
                                >
                        </File>
                        <File
-                               RelativePath=".\sci_gateway\sci_contour.c"
-                               >
-                       </File>
-                       <File
                                RelativePath=".\sci_gateway\sci_contour2di.c"
                                >
                        </File>
                                >
                        </File>
                        <File
-                               RelativePath=".\includes\sci_contour.h"
-                               >
-                       </File>
-                       <File
                                RelativePath=".\includes\sci_contour2di.h"
                                >
                        </File>
index a64c777..0819846 100644 (file)
@@ -24,14 +24,6 @@ BOOL CheckDisplay( double fact_h, double fact_w, char logflag, char *foo,int *po
 /* point[1] : y component */
 BOOL IsInsideRectangle(int * rect, int *point) ;
 
-
-/*---------------------------------------------------------------------
- *Trace l'enveloppe convexe de la boite contenant le dessin 
- * et renvoit dans InsideU et InsideD les indices des points dans xbox et ybox
- * qui sont sur les 2 tri\`edres a l'interieur de l'enveloppe convexe
- *---------------------------------------------------------------------*/
-void Convex3d_Box(double *xbox, double *ybox, integer *InsideU, integer *InsideD, char *legend, integer *flag, double *bbox);
-
 /* get the bounding rectangle of a label of a ticks */
 /* similar to stringBoundingRect but only for ticks labels */
 void getTicksLabelBox( double   fact_h   ,
index 9cfbb7a..6f87fd9 100644 (file)
@@ -19,6 +19,8 @@
  */
 double sciFindStPosMin( double x[], int n ) ;
 
+void MaxiInd( double vect[], integer n, integer * ind, double maxi ) ;
+
 /**
  *     convertion d'entier vers double
  *     d et s peuvent en fait pointer sur le meme tableau
index 4d67cf9..af19e55 100644 (file)
@@ -54,7 +54,6 @@ extern void champg  __PARAMS((char *,integer ,double *,double *,double *,double
        /* Contour.c */
 
 extern int C2F(getconts) __PARAMS((double **x,double **y,integer *mm,integer *n));
-extern int C2F(contour)  __PARAMS((double *,double *,double *,integer *,integer *,integer *,integer *,double *,double *,double *,char *,integer *,double *,double *,integer)); 
 extern int C2F(contour2)  __PARAMS((double *,double *,double *,integer *,integer *,integer *,integer *,double *,integer *,char *,char *,double *,integer *,integer,integer)); 
 extern int C2F(contourif)  __PARAMS((double *,double *,double *,integer *,integer *,integer *,integer *,double *,integer *)); 
 
@@ -156,16 +155,6 @@ extern void TDAxis  __PARAMS((integer flag,double FPval,double LPval,integer *na
 extern void C2F(TDdrawaxis)  __PARAMS((double ,double FPval,double LPval,integer *nax,integer *FPoint,integer *LPoint,integer *Ticsdir)); 
 extern void BBoxToval  __PARAMS((double *,double *,double *,integer ,double *)); 
 extern int I3dRotation  __PARAMS((void)); 
-extern int DPoints1  __PARAMS((integer *polyx,integer *polyy,integer *fill,integer whiteid,double zmin,double zmax,double *,double *,double *,integer i,integer j,integer jj1,integer *p,integer dc,integer fg)); 
-extern int DPoints  __PARAMS((integer *polyx,integer *polyy,integer *fill,integer whiteid,double zmin,double zmax,double *,double *,double *,integer i,integer j,integer jj1,integer *p,integer dc,integer fg)); 
-extern int C2F(plot3d)  __PARAMS((double *,double *,double *,integer *p,integer *q,double *teta,double *,char *,integer *,double *,integer)); 
-extern int C2F(plot3d1)  __PARAMS((double *,double *,double *,integer *p,integer *q,double *teta,double *,char *,integer *,double *,integer)); 
-extern int C2F(fac3d)  __PARAMS((double *,double *,double *,integer *cvect,integer *p,integer *q,double *teta,double *,char *,integer *,double *,integer)); 
-extern int C2F(fac3d1)  __PARAMS((double *,double *,double *,integer *cvect,integer *p,integer *q,double *teta,double *,char *,integer *,double *,integer)); 
-extern int C2F(fac3d2)  __PARAMS((double *,double *,double *,integer *cvect,integer *p,integer *q,double *teta,double *,char *,integer *,double *,integer));
-extern int C2F(fac3d3)  __PARAMS((double *,double *,double *,integer *cvect,integer *p,integer *q,double *teta,double *,char *,integer *,double *,integer));
-extern int C2F(param3d)  __PARAMS((double *,double *,double *,integer *,double *teta,double *,char *,integer *,double *,integer)); 
-extern int C2F(param3d1)  __PARAMS((double *,double *,double *,integer *,integer *,integer *,integer *colors,double *teta,double *,char *,integer *,double *,integer )); 
 extern int C2F(box3d)  __PARAMS((double *,double *,double *)); 
 extern void SetEch3d  __PARAMS((double *,double *,double *,double *,double *teta,double *)); 
 extern void SetEch3d1  __PARAMS((double *,double *,double *,double *,double *teta,double *,integer flag)); 
index 2d20993..15d6bcd 100644 (file)
@@ -9,24 +9,9 @@
 #ifndef _PLO3D_H_
 #define _PLO3D_H_
 
-int C2F(plot3d)(double *x, double *y, double *z, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr) ;
-
-int C2F(plot3d1)(double *x, double *y, double *z, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr) ;
-
-int C2F(fac3d)(double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr) ;
-
-int C2F(fac3d1)(double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr) ;
-
-int C2F(fac3d2)(double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr) ;
-
-int C2F(param3d)(double *x, double *y, double *z, integer *n, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr) ;
-
-int C2F(param3d1)(double *x, double *y, double *z, integer *m, integer *n, integer *iflag, integer *colors, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr) ;
 
 int C2F(box3d)(double *xbox, double *ybox, double *zbox) ;
 
-int C2F(geom3d)(double *x, double *y, double *z, integer *n) ;
-
 void SetEch3d(double *xbox, double *ybox, double *zbox, double *bbox, double *teta, double *alpha) ;
 
 void DrawAxis(double *xbox, double *ybox, integer *Indices, integer style) ;
index 076cfc7..a7bd40a 100644 (file)
@@ -25,7 +25,6 @@ int C2F(gw_graphics)(void);
 
 /*-----------------------------------------------------------------------------------*/ 
 extern int sci_champ                      _PARAMS((char *fname, unsigned long fname_len));
-extern int sci_contour                    _PARAMS((char *fname, unsigned long fname_len));
 extern int sci_param3d                    _PARAMS((char *fname, unsigned long fname_len));
 extern int sci_plot3d                     _PARAMS((char *fname, unsigned long fname_len));
 extern int sci_plot2d                     _PARAMS((char *fname, unsigned long fname_len));
index a578651..03250e6 100644 (file)
@@ -8,95 +8,94 @@
 ; --------------------------          
 7 1 champ
 7 2 champ1
-7 3 oldcontour
-7 4 driver
-7 5 fec
-7 6 geom3d
-7 7 grayplot
-7 8 Matplot
-7 9 Matplot1
-7 10 contour2di
-7 11 param3d
-7 12 param3d1
-7 13 xstringb
-7 14 plot2d
-7 15 plot2d1
-7 16 plot2d2
-7 17 plot2d3
-7 18 plot2d4
-7 19 plot3d
-7 20 plot3d1
-7 21 winsid
-7 22 xarc
-7 23 xarcs
-7 24 xarrows
-7 25 drawaxis
-7 26 xchange
-7 27 xclea
-7 28 oldxclear
-7 29 xclick
-7 30 xdel
-7 31 xend
-7 32 xfarc
-7 33 xfarcs
-7 34 xfpoly
-7 35 xfpolys
-7 36 xfrect
-7 37 xg2ps
-7 38 xget
-7 39 xgetech
-7 40 xgetmouse
-7 41 xgrid
-7 42 xinfo
-7 43 xinit
-7 44 xlfont
-7 45 xpoly
-7 46 xpolys
-7 47 xrect
-7 48 xrects
-7 49 xs2fig
-7 50 xsegs
-7 51 xselect
-7 52 xset
-7 53 xsetech
-7 54 xstring
-7 55 xstringl
-7 56 xtape
-7 57 xtitle
-7 58 xgraduate
-7 59 xname
-7 60 xaxis
-7 61 seteventhandler
-7 62 xs2gif
-7 63 xs2ppm
-7 64 xs2ps
-7 65 xs2bmp
-7 66 xs2emf
-7 67 set_posfig_dim
-7 68 xsnative
-7 69 zoom_rect
-7 70 unzoom
-7 71 StringBox
+7 3 driver
+7 4 fec
+7 5 geom3d
+7 6 grayplot
+7 7 Matplot
+7 8 Matplot1
+7 9 contour2di
+7 10 param3d
+7 11 param3d1
+7 12 xstringb
+7 13 plot2d
+7 14 plot2d1
+7 15 plot2d2
+7 16 plot2d3
+7 17 plot2d4
+7 18 plot3d
+7 19 plot3d1
+7 20 winsid
+7 21 xarc
+7 22 xarcs
+7 23 xarrows
+7 24 drawaxis
+7 25 xchange
+7 26 xclea
+7 27 oldxclear
+7 28 xclick
+7 29 xdel
+7 30 xend
+7 31 xfarc
+7 32 xfarcs
+7 33 xfpoly
+7 34 xfpolys
+7 35 xfrect
+7 36 xg2ps
+7 37 xget
+7 38 xgetech
+7 19 xgetmouse
+7 40 xgrid
+7 41 xinfo
+7 42 xinit
+7 43 xlfont
+7 44 xpoly
+7 45 xpolys
+7 46 xrect
+7 47 xrects
+7 48 xs2fig
+7 49 xsegs
+7 50 xselect
+7 51 xset
+7 52 xsetech
+7 53 xstring
+7 54 xstringl
+7 55 xtape
+7 56 xtitle
+7 57 xgraduate
+7 58 xname
+7 59 xaxis
+7 60 seteventhandler
+7 61 xs2gif
+7 62 xs2ppm
+7 63 xs2ps
+7 64 xs2bmp
+7 65 xs2emf
+7 66 set_posfig_dim
+7 67 xsnative
+7 68 zoom_rect
+7 69 unzoom
+7 70 StringBox
 ;/* NG beg */                    
-7 72 move
-7 73 glue
-7 74 unglue
-7 75 drawnow
-7 76 drawlater
-7 77 draw
-7 78 addcb
-7 79 copy
-7 80 delete
-7 81 get
-7 82 set
-7 83 newaxes
-7 84 relocate_handle
-7 85 swap_handles
+7 71 move
+7 72 glue
+7 73 unglue
+7 74 drawnow
+7 75 drawlater
+7 76 draw
+7 77 addcb
+7 78 copy
+7 79 delete
+7 80 get
+7 81 set
+7 82 newaxes
+7 83 relocate_handle
+7 84 swap_handles
 ;/* NG end */                    
-7 86 gsort
-7 87 help_gtk
-7 88 UImenu
-7 89 showalluimenushandles
-7 90 readxbm
-7 91 readgif
+7 85 gsort
+7 86 help_gtk
+7 87 UImenu
+7 88 showalluimenushandles
+7 89 readxbm
+7 90 readgif
 ; --------------------------          
index 39d8e6a..864edf9 100644 (file)
@@ -14,7 +14,6 @@ extern int GetWITH_GUI(void);
 static MatdesTable Tab[]={
        {sci_champ,"champ"},    
        {sci_champ1,"champ1"},
-       {sci_contour,"contour"},
        {sci_driver,"driver"},
        {sci_fec,"scifec"},
        {sci_geom3d,"geom3d"},
index b9cd451..402eaa2 100644 (file)
@@ -57,33 +57,33 @@ int sci_contour( char * fname, unsigned long fname_len )
   GetRhsVar(2, "d", &m2, &n2, &l2);
   CheckVector(2,m2,n2);
   GetRhsVar(3, "d", &m3, &n3, &l3)
-    if (m3 * n3 == 0) {LhsVar(1)=0;  return 0;} 
-    if (m3 == 1 || n3 == 1) {
-      Scierror(999,"%s: third argument is a vector, expecting a matrix \r\n",fname,m3*n3);
-      return 0;
-    }
+  if (m3 * n3 == 0) {LhsVar(1)=0;  return 0;} 
+  if (m3 == 1 || n3 == 1) {
+    Scierror(999,"%s: third argument is a vector, expecting a matrix \r\n",fname,m3*n3);
+    return 0;
+  }
 
-    CheckDimProp(1,3, m1 * n1 != m3); 
-    CheckDimProp(2,3, m2 * n2 != n3); 
+  CheckDimProp(1,3, m1 * n1 != m3); 
+  CheckDimProp(2,3, m2 * n2 != n3); 
 
-    GetRhsVar(4, "d", &m4, &n4, &l4);
-    if (m4 * n4 == 0) {LhsVar(1)=0;  return 0;} 
-    if (m4 * n4 == 1) {
-      flagx = 0;  nz = Max(1,(integer) *stk(l4));
-    } else {
-      flagx = 1;  nz = m4 * n4;
-    }
-    GetOptionalDoubleArg(fname,5,"theta",&theta,1,opts);
-    GetOptionalDoubleArg(fname,6,"alpha",&alpha,1,opts);
-    GetLabels(fname,7,opts,&labels);
-    GetOptionalIntArg(fname,8,"flag",&iflag,3,opts);
-    GetOptionalDoubleArg(fname,9,"ebox",&ebox,6,opts);
-    GetOptionalDoubleArg(fname,10,"zlev",&zlev,1,opts);
-    SciWin();
-    SciGerase() ;
-    C2F(contour)(stk(l1), stk(l2), stk(l3), &m3, &n3, &flagx, &nz, stk(l4), theta, alpha,
-      labels, iflag, ebox, zlev, bsiz);
-    LhsVar(1)=0;
-    return 0;
+  GetRhsVar(4, "d", &m4, &n4, &l4);
+  if (m4 * n4 == 0) {LhsVar(1)=0;  return 0;} 
+  if (m4 * n4 == 1) {
+    flagx = 0;  nz = Max(1,(integer) *stk(l4));
+  } else {
+    flagx = 1;  nz = m4 * n4;
+  }
+  GetOptionalDoubleArg(fname,5,"theta",&theta,1,opts);
+  GetOptionalDoubleArg(fname,6,"alpha",&alpha,1,opts);
+  GetLabels(fname,7,opts,&labels);
+  GetOptionalIntArg(fname,8,"flag",&iflag,3,opts);
+  GetOptionalDoubleArg(fname,9,"ebox",&ebox,6,opts);
+  GetOptionalDoubleArg(fname,10,"zlev",&zlev,1,opts);
+  SciWin();
+  SciGerase() ;
+  C2F(contour)(stk(l1), stk(l2), stk(l3), &m3, &n3, &flagx, &nz, stk(l4), theta, alpha,
+    labels, iflag, ebox, zlev, bsiz);
+  LhsVar(1)=0;
+  return 0;
 }
 /*-----------------------------------------------------------------------------------*/
index 7d6e94e..28c688c 100644 (file)
 #include "gw_graphics.h"
 #include "sci_demo.h"
 #include "Plo3d.h"
+#include "PloEch.h"
+#include "GetProperty.h"
+#include "axesScale.h"
+
+/*-----------------------------------------------------------------------------------*/
+int geom3d(double *x, double *y, double *z, integer *n)
+{
+  integer j;
+
+  sciPointObj * psubwin = sciGetSelectedSubWin(sciGetCurrentFigure());
+  sciSubWindow * ppsubwin = pSUBWIN_FEATURE(psubwin);
+
+  if(ppsubwin->logflags[0] =='l')
+  {
+    for ( j =0 ; j < (*n) ; j++) {
+      if(x[j] <= 0.){
+        sciprint("geom3d error : Operation can not be performed because X axis is in logscale mode and the specified x vector has a negative value\n");
+        return -1;
+      }
+      x[j] = log10(x[j]);
+    }
+  }
+
+  if(ppsubwin->logflags[1] =='l')
+  {
+    for ( j =0 ; j < (*n) ; j++) {
+      if(y[j] <= 0.){
+        sciprint("geom3d error : Operation can not be performed because Y axis is in logscale mode and the specified y vector has a negative value\n");
+        return -1;
+      }
+      y[j] = log10(y[j]);
+    }
+  }
+
+  if(ppsubwin->logflags[2] =='l')
+  {
+    for ( j =0 ; j < (*n) ; j++) {
+      if(z[j] <= 0.){
+        sciprint("geom3d error : Operation can not be performed because Z axis is in logscale mode and the specified z vector has a negative value\n");
+        return -1;
+      }
+      z[j] = log10(z[j]);
+    }
+  }
+
+  if( ppsubwin->axes.reverse[0] )
+  {
+    for ( j =0 ; j < (*n) ; j++) x[j] = InvAxis(ppsubwin->FRect[0],ppsubwin->FRect[2],x[j]);
+  }
+
+  if( ppsubwin->axes.reverse[1] )
+  {
+    for ( j =0 ; j < (*n) ; j++) y[j] = InvAxis(ppsubwin->FRect[1],ppsubwin->FRect[3],y[j]);
+  }
+
+  if( ppsubwin->axes.reverse[2] )
+  {
+    for ( j =0 ; j < (*n) ; j++) z[j] = InvAxis(ppsubwin->FRect[4],ppsubwin->FRect[5],z[j]);
+  }
+
+  for ( j =0 ; j < (*n) ; j++)
+  {
+    double x1,y1_;
+    x1=TRX(x[j],y[j],z[j]);
+    y1_=TRY(x[j],y[j],z[j]);
+    z[j]=TRZ(x[j],y[j],z[j]);
+    x[j]=x1;
+    y[j]=y1_;
+  }
+  return(0);
+}
 
 /*-----------------------------------------------------------------------------------*/
 int sci_geom3d( char * fname, unsigned long fname_len )
@@ -34,7 +105,7 @@ int sci_geom3d( char * fname, unsigned long fname_len )
   if (m1 * n1 == 0)  { LhsVar(1) = 0; return 0;}
   SciWin();
   ix1 = m1 * n1;
-  C2F(geom3d)(stk(l1), stk(l2), stk(l3), &ix1);
+  geom3d(stk(l1), stk(l2), stk(l3), &ix1);
   LhsVar(1)=1;
   LhsVar(2)=2;
   return 0;
index 32cbebb..d1f896c 100644 (file)
@@ -1132,106 +1132,6 @@ extern void NumberFormat(char *str, integer k, integer a)
 
 }
 
-/*---------------------------------------------------------------------
- *Trace l'enveloppe convexe de la boite contenant le dessin 
- * et renvoit dans InsideU et InsideD les indices des points dans xbox et ybox
- * qui sont sur les 2 tri\`edres a l'interieur de l'enveloppe convexe
- *---------------------------------------------------------------------*/
-
-void Convex3d_Box(double *xbox, double *ybox, integer *InsideU, integer *InsideD, char *legend, integer *flag, double *bbox)
-{
-  double xmaxi;
-  integer ixbox[8],iybox[8];
-  integer xind[8];
-  integer ind2,ind3,ind;
-  integer p,n,dvect[1],dash[6];
-  integer verbose=0,narg,pat;
-  integer i,j;
-  /** dans xbox[8] se trouve l'abscisse des points successifs   **/
-  /** de la boite qui continent la surface                      **/
-  /** on stocke dans xind[8] les indices des points de la boite **/
-  /** qui sont sur l'enveloppe convexe en partant du pointeger en haut **/
-  /** a droite et en tournant ds le sens trigonometrique           **/
-  /** par exemple avec : **/
-  /*      4 ----- 5        */
-  /*       /    /|         */
-  /*     7----6  |         */
-  /*      | 0 | / 1        */
-  /*     3----- 2          */
-  /** on doit trouver xind={5,4,7,3,2,1}; **/
-  /** on en profite pour stocker aussi les points des triedres **/
-
-  xmaxi=((double) Maxi(xbox,8L));
-  ind= -1;
-  for (i =0 ; i < 8 ; i++)
-    {
-      MaxiInd(xbox,8L,&ind,xmaxi);
-      if ( ind > 3)
-       {
-         xind[0]=ind;
-         break;
-       }
-    }
-  if (ind < 0 || ind > 8) 
-    {
-      sciprint("xind out of bounds");
-      xind[0]=0;
-    }
-  UpNext(xind[0],&ind2,&ind3);
-  if (ybox[ind2] > ybox[ind3]) 
-    {
-      xind[1]=ind2;InsideU[0]=ind3;
-    }
-  else 
-    {
-      xind[1]=ind3;InsideU[0]=ind2;
-    }
-  UpNext(ind2,&ind2,&ind3); InsideU[1]=xind[0];
-  InsideU[2]=ind2; InsideU[3]=InsideU[0]-4;
-  xind[2]=ind2;
-  /* le pointeger en bas qui correspond */
-  xind[3]=ind2-4;
-  DownNext(xind[3],&ind2,&ind3);
-  if (ybox[ind2] < ybox[ind3]) 
-    {
-      xind[4]=ind2;InsideD[0]=ind3;
-    }
-  else  
-    {
-      xind[4]=ind3;InsideD[0]=ind2;
-    }
-  DownNext(ind2,&ind2,&ind3);
-  InsideD[1]=xind[3];
-  InsideD[2]=ind2;
-  InsideD[3]=InsideD[0]+4;
-  xind[5]=ind2;
-  for (i=0; i < 6 ; i++)
-    {
-      ixbox[i]=XScale(xbox[xind[i]]);
-      iybox[i]=YScale(ybox[xind[i]]);
-    }
-  ixbox[6]=ixbox[0];iybox[6]=iybox[0];
-  p=7,n=1;
-  C2F(dr)("xget","foreground",&verbose,dvect,&narg, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  /** On trace l'enveloppe cvxe **/
-  C2F(dr)("xget","line style",&verbose,dash,&narg,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  C2F(dr)("xset","line style",(j=1,&j),PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-    
-  if (flag[2]>=3){
-    C2F(dr)("xpolys","v",ixbox,iybox,dvect,&n,&p
-           ,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  }
-  C2F(dr)("xget","pattern",&verbose,&pat,&narg,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  C2F(dr)("xset","pattern",dvect,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-
-  if (flag[2]>=3)AxesStrings(flag[2],ixbox,iybox,xind,legend,bbox);
-  C2F(dr)("xset","pattern",&pat,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  C2F(dr)("xset","line style",dash,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-
-}
-
-
-
 
 static void axesplot(char * strflag, sciPointObj * psubwin)
 {
index 00a48e7..8c63435 100644 (file)
@@ -35,6 +35,22 @@ double sciFindStPosMin( double x[], int n )
   return min ;
 }
 /*------------------------------------------------------------------------*/
+void MaxiInd( double vect[], integer n, integer * ind, double maxi )
+{
+  integer i ;
+  if ( *ind+1 < n )
+  {
+    for ( i = *ind+1 ; i < n ; i++ )
+    {
+      if ( vect[i] >= maxi)
+      {
+        *ind=i;
+        return ;
+      }
+    }
+  }
+}
+/*------------------------------------------------------------------------*/
 int C2F(entier2d)( integer * n, double * dx,integer * s )
 {
   integer ix;
index 0b13bd9..11692ee 100644 (file)
@@ -165,99 +165,6 @@ static double y_cont(integer i) { return GY[i] ;}
 static double ZC=0.0;
 static char   ContNumFormat[100];
 
-int C2F(contour)(double *x, double *y, double *z, integer *n1, integer *n2, integer *flagnz, integer *nz, double *zz, double *teta, double *alpha, char *legend, integer *flag, double *bbox, double *zlev, integer lstr)
-{
-  int err=0;
-  integer verbose=0,narg,fg;
-  integer InsideU[4],InsideD[4];
-  void (*func) __PARAMS((integer, double,double,double));
-  static double *zconst;
-  double zmin,zmax;
-  integer N[3],i;
-  double xbox[8],ybox[8],zbox[8];
-
-  switch (flag[0])
-    {
-    case 0: func=ContStore; break;  /* 3D geometry with projection on the surface */
-    case 1: func=ContStore1;ZC= *zlev; break;    /* 3D geometry with projection on a plan */
-    case 2: func=ContStore2; break; /** 2D geometry **/
-    default:func=ContStore2; break; /** 2D geometry **/
-    }
-  zmin=(double) Mini(z,*n1*(*n2)); 
-  zmax=(double) Maxi(z,*n1*(*n2));
-
-  if (flag[0] == 2)
-    {
-      /* Contour on a 2D plot */
-      double FRect[4];
-      static int aaint[4] = {2,10,2,10};
-      FRect[0]=x[0];FRect[1]= y[0];FRect[2]=x[*n1-1];FRect[3]= y[*n2-1];
-      set_scale("tftttf",NULL,FRect,aaint,"nn",NULL);
-      /** Drawing axes **/
-      axis_draw("111");
-      frame_clip_on();
-    }
-  else
-    {
-      /* Contour on a 3D plot */
-       if (flag[1]!=0 && flag[1]!=1 && flag[1]!=3 && flag[1]!=5)
-        {
-          bbox[0]=x[0];bbox[1]=x[*n1-1];
-          bbox[2]=y[0];bbox[3]=y[*n2-1];
-          bbox[4]=zmin;bbox[5]=zmax;
-        }
-       if ( flag[1] !=0)
-        SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,(long)(flag[1]+1)/2);
-       else
-        SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,0L);
-       /** Calcule l' Enveloppe Convexe de la boite **/
-       /** ainsi que les triedres caches ou non **/
-       Convex_Box(xbox,ybox,InsideU,InsideD,legend,flag,bbox);
-       /** Le triedre cach\'e **/
-       if (zbox[InsideU[0]] > zbox[InsideD[0]])
-        {
-          /* cache=InsideD[0]; */
-          if (flag[2] >=2 )DrawAxis(xbox,ybox,InsideD,HIDDENFRAMECOLOR);
-        }
-       else 
-        {
-          /* cache=InsideU[0]-4; */
-          if (flag[2] >=2 )DrawAxis(xbox,ybox,InsideU,HIDDENFRAMECOLOR);
-        }
-     }
-  if (*flagnz == 0)
-    {
-      if ( ( zconst = MALLOC( (*nz) * sizeof(double) ) )== 0) 
-       {
-         sciprint("Running out of memory\r\n");
-         return 0;
-       }
-      for ( i =0 ; i < *nz ; i++) 
-       zconst[i]=zmin + (i+1)*(zmax-zmin)/(*nz+1);
-      N[0]= *n1;N[1]= *n2;N[2]= *nz;
-      contourI(func,x,y,z,zconst,N,(integer *) 0,&err);
-      FREE(zconst) ;
-      zconst = NULL ;
-    }
-   else
-    {
-      N[0]= *n1;N[1]= *n2;N[2]= *nz;
-      contourI(func,x,y,z,zz,N,(integer *) 0,&err);
-    }
-  C2F(dr)("xget","foreground",&verbose,&fg,&narg, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  if (flag[0]!=2 &&  flag[2] >=3 )
-    {
-      /** Le triedre que l'on doit voir **/
-      if (zbox[InsideU[0]] > zbox[InsideD[0]])
-       DrawAxis(xbox,ybox,InsideU,fg);
-      else 
-       DrawAxis(xbox,ybox,InsideD,fg);
-    }
-  frame_clip_off();
-
-  return(0);
-}
-
 /** interface for contour2d **/
 
 int C2F(contour2)(double *x, double *y, double *z, integer *n1, integer *n2, integer *flagnz, integer *nz, double *zz, integer *style, char *strflag, char *legend, double *brect, integer *aaint, integer lstr1, integer lstr2)
index 89c67f6..da28486 100644 (file)
@@ -53,6 +53,7 @@
 #include "Format.h"
 #include "axesScale.h"
 #include "drawMarks.h"
+#include "BasicAlgos.h"
 
 #include "MALLOC.h" /* MALLOC */
 
index ea2dada..2377350 100644 (file)
@@ -16,6 +16,7 @@
 #include "Xcall1.h"
 #include "Plo3d.h"
 #include "axesScale.h"
+#include "BasicAlgos.h"
 
 
 #include "MALLOC.h" /* MALLOC */
@@ -35,700 +36,8 @@ static double xx1,yy1;
 #define PGEOX(x1,y1,z1) inint(xx1= Cscale.Wscx1*(TRX(x1,y1,z1)-Cscale.frect[0]) +Cscale.Wxofset1);
 #define PGEOY(x1,y1,z1) inint(yy1= Cscale.Wscy1*(-TRY(x1,y1,z1)+Cscale.frect[3])+Cscale.Wyofset1);
 
-static void C2F(plot3dg) __PARAMS(( char *name,int (*func)(), double *x, double *y,double *z,
-                                   integer *p, integer *q, double *teta,double *alpha,char *legend,
-                                   integer *flag,double *bbox));
-
-static void C2F(fac3dg) __PARAMS(( char *name, int iflag, double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox));
-
 static void dbox __PARAMS((void));
 
-/*-------------------------------------------------------------------------
- *
- *  3D Plotting of surfaces given by z=f(x,y)
- *  -->  Entry :
- *     x : vector of size *p
- *     y : vector of size *q
- *     z : vector of size (*p)*(*q) 
- *         z[i+(*p)j]=f(x[i],y[j])
- *     p,q 
- *     teta,alpha (spherical angle in degree of the observation point 
- *                 at infinity )
- *     flag[0]={ n1, n2 }
- *       n1 ==1  with hidden parts 
- *       n1 >=2 without hidden part, ( if flag > 2  the surface is grey )
- *       n1 <=0 only the shape of the surface is painted (with white if 0)
- *     flag[1]=0  ( the current scale are used, for superpose mode )
- *     flag[1]=1  ( bbox is used to fix the box of plot3d )
- *     flag[1]=3  ( isometric, bbox fixes the box of plot3d )
- *     flag[1]=4  ( isometric, bbox fixed by data )
- *     flag[1]=5  ( expanded isometric, bbox fixes the box of plot3d )
- *     flag[1]=6  ( expanded isometric, bbox fixed by data )
- *     flag[2]=0  ( No box around the plot3d )
- *     flag[2]=1  ( petit triedre ds un coin )
- *     flag[2]=2  ( juste triedre cache )
- *     flag[2]=3  ( toute la boite + legendes )
- *     flag[2]=4  ( toute la boite + legendes + axes )
- *     legend="x-legend@y-legend@z-legend"
- *     
- *  <-- The arguments are not modified 
- *-------------------------------------------------------------------------*/
-int C2F(plot3d)(double *x, double *y, double *z, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr)
-{
-  C2F(plot3dg)("plot3d",DPoints,x,y,z,p,q,teta,alpha,legend,flag,bbox);
-  return(0);
-}
-
-int C2F(plot3d1)(double *x, double *y, double *z, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr)
-{
-  C2F(plot3dg)("plot3d1",DPoints1,x,y,z,p,q,teta,alpha,legend,flag,bbox);
-  return(0);
-}
-
-int C2F(fac3d)(double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr)
-{
-  C2F(fac3dg)("fac3d",0,x,y,z,cvect,p,q,teta,alpha,legend,flag,bbox);
-  return(0);
-}
-
-int C2F(fac3d1)(double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr)
-{
-  C2F(fac3dg)("fac3d1",1,x,y,z,cvect,p,q,teta,alpha,legend,flag,bbox);
-  return(0);
-}
-
-int C2F(fac3d2)(double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr)
-{
-  C2F(fac3dg)("fac3d2",2,x,y,z,cvect,p,q,teta,alpha,legend,flag,bbox);
-  return(0);
-}
-
-/* 
- * Current geometric transformation and scales 
- * which are used or set according to the value of flag[1]
- *
- */
-
-static void C2F(plot3dg)(char *name, int (*func) (/* ??? */), double *x, double *y, double *z, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox)
-{
-  static integer InsideU[4],InsideD[4],fg,fg1,dc;
-  /* solid = color of 3D frame */
-  integer polysize,npoly,whiteid,verbose=0,narg_;
-  integer *polyx,*polyy,*fill;
-  double xbox[8],ybox[8],zbox[8];
-  static integer cache;
-  static double zmin,zmax;
-  integer i,j;
-
-  C2F(dr)("xget","foreground",&verbose,&fg,&narg_, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  if (flag[1]!=0 && flag[1]!=1 && flag[1]!=3 && flag[1]!=5)
-    {
-      bbox[0]=x[0];bbox[1]=x[*p-1];
-      bbox[2]=y[0];bbox[3]=y[*q-1];
-      zmin=bbox[4]=(double) Mini(z,*p*(*q)); 
-      zmax=bbox[5]=(double) Maxi(z,*p*(*q));
-    }
-  if ( flag[1]==1 || flag[1]==3 || flag[1]==5) 
-    {
-      zmin=bbox[4];
-      zmax=bbox[5];
-    }
-  if ( flag[1] ==0)
-    SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,0L);
-  else
-    SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,(long)(flag[1]+1)/2);
-  /** Calcule l' Enveloppe Convex de la boite **/
-  /** ainsi que les triedres caches ou non **/
-  Convex_Box(xbox,ybox,InsideU,InsideD,legend,flag,bbox);
-  /** Le triedre cach\'e **/
-  C2F(dr)("xget","hidden3d",&verbose,&fg1,&narg_, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  if (fg1==-1) fg1=0;
-  if (zbox[InsideU[0]] > zbox[InsideD[0]])
-    {
-      cache=InsideD[0];
-      if (flag[2] >=2 )DrawAxis(xbox,ybox,InsideD,fg1);
-    }
-  else 
-    {
-      cache=InsideU[0]-4;
-      if (flag[2] >=2 )DrawAxis(xbox,ybox,InsideU,fg1);
-    }
-  polyx = MALLOC( 5 * (*q) * sizeof(int) ) ;
-  polyy = MALLOC( 5 * (*q) * sizeof(int) ) ;
-  fill  = MALLOC( (*q) * sizeof(int) ) ;
-  if ( (polyx == NULL) || (polyy == NULL) || (fill  == NULL))
-    {
-      sciprint("plot3dg_ : malloc No more Place\n");
-      return;
-    }
-  /** The 3d plot **/
-
-  C2F(dr)("xget","lastpattern",&verbose,&whiteid,&narg_,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  dc =  flag[0];
-  C2F(dr)("xget","hidden3d",&verbose,&fg1,&narg_,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  if (fg1==-1) fg1=0;   
-  for ( i =0 ; i < (*q)-1 ; i++)   fill[i]= dc ;
-  polysize=5;
-  npoly= (*q)-1; 
-  /** Choix de l'ordre de parcourt **/
-  switch (cache)
-    {
-    case 0 : 
-      for ( i =0 ; i < (*p)-1 ; i++)
-       {
-         int npolyok=0;
-         for ( j =0 ; j < (*q)-1 ; j++)
-           {
-             npolyok += (*func)(polyx,polyy,fill,whiteid,zmin,zmax,
-                                x,y,z,i,j,npolyok,p,dc,fg1);
-           }
-         if ( npolyok != 0) 
-           C2F(dr)("xliness","str",polyx,polyy,fill,&npolyok,&polysize
-                   ,PI0,PD0,PD0,PD0,PD0,0L,0L);
-       }
-      break;
-    case 1 : 
-      for ( i =0 ; i < (*p)-1 ; i++)
-       {
-         int npolyok=0;
-         for ( j =0  ; j < (*q)-1  ; j++)
-           {
-             npolyok += (*func)(polyx,polyy,fill,whiteid,zmin,zmax,
-                                x,y,z,i,(*q)-2-j,npolyok,p,dc,fg1);
-           }
-         if ( npolyok != 0) 
-           C2F(dr)("xliness","str",polyx,polyy,fill,&npolyok,&polysize
-                   ,PI0,PD0,PD0,PD0,PD0,0L,0L);
-       }
-      break;
-    case 2 : 
-      for ( i =(*p)-2 ; i >=0  ; i--)
-       {
-         int npolyok=0;
-         for ( j = 0 ; j < (*q)-1 ; j++)
-           {
-             npolyok +=     (*func)(polyx,polyy,fill,whiteid,zmin,zmax,
-                                    x,y,z,i,(*q)-2-j,npolyok,p,dc,fg1);
-           }
-         if ( npolyok != 0) 
-           C2F(dr)("xliness","str",polyx,polyy,fill,&npolyok,&polysize
-                   ,PI0,PD0,PD0,PD0,PD0,0L,0L);
-       }
-      break;
-    case 3 : 
-      for ( i =(*p)-2 ; i >=0  ; i--)
-       {
-         int npolyok=0;
-         for ( j =0 ; j < (*q)-1 ; j++)
-           {
-             npolyok += (*func)(polyx,polyy,fill,whiteid,zmin,zmax,
-                                x,y,z,i,j,npolyok,p,dc,fg1);
-           }
-         if ( npolyok != 0) 
-           C2F(dr)("xliness","str",polyx,polyy,fill,&npolyok,&polysize
-                   ,PI0,PD0,PD0,PD0,PD0,0L,0L);
-       }
-      break;
-    }
-  
-  FREE( polyx ) ;
-  FREE( polyy ) ;
-
-  if ( flag[2] >=3 )
-    {
-      /** Le triedre que l'on doit voir **/
-      if (zbox[InsideU[0]] > zbox[InsideD[0]])
-       DrawAxis(xbox,ybox,InsideU,fg);
-      else 
-       DrawAxis(xbox,ybox,InsideD,fg);
-    }
-
-
-
-}
-
-
-static void C2F(fac3dg)(char *name, int iflag, double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha, char *legend, integer *flag, double *bbox)
-{
-  static integer InsideU[4],InsideD[4],fg1;
-  integer polysize,npoly,whiteid,verbose=0,narg_;
-  integer *polyx,*polyy,*locindex,fill[4]; /* Modified by polpoth 4/5/2000 fill[4] instead of fill[1] */
-  double xbox[8],ybox[8],zbox[8],*polyz;
-  static integer cache;
-  static double zmin,zmax;
-  integer i,flag_det=0,flag_det0=0,flag_det1=0,flag_det2=0,flag_det3=0;
-
-
-  if (flag[1]!=1 && flag[1] != 0 && flag[1]!=3 && flag[1]!=5)
-    {
-      bbox[0]=(double) Mini(x,*p*(*q));
-      bbox[1]=(double) Maxi(x,*p*(*q));
-      bbox[2]=(double) Mini(y,*p*(*q)); 
-      bbox[3]=(double) Maxi(y,*p*(*q));
-      zmin=bbox[4]=(double) Mini(z,*p*(*q)); 
-      zmax=bbox[5]=(double) Maxi(z,*p*(*q));
-    }
-  if ( flag[1]==1 || flag[1]==3|| flag[1]==5) 
-    {
-      zmin=bbox[4];
-      zmax=bbox[5];
-    }
-  if ( flag[1]==0)
-    SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,0L);
-  else
-    SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,(long)(flag[1]+1)/2);
-  /** Calcule l' Enveloppe Convex de la boite **/
-  /** ainsi que les triedres caches ou non **/
-  Convex_Box(xbox,ybox,InsideU,InsideD,legend,flag,bbox);
-  /** Le triedre cach\'e **/
-  C2F(dr)("xget","hidden3d",&verbose,&fg1,&narg_, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  if (fg1==-1) fg1=0;  
-  if (zbox[InsideU[0]] > zbox[InsideD[0]])
-    {
-      cache=InsideD[0];
-      if (flag[2] >=2 )DrawAxis(xbox,ybox,InsideD,fg1);
-    }
-  else 
-    {
-      cache=InsideU[0]-4;
-      if (flag[2] >=2 )DrawAxis(xbox,ybox,InsideU,fg1);
-    }
-  polyz = MALLOC( (*q) * sizeof(double) ) ;
-  if ( (polyz == NULL) && (*q) != 0)
-    {
-      sciprint("plot3dg_ : malloc No more Place\n");
-      return;
-    }
-  /** Allocation  **/
-  polyx = MALLOC( ((*p) + 1L) * sizeof(int) ) ;
-  polyy = MALLOC( ((*p)+1L) * sizeof(int) ) ;
-  locindex = MALLOC( (*q) * sizeof(int) ) ;
-  if ( ( polyx == NULL) ||  ( polyy== NULL) || ( locindex== NULL) )
-    {
-      sciprint("plot3dg_ : malloc No more Place\n");
-      return;
-    }
-
-  C2F(dr)("xget","lastpattern",&verbose,&whiteid,&narg_,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  fill[0]=  flag[0];
-  C2F(dr)("xget","hidden3d",&verbose,&fg1,&narg_,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  /** tri **/
-  for ( i =0 ; i < *q ; i++)
-    {
-      double zdmin1, zdmin,xmoy=0.00,ymoy=0.00,zmoy=0.00;
-      int j=0 ;
-      zdmin1=  TRZ(x[ (*p)*i]  ,y[(*p)*i]  ,z[(*p)*i]);
-      for ( j= 0 ; j < *p ; j++) 
-       {
-         xmoy += x[ j +(*p)*i];  ymoy += y[ j +(*p)*i];  zmoy += z[ j +(*p)*i];
-         zdmin =  TRZ(x[ j +(*p)*i]  ,y[ j +(*p)*i]  ,z[ j +(*p)*i]);
-         if ( zdmin1 < zdmin ) zdmin1= zdmin;
-       }
-      /* polyz[i]= zdmin1 + TRZ(xmoy,ymoy,zmoy); */
-      polyz[i]=  TRZ(xmoy,ymoy,zmoy);
-    }
-  C2F(dsort)(polyz,q,locindex); 
-  for ( i =0 ; i < (*q) ; i++)
-    {
-      locindex[i] -= 1;  /* Fortran locindex -> C locindex */
-      if ( locindex[i] >= *q) 
-       sciprint (" index[%d]=%d\r\n",i,locindex[i]);
-      locindex[i] = Min(Max(0,locindex[i]),*q-1);
-    }
-  polysize=(*p)+1; /* jpc : dec 1999 */
-  npoly=1; 
-  for ( i = (*q)-1 ; i>= 0 ; i--)
-    {
-      int j,nok=0;
-      for ( j =0 ; j < (*p) ; j++)
-       {
-         polyx[j]=PGEOX(x[(*p)*locindex[i]+j]  ,y[(*p)*locindex[i]+j]  ,z[(*p)*locindex[i]+j]);
-         if ( finite(xx1) ==0 ) 
-           {
-             nok=1;break;
-           }
-         polyy[j]=PGEOY(x[(*p)*locindex[i]+j]  ,y[(*p)*locindex[i]+j]  ,z[(*p)*locindex[i]+j]);
-         if ( finite(yy1)==0)
-           {
-             nok=1;break;
-           }
-       }
-      if ( nok == 0) 
-       {
-         polyx[(*p)]=polyx[0];
-         polyy[(*p)]=polyy[0];
-
-         fill[0]=  flag[0];
-         /* Beginning of modified code by E. Segre 4/5/2000 : the call
-            to C2F(dr)("xliness" ... is now done in each if/else if block.
-            The case iflag==3 corresponds to the new case, where cvect points
-            to a (*p) times (*q) matrix, in order to do interpolated shading.
-            
-            The new added function are located at the end of thecurrent file (Plo3d.c) */
-                
-         if (*p > 2) { /* Detection of facet orientation,    */
-           double determ;     /* improved by Mottelet 25/01/2005    */ 
-           determ =         /* to take in account quadrilaterals. */
-             ((polyx[1] - polyx[0]) * (polyy[2] - polyy[0]) -
-              (polyy[1] - polyy[0]) * (polyx[2] - polyx[0]));
-           flag_det1 = (determ < 0); /* First test for a triangle */
-           if (*p > 3) { /* Second test for the quadrilateral case */
-             determ =
-               ((polyx[2] - polyx[0]) * (polyy[3] - polyy[0]) -
-                (polyy[2] - polyy[0]) * (polyx[3] - polyx[0]));
-             flag_det3 = (determ < 0);
-             determ =
-               ((polyx[2] - polyx[1]) * (polyy[3] - polyy[1]) -
-                (polyy[2] - polyy[1]) * (polyx[3] - polyx[1]));
-             flag_det2 = (determ < 0);
-             determ =
-               ((polyx[3] - polyx[1]) * (polyy[0] - polyy[1]) -
-                (polyy[3] - polyy[1]) * (polyx[0] - polyx[1]));
-             flag_det0 = (determ < 0);
-           }
-           /*        printf("%d %d %d %d\n",flag_det0,flag_det1,flag_det2,flag_det3); */
-         }
-         flag_det=flag_det0+flag_det1+flag_det2+flag_det3;
-         if ((flag_det > 3 || (flag_det==1 && (*p)==3)) && (fg1>=0)) {       
-           fill[0] = (flag[0] > 0 ) ? fg1 : -fg1 ;
-           /* 
-              The following test fixes a bug : when flag[0]==0 then only the
-              wire frame has to be drawn, and the "shadow" of the surface does
-              not have to appear. polpoth 4/5/2000
-           */
-             
-           if (flag[0]==0) fill[0]=0;
-           /* modification du to E Segre to avoid drawing of hidden facets */
-           if (fg1>0)
-             C2F(dr)("xliness","str",polyx,polyy,fill,&npoly,&polysize,
-                     PI0,PD0,PD0,PD0,PD0,0L,0L); 
-         }
-         else if ( iflag == 1) 
-           {
-             /* color according to z-level */
-             double zl=0;
-             int k;
-             for ( k= 0 ; k < *p ; k++) 
-               zl+= z[(*p)*locindex[i]+k];
-             fill[0]=inint((whiteid-1)*((zl/(*p))-zmin)/(zmax-zmin))+1;
-             if ( flag[0] < 0 ) fill[0]=-fill[0];
-             C2F(dr)("xliness","str",polyx,polyy,fill,&npoly,&polysize ,PI0,PD0,PD0,PD0,PD0,0L,0L);
-           }
-         else if ( iflag == 2) 
-           {
-             /* colors are given by cvect */
-             fill[0]= cvect[locindex[i]];
-             if ( flag[0] < 0 ) fill[0]=-fill[0];
-             C2F(dr)("xliness","str",polyx,polyy,fill,&npoly,&polysize ,PI0,PD0,PD0,PD0,PD0,0L,0L);
-           }
-         else if (iflag ==3) { /* colors are given by cvect of size (*p) times (*q) */
-           int k;
-              
-           if ( (*p) != 3 && (*p) !=4 ) {
-             sciprint("plot3d1 : interpolated shading is only allowed for polygons with 3 or 4 vertices\n");
-             return;
-           } else {
-             for ( k= 0 ; k < *p ; k++) fill[k]= cvect[(*p)*locindex[i]+k];
-             scilab_shade(polyx,polyy,fill,*p,flag[0]);
-             /** draw if requested but just check on the first color **/ 
-             /*                if ( cvect[(*p)*locindex[i]] <= 0 ) 
-                               {
-                               fill[0]=0;
-                               C2F(dr)("xliness","str",polyx,polyy,fill,&npoly,&polysize,PI0,PD0,PD0,PD0,PD0,0L,0L);
-                               }*/
-
-
-
-           }
-         }
-         else C2F(dr)("xliness","str",polyx,polyy,fill,&npoly,&polysize ,PI0,PD0,PD0,PD0,PD0,0L,0L);
-         /* End of modified code by polpoth 4/5/2000 */
-
-       }
-    }
-
-  FREE( polyx ) ;
-  FREE( polyy ) ;
-  FREE( polyz ) ;
-  FREE( locindex ) ;
-
-  if ( flag[2] >=3 )
-    {
-      integer fg;
-      C2F(dr)("xget","foreground",&verbose,&fg,&narg_, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-      /** Le triedre que l'on doit voir **/
-      if (zbox[InsideU[0]] > zbox[InsideD[0]])
-       DrawAxis(xbox,ybox,InsideU,fg);
-      else 
-       DrawAxis(xbox,ybox,InsideD,fg);
-    }
-}
-
-/*-------------------------------------------------------------------
- *  returns in (polyx, polyy) the polygon for one facet of the surface 
- *--------------------------------------------------------------------*/
-
-int DPoints1(integer *polyx, integer *polyy, integer *fill, integer whiteid, double zmin, double zmax, double *x, double *y, double *z, integer i, integer j, integer jj1, integer *p, integer dc, integer fg)
-{
-  polyx[  5*jj1] =PGEOX(x[i]  ,y[j]  ,z[i+(*p)*j]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[  5*jj1] =PGEOY(x[i]  ,y[j]  ,z[i+(*p)*j]);
-  if ( finite(yy1)==0)return(0);
-  polyx[1 +5*jj1]=PGEOX(x[i]  ,y[j+1],z[i+(*p)*(j+1)]);        
-  if ( finite(xx1)==0 )return(0);
-  polyy[1 +5*jj1]=PGEOY(x[i]  ,y[j+1],z[i+(*p)*(j+1)]);
-  if ( finite(yy1)==0)return(0);
-  polyx[2 +5*jj1]=PGEOX(x[i+1],y[j+1],z[(i+1)+(*p)*(j+1)]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[2 +5*jj1]=PGEOY(x[i+1],y[j+1],z[(i+1)+(*p)*(j+1)]);
-  if ( finite(yy1)==0)return(0);
-  polyx[3 +5*jj1]=PGEOX(x[i+1],y[j]  ,z[(i+1)+(*p)*j]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[3 +5*jj1]=PGEOY(x[i+1],y[j]  ,z[(i+1)+(*p)*j]);
-  if ( finite(yy1)==0)return(0);
-  polyx[4 +5*jj1]=PGEOX(x[i]  ,y[j]  ,z[i+(*p)*j]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[4 +5*jj1]=PGEOY(x[i]  ,y[j]  ,z[i+(*p)*j]);
-  if ( finite(yy1)==0)return(0);
-  if (((polyx[1+5*jj1]-polyx[0+5*jj1])*(polyy[2+5*jj1]-polyy[0+5*jj1])-
-       (polyy[1+5*jj1]-polyy[0+5*jj1])*(polyx[2+5*jj1]-polyx[0+5*jj1])) <  0)
-    fill[jj1]= (dc < 0 ) ? -fg : fg ;
-  else
-    {
-      fill[jj1]=inint((whiteid-1)*((1/4.0*( z[i+(*p)*j]+ z[i+1+(*p)*j]+
-                                           z[i+(*p)*(j+1)]+ z[i+1+(*p)*(j+1)])-zmin)
-                                  /(zmax-zmin)))+1;
-      if ( dc < 0 ) fill[jj1]= -fill[jj1];  
-     
-    }
-  return(1);
-  
-}
-
-int DPoints(integer *polyx, integer *polyy, integer *fill, integer whiteid, double zmin, double zmax, double *x, double *y, double *z, integer i, integer j, integer jj1, integer *p, integer dc, integer fg)
-{
-#ifdef lint
-  whiteid,fill[0],zmin,zmax;
-#endif
-  polyx[  5*jj1] =PGEOX(x[i]  ,y[j]  ,z[i+(*p)*j]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[  5*jj1] =PGEOY(x[i]  ,y[j]  ,z[i+(*p)*j]);
-  if ( finite(yy1)==0)return(0);
-  polyx[1 +5*jj1]=PGEOX(x[i]  ,y[j+1],z[i+(*p)*(j+1)]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[1 +5*jj1]=PGEOY(x[i]  ,y[j+1],z[i+(*p)*(j+1)]);
-  if ( finite(yy1)==0)return(0);
-  polyx[2 +5*jj1]=PGEOX(x[i+1],y[j+1],z[(i+1)+(*p)*(j+1)]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[2 +5*jj1]=PGEOY(x[i+1],y[j+1],z[(i+1)+(*p)*(j+1)]);
-  if ( finite(yy1)==0)return(0);
-  polyx[3 +5*jj1]=PGEOX(x[i+1],y[j]  ,z[(i+1)+(*p)*j]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[3 +5*jj1]=PGEOY(x[i+1],y[j]  ,z[(i+1)+(*p)*j]);
-  if ( finite(yy1)==0)return(0);
-  polyx[4 +5*jj1]=PGEOX(x[i]  ,y[j]  ,z[i+(*p)*j]);
-  if ( finite(xx1)==0 )return(0);
-  polyy[4 +5*jj1]=PGEOY(x[i]  ,y[j]  ,z[i+(*p)*j]);
-  if ( finite(yy1)==0)return(0);
-  if (((polyx[1+5*jj1]-polyx[0+5*jj1])*(polyy[2+5*jj1]-polyy[0+5*jj1])-
-       (polyy[1+5*jj1]-polyy[0+5*jj1])*(polyx[2+5*jj1]-polyx[0+5*jj1])) <  0)
-    fill[jj1]=  (dc != 0 ) ? fg : dc ;
-  else
-    fill[jj1]= dc;
-  return(1);
-}
-
-/*-------------------------------------------------------------------
- * param3d function 
- *-------------------------------------------------------------------*/
-
-int C2F(param3d)(double *x, double *y, double *z, integer *n, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr)
-{
-  static integer InsideU[4],InsideD[4];
-  static double xbox[8],ybox[8],zbox[8];
-  integer style[1], npoly,j;
-  static integer init;
-  static integer *xm,*ym;
-  integer verbose=0,xz[10],narg_,fg1;
-
-  C2F(dr)("xget","dashes",&verbose,xz,&narg_,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  style[0]= xz[0];
-  if (flag[1]!=0 && flag[1]!=1 && flag[1]!=3 && flag[1]!=5)
-    {
-      bbox[0]=(double) Mini(x,*n);bbox[1]=(double) Maxi(x,*n);
-      bbox[2]=(double) Mini(y,*n);bbox[3]=(double) Maxi(y,*n);
-      bbox[4]=(double) Mini(z,*n);bbox[5]=(double) Maxi(z,*n);
-    }
-  if ( flag[1] !=0)
-    SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,(long)(flag[1]+1)/2);
-  else 
-    SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,0L);
-  /** Calcule l' Enveloppe Convexe de la boite **/
-  /** ainsi que les triedres caches ou non **/
-  Convex_Box(xbox,ybox,InsideU,InsideD,legend,flag,bbox);
-  C2F(dr)("xget","hidden3d",&verbose,&fg1,&narg_, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  /** Le triedre cache **/
-  if (zbox[InsideU[0]] > zbox[InsideD[0]])
-    {
-      /* cache=InsideD[0];*/
-      if (flag[2] >=2 ) DrawAxis(xbox,ybox,InsideD,fg1);
-    }
-  else 
-    {
-      /* cache=InsideU[0]-4; */
-      if (flag[2] >=2 ) DrawAxis(xbox,ybox,InsideU,fg1);
-    }
-
-  xm = MALLOC( (*n) * sizeof(int) ) ;
-  ym = MALLOC( (*n) * sizeof(int) ) ;
-  if ( ( (xm == NULL) && *n != 0 ) || ((ym == NULL) && *n != 0)) 
-    {
-      sciprint("Param3d : malloc  No more Place\n");
-      return(0);
-    }
-  init = 0 ; 
-  while (1) 
-    {
-      int nel = 0;
-      for ( j =init ; j < (*n) ; j++)   
-       {
-         xm[  nel]=PGEOX(x[j],y[j],z[j]);
-         if ( finite(xx1) ==0 ) 
-           {
-             break;
-           }
-         ym[  nel]=PGEOY(x[j],y[j],z[j]);
-         if ( finite(yy1)==0)
-           {
-             break;
-           }
-         nel++;
-       }
-      if ( nel > 0 ) 
-       C2F(dr)("xpolys","v",xm,ym,style,(npoly=1,&npoly),&nel,
-               PI0,PD0,PD0,PD0,PD0,0L,0L);
-      init = j+1;
-      if ( init >= (*n)) break;
-    }
-
-  FREE( xm ) ;
-  FREE( ym ) ;
-
-  if (flag[2] >=3 ) 
-    {
-      integer fg;
-      C2F(dr)("xget","foreground",&verbose,&fg,&narg_, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-      /** Le triedre que l'on doit voir **/
-      if (zbox[InsideU[0]] > zbox[InsideD[0]])
-       DrawAxis(xbox,ybox,InsideU,fg);
-      else 
-       DrawAxis(xbox,ybox,InsideD,fg);
-    }
-  return(0);
-}
-
-
-/*-------------------------------------------------------------------
- * param3d1 function 
- *-------------------------------------------------------------------*/
-
-int C2F(param3d1)(double *x, double *y, double *z, integer *m, integer *n, integer *iflag, integer *colors, double *teta, double *alpha, char *legend, integer *flag, double *bbox, integer lstr)
-{
-  static integer InsideU[4],InsideD[4];
-  static double xbox[8],ybox[8],zbox[8];
-  integer style[1], npoly,j;
-  static integer init;
-  static integer *xm,*ym;
-  integer verbose=0,xz[10],narg_,fg1,cur;
-
-
-  C2F(dr)("xget","dashes",&verbose,xz,&narg_,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  style[0]= xz[0];
-  if (flag[1]!=0 && flag[1]!=1 && flag[1]!=3 && flag[1]!=5)
-    {
-      int mn=*n*(*m);
-      bbox[0]=(double) Mini(x,mn);bbox[1]=(double) Maxi(x,mn);
-      bbox[2]=(double) Mini(y,mn);bbox[3]=(double) Maxi(y,mn);
-      bbox[4]=(double) Mini(z,mn);bbox[5]=(double) Maxi(z,mn);
-    }
-  if ( flag[1] !=0)
-    SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,(long)(flag[1]+1)/2);
-  else 
-    SetEch3d1(xbox,ybox,zbox,bbox,teta,alpha,0L);
-  /** Calcule l' Enveloppe Convexe de la boite **/
-  /** ainsi que les triedres caches ou non **/
-  Convex_Box(xbox,ybox,InsideU,InsideD,legend,flag,bbox);
-  C2F(dr)("xget","hidden3d",&verbose,&fg1,&narg_, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-  /** Le triedre cache **/
-  if (zbox[InsideU[0]] > zbox[InsideD[0]])
-    {
-      /* cache=InsideD[0];*/
-      if (flag[2] >=2 ) DrawAxis(xbox,ybox,InsideD,fg1);
-    }
-  else 
-    {
-      /* cache=InsideU[0]-4; */
-      if (flag[2] >=2 ) DrawAxis(xbox,ybox,InsideU,fg1);
-    }
-
-  xm = MALLOC( (*m) * sizeof(int) ) ;
-  ym = MALLOC( (*m) * sizeof(int) ) ;
-  if ( ( (xm == NULL) && *m != 0 ) || ((ym == NULL) && *m != 0)) 
-    {
-      sciprint("Param3d : malloc  No more Place\n");
-      return(0);
-    }
-  for ( cur=0 ; cur < *n ; cur++)
-    {
-      init = 0 ; 
-      if ( *iflag != 0 ) style[0]=  colors[cur];
-      while (1) 
-       {
-         int nel = 0,j1_;
-         j1_= (*m)*cur;
-         for ( j =init ; j < (*m) ; j++)        
-           {
-             xm[  nel]=PGEOX(x[j+j1_],y[j+j1_],z[j+j1_]);
-             if ( finite(xx1) ==0 ) 
-               {
-                 break;
-               }
-             ym[  nel]=PGEOY(x[j+j1_],y[j+j1_],z[j+j1_]);
-             if ( finite(yy1)==0)
-               {
-                 break;
-               }
-             nel++;
-           }
-         if ( nel > 0 ) 
-           C2F(dr)("xpolys","v",xm,ym,style,(npoly=1,&npoly),&nel,
-                   PI0,PD0,PD0,PD0,PD0,0L,0L);
-         init = j+1;
-         if ( init >= (*m)) break;
-       }
-    }
-
-  FREE( xm ) ;
-  FREE( ym ) ;
-
-  if (flag[2] >=3 ) 
-    {
-      integer fg;
-      C2F(dr)("xget","foreground",&verbose,&fg,&narg_, PI0, PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
-      /** Le triedre que l'on doit voir **/
-      if (zbox[InsideU[0]] > zbox[InsideD[0]])
-       DrawAxis(xbox,ybox,InsideU,fg);
-      else 
-       DrawAxis(xbox,ybox,InsideD,fg);
-    }
-  return(0);
-}
-
 
 /*-------------------------------------------------------------------
  * box3d 
@@ -811,79 +120,6 @@ int C2F(box3d)(double *xbox, double *ybox, double *zbox)
 
 
 /*-------------------------------------------------------------------
- * 3d geometric transformation 
- *-------------------------------------------------------------------*/
-
-int C2F(geom3d)(double *x, double *y, double *z, integer *n)
-{
-  integer j;
-
-  sciPointObj * psubwin = sciGetSelectedSubWin(sciGetCurrentFigure());
-  sciSubWindow * ppsubwin = pSUBWIN_FEATURE(psubwin);
-
-  if(ppsubwin->logflags[0] =='l')
-  {
-    for ( j =0 ; j < (*n) ; j++) {
-      if(x[j] <= 0.){
-        sciprint("geom3d error : Operation can not be performed because X axis is in logscale mode and the specified x vector has a negative value\n");
-        return -1;
-      }
-      x[j] = log10(x[j]);
-    }
-  }
-
-  if(ppsubwin->logflags[1] =='l')
-  {
-    for ( j =0 ; j < (*n) ; j++) {
-      if(y[j] <= 0.){
-        sciprint("geom3d error : Operation can not be performed because Y axis is in logscale mode and the specified y vector has a negative value\n");
-        return -1;
-      }
-      y[j] = log10(y[j]);
-    }
-  }
-
-  if(ppsubwin->logflags[2] =='l')
-  {
-    for ( j =0 ; j < (*n) ; j++) {
-      if(z[j] <= 0.){
-        sciprint("geom3d error : Operation can not be performed because Z axis is in logscale mode and the specified z vector has a negative value\n");
-        return -1;
-      }
-      z[j] = log10(z[j]);
-    }
-  }
-
-  if( ppsubwin->axes.reverse[0] )
-  {
-    for ( j =0 ; j < (*n) ; j++) x[j] = InvAxis(ppsubwin->FRect[0],ppsubwin->FRect[2],x[j]);
-  }
-
-  if( ppsubwin->axes.reverse[1] )
-  {
-    for ( j =0 ; j < (*n) ; j++) y[j] = InvAxis(ppsubwin->FRect[1],ppsubwin->FRect[3],y[j]);
-  }
-
-  if( ppsubwin->axes.reverse[2] )
-  {
-    for ( j =0 ; j < (*n) ; j++) z[j] = InvAxis(ppsubwin->FRect[4],ppsubwin->FRect[5],z[j]);
-  }
-
-  for ( j =0 ; j < (*n) ; j++)
-  {
-    double x1,y1_;
-    x1=TRX(x[j],y[j],z[j]);
-    y1_=TRY(x[j],y[j],z[j]);
-    z[j]=TRZ(x[j],y[j],z[j]);
-    x[j]=x1;
-    y[j]=y1_;
-  }
-  return(0);
-}
-
-
-
-/*-------------------------------------------------------------------
  * functions for 3D scales 
  *-------------------------------------------------------------------*/
 
@@ -1308,15 +544,6 @@ void AxesStrings(integer axflag, integer *ixbox, integer *iybox, integer *xind,
 }
 
 
-void MaxiInd(double *vect, integer n, integer *ind, double maxi)
-{
-  integer i ;
-  if ( *ind+1 < n)
-    for (i = *ind+1 ; i < n ; i++)
-      if ( vect[i] >= maxi)
-       { *ind=i; break;}
-}
-
 /* renvoit les indices des points voisins de ind1 sur la face haute 
    de la boite  */
 
@@ -1621,18 +848,6 @@ static void dbox(void)
 #endif
 }
 
-/**************** New functions for interpolated shading **********************
- *
- *  Added by polpoth 4/5/2000
- *
- *******************************************************************************/
-
-int C2F(fac3d3)(double *x, double *y, double *z, integer *cvect, integer *p, integer *q, double *teta, double *alpha_, char *legend, integer *flag, double *bbox, integer lstr)
-{
-  C2F(fac3dg)("fac3d3",3,x,y,z,cvect,p,q,teta,alpha_,legend,flag,bbox);
-  return(0);
-}
-
 /*---------------------------------------------------------------------------------
  *This function sorts the vertices such that the color value is in decreasing order
  *---------------------------------------------------------------------------------*/