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