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