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