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