Remove xor (Space Sheriff Gavan) graphic object attribute.
[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     /** UID */
139     char * UID;
140     /** Scilab Handle */
141     long handleIndex;
142 }
143 sciPointObj;
144
145 /**@name Sons
146  * Used to determine the hierarchy
147  sciPointObj *pointobj;sciRelationShip
148  sciSons     *pnext;
149 */
150 typedef struct tagSons
151 {
152   /** */
153   struct tagSons *pprev;
154   /**  is the pointer of next the son's structure      */
155   sciPointObj *pointobj;
156   /** */
157   struct tagSons *pnext;
158 }
159 /** */
160 sciSons;
161
162 /**@name RelationShip
163  * Used to determine the hierarchy
164  */
165 typedef struct _sciRelationShip
166 {
167   /** is the scilab handle of THIS */
168   long handleIndex;
169   /** points to the parent structures */
170   sciPointObj * pparent;
171   /** points to the sons structures */
172   sciSons * psons;
173   /** the last sciSons of the list (the first created!) */
174   sciSons * plastsons;
175   /** the set of selected sons. List of lists for each type. Not to be used directly.*/
176   DoublyLinkedList * pSelectedSon ;
177 }/** */
178 sciRelationShip;
179
180
181 /**@name GraphicContext
182  * Used to know what are the contexte value attached with the Graphic area
183  */
184 typedef struct
185 {
186   /** currently not used in this version */
187   /** pointe sur un ID de la table des couleur Scilab */
188   int backgroundcolor;
189   /** pointe sur un ID de la table des couleur Scilab */
190   int foregroundcolor;
191   /** */
192   int fillcolor;
193   /** Wheter the object is filled or not */
194   BOOL isfilled;
195   /** thickness of lines */
196   double linewidth;
197   /** */
198   BOOL isline;
199   /** */
200   int linestyle;
201   /** */
202   BOOL ismark;
203   /** */
204   int markstyle;
205   /** */
206   int marksize;
207   /** */
208   int marksizeunit;
209   /** */
210   int markbackground;
211   /** */
212   int markforeground;
213 }/** */
214 sciGraphicContext;
215
216
217 /**@name sciFont
218  * Used to know what are the contexte value attached with the Graphic area
219  */
220 typedef struct
221 {
222   /** currently not used in this version */
223   /* il faudrait prendre la font windows */
224   /** pointe sur un ID de la table des couleur Scilab */
225   int backgroundcolor;
226   /** pointe sur un ID de la table des couleur Scilab */
227   int foregroundcolor;
228   /** type of the font */
229   int fonttype; /* scilab font index 0 to 9 */
230   /** specify if the font size must be stucks to Scilab font sizes 0:6 or might be any double */
231   BOOL useFractionalMetrics;
232   /** Gets the width of the character in tenth of point */
233   double fontSize;
234   /** this is coded in radian*/
235   double textorientation;
236 }/** */
237 sciFont;
238
239
240 /**@name scigMode
241  * Used to determine all the mode that can be used. Only some entity can sets this itself
242  */
243 typedef struct
244 {
245   /** Are new Plot added to the old plot on the graphics window        */
246   BOOL addplot;
247   /** The min max ranges of the the graphics window is given by users  */
248   BOOL autoscaling;
249   /** Is zooming allowed                                               */
250   BOOL zooming;
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  * Matches the MVC Legend object's LegendLocation enum.
398  */
399 typedef enum
400   {
401     /** */
402     SCI_LEGEND_POSITION_UNSPECIFIED = -1,
403     /** */
404     SCI_LEGEND_IN_UPPER_RIGHT = 0,
405     /** */
406     SCI_LEGEND_IN_UPPER_LEFT = 1,
407     /** */
408     SCI_LEGEND_IN_LOWER_RIGHT = 2,
409     /** */
410     SCI_LEGEND_IN_LOWER_LEFT = 3,
411     /** */
412     SCI_LEGEND_OUT_UPPER_RIGHT = 4,
413     /** */
414     SCI_LEGEND_OUT_UPPER_LEFT = 5,
415     /** */
416     SCI_LEGEND_OUT_LOWER_RIGHT = 6,
417     /** */
418     SCI_LEGEND_OUT_LOWER_LEFT = 7,
419     /** */
420     SCI_LEGEND_UPPER_CAPTION = 8,
421    /** */
422     SCI_LEGEND_LOWER_CAPTION = 9,
423     /** */
424     SCI_LEGEND_BY_COORDINATES = 10
425   }  /** */
426 sciLegendPlace;
427
428
429
430 /**@name Legend
431  * Structure used to specify Legend
432  */
433 typedef struct
434 {
435   sciGraphicContext graphiccontext; /* used to draw the line and marks of the curve F.Leray 21.01.05 */
436   /** */
437   int nblegends;
438   /** */
439   int *pstyle;
440   /** */
441   sciText text;
442   /** */
443   POINT2D pos;
444   /** specifies the frame's width */
445   int width;
446   /** specifies the frame's height */
447   int height;
448   /** */
449   BOOL isselected;
450   /** specifies if the legend is surrounded */
451   BOOL issurround;
452   /* void    *associetedentity;  get the associated entity by asking parents.relation.sons */
453   /* the subwindow dimension is get by asking relation     */
454   sciLegendPlace place;
455   /** pointer on the labelled objects */
456   long long *tabofhandles;
457   /** specifies if this object is visble             */
458   BOOL visible;
459   int isclip;
460   double clip_region[4];
461   int clip_region_set;
462   int * user_data; /* adding 27.06.05 */
463   int size_of_user_data;
464 }/** */
465 sciLegend;
466
467
468 /**@name Titre
469  * Structure used to specify Labels like Title or classic labels
470  */
471 typedef struct
472 {
473   /* sciRelationShip relationship; */
474   /** contains the data to display the label */
475  /*  sciText text; */
476   sciPointObj * text ;
477   /** absolut position in subindow*/
478
479   int ptype ; /**< to distinguish between title, x_label,.... */
480
481   /** */
482   BOOL isselected;
483   BOOL auto_position; /* automatic or manual position selection for label */
484   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) */
485                       /* not implemented for titles */
486
487 }
488 sciLabel ;
489
490 typedef struct
491 {
492
493   /* Color property */
494   double *foregroundcolor;
495
496   /* Callback property */
497   char *callback;
498   int callbackType;
499
500   /* Specifies if this object is visible in its parent children */
501   BOOL handle_visible;
502
503   int MenuPosition;
504
505   /* Userdata property */
506   int * user_data;
507   int size_of_user_data;
508
509   /* Index in the java UIElementMapper */
510   int hashMapIndex;
511
512   /* Tag property */
513   char * tag;
514
515 }/** */
516 sciUimenu;
517
518 typedef struct
519 {
520   int hashMapIndex;
521 }/** */
522 sciUicontextmenu;
523
524 typedef struct
525 {
526   int hashMapIndex;
527 }/** */
528 sciWaitbar;
529
530 typedef struct
531 {
532   int hashMapIndex;
533 }/** */
534 sciProgressionbar;
535
536 typedef struct
537 {
538
539   /* Specifies if this object is visible in its parent children */
540   BOOL handle_visible;
541
542   /* Colors property */
543   double *backgroundcolor;
544   double *foregroundcolor;
545
546   /* Callback property */
547   char *callback;
548   int callbackType;
549
550   /* Userdata property */
551   int * user_data;
552   int size_of_user_data;
553
554   /* Index in the java UIElementMapper */
555   int hashMapIndex;
556
557   /* ListboxTop property */
558   int * listboxTop;
559
560   /* Value property */
561   int * value;
562   int valueSize;
563   double * doubleValue;
564
565   /* Style property: Must be a value from UicontrolStyle enum */
566   int style;
567
568   /* FontAngle property: Must be a value from UicontrolFontProperties enum */
569   int fontAngle;
570
571   /* FontWeight property: Must be a value from UicontrolFontProperties enum */
572   int fontWeight;
573
574   /* FontUnits property: Must be a value from UicontrolUnits enum */
575   int fontUnits;
576
577   /* Units property: Must be a value from UicontrolUnits enum */
578   int units;
579
580   /* Relief property: Must be a value from UicontrolRelief enum */
581   int relief;
582
583   /* Horizontalalignment property */
584   int horizontalAlignment;
585
586   /* Verticalalignment property */
587   int verticalAlignment;
588
589   /* Min/Max properties */
590   int min;
591   int max;
592
593   /* SliderStep property */
594   double * sliderStep;
595
596   /* Tag property */
597   char * tag;
598 }/** */
599 sciUicontrol;
600
601 /* uicontrol font properties */
602 typedef enum {LIGHT_FONT, NORMAL_FONT, DEMI_FONT, BOLD_FONT, ITALIC_FONT, OBLIQUE_FONT} UicontrolFontProperties ;
603 /* uicontrol style */
604 typedef enum {
605   SCI_PUSHBUTTON,
606   SCI_RADIOBUTTON,
607   SCI_CHECKBOX,
608   SCI_EDIT,
609   SCI_UITEXT,
610   SCI_SLIDER,
611   SCI_UIFRAME,
612   SCI_LISTBOX,
613   SCI_POPUPMENU,
614   SCI_IMAGERENDERER,
615   SCI_UITABLE,
616   SCI_UIDISPLAYTREE
617 } UicontrolStyle ;
618 /* uicontrol units */
619 typedef enum {POINTS_UNITS, NORMALIZED_UNITS, INCHES_UNITS, CENTIMETERS_UNITS, PIXELS_UNITS} UicontrolUnits ;
620 /* uicontrol relief */
621 typedef enum {FLAT_RELIEF, GROOVE_RELIEF, RAISED_RELIEF, RIDGE_RELIEF, SOLID_RELIEF, SUNKEN_RELIEF} UicontrolRelief;
622 /* uicontrol alignment */
623 typedef enum {LEFT_ALIGNMENT, CENTER_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT, MIDDLE_ALIGNMENT, BOTTOM_ALIGNMENT} UicontrolAlignment;
624
625 /* the part of the drawn box for 3d axis */
626 typedef enum { BT_OFF = FALSE, BT_ON = TRUE, BT_HIDDEN_AXES, BT_BACK_HALF } EAxesBoxType ;
627
628 typedef struct
629 {
630   /* tics data from algo */
631   double  xgrads[20], ygrads[20], zgrads[20];                   /* Here they are  */
632   int nxgrads, nygrads, nzgrads;                         /* with their size <=> nber of tics */
633
634   /* tics data from user (=> u_...)*/
635   double *u_xgrads, *u_ygrads, *u_zgrads;                       /* Here they are  */
636   int u_nxgrads, u_nygrads, u_nzgrads;                   /* with their size <=> nber of tics */
637
638   int  ticscolor;
639   /*  int  fontsize;
640       int  textcolor;*/
641   sciFont fontcontext;
642
643   int  subint[3]; /* Dj.A 17/12/03 */
644   EAxesBoxType  rect ; /**< to know the part of the box we have to draw */
645   BOOL filled; /**< Specify wether the axis background should be drawn or not.
646                     graphic_context is not used because otherwise all the children would inherit the value.*/
647
648   char xdir;   /**<  xdir  = 'u' | 'd'  : gives the xy-axes positions */
649   char ydir;   /**<  ydir  = 'r' | 'l' : gives the xy-axes positions */
650
651
652   /* flags for switching from auto to manual ticks */
653   BOOL auto_ticks[3]; /* if on, it means that the ticks are taken from computation (see theticks algo. by Francois D.) */
654
655   char **u_xlabels,  **u_ylabels,  **u_zlabels; /* label string corresponding to each specified u_xyzgrads */
656
657   int hiddenAxisColor ; /* the color and style of the hidden axis */
658
659   double  limits[7]; /* = 1 set tight limits = 0 set axes auto shape */
660   int flag[3]; /* 3d options */
661
662   /* F.Leray 07.10.04 REMOVE AAINT*/
663   int nbsubtics[3]; /* Don't touch to subint because also deals with drawaxis: AXES structure has multiple uses... */ /* F.Leray 07.10.04 */
664
665   BOOL reverse[3]; /* if TRUE, it means that the corresponding axe is reversed */
666   BOOL axes_visible[3]; /* if TRUE, it means that the corresponding axes is drawn */
667
668 }
669 AXES;
670
671 /**@name SubWindow
672  * Structure used to specify SubWindow wich is a subplot
673  */
674 typedef struct
675 {
676   AXES axes;
677   /** */
678   scigMode gmode;
679   /** */
680   sciGraphicContext graphiccontext;
681   /** specifies if this subwindow is selected                */
682
683   double SRect[6]; /* [xmin xmax ymin ymax zmin zmax] : Strict rect. coming from update_specification_bounds function or from a set(a,"data_bounds",[...]) */
684   double FRect[6]; /* real data_bounds */
685   double WRect[4]; /* size of the subplot */
686   double ARect[4]; /* margins, give the size of the axe*/
687   int zoomy_kp;
688   /* ZRect_kp is now useless : when unzooming we deal with SRect values */
689   double ZRect[6]; /* reversed for zoom only to avoid using FRect as zoom box AND computed box */ /* F.Leray 09.12.04 */
690
691   char logflags[3]; /* Z has a logflag now F.Leray 03.11.04 */
692   int grid[3]; /* Specify color of grid for each axis. If -1, no grid is drawn */
693         BOOL gridFront; /* If TRUE grid is drawn in front, if FALSE it is drawn behind other objects */
694
695   /*   BOOL isaxes; */
696
697   BOOL is3d;
698   BOOL tight_limits;
699   double theta_kp;
700   double alpha_kp;
701   /* viewing angles */
702   double theta;
703   double alpha;
704   /** specifies the text scilab code for the callback associated with this entity */
705   char *callback;
706   /** the length of the callback code */
707   int callbacklen;
708   int callbackevent;
709   /** specifies if this object is visble             */
710   BOOL visible;
711
712   BOOL useNurbsForArcs;
713
714   int isclip;
715   double clip_region[4];
716   int clip_region_set;
717   /**DJ.Abdemouche 2003**/
718   int project[3];
719   BOOL isoview;
720   int hiddencolor;
721   BOOL cube_scaling; /* Matlab like view in 3D when one or two range is/are preferential */
722   BOOL FirstPlot; /* An internal state used to indicated that high level functions must not use SRect*/
723
724   /* F.Leray 25.04.05 Labels in sciSubWin*/
725   sciPointObj * mon_title;
726   sciPointObj * mon_x_label;
727   sciPointObj * mon_y_label;
728   sciPointObj * mon_z_label;
729
730   /*  An internal state used as subtics flag (auto == FALSE, TRUE == manual) named flagNax */
731   BOOL flagNax;
732   int * user_data; /* adding 27.06.05 */
733   int size_of_user_data;
734
735
736 }/** */
737 sciSubWindow;
738
739
740 /**@name Arc
741  * Structure used to specify
742  * @author Matthieu PHILIPPE /MAJ D.ABDEMOUCHE
743  * @version 0.1
744  * @args
745  * @return
746  * @see
747  */
748 typedef struct
749 {
750   /** */
751   sciGraphicContext graphiccontext;
752   /** */
753   double x;
754   /** */
755   double y;
756   /** */
757   double width;
758   /** */
759   double height;
760   /** begin at alpha1 */
761   double alphabegin;
762   /** end at alpha2   */
763   double alphaend;
764   /** */
765   BOOL isselected;
766   /** specifies the text scilab code for the callback associated with this entity */
767   char *callback;
768   /** the length of the callback code */
769   int callbacklen;
770   int callbackevent;
771   /** specifies if this object is visble             */
772   BOOL visible;
773   int isclip;
774   double clip_region[4];
775   int clip_region_set;
776   double z; /**DJ.Abdemouche 2003**/
777
778   BOOL useNurbs; /* Specify whether the arc should be drawn using nurbs or a set of lines */
779
780   int * user_data; /* adding 27.06.05 */
781   int size_of_user_data;
782   /* the isline property is inside the associated graphiccontext */
783 }  /** */
784 sciArc;
785
786
787 /**@name Polyline
788  * Structure used to specify
789  * @author Matthieu PHILIPPE /MAJ D.ABDEMOUCHE
790  * @version 0.1
791  * @args
792  * @return
793  * @see
794  */
795 typedef struct
796 {
797   sciGraphicContext graphiccontext;
798   double *pvx;                  /* vecteur des points x doublon avec pvector je les garde pour compatiblite*/
799   double *pvy;                  /* vecteur des points y doublon avec pvector*/
800   double *pvz; /**DJ.Abdemouche 2003**/
801   int n1;                       /** number of points, for interp vector shoud be 3 or 4 */
802   int closed;                   /** is it a closed polyline */
803   int plot;                     /** defines the polyline_style (interpolated, staircase, bar_plot,...) : is it simple poly or a plot (Plot2d /Plot2d1/.../Plot2d4) */
804   BOOL isselected;
805   char *callback;               /** specifies the text scilab code for the callback associated with this entity */
806   int callbacklen;              /** the length of the callback code */
807   int callbackevent;
808   /** specifies if this object is visble             */
809   BOOL visible;
810   int isclip;
811   double clip_region[4];
812   int clip_region_set;
813   int * user_data; /* adding 27.06.05 */
814   int size_of_user_data;
815   BOOL isinterpshaded;
816   int *scvector; /* interpolation vector */
817   int bar_layout;
818
819   double * x_shift;
820   double * y_shift;
821   double * z_shift;
822
823   double bar_width;
824
825   double arsize_factor; /* to be able to enlarge arrow size without changing the line thickness */
826 }
827 sciPolyline;  /** */
828
829
830 /**@name Rectangle
831  * Structure used to specify
832  */
833 typedef struct
834 {
835   sciGraphicContext graphiccontext;
836   double x;                        /** original */
837   double y;                        /** original */
838   double width;
839   double height;
840   BOOL isselected;
841   char *callback; /** specifies the text scilab code for the callback associated with this entity */
842   int callbacklen; /** the length of the callback code */
843   int callbackevent;
844   /** specifies if this object is visble             */
845   BOOL visible;
846   int isclip;
847   double clip_region[4];
848   int clip_region_set;
849   double z;  /** rectangle */
850
851   int * user_data; /* adding 27.06.05 */
852   int size_of_user_data;
853 }
854 sciRectangle;  /** */
855
856
857 typedef enum
858   {
859     SCI_FAC3D = 0,
860     SCI_PLOT3D = 1,
861     SCI_CONTOUR,
862     SCI_PARAM3D,
863     SCI_PARAM3D1
864   }
865 sciTypeOf3D;
866
867
868 /**@name Surface
869  * Structure used to specify
870  */
871 typedef struct
872 {
873   sciGraphicContext graphiccontext;
874   double * pvecx; /* x data */
875   double * pvecy; /* y data */
876   double * pvecz; /* z data */
877   double *inputCMoV; /* Adding here in order to always have the input data*/
878   /* We will determinate if it is a vector or matrix data with m3n and n3n values*/
879   /* temporary variable, useless for drawing */
880   /* name means input color or vector */
881   double *zcol; /* temporary variable, useless for drawing */
882   double *color;  /* Final matrix used only for drawing :  */
883                   /*  color == zcol if 'direct' mode used (direct indices on colormap)  */
884                   /* else 'scaled' mode used => color == linear interp. of zcol on the colormap */
885                   /* if flag_color = 0 or 1, color is null */
886                   /* if flag_color = 2, color is a vector */
887                   /* if flag_color = 3, color is a matrix */
888                   /* if flag_color = 4, color is a vector */
889
890   int cdatamapping; /* like in Matlab, it determines how the color is computed ('scaled' or 'direct' mode) */
891                     /* 0: scaled */
892                     /* 1: direct (default) */
893   int izcol; /* 0 : no color; 1 : color is a vector, 2 : color is a matrix */
894   int dimzx; /* == m3 */
895   int dimzy; /* == n3 */
896
897   /*F.Leray 12.03.04 Adding here to know the length of arrays pvecx, pvecy and pvecz*/
898
899   int nc; /* number of colors = m3n * n3n */
900   int nx; /* number of x data */
901   int ny; /* number of y data */
902   int nz; /* number of z data */
903   int isfac; /* redondant with typof3d */
904   int m1,n1; /* size of pvecx */
905   int m2,n2; /* size of pvecy */
906   int m3,n3; /* size of pvecz */
907   int m3n,n3n; /* size of color */
908
909   int flag[3]; /* only the first value is used as color_mode */
910   double ebox[6]; /* apparently unused */
911   int flagcolor; /* this flag indicates the type of the color of how the facet have to be colored
912                     0: uniformed color
913                     1: facet's color are computed with z*/ /* in case of a simple plot...!!! F.Leray 19.03.04 */
914   sciTypeOf3D typeof3d; /* Fac3d or Plot3d */
915   int hiddencolor;
916   BOOL isselected;
917   char *callback; /** specifies the text scilab code for the callback associated with this entity */
918   int callbacklen; /** the length of the callback code */
919   int callbackevent;
920   /** specifies if this object is visble             */
921   BOOL visible;
922
923   int flag_x; /* 1 if the vector is increasing, -1 if decreasing. */
924               /* The vector should be either increasing or decreasing. */
925   int flag_y;
926
927   int isclip; /**< Clipping state of the object */
928   double clip_region[4]; /**< Clipping region */
929   int clip_region_set; /**< To know if the clippign region is set */
930
931   int * user_data; /* adding 27.06.05 */
932   int size_of_user_data;
933 }
934 sciSurface;  /** */
935
936
937 /**@name Axes
938  * Structure used to specify axes feature
939  * @author Djalel Abdemouche
940  * @version 0.1
941  * @args
942  * @return
943  * @see
944  */
945
946 typedef struct
947 {
948   sciGraphicContext graphiccontext;
949   sciFont fontcontext;
950   char dir;   /** dir = 'r' | 'l' | 'u' | 'd' : gives the tics directions **/
951   char tics;  /** tics = 'v' (for vector) or 'r' (for range) or i **/
952   double *vx;  /** vx vector of size nx **/
953   double *vy;  /** vy vector of size ny **/
954   /**DJ.Abdemouche 2003**/
955   double *vz; /* not used */
956   int nx;
957   int ny;
958   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' */
959   /***/
960   int nz;
961   char **str ;  /** string vector **/
962   int subint;  /** subints : number of sub intervals **/
963   char *format; /** format for tick marks **/
964   int seg;      /**0 or 1, flag which control the drawing of the segment associated to the axes **/
965   char *callback; /** specifies the text scilab code for the callback associated with this entity */
966   int callbacklen; /** the length of the callback code */
967   int callbackevent;
968   /** specifies if this object is visble             */
969   BOOL visible;
970   int isclip;
971   double clip_region[4]; /* to introduce for axis ? */
972   int clip_region_set;
973
974   int * user_data; /* adding 27.06.05 */
975   int size_of_user_data;
976 }
977 sciAxes;
978
979 /**@name Segs
980  * Structure used to specify axes feature
981  * @author Djalel Abdemouche
982  * @version 0.1
983  * @args
984  * @return
985  * @see
986  */
987
988 typedef struct
989 {
990   sciGraphicContext graphiccontext;
991   double *vx;  /** vx vector of size Nbr **/ /*F.Leray 18.02.04 ...of size Nbr1 ? No depending on the type ptype*/
992   double *vy;  /** vy vector of size Nbr **/ /*F.Leray 18.02.04 ...of size Nbr2 ? No depending on the type ptype*/
993   double *vfx; /* size Nbr1 * Nbr2 */
994   double *vfy; /* size Nbr1 * Nbr2 */
995   int Nbr1; /**< size of vx and vy id segs handle, or size of vx if champ */
996   int Nbr2; /**< size of vy if champ handle */
997   int *pstyle;
998   int iflag;      /**0 or 1, flag which control the drawing of the segment  **/
999   double arrowsize;  /*F.Leray units : hundreds (i.e. 100, 150,...)*/
1000   int ptype; /* if ptype=0, it is segments; if ptype=1, it is champ (champ or champ1)*/
1001   int typeofchamp; /* when ptype=0, if typeofchamp=0 => champ is invoked else champ1 is invoked (typeofchamp==1) */
1002   BOOL isselected;
1003   char *callback; /** specifies the text scilab code for the callback associated with this entity */
1004   int callbacklen; /** the length of the callback code */
1005   int callbackevent;
1006   /** specifies if this object is visble             */
1007   BOOL visible;
1008   int isclip;
1009   double clip_region[4];
1010   int clip_region_set;
1011   double *vz; /**DJ.Abdemouche 2003**/
1012   double *vfz;
1013
1014   int * user_data; /* adding 27.06.05 */
1015   int size_of_user_data;
1016 }
1017 sciSegs;
1018
1019
1020
1021
1022 /**@name Grayplot
1023  * Structure used to specify axes feature
1024  * @author Djalel Abdemouche
1025  * @version 0.1
1026  * @args
1027  * @return
1028  * @see
1029  */
1030
1031 typedef struct
1032 {
1033   sciGraphicContext graphiccontext;
1034
1035   double *pvecx;  /** vx vector of size nx **/
1036   double *pvecy;  /** vy vector of size ny **/
1037   double *pvecz;  /** vz vector of size nx*ny **/
1038   int nx;
1039   int ny;
1040   int type;   /** 0 if a grayplot, 1if a matplot, 2 if matplot 1 **/
1041   char datamapping[7]; /* "scaled" or "direct" */
1042   BOOL isselected;
1043   char *callback; /** specifies the text scilab code for the callback associated with this entity */
1044   int callbacklen; /** the length of the callback code */
1045   int callbackevent;
1046   /** specifies if this object is visble             */
1047   BOOL visible;
1048
1049   int isclip; /**< Clipping state of the object */
1050   double clip_region[4]; /**< Clipping region */
1051   int clip_region_set; /**< To know if the clippign region is set */
1052
1053   int * user_data; /* adding 27.06.05 */
1054   int size_of_user_data;
1055 }
1056 sciGrayplot;
1057 /** */
1058
1059 /**@name Fec
1060  * Structure used to specify fec feature
1061  * @author Djalel Abdemouche
1062  * @version 0.1
1063  * @args
1064  * @return
1065  * @see
1066  */
1067
1068 typedef struct
1069 {
1070   sciGraphicContext graphiccontext;
1071
1072   double *pvecx; /* X coordinates of nodes */
1073   double *pvecy; /* Y coordinates of nodes */
1074   double *pnoeud; /* indices of nodes */
1075   double *pfun; /* Height value for nodes */
1076   int Nnode; /* number of nodes */
1077   int Ntr;   /* number of triangles */
1078   double zminmax[2]; /* Array of size 2 containing zmin and zmax */
1079   int colminmax[2]; /* subset of the colormap to use */
1080   int colout[2]; /* color to use when outside zmin/zmax */
1081   BOOL isselected;
1082   char *callback; /** specifies the text scilab code for the callback associated with this entity */
1083   int callbacklen; /** the length of the callback code */
1084   int callbackevent;
1085   /** specifies if this object is visble             */
1086   BOOL visible;
1087
1088   int isclip; /**< Clipping state of the object */
1089   double clip_region[4]; /**< Clipping region */
1090   int clip_region_set; /**< To know if the clippign region is set */
1091
1092   int * user_data; /* adding 27.06.05 */
1093   int size_of_user_data;
1094 }
1095 sciFec;  /** */
1096
1097
1098
1099 /**@name Panner
1100  * Structure used to specify
1101  */
1102 typedef struct
1103 {
1104   double xmin;                     /** original xmin */
1105   double ymin;                     /** original ymin */
1106   double xmax;
1107   double ymax;
1108   BOOL isselected;
1109   char *callback; /** specifies the text scilab code for the callback associated with this entity */
1110   int callbacklen; /** the length of the callback code */
1111   int callbackevent;
1112   /** specifies if this object is visble             */
1113   BOOL visible;
1114
1115   int * user_data; /* adding 27.06.05 */
1116   int size_of_user_data;
1117 }
1118 sciAgreg;  /** */
1119
1120 #endif /*__SCI_OBJECT_STRUCTURE__ */