5cd594b98ad878bd03e08a76ba75950dd5ac3fce
[scilab.git] / scilab / modules / graphics / includes / ObjectStructure.h
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2001 - 2002 - INRIA - Mathieu Philippe
4  * Copyright (C) 2002 - 2004 - INRIA - Djalel Abdemouche
5  * Copyright (C) 2004 - 2006 - INRIA - Fabrice Leray
6  * Copyright (C) 2005 - INRIA - Jean-Baptiste Silvy
7  * Copyright (C) 2009 - DIGITEO - Pierre Lando
8  * 
9  * This file must be used under the terms of the CeCILL.
10  * This source file is licensed as described in the file COPYING, which
11  * you should have received as part of this distribution.  The terms
12  * are also available at    
13  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
14  *
15  */
16
17 /*------------------------------------------------------------------------
18  *    Graphic library 
19  *    newGraph Library header
20  *    This file contains all structures definitions used for New Graphics mode.
21  --------------------------------------------------------------------------*/
22 #ifndef __SCI_OBJECT_STRUCTURE__
23 #define __SCI_OBJECT_STRUCTURE__
24
25 #include "dynlib_graphics.h"
26 #include "StringMatrix.h"
27 #include "DoublyLinkedList.h"
28
29 #define NUMCOLORS_SCI 32
30 #define SCI_FIGURE_NAME_LENGTH 256
31 /* Renvoi le pointeur sur la structure */
32
33 #define pFIGURE_FEATURE(pointobj)      ((sciFigure        *)pointobj->pfeatures)/** */
34 #define pSUBWIN_FEATURE(pointobj)      ((sciSubWindow     *)pointobj->pfeatures)/** */
35 #define pTEXT_FEATURE(pointobj)        ((sciText          *)pointobj->pfeatures)/** */
36 #define pLEGEND_FEATURE(pointobj)      ((sciLegend        *)pointobj->pfeatures)/** */
37 #define pPOLYLINE_FEATURE(pointobj)    ((sciPolyline      *)pointobj->pfeatures)/** */
38 #define pARC_FEATURE(pointobj)         ((sciArc           *)pointobj->pfeatures)/** */
39 #define pRECTANGLE_FEATURE(pointobj)   ((sciRectangle     *)pointobj->pfeatures)/** */
40 #define pSURFACE_FEATURE(pointobj)     ((sciSurface       *)pointobj->pfeatures)/** */
41 #define pAXES_FEATURE(pointobj)        ((sciAxes          *)pointobj->pfeatures)/** */
42 #define pGRAYPLOT_FEATURE(pointobj)    ((sciGrayplot      *)pointobj->pfeatures)/** */
43 #define pFEC_FEATURE(pointobj)         ((sciFec           *)pointobj->pfeatures)/** */
44 #define pAGREG_FEATURE(pointobj)       ((sciAgreg         *)pointobj->pfeatures)/** */
45 #define pSEGS_FEATURE(pointobj)        ((sciSegs          *)pointobj->pfeatures)/** */
46 #define pLABEL_FEATURE(pointobj)       ((sciLabel         *)pointobj->pfeatures)/** */
47 #define pUIMENU_FEATURE(pointobj)      ((sciUimenu        *)pointobj->pfeatures)/** */
48 #define pUICONTEXTMENU_FEATURE(pointobj)      ((sciUicontextmenu *)pointobj->pfeatures)/** */
49 #define pUICONTROL_FEATURE(pointobj)   ((sciUicontrol     *)pointobj->pfeatures)/** */
50 #define pWAITBAR_FEATURE(pointobj)     ((sciWaitbar        *)pointobj->pfeatures)/** */
51 #define pPROGRESSIONBAR_FEATURE(pointobj)     ((sciProgressionbar        *)pointobj->pfeatures)/** */
52
53 typedef struct tagPOINT2D
54 {
55   double x;
56   double y;
57 }
58 POINT2D;
59
60
61 /**@name sciEntityType
62  * Used to determine the type of the entity
63  * @memo SCI_FIGURE,
64  * @memo SCI_SUBWIN,
65  * @memo SCI_TEXT,
66  * @memo SCI_LEGEND,
67  * @memo SCI_ARC,
68  * @memo SCI_POLYLINE,
69  * @memo SCI_RECTANGLE,
70  * @memo SCI_SURFACE,
71  * @memo SCI_AXIS, 
72  * @memo SCI_AXES, 
73  * @memo SCI_SEGS 
74  * @memo SCI_GRAYPLOT, 
75  * @memo SCI_FEC,
76  * @memo SCI_UIMENU,
77  * @memo SCI_UICONTEXTMENU,
78  */
79 typedef enum
80   {/**Entity type FIGURE*/
81     SCI_FIGURE,         
82     /**Entity type SUBWINDOW*/
83     SCI_SUBWIN,         
84     /**Entity type TEXT*/
85     SCI_TEXT,
86     /**Entity type LEGEND */
87     SCI_LEGEND,         
88     /**Entity type ARC */
89     SCI_ARC,                    
90     /**Entity type POLYLINE*/
91     SCI_POLYLINE,           
92     /**Entity type RECTANGLE*/
93     SCI_RECTANGLE,    
94     /**Entity type SURFACE*/
95     SCI_SURFACE,        
96     /**Entity type AXES*/
97     SCI_AXES,     
98     /**Entity type SEGS*/
99     SCI_SEGS,   
100     /**Entity type GRAYPLOT*/
101     SCI_GRAYPLOT, 
102     /**Entity type FEC*/
103     SCI_FEC,                                            
104     /**Entity type CONTEXT MENU*/
105     SCI_UICONTEXTMENU,              
106     /**Entity type Compound */
107     SCI_AGREG,                  
108     /**Entity type LABEL created by F.Leray 26.05.04 */
109     SCI_LABEL,
110     /**Entity type UIMENU created by A.C 28.09.05 **/
111     SCI_UIMENU,
112     /**Entity type UICONTROL **/
113     SCI_UICONTROL,
114     /** Entity type WAITBAR */
115     SCI_WAITBAR,
116     /** Entity type PROGRESSIONBAR */
117     SCI_PROGRESSIONBAR
118   }
119 /**Struct of Entity type*/
120 sciEntityType;  
121
122 struct _sciRelationShip;
123
124 /**@name sciPointObj
125  * Used to determine the feature and the type of the entity
126  */
127 typedef struct
128 { /** Type of the object (such as SCI_FIGURE, SCI_UICONTROL,...) */
129   sciEntityType entitytype;
130   /**  points to the characteristic of the structure (figure, axes...) */
131   void * pfeatures;
132   /** List of all observers watching this object */
133   DoublyLinkedList * pObservers ;
134   /** Drawing object used to actually draw the graphic handle */
135   void * pDrawer ;
136         /** reference the object in the hierachy */
137         struct _sciRelationShip * relationShip;
138 }
139 sciPointObj;
140
141 /**@name Sons
142  * Used to determine the hierarchy
143  sciPointObj *pointobj;sciRelationShip
144  sciSons     *pnext;
145 */
146 typedef struct tagSons
147 {
148   /** */
149   struct tagSons *pprev;          
150   /**  is the pointer of next the son's structure      */
151   sciPointObj *pointobj;        
152   /** */
153   struct tagSons *pnext;
154 }
155 /** */
156 sciSons;  
157
158 /**@name RelationShip
159  * Used to determine the hierarchy
160  */
161 typedef struct _sciRelationShip
162 {
163   /** is the scilab handle of THIS */
164   long handleIndex;       
165   /** points to the parent structures */
166   sciPointObj * pparent;               
167   /** points to the sons structures */
168   sciSons * psons;             
169   /** the last sciSons of the list (the first created!) */
170   sciSons * plastsons;
171   /** the set of selected sons. List of lists for each type. Not to be used directly.*/
172   DoublyLinkedList * pSelectedSon ;
173 }/** */
174 sciRelationShip;
175
176
177 /**@name GraphicContext
178  * Used to know what are the contexte value attached with the Graphic area  
179  */
180 typedef struct
181 {
182   /** currently not used in this version */
183   /** pointe sur un ID de la table des couleur Scilab */
184   int backgroundcolor;      
185   /** pointe sur un ID de la table des couleur Scilab */
186   int foregroundcolor;
187   /** */
188   int fillcolor;
189   /** Wheter the object is filled or not */
190   BOOL isfilled;
191   /** thickness of lines */
192   double linewidth;
193   /** */
194   BOOL isline;
195   /** */
196   int linestyle;
197   /** */
198   BOOL ismark;
199   /** */
200   int markstyle;
201   /** */
202   int marksize;
203   /** */
204   int marksizeunit;
205   /** */
206   int markbackground;
207   /** */
208   int markforeground;
209 }/** */
210 sciGraphicContext;  
211
212
213 /**@name sciFont
214  * Used to know what are the contexte value attached with the Graphic area  
215  */
216 typedef struct
217 {
218   /** currently not used in this version */
219   /* il faudrait prendre la font windows */
220   /** pointe sur un ID de la table des couleur Scilab */
221   int backgroundcolor;          
222   /** pointe sur un ID de la table des couleur Scilab */
223   int foregroundcolor;
224   /** type of the font */
225   int fonttype; /* scilab font index 0 to 9 */
226   /** specify if the font size must be stucks to Scilab font sizes 0:6 or might be any double */
227   BOOL useFractionalMetrics;
228   /** Gets the width of the character in tenth of point */
229   double fontSize;              
230   /** this is coded in radian*/
231   double textorientation;               
232 }/** */
233 sciFont;  
234
235
236 /**@name scigMode
237  * Used to determine all the mode that can be used. Only some entity can sets this itself
238  */
239 typedef struct
240
241   /** Are new Plot added to the old plot on the graphics window        */
242   BOOL addplot;        
243   /** The min max ranges of the the graphics window is given by users  */
244   BOOL autoscaling;    
245   /** Is zooming allowed                                               */
246   BOOL zooming;   
247   /** drawing xor mode                                                         */
248   int xormode;
249                        
250   
251 }/** */
252 scigMode;
253
254
255 /**
256  * @name Range
257  * Structure used to specify Range
258  */
259 typedef struct
260 {/** */
261   double xmin;
262   /** */
263   double xmax;
264   /** */
265   double ymin;
266   /** */
267   double ymax;
268   /** */
269   double zmin;
270   /** */
271   double zmax;
272 }/** */
273 sciRange;  
274
275
276 /**
277  * FigureData only used by figure model
278  */
279 typedef struct
280 {
281   int figureWidth ;
282   int figureHeight ;
283   int windowWidth ;
284   int windowHeight ;
285   int windowPosition[2];
286   int viewport[4]; /* 4 but for now only two are used */
287   double * colorMap ;
288   int numColors ;
289   BOOL autoResizeMode;
290         char * infoMessage; /**< String displayed in the info bar of the graphic window */
291         int antialiasingQuality;
292 }
293 FigureModelData ;
294
295 /**
296  * Structure used to specify Figure (different to XGC) 
297  */
298 typedef struct
299 {       
300   scigMode gmode;
301   sciGraphicContext graphiccontext; /* the only property used here is background */
302   sciPointObj * originalsubwin0011;
303   /** specifies the title for this window  */
304   char * name;
305
306   /** specifies the number of this window            */
307   int number;
308
309   int numcolors;
310      
311   /** specifies if this window is selected             */
312   BOOL isselected; 
313   int rotstyle;
314   /** specifies if this object is visble             */
315   BOOL visible;
316   BOOL auto_redraw;
317   /** specifies the number of the selected son         */
318   int numsubwinselected;
319   /** specifies the current pixmap status         */
320   int pixmapMode ;
321   
322   BOOL allredraw;
323   
324   sciFont fontcontext; /* F.Leray 08.04.04 */
325
326   char * eventHandler         ; /**< Name of the EventHandler function */
327   BOOL   isEventHandlerEnable ; /**< flag enabling or disabling eventhandler */
328   
329   FigureModelData * pModelData ; /**< To be used by figure model */
330
331   int * user_data; /* adding 27.06.05 */
332   int size_of_user_data;
333   
334   char * tag;
335 }/** */
336 sciFigure;  
337
338 typedef enum { ALIGN_NONE = 0, ALIGN_LEFT = 1, ALIGN_CENTER = 2, ALIGN_RIGHT = 3 } sciTextAlignment ;
339
340 /**@name Text
341  * Structure used to specify Text
342  */
343 typedef struct
344 {
345   /** */
346   sciFont fontcontext;
347   sciGraphicContext graphiccontext; /* the only properties used by Text are foreground and background */
348   
349   /** the displayed text */
350   StringMatrix * pStrings ;
351
352   /** position inside the axes (not pixel) */
353   double x ;
354   /** position inside the axes (not pixel) */
355   double y ;
356   double z ;
357
358   BOOL is3d ; /**< If FALSE the text will be displayed using the 2d scale even if its parent
359                *   subwindow is in 3d mode. */
360
361   BOOL autoSize ; /* to know wether the size of the displayed array is specified by user or */
362                    /* automatically computed. */
363
364   double userSize[2] ; /**< Width and height of the displayed string array defined by user */
365   
366   sciTextAlignment stringsAlign ; /**< Alignment of the strings inside the array */
367   
368   BOOL centeredPos ; /**< to know wether the (x,y) position is the point in the middle of the
369                         string or the lower-left point */
370   BOOL isboxed  ;
371   /** */
372   /** specifies the text scilab code for the callback associated with this entity */
373   char *callback; 
374   /** the length of the callback code */
375   int callbacklen; 
376   int callbackevent;
377
378   double corners[4][3]; /**< position of the text bounding box corners */
379
380   /** specifies if this object is visble             */
381   BOOL visible;
382   int isclip;
383   double clip_region[4];
384   int clip_region_set;
385   
386   int * user_data; /* adding 27.06.05 */
387   int size_of_user_data;
388
389 }
390 sciText;  
391
392
393
394
395 /**
396  * Enumeration used to specify the title place relative to parent subwindow
397  */
398 typedef enum
399   {
400     /** */
401     SCI_LEGEND_IN_UPPER_LEFT = 1,
402     /** */
403     SCI_LEGEND_IN_UPPER_RIGHT = 2,
404     /** */
405     SCI_LEGEND_IN_LOWER_LEFT = 3,
406     /** */
407     SCI_LEGEND_IN_LOWER_RIGHT = 4,
408     /** */
409     SCI_LEGEND_BY_COORDINATES = 5,
410                 /** */
411                 SCI_LEGEND_POSITION_UNSPECIFIED = 0,
412     /** */
413     SCI_LEGEND_OUT_UPPER_LEFT = -1,
414     /** */
415     SCI_LEGEND_OUT_UPPER_RIGHT = -2,
416     /** */
417     SCI_LEGEND_OUT_LOWER_LEFT = -3,
418     /** */
419     SCI_LEGEND_OUT_LOWER_RIGHT = -4,
420     /** */
421     SCI_LEGEND_UPPER_CAPTION = -5,
422    /** */
423     SCI_LEGEND_LOWER_CAPTION = -6
424   }  /** */
425 sciLegendPlace;
426
427
428
429 /**@name Legend
430  * Structure used to specify Legend 
431  */
432 typedef struct
433 {
434   sciGraphicContext graphiccontext; /* used to draw the line and marks of the curve F.Leray 21.01.05 */
435   /** */
436   int nblegends;
437   /** */
438   int *pstyle;
439   /** */
440   sciText text;
441   /** */
442   POINT2D pos;
443   /** specifies the frame's width */
444   int width;         
445   /** specifies the frame's height */
446   int height;        
447   /** */
448   BOOL isselected;
449   /** specifies if the legend is surrounded */
450   BOOL issurround;           
451   /* void    *associetedentity;  get the associated entity by asking parents.relation.sons */
452   /* the subwindow dimension is get by asking relation     */
453   sciLegendPlace place;
454   /** pointer on the labelled objects */
455   long long *tabofhandles;
456   /** specifies if this object is visble             */
457   BOOL visible; 
458   int isclip;
459   double clip_region[4];
460   int clip_region_set;
461   int * user_data; /* adding 27.06.05 */
462   int size_of_user_data;
463 }/** */
464 sciLegend;  
465
466
467 /**@name Titre
468  * Structure used to specify Labels like Title or classic labels
469  */
470 typedef struct
471 {
472   /* sciRelationShip relationship; */
473   /** contains the data to display the label */
474  /*  sciText text; */
475   sciPointObj * text ;
476   /** absolut position in subindow*/
477
478   int ptype ; /**< to distinguish between title, x_label,.... */
479
480   /** */
481   BOOL isselected;
482   BOOL auto_position; /* automatic or manual position selection for label */
483   BOOL auto_rotation; /* automatic or manual rotation selection for label (depends on the current view mode 2d or 3d mainly for y and z labels) */
484                       /* not implemented for titles */
485
486 }
487 sciLabel ;
488
489 typedef struct
490 {
491
492   /* Color property */
493   double *foregroundcolor;
494
495   /* Callback property */
496   char *callback;
497   int callbackType;
498
499   /* Specifies if this object is visible in its parent children */
500   BOOL handle_visible;
501
502   int MenuPosition;
503
504   /* Userdata property */
505   int * user_data;
506   int size_of_user_data;
507
508   /* Index in the java UIElementMapper */
509   int hashMapIndex;
510
511   /* Tag property */
512   char * tag;
513
514 }/** */
515 sciUimenu;
516
517 typedef struct
518 {
519   int hashMapIndex;
520 }/** */
521 sciUicontextmenu;
522
523 typedef struct
524 {
525   int hashMapIndex;
526 }/** */
527 sciWaitbar;
528
529 typedef struct
530 {
531   int hashMapIndex;
532 }/** */
533 sciProgressionbar;
534
535 typedef struct
536 {
537
538   /* Specifies if this object is visible in its parent children */
539   BOOL handle_visible;
540
541   /* Colors property */
542   double *backgroundcolor;
543   double *foregroundcolor;
544
545   /* Callback property */
546   char *callback;
547   int callbackType;
548
549   /* Userdata property */
550   int * user_data;
551   int size_of_user_data;
552
553   /* Index in the java UIElementMapper */
554   int hashMapIndex;
555
556   /* ListboxTop property */
557   int * listboxTop;
558
559   /* Value property */
560   int * value;
561   int valueSize;
562
563   /* Style property: Must be a value from UicontrolStyle enum */
564   int style;
565
566   /* FontAngle property: Must be a value from UicontrolFontProperties enum */
567   int fontAngle;
568
569   /* FontWeight property: Must be a value from UicontrolFontProperties enum */
570   int fontWeight;
571
572   /* FontUnits property: Must be a value from UicontrolUnits enum */
573   int fontUnits;
574
575   /* Units property: Must be a value from UicontrolUnits enum */
576   int units;
577
578   /* Relief property: Must be a value from UicontrolRelief enum */
579   int relief;
580
581   /* Horizontalalignment property */
582   int horizontalAlignment;
583
584   /* Verticalalignment property */
585   int verticalAlignment;
586
587   /* Min/Max properties */
588   int min;
589   int max;
590
591   /* SliderStep property */
592   double * sliderStep;
593
594   /* Tag property */
595   char * tag;
596 }/** */
597 sciUicontrol;
598
599 /* uicontrol font properties */
600 typedef enum {LIGHT_FONT, NORMAL_FONT, DEMI_FONT, BOLD_FONT, ITALIC_FONT, OBLIQUE_FONT} UicontrolFontProperties ;
601 /* uicontrol style */
602 typedef enum {
603   SCI_PUSHBUTTON,
604   SCI_RADIOBUTTON,
605   SCI_CHECKBOX,
606   SCI_EDIT,
607   SCI_UITEXT,
608   SCI_SLIDER,
609   SCI_UIFRAME,
610   SCI_LISTBOX,
611   SCI_POPUPMENU
612 } UicontrolStyle ;
613 /* uicontrol units */
614 typedef enum {POINTS_UNITS, NORMALIZED_UNITS, INCHES_UNITS, CENTIMETERS_UNITS, PIXELS_UNITS} UicontrolUnits ;
615 /* uicontrol relief */
616 typedef enum {FLAT_RELIEF, GROOVE_RELIEF, RAISED_RELIEF, RIDGE_RELIEF, SOLID_RELIEF, SUNKEN_RELIEF} UicontrolRelief;
617 /* uicontrol alignment */
618 typedef enum {LEFT_ALIGNMENT, CENTER_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT, MIDDLE_ALIGNMENT, BOTTOM_ALIGNMENT} UicontrolAlignment;
619
620 /* the part of the drawn box for 3d axis */
621 typedef enum { BT_OFF = FALSE, BT_ON = TRUE, BT_HIDDEN_AXES, BT_BACK_HALF } EAxesBoxType ;
622
623 typedef struct 
624 {  
625   /* tics data from algo */
626   double  xgrads[20], ygrads[20], zgrads[20];                   /* Here they are  */
627   int nxgrads, nygrads, nzgrads;                         /* with their size <=> nber of tics */
628
629   /* tics data from user (=> u_...)*/
630   double *u_xgrads, *u_ygrads, *u_zgrads;                       /* Here they are  */
631   int u_nxgrads, u_nygrads, u_nzgrads;                   /* with their size <=> nber of tics */
632   
633   int  ticscolor;
634   /*  int  fontsize;
635       int  textcolor;*/
636   sciFont fontcontext;
637   
638   int  subint[3]; /* Dj.A 17/12/03 */
639   EAxesBoxType  rect ; /**< to know the part of the box we have to draw */
640   BOOL filled; /**< Specify wether the axis background should be drawn or not.
641                     graphic_context is not used because otherwise all the children would inherit the value.*/
642
643   char xdir;   /**<  xdir  = 'u' | 'd'  : gives the xy-axes positions */ 
644   char ydir;   /**<  ydir  = 'r' | 'l' : gives the xy-axes positions */ 
645  
646
647   /* flags for switching from auto to manual ticks */
648   BOOL auto_ticks[3]; /* if on, it means that the ticks are taken from computation (see theticks algo. by Francois D.) */
649   
650   char **u_xlabels,  **u_ylabels,  **u_zlabels; /* label string corresponding to each specified u_xyzgrads */
651     
652   int hiddenAxisColor ; /* the color and style of the hidden axis */
653
654   double  limits[7]; /* = 1 set tight limits = 0 set axes auto shape */
655   int flag[3]; /* 3d options */
656   
657   /* F.Leray 07.10.04 REMOVE AAINT*/
658   int nbsubtics[3]; /* Don't touch to subint because also deals with drawaxis: AXES structure has multiple uses... */ /* F.Leray 07.10.04 */
659
660   BOOL reverse[3]; /* if TRUE, it means that the corresponding axe is reversed */
661   BOOL axes_visible[3]; /* if TRUE, it means that the corresponding axes is drawn */
662   
663 }
664 AXES; 
665
666 /**@name SubWindow
667  * Structure used to specify SubWindow wich is a subplot
668  */
669 typedef struct
670 {
671   AXES axes;
672   /** */
673   scigMode gmode;
674   /** */
675   sciGraphicContext graphiccontext;
676   /** specifies if this subwindow is selected                */
677       
678   double SRect[6]; /* [xmin xmax ymin ymax zmin zmax] : Strict rect. coming from update_specification_bounds function or from a set(a,"data_bounds",[...]) */
679   double FRect[6]; /* real data_bounds */
680   double WRect[4]; /* size of the subplot */
681   double ARect[4]; /* margins, give the size of the axe*/
682   int zoomy_kp;
683   /* ZRect_kp is now useless : when unzooming we deal with SRect values */
684   double ZRect[6]; /* reversed for zoom only to avoid using FRect as zoom box AND computed box */ /* F.Leray 09.12.04 */
685
686   char logflags[3]; /* Z has a logflag now F.Leray 03.11.04 */
687   int grid[3]; /* Specify color of grid for each axis. If -1, no grid is drawn */
688         BOOL gridFront; /* If TRUE grid is drawn in front, if FALSE it is drawn behind other objects */
689
690   /*   BOOL isaxes; */
691
692   BOOL is3d;
693   BOOL tight_limits;
694   double theta_kp;
695   double alpha_kp;
696   /* viewing angles */
697   double theta;
698   double alpha;   
699   /** specifies the text scilab code for the callback associated with this entity */
700   char *callback; 
701   /** the length of the callback code */
702   int callbacklen;  
703   int callbackevent; 
704   /** specifies if this object is visble             */
705   BOOL visible;
706
707   BOOL useNurbsForArcs;
708
709   int isclip;
710   double clip_region[4];
711   int clip_region_set;
712   /**DJ.Abdemouche 2003**/
713   int project[3];
714   BOOL isoview; 
715   int hiddencolor;
716   BOOL cube_scaling; /* Matlab like view in 3D when one or two range is/are preferential */
717   BOOL FirstPlot; /* An internal state used to indicated that high level functions must not use SRect*/
718
719   /* F.Leray 25.04.05 Labels in sciSubWin*/
720   sciPointObj * mon_title;
721   sciPointObj * mon_x_label;
722   sciPointObj * mon_y_label;
723   sciPointObj * mon_z_label;
724
725   /*  An internal state used as subtics flag (auto == FALSE, TRUE == manual) named flagNax */
726   BOOL flagNax;
727   int * user_data; /* adding 27.06.05 */
728   int size_of_user_data;
729
730
731 }/** */
732 sciSubWindow;  
733
734
735 /**@name Arc
736  * Structure used to specify 
737  * @author Matthieu PHILIPPE /MAJ D.ABDEMOUCHE
738  * @version 0.1
739  * @args 
740  * @return 
741  * @see 
742  */
743 typedef struct
744 {
745   /** */
746   sciGraphicContext graphiccontext;
747   /** */
748   double x;
749   /** */
750   double y;
751   /** */
752   double width;
753   /** */
754   double height;
755   /** begin at alpha1 */
756   double alphabegin;            
757   /** end at alpha2   */
758   double alphaend;
759   /** */
760   BOOL isselected;
761   /** specifies the text scilab code for the callback associated with this entity */
762   char *callback; 
763   /** the length of the callback code */
764   int callbacklen;   
765   int callbackevent;
766   /** specifies if this object is visble             */
767   BOOL visible;
768   int isclip;
769   double clip_region[4];
770   int clip_region_set;
771   double z; /**DJ.Abdemouche 2003**/
772
773   BOOL useNurbs; /* Specify whether the arc should be drawn using nurbs or a set of lines */
774
775   int * user_data; /* adding 27.06.05 */
776   int size_of_user_data;
777   /* the isline property is inside the associated graphiccontext */
778 }  /** */
779 sciArc;
780
781
782 /**@name Polyline
783  * Structure used to specify 
784  * @author Matthieu PHILIPPE /MAJ D.ABDEMOUCHE
785  * @version 0.1
786  * @args 
787  * @return 
788  * @see 
789  */
790 typedef struct
791 {
792   sciGraphicContext graphiccontext;
793   double *pvx;                  /* vecteur des points x doublon avec pvector je les garde pour compatiblite*/
794   double *pvy;                  /* vecteur des points y doublon avec pvector*/
795   double *pvz; /**DJ.Abdemouche 2003**/
796   int n1;                       /** number of points, for interp vector shoud be 3 or 4 */
797   int closed;                   /** is it a closed polyline */
798   int plot;                     /** defines the polyline_style (interpolated, staircase, bar_plot,...) : is it simple poly or a plot (Plot2d /Plot2d1/.../Plot2d4) */
799   BOOL isselected;
800   char *callback;               /** specifies the text scilab code for the callback associated with this entity */
801   int callbacklen;              /** the length of the callback code */  
802   int callbackevent;
803   /** specifies if this object is visble             */
804   BOOL visible;
805   int isclip;
806   double clip_region[4];
807   int clip_region_set;
808   int * user_data; /* adding 27.06.05 */
809   int size_of_user_data;
810   BOOL isinterpshaded;
811   int *scvector; /* interpolation vector */
812   int bar_layout;
813
814   double * x_shift;
815   double * y_shift;
816   double * z_shift;
817   
818   double bar_width;
819   
820   double arsize_factor; /* to be able to enlarge arrow size without changing the line thickness */
821 }
822 sciPolyline;  /** */
823
824
825 /**@name Rectangle
826  * Structure used to specify 
827  */
828 typedef struct
829 {
830   sciGraphicContext graphiccontext;
831   double x;                        /** original */
832   double y;                        /** original */
833   double width;
834   double height;
835   BOOL isselected;
836   char *callback; /** specifies the text scilab code for the callback associated with this entity */
837   int callbacklen; /** the length of the callback code */  
838   int callbackevent;
839   /** specifies if this object is visble             */
840   BOOL visible;
841   int isclip;
842   double clip_region[4];
843   int clip_region_set;
844   double z;  /** rectangle */
845
846   int * user_data; /* adding 27.06.05 */
847   int size_of_user_data;
848 }
849 sciRectangle;  /** */
850
851
852 typedef enum
853   {
854     SCI_FAC3D = 0,
855     SCI_PLOT3D = 1,
856     SCI_CONTOUR,
857     SCI_PARAM3D,
858     SCI_PARAM3D1
859   }
860 sciTypeOf3D;
861
862
863 /**@name Surface
864  * Structure used to specify 
865  */
866 typedef struct
867 {
868   sciGraphicContext graphiccontext;
869   double * pvecx; /* x data */
870   double * pvecy; /* y data */
871   double * pvecz; /* z data */
872   double *inputCMoV; /* Adding here in order to always have the input data*/
873   /* We will determinate if it is a vector or matrix data with m3n and n3n values*/
874   /* temporary variable, useless for drawing */
875   /* name means input color or vector */
876   double *zcol; /* temporary variable, useless for drawing */
877   double *color;  /* Final matrix used only for drawing :  */
878                   /*  color == zcol if 'direct' mode used (direct indices on colormap)  */
879                   /* else 'scaled' mode used => color == linear interp. of zcol on the colormap */
880                   /* if flag_color = 0 or 1, color is null */
881                   /* if flag_color = 2, color is a vector */
882                   /* if flag_color = 3, color is a matrix */
883                   /* if flag_color = 4, color is a vector */
884
885   int cdatamapping; /* like in Matlab, it determines how the color is computed ('scaled' or 'direct' mode) */
886                     /* 0: scaled */
887                     /* 1: direct (default) */
888   int izcol; /* 0 : no color; 1 : color is a vector, 2 : color is a matrix */
889   int dimzx; /* == m3 */
890   int dimzy; /* == n3 */
891
892   /*F.Leray 12.03.04 Adding here to know the length of arrays pvecx, pvecy and pvecz*/
893
894   int nc; /* number of colors = m3n * n3n */
895   int nx; /* number of x data */
896   int ny; /* number of y data */
897   int nz; /* number of z data */
898   int isfac; /* redondant with typof3d */
899   int m1,n1; /* size of pvecx */
900   int m2,n2; /* size of pvecy */
901   int m3,n3; /* size of pvecz */
902   int m3n,n3n; /* size of color */
903
904   int flag[3]; /* only the first value is used as color_mode */
905   double ebox[6]; /* apparently unused */
906   int flagcolor; /* this flag indicates the type of the color of how the facet have to be colored 
907                     0: uniformed color
908                     1: facet's color are computed with z*/ /* in case of a simple plot...!!! F.Leray 19.03.04 */
909   sciTypeOf3D typeof3d; /* Fac3d or Plot3d */
910   int hiddencolor;
911   BOOL isselected;
912   char *callback; /** specifies the text scilab code for the callback associated with this entity */
913   int callbacklen; /** the length of the callback code */  
914   int callbackevent;
915   /** specifies if this object is visble             */
916   BOOL visible;
917
918   int flag_x; /* 1 if the vector is increasing, -1 if decreasing. */
919               /* The vector should be either increasing or decreasing. */
920   int flag_y;
921
922   int isclip; /**< Clipping state of the object */
923   double clip_region[4]; /**< Clipping region */
924   int clip_region_set; /**< To know if the clippign region is set */
925   
926   int * user_data; /* adding 27.06.05 */
927   int size_of_user_data;
928 }
929 sciSurface;  /** */
930
931
932 /**@name Axes
933  * Structure used to specify axes feature 
934  * @author Djalel Abdemouche 
935  * @version 0.1
936  * @args 
937  * @return 
938  * @see 
939  */
940  
941 typedef struct
942 {
943   sciGraphicContext graphiccontext;
944   sciFont fontcontext;
945   char dir;   /** dir = 'r' | 'l' | 'u' | 'd' : gives the tics directions **/  
946   char tics;  /** tics = 'v' (for vector) or 'r' (for range) or i **/
947   double *vx;  /** vx vector of size nx **/
948   double *vy;  /** vy vector of size ny **/ 
949   /**DJ.Abdemouche 2003**/
950   double *vz; /* not used */
951   int nx;
952   int ny;
953   int nb_tics_labels; /* F.Leray 29.04.05 : number of tics_labels can be different from Max(nx,ny) if xy_type diff. from 'v' */
954   /***/
955   int nz;
956   char **str ;  /** string vector **/
957   int subint;  /** subints : number of sub intervals **/ 
958   char *format; /** format for tick marks **/
959   int seg;      /**0 or 1, flag which control the drawing of the segment associated to the axes **/
960   char *callback; /** specifies the text scilab code for the callback associated with this entity */
961   int callbacklen; /** the length of the callback code */  
962   int callbackevent;
963   /** specifies if this object is visble             */
964   BOOL visible;
965   int isclip;
966   double clip_region[4]; /* to introduce for axis ? */
967   int clip_region_set;
968
969   int * user_data; /* adding 27.06.05 */
970   int size_of_user_data;
971 }
972 sciAxes;  
973
974 /**@name Segs
975  * Structure used to specify axes feature 
976  * @author Djalel Abdemouche 
977  * @version 0.1
978  * @args 
979  * @return 
980  * @see 
981  */
982   
983 typedef struct
984 {
985   sciGraphicContext graphiccontext; 
986   double *vx;  /** vx vector of size Nbr **/ /*F.Leray 18.02.04 ...of size Nbr1 ? No depending on the type ptype*/
987   double *vy;  /** vy vector of size Nbr **/ /*F.Leray 18.02.04 ...of size Nbr2 ? No depending on the type ptype*/
988   double *vfx; /* size Nbr1 * Nbr2 */
989   double *vfy; /* size Nbr1 * Nbr2 */
990   int Nbr1; /**< size of vx and vy id segs handle, or size of vx if champ */ 
991   int Nbr2; /**< size of vy if champ handle */
992   int *pstyle;
993   int iflag;      /**0 or 1, flag which control the drawing of the segment  **/
994   double arrowsize;  /*F.Leray units : hundreds (i.e. 100, 150,...)*/
995   int ptype; /* if ptype=0, it is segments; if ptype=1, it is champ (champ or champ1)*/
996   int typeofchamp; /* when ptype=0, if typeofchamp=0 => champ is invoked else champ1 is invoked (typeofchamp==1) */
997   BOOL isselected;
998   char *callback; /** specifies the text scilab code for the callback associated with this entity */
999   int callbacklen; /** the length of the callback code */  
1000   int callbackevent;
1001   /** specifies if this object is visble             */
1002   BOOL visible;
1003   int isclip;
1004   double clip_region[4];
1005   int clip_region_set;
1006   double *vz; /**DJ.Abdemouche 2003**/
1007   double *vfz;
1008
1009   int * user_data; /* adding 27.06.05 */
1010   int size_of_user_data;
1011 }
1012 sciSegs; 
1013  
1014
1015
1016
1017 /**@name Grayplot
1018  * Structure used to specify axes feature 
1019  * @author Djalel Abdemouche 
1020  * @version 0.1
1021  * @args 
1022  * @return 
1023  * @see 
1024  */
1025  
1026 typedef struct
1027 {
1028   sciGraphicContext graphiccontext; 
1029   
1030   double *pvecx;  /** vx vector of size nx **/
1031   double *pvecy;  /** vy vector of size ny **/ 
1032   double *pvecz;  /** vz vector of size nx*ny **/  
1033   int nx; 
1034   int ny;
1035   int type;   /** 0 if a grayplot, 1if a matplot, 2 if matplot 1 **/  
1036   char datamapping[7]; /* "scaled" or "direct" */
1037   BOOL isselected;
1038   char *callback; /** specifies the text scilab code for the callback associated with this entity */
1039   int callbacklen; /** the length of the callback code */   
1040   int callbackevent;
1041   /** specifies if this object is visble             */
1042   BOOL visible;
1043
1044   int isclip; /**< Clipping state of the object */
1045   double clip_region[4]; /**< Clipping region */
1046   int clip_region_set; /**< To know if the clippign region is set */
1047
1048   int * user_data; /* adding 27.06.05 */
1049   int size_of_user_data;
1050 }
1051 sciGrayplot;  
1052 /** */
1053
1054 /**@name Fec
1055  * Structure used to specify fec feature 
1056  * @author Djalel Abdemouche 
1057  * @version 0.1
1058  * @args 
1059  * @return 
1060  * @see 
1061  */
1062  
1063 typedef struct
1064 {
1065   sciGraphicContext graphiccontext; 
1066   
1067   double *pvecx; /* X coordinates of nodes */
1068   double *pvecy; /* Y coordinates of nodes */
1069   double *pnoeud; /* indices of nodes */
1070   double *pfun; /* Height value for nodes */
1071   int Nnode; /* number of nodes */
1072   int Ntr;   /* number of triangles */
1073   double zminmax[2]; /* Array of size 2 containing zmin and zmax */
1074   int colminmax[2]; /* subset of the colormap to use */
1075   int colout[2]; /* color to use when outside zmin/zmax */
1076   BOOL isselected;
1077   char *callback; /** specifies the text scilab code for the callback associated with this entity */
1078   int callbacklen; /** the length of the callback code */ 
1079   int callbackevent;
1080   /** specifies if this object is visble             */
1081   BOOL visible;
1082
1083   int isclip; /**< Clipping state of the object */
1084   double clip_region[4]; /**< Clipping region */
1085   int clip_region_set; /**< To know if the clippign region is set */
1086
1087   int * user_data; /* adding 27.06.05 */
1088   int size_of_user_data;
1089 }
1090 sciFec;  /** */
1091
1092
1093
1094 /**@name Panner
1095  * Structure used to specify 
1096  */
1097 typedef struct
1098 {
1099   double xmin;                     /** original xmin */
1100   double ymin;                     /** original ymin */
1101   double xmax;
1102   double ymax;
1103   BOOL isselected;
1104   char *callback; /** specifies the text scilab code for the callback associated with this entity */
1105   int callbacklen; /** the length of the callback code */ 
1106   int callbackevent;
1107   /** specifies if this object is visble             */
1108   BOOL visible;
1109
1110   int * user_data; /* adding 27.06.05 */
1111   int size_of_user_data;
1112 }
1113 sciAgreg;  /** */
1114
1115 #endif /*__SCI_OBJECT_STRUCTURE__ */