Graphics: fix compilation warnings
[scilab.git] / scilab / modules / graphics / src / c / InitObjects.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2001-2002 - INRIA - Mathieu Philipe
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) 2008-2008 - INRIA - Bruno JOFRET
8  * Copyright (C) 2010 - DIGITEO - Bruno JOFRET
9  * Copyright (C) 2010-2011 - DIGITEO - Manuel Juliachs
10  *
11  * Copyright (C) 2012 - 2016 - Scilab Enterprises
12  *
13  * This file is hereby licensed under the terms of the GNU GPL v2.0,
14  * pursuant to article 5.3.4 of the CeCILL v.2.1.
15  * This file was originally licensed under the terms of the CeCILL v2.1,
16  * and continues to be available under such terms.
17  * For more information, see the COPYING file which you should have received
18  * along with this program.
19  *
20  */
21
22 /*------------------------------------------------------------------------
23  *    Graphic library
24  *    newGraph Library header
25  *    Comment:
26  *    This file contains all functions used to Init or Re-Init the window
27  *    (Figure and/or Subwin) to the default graphics properties.
28  --------------------------------------------------------------------------*/
29
30 #include <stdio.h>
31 #include <string.h>
32
33 #include "os_string.h"
34
35 #include "InitObjects.h"
36 #include "SetProperty.h"
37 #include "GetProperty.h"
38 #include "DestroyObjects.h"
39 #include "CloneObjects.h"
40 #include "BuildObjects.h"
41 #include "sciprint.h"
42 #include "HandleManagement.h"
43 #include "BasicAlgos.h"
44
45 #include "sci_malloc.h"             /* MALLOC */
46 #include "localization.h"
47
48 #include "createGraphicObject.h"
49 #include "deleteGraphicObject.h"
50 #include "graphicObjectProperties.h"
51 #include "getGraphicObjectProperty.h"
52 #include "setGraphicObjectProperty.h"
53
54 #include "AxesModel.h"
55 #include "FigureModel.h"
56
57 #define LABEL_BUFFER_LENGTH     128
58
59 static char error_message[70];  /* DJ.A 08/01/04 */
60
61 unsigned short defcolors[] =
62 {
63     0, 0, 0,                    /* Black: DEFAULTBLACK */
64     0, 0, 255,                  /* Blue */
65     0, 255, 0,                  /* Green */
66     0, 255, 255,                /* Cyan */
67     255, 0, 0,                  /* Red */
68     255, 0, 255,                /* Magenta */
69     255, 255, 0,                /* Yellow */
70     255, 255, 255,              /* White: DEFAULTWHITE */
71     0, 0, 144,                  /* Blue4 */
72     0, 0, 176,                  /* Blue3 */
73     0, 0, 208,                  /* Blue2 */
74     135, 206, 255,              /* LtBlue */
75     0, 144, 0,                  /* Green4 */
76     0, 176, 0,                  /* Green3 */
77     0, 208, 0,                  /* Green2 */
78     0, 144, 144,                /* Cyan4 */
79     0, 176, 176,                /* Cyan3 */
80     0, 208, 208,                /* Cyan2 */
81     144, 0, 0,                  /* Red4 */
82     176, 0, 0,                  /* Red3 */
83     208, 0, 0,                  /* Red2 */
84     144, 0, 144,                /* Magenta4 */
85     176, 0, 176,                /* Magenta3 */
86     208, 0, 208,                /* Magenta2 */
87     128, 48, 0,                 /* Brown4 */
88     160, 64, 0,                 /* Brown3 */
89     192, 96, 0,                 /* Brown2 */
90     255, 128, 128,              /* Pink4 */
91     255, 160, 160,              /* Pink3 */
92     255, 192, 192,              /* Pink2 */
93     255, 224, 224,              /* Pink */
94     255, 215, 0                 /* Gold */
95 };
96
97 void InitFigureModel(int iFiguremdlUID)
98 {
99     int iZero = 0;
100     BOOL bTrue = TRUE;
101     BOOL bFalse = FALSE;
102
103     int defaultBackground = -2;
104     int m = NUMCOLORS_SCI;
105     int i = 0;
106     double *pdblColorMap = (double*)MALLOC(m * 3 * sizeof(double));
107
108     int piFigurePosition[2] = { 200, 200 };
109     int piFigureSize[2] = { 620, 590 };
110     int piAxesSize[2] = { 610, 460 };
111
112     // FIXME : inline this function here ...
113
114     sciInitGraphicMode(iFiguremdlUID);
115     // Name
116     setGraphicObjectProperty(iFiguremdlUID, __GO_NAME__, _("Graphic window number %d"), jni_string, 1);
117
118     // Id
119     setGraphicObjectProperty(iFiguremdlUID, __GO_ID__, &iZero, jni_int, 1);
120     // pModelData
121     // isselected ?? (No more used)
122     // rotstyle = unary (0)
123     setGraphicObjectProperty(iFiguremdlUID, __GO_ROTATION_TYPE__, &iZero, jni_int, 1);
124
125     // visible
126     setGraphicObjectProperty(iFiguremdlUID, __GO_VISIBLE__, &bTrue, jni_bool, 1);
127     // immediateDrawingMode
128     setGraphicObjectProperty(iFiguremdlUID, __GO_IMMEDIATE_DRAWING__, &bTrue, jni_bool, 1);
129     // background
130     setGraphicObjectProperty(iFiguremdlUID, __GO_BACKGROUND__, &defaultBackground, jni_int, 1);
131     // position
132     setGraphicObjectProperty(iFiguremdlUID, __GO_POSITION__, piFigurePosition, jni_int_vector, 2);
133     // size
134     setGraphicObjectProperty(iFiguremdlUID, __GO_SIZE__, piFigureSize, jni_int_vector, 2);
135
136     // auto_resize
137     setGraphicObjectProperty(iFiguremdlUID, __GO_AUTORESIZE__, &bTrue, jni_bool, 1);
138     // axes_size
139     setGraphicObjectProperty(iFiguremdlUID, __GO_AXES_SIZE__, piAxesSize, jni_int_vector, 2);
140
141     /*
142      * user data
143      * NULL has been replaced by the empty string as the third argument in order to
144      * avoid a crash due to giws 1.2.4
145      */
146     //setGraphicObjectProperty(iFiguremdlUID, __GO_USER_DATA__, "", jni_string, 0);
147     // Size of user data
148     //setGraphicObjectProperty(iFiguremdlUID, __GO_USER_DATA_SIZE__, &iZero, jni_int, 1);
149     // Info Message
150     setGraphicObjectProperty(iFiguremdlUID, __GO_INFO_MESSAGE__, "", jni_string, 1);
151     // Event Handler
152     setGraphicObjectProperty(iFiguremdlUID, __GO_EVENTHANDLER__, "", jni_string, 1);
153     // Event Handler Enable
154     setGraphicObjectProperty(iFiguremdlUID, __GO_EVENTHANDLER_ENABLE__, &bFalse, jni_bool, 1);
155     // Tag
156     setGraphicObjectProperty(iFiguremdlUID, __GO_TAG__, "", jni_string, 1);
157
158     if (pdblColorMap == NULL)
159     {
160         sprintf(error_message, _("%s: No more memory.\n"), "InitFigureModel");
161         return;
162     }
163
164     for (i = 0; i < m; i++)
165     {
166         pdblColorMap[i] = (double)(defcolors[3 * i] / 255.0);
167         pdblColorMap[i + m] = (double)(defcolors[3 * i + 1] / 255.0);
168         pdblColorMap[i + 2 * m] = (double)(defcolors[3 * i + 2] / 255.0);
169     }
170     // ColorMap
171     setGraphicObjectProperty(iFiguremdlUID, __GO_COLORMAP__, pdblColorMap, jni_double_vector, 3 * m);
172     FREE(pdblColorMap);
173
174     // Parent
175     {
176         int parent = 0;
177         setGraphicObjectProperty(iFiguremdlUID, __GO_PARENT__, &parent, jni_int, 1);
178     }
179
180     // Default menus
181     buildFigureMenuBar(iFiguremdlUID);
182 }
183
184 /* DJ.A 08/01/04 */
185 int C2F(graphicsmodels) (void)
186 {
187     double margins[4];
188     double clipRegion[4];
189     int clipRegionSet = 0;
190     int firstPlot = 0;
191     int result = 0;
192
193     int iFiguremdlUID = 0;
194     int iAxesmdlUID = 0;
195
196     /*
197      ** Init Figure Model
198      */
199
200     // Create default figure by Asking MVC a new one.
201     iFiguremdlUID = createGraphicObject(__GO_FIGUREMODEL__);
202     setFigureModel(iFiguremdlUID);
203     InitFigureModel(iFiguremdlUID);
204
205     sciInitGraphicMode(iFiguremdlUID);
206
207     /*
208      ** Init Axes Model
209      */
210
211     // Create default Axes by Asking MVC a new one.
212     iAxesmdlUID = createGraphicObject(__GO_AXESMODEL__);
213     setAxesModel(iAxesmdlUID);
214
215     /* Sets the parent-child relationship between the default Figure and Axes */
216     setGraphicObjectRelationship(iFiguremdlUID, iAxesmdlUID);
217
218     /* Axes Model properties */
219
220     result = InitAxesModel();
221
222     if (result < 0)
223     {
224         strcpy(error_message, _("Default axes cannot be created.\n"));
225         return 0;
226     }
227
228     /* Margins and clip region */
229
230     margins[0] = 0.125;
231     margins[1] = 0.125;
232     margins[2] = 0.125;
233     margins[3] = 0.125;
234
235     setGraphicObjectProperty(iAxesmdlUID, __GO_MARGINS__, margins, jni_double_vector, 4);
236
237     clipRegion[0] = 0.0;
238     clipRegion[1] = 0.0;
239     clipRegion[2] = 0.0;
240     clipRegion[3] = 0.0;
241
242     setGraphicObjectProperty(iAxesmdlUID, __GO_CLIP_BOX__, clipRegion, jni_double_vector, 4);
243
244     clipRegionSet = 0;
245     setGraphicObjectProperty(iAxesmdlUID, __GO_CLIP_BOX_SET__, &clipRegionSet, jni_bool, 1);
246
247     /*
248      * Specifies that no high-level drawing function has been called yet.
249      */
250     firstPlot = 1;
251     setGraphicObjectProperty(iAxesmdlUID, __GO_FIRST_PLOT__, &firstPlot, jni_bool, 1);
252
253 #if 0
254     ppaxesmdl->FirstPlot = TRUE;
255 #endif
256
257     return 1;
258 }
259
260 /*
261  * This function has been adapted to the MVC framework, using the
262  * MVC's property set/get calls.
263  */
264
265 int InitAxesModel()
266 {
267     int cubeScaling = 0;
268     int logFlag = 0;
269     int ticksColor = 0;
270     int axisLocation = 0;
271     int boxType = 0;
272     int filled = 0;
273     int gridColor = 0;
274     int gridPosition = 0;
275     int view = 0;
276     int axisReverse = 0;
277     int axisVisible = 0;
278     int defaultNumberTicks = 0;
279     int autoTicks = 0;
280     int autoSubticks = 0;
281     int nbSubticks = 0;
282     int hiddenAxisColor = 0;
283     int hiddenColor = 0;
284     int isoview = 0;
285     int visible = 0;
286     int *piVisible = &visible;
287     int clipState = 0;
288     int tightLimits = 0;
289     int arcDrawingMethod = 0;
290     int labelsFontStyle = 6;
291     int labelsFontColor = -1;
292     int i = 0;
293     double labelsFontSize = 1;
294     double axesBounds[4];
295     double dataBounds[6];
296     double rotationAngles[2];
297     double tab[] = { 0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. }; /* graduations init. tmptab */
298     /* z-axis initial ticks locations */
299     double tabZTicksLocations[] = { -1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0 };
300     char labelBuffer[LABEL_BUFFER_LENGTH];
301     char **stringVector = NULL;
302
303     int lineColor = -1;
304     int background = -2;
305     int foreground = -1;
306     double lineWidth = 1.0;
307
308     /* 0: solid */
309     int lineStyle = 0;
310
311     int markMode = 0;
312     int lineMode = 1;
313     int fillMode = 1;
314     int markStyle = 0;
315     int markSize = 0;
316
317     /* 0: point, 1: tabulated */
318     int markSizeUnit = 1;
319
320     int iLabelUID = 0;
321
322     int iFiguremdlUID = getFigureModel();
323     int iAxesmdlUID = getAxesModel();
324
325     sciInitGraphicMode(iAxesmdlUID);
326
327     setGraphicObjectProperty(iAxesmdlUID, __GO_BACKGROUND__, &background, jni_int, 1);
328     setGraphicObjectProperty(iAxesmdlUID, __GO_LINE_COLOR__, &foreground, jni_int, 1);
329
330     setGraphicObjectProperty(iAxesmdlUID, __GO_FONT_SIZE__, &labelsFontSize, jni_double, 1);
331     setGraphicObjectProperty(iAxesmdlUID, __GO_FONT_COLOR__, &labelsFontColor, jni_int, 1);
332     setGraphicObjectProperty(iAxesmdlUID, __GO_FONT_STYLE__, &labelsFontStyle, jni_int, 1);
333
334     setGraphicObjectProperty(iAxesmdlUID, __GO_LINE_THICKNESS__, &lineWidth, jni_double, 1);
335     setGraphicObjectProperty(iAxesmdlUID, __GO_LINE_STYLE__, &lineStyle, jni_int, 1);
336
337     setGraphicObjectProperty(iAxesmdlUID, __GO_MARK_MODE__, &markMode, jni_bool, 1);
338     setGraphicObjectProperty(iAxesmdlUID, __GO_LINE_MODE__, &lineMode, jni_bool, 1);
339     setGraphicObjectProperty(iAxesmdlUID, __GO_FILL_MODE__, &fillMode, jni_bool, 1);
340
341     setGraphicObjectProperty(iAxesmdlUID, __GO_MARK_STYLE__, &markStyle, jni_int, 1);
342     setGraphicObjectProperty(iAxesmdlUID, __GO_MARK_SIZE__, &markSize, jni_int, 1);
343     setGraphicObjectProperty(iAxesmdlUID, __GO_MARK_SIZE_UNIT__, &markSizeUnit, jni_int, 1);
344
345     setGraphicObjectProperty(iAxesmdlUID, __GO_MARK_BACKGROUND__, &background, jni_int, 1);
346     setGraphicObjectProperty(iAxesmdlUID, __GO_MARK_FOREGROUND__, &foreground, jni_int, 1);
347
348     cubeScaling = 0;
349     setGraphicObjectProperty(iAxesmdlUID, __GO_CUBE_SCALING__, &cubeScaling, jni_bool, 1);
350
351     /* Log flags set to linear for the 3 axes */
352     logFlag = 0;
353
354     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_LOG_FLAG__, &logFlag, jni_bool, 1);
355     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_LOG_FLAG__, &logFlag, jni_bool, 1);
356     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_LOG_FLAG__, &logFlag, jni_bool, 1);
357
358     ticksColor = -1;
359     setGraphicObjectProperty(iAxesmdlUID, __GO_TICKS_COLOR__, &ticksColor, jni_int, 1);
360
361     nbSubticks = 1;
362     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_SUBTICKS__, &nbSubticks, jni_int, 1);
363     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_SUBTICKS__, &nbSubticks, jni_int, 1);
364     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_SUBTICKS__, &nbSubticks, jni_int, 1);
365
366     /* 0 corresponds to bottom position */
367     axisLocation = 0;
368     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_LOCATION__, &axisLocation, jni_int, 1);
369
370     /* 4 corresponds to left position */
371     axisLocation = 4;
372     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_LOCATION__, &axisLocation, jni_int, 1);
373
374     /* 0 corresponds to OFF */
375     boxType = 0;
376     setGraphicObjectProperty(iAxesmdlUID, __GO_BOX_TYPE__, &boxType, jni_int, 1);
377
378     filled = 1;
379     setGraphicObjectProperty(iAxesmdlUID, __GO_FILLED__, &filled, jni_bool, 1);
380
381     gridColor = -1;
382     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_GRID_COLOR__, &gridColor, jni_int, 1);
383     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_GRID_COLOR__, &gridColor, jni_int, 1);
384     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_GRID_COLOR__, &gridColor, jni_int, 1);
385
386     /* 0: background */
387     setGraphicObjectProperty(iAxesmdlUID, __GO_LINE_COLOR__, &lineColor, jni_int, 1);
388     setGraphicObjectProperty(iAxesmdlUID, __GO_BACKGROUND__, &background, jni_int, 1);
389
390     gridPosition = 0;
391
392     setGraphicObjectProperty(iAxesmdlUID, __GO_GRID_POSITION__, &gridPosition, jni_int, 1);
393
394     rotationAngles[0] = 0.0;
395     rotationAngles[1] = 270.0;
396
397     setGraphicObjectProperty(iAxesmdlUID, __GO_ROTATION_ANGLES__, rotationAngles, jni_double_vector, 2);
398
399     /* 0: 2D view */
400     view = 0;
401     setGraphicObjectProperty(iAxesmdlUID, __GO_VIEW__, &view, jni_int, 1);
402
403     /* Must be set after VIEW, since setting VIEW to 2D overwrites the 3D rotation angles */
404     rotationAngles[0] = 45.0;
405     rotationAngles[1] = 215.0;
406
407     setGraphicObjectProperty(iAxesmdlUID, __GO_ROTATION_ANGLES_3D__, rotationAngles, jni_double_vector, 2);
408
409     axisVisible = 0;
410     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
411     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
412     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_VISIBLE__, &axisVisible, jni_bool, 1);
413
414     axisReverse = 0;
415     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_REVERSE__, &axisReverse, jni_bool, 1);
416     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_REVERSE__, &axisReverse, jni_bool, 1);
417     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_REVERSE__, &axisReverse, jni_bool, 1);
418
419     /* Corresponds to the MVC AUTO_SUBTICKS property (!flagNax is equivalent to AUTO_SUBTICKS) */
420 #if 0
421     ppaxesmdl->flagNax = FALSE;
422 #endif
423
424     autoSubticks = 1;
425     setGraphicObjectProperty(iAxesmdlUID, __GO_AUTO_SUBTICKS__, &autoSubticks, jni_bool, 1);
426
427     /* To be corrected when the equivalent of flagnax is implemented within the MVC */
428     nbSubticks = 1;
429     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_SUBTICKS__, &nbSubticks, jni_int, 1);
430     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_SUBTICKS__, &nbSubticks, jni_int, 1);
431     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_SUBTICKS__, &nbSubticks, jni_int, 1);
432
433     /*
434      * The code creating default ticks labels and positions should be put
435      * into the Model. Ticks positions and locations should be computed using the default data bounds
436      * instead of using pre-defined values.
437      * Note that the pre-MVC ticks labels creation code is implemented in the C++ Renderer module
438      * and should be moved to the Java Model's relevant parts (TicksProperty).
439      */
440
441     /*
442      * Automatic ticks computation must be activated for the 3 axes before setting ticks values to
443      * ensure that the ticks values set are the automatic ticks' ones.
444      */
445     autoTicks = 1;
446     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_AUTO_TICKS__, &autoTicks, jni_bool, 1);
447     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_AUTO_TICKS__, &autoTicks, jni_bool, 1);
448     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_AUTO_TICKS__, &autoTicks, jni_bool, 1);
449
450     defaultNumberTicks = 11;
451
452     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_TICKS_LOCATIONS__, tab, jni_double_vector, defaultNumberTicks);
453     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_TICKS_LOCATIONS__, tab, jni_double_vector, defaultNumberTicks);
454
455     stringVector = createStringArray(defaultNumberTicks);
456
457     if (stringVector == NULL)
458     {
459         return -1;
460     }
461
462     /*
463      * A proper format should be used (ChoixFormatE function)
464      */
465     for (i = 0; i < defaultNumberTicks; i++)
466     {
467         sprintf(labelBuffer, "%.1f", tab[i]);
468         stringVector[i] = os_strdup(labelBuffer);
469
470         if (stringVector[i] == NULL)
471         {
472             destroyStringArray(stringVector, i);
473             return -1;
474         }
475     }
476
477     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_TICKS_LABELS__, stringVector, jni_string_vector, defaultNumberTicks);
478     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_TICKS_LABELS__, stringVector, jni_string_vector, defaultNumberTicks);
479
480     /*
481      * The same number of ticks is used now for the x,y and z axes.
482      * Previously, the z-axis contained only 3 ticks (-1, 0, 1). However, the renderer module was
483      * overriding this default number (3) by creating an 11-tick z-axis when required (3D view).
484      * Ticks locations and labels are however different for the z-axis (from -1 to +1 instead of 0 to 1).
485      */
486     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_TICKS_LOCATIONS__, tabZTicksLocations, jni_double_vector, defaultNumberTicks);
487
488     /* ChoixFormatE should be used */
489     for (i = 0; i < defaultNumberTicks; i++)
490     {
491         FREE(stringVector[i]);
492
493         sprintf(labelBuffer, "%.1f", tabZTicksLocations[i]);
494         stringVector[i] = os_strdup(labelBuffer);
495
496         if (stringVector[i] == NULL)
497         {
498             destroyStringArray(stringVector, defaultNumberTicks);
499             return -1;
500         }
501     }
502
503     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_TICKS_LABELS__, stringVector, jni_string_vector, defaultNumberTicks);
504
505     destroyStringArray(stringVector, defaultNumberTicks);
506
507     /*
508      * Indicates the direction of projection (0 for the axis corresponding to the direction,
509      * 1 for the others).
510      * To be implemented within the MVC if determined to be useful.
511      */
512 #if 0
513     ppaxesmdl->project[0] = 1;
514     ppaxesmdl->project[1] = 1;
515     ppaxesmdl->project[2] = 0;
516 #endif
517
518     hiddenAxisColor = 4;
519     setGraphicObjectProperty(iAxesmdlUID, __GO_HIDDEN_AXIS_COLOR__, &hiddenAxisColor, jni_int, 1);
520
521     hiddenColor = 4;
522     setGraphicObjectProperty(iAxesmdlUID, __GO_HIDDEN_COLOR__, &hiddenColor, jni_int, 1);
523
524     isoview = 0;
525     setGraphicObjectProperty(iAxesmdlUID, __GO_ISOVIEW__, &isoview, jni_bool, 1);
526
527     /* Axes bounds set to fill the whole drawing area */
528     axesBounds[0] = 0.0;
529     axesBounds[1] = 0.0;
530     axesBounds[2] = 1.0;
531     axesBounds[3] = 1.0;
532     setGraphicObjectProperty(iAxesmdlUID, __GO_AXES_BOUNDS__, axesBounds, jni_double_vector, 4);
533
534     /* xmin, xmax */
535     dataBounds[0] = 0.0;
536     dataBounds[1] = 1.0;
537     /* ymin, ymax */
538     dataBounds[2] = 0.0;
539     dataBounds[3] = 1.0;
540     /* zmin, zmax */
541     dataBounds[4] = -1.0;
542     dataBounds[5] = 1.0;
543
544     setGraphicObjectProperty(iAxesmdlUID, __GO_DATA_BOUNDS__, dataBounds, jni_double_vector, 6);
545
546     /* visible */
547     getGraphicObjectProperty(iFiguremdlUID, __GO_VISIBLE__, jni_bool, (void**)&piVisible);
548     setGraphicObjectProperty(iAxesmdlUID, __GO_VISIBLE__, &visible, jni_bool, 1);
549
550     /* 0: clipping off */
551     clipState = 0;
552     setGraphicObjectProperty(iAxesmdlUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
553
554     /* "real data bounds" and "data bounds" are initially the same */
555     setGraphicObjectProperty(iAxesmdlUID, __GO_REAL_DATA_BOUNDS__, dataBounds, jni_double_vector, 6);
556
557     tightLimits = 0;
558     setGraphicObjectProperty(iAxesmdlUID, __GO_X_TIGHT_LIMITS__, &tightLimits, jni_bool, 1);
559     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_TIGHT_LIMITS__, &tightLimits, jni_bool, 1);
560     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_TIGHT_LIMITS__, &tightLimits, jni_bool, 1);
561
562     /* Sets the default arc drawing method to lines (1), which is faster */
563     arcDrawingMethod = 1;
564     setGraphicObjectProperty(iAxesmdlUID, __GO_ARC_DRAWING_METHOD__, &arcDrawingMethod, jni_int, 1);
565
566     /* Creates the Axes model's labels and sets the model as their parent */
567     iLabelUID = initLabel(iAxesmdlUID);
568     setGraphicObjectProperty(iAxesmdlUID, __GO_TITLE__, &iLabelUID, jni_int, 1);
569
570     iLabelUID = initLabel(iAxesmdlUID);
571     setGraphicObjectProperty(iAxesmdlUID, __GO_X_AXIS_LABEL__, &iLabelUID, jni_int, 1);
572
573     iLabelUID = initLabel(iAxesmdlUID);
574     setGraphicObjectProperty(iAxesmdlUID, __GO_Y_AXIS_LABEL__, &iLabelUID, jni_int, 1);
575
576     iLabelUID = initLabel(iAxesmdlUID);
577     setGraphicObjectProperty(iAxesmdlUID, __GO_Z_AXIS_LABEL__, &iLabelUID, jni_int, 1);
578
579     return 0;
580 }
581
582 /*
583  * This function has been adapted to the MVC framework.
584  * Its code ought to be moved to the Java Model implementation,
585  * either within the relevant constructor or an initialization method.
586  */
587
588 /**sciInitGraphicMode
589  * Inits the graphic mode of this object with the default value
590  */
591 int sciInitGraphicMode(int iObjUID)
592 {
593     int iType = -1;
594     int *piType = &iType;
595
596     getGraphicObjectProperty(iObjUID, __GO_TYPE__, jni_int, (void **)&piType);
597
598     /*
599      * The GO_FIGURE block is never reached as InitFigureModel
600      * is not called at all (was previously called by
601      * the graphicsmodels function).
602      */
603     if (iType == __GO_FIGURE__)
604     {
605         /* 3: copy pixel drawing mode */
606         int xormode = 3;
607
608         if (isFigureModel(iObjUID))
609         {
610             /*
611              * These 3 properties are not used by the Figure object proper, but
612              * rather serve to initialize its children Axes' ones.
613              */
614             setGraphicObjectProperty(iObjUID, __GO_PIXEL_DRAWING_MODE__, &xormode, jni_int, 1);
615         }
616     }
617     else if (iType == __GO_AXES__)
618     {
619         /*
620          * Same values as the ones from the Figure model. These values were copied from the parent
621          * Figure but are for now set using the values below.
622          */
623
624         /* autoClear is the logical not of addPlot (autoClear == 0 corresponds to addPlot == TRUE) */
625         int autoClear = 0;
626         int autoScale = 1;
627         int zoom = 0;
628
629         /* 3: copy */
630         int xormode = 3;
631
632         if (isAxesModel(iObjUID))
633         {
634             setGraphicObjectProperty(iObjUID, __GO_AUTO_CLEAR__, &autoClear, jni_bool, 1);
635             setGraphicObjectProperty(iObjUID, __GO_AUTO_SCALE__, &autoScale, jni_bool, 1);
636             setGraphicObjectProperty(iObjUID, __GO_ZOOM_ENABLED__, &zoom, jni_bool, 1);
637
638             /*
639              * Internal state: was possibly used to avoid accessing the parent Figure's pixel drawing mode
640              * or may be entirely useless, as pixel drawing mode is associated to the whole Figure.
641              * As it has no corresponding MVC property, this call will not set anything.
642              */
643             setGraphicObjectProperty(iObjUID, __GO_PIXEL_DRAWING_MODE__, &xormode, jni_int, 1);
644         }
645         /*
646          * This block is never reached at all since since the Axes model
647          * is now cloned within the MVC via a C call.
648          */
649         else
650         {
651             int iTmp = 0;
652             int *piTmp = &iTmp;
653             int iAxesmdlUID = getAxesModel();
654
655             getGraphicObjectProperty(iAxesmdlUID, __GO_AUTO_CLEAR__, jni_bool, (void **)&piTmp);
656             autoClear = iTmp;
657             getGraphicObjectProperty(iAxesmdlUID, __GO_AUTO_SCALE__, jni_bool, (void **)&piTmp);
658             autoScale = iTmp;
659             getGraphicObjectProperty(iAxesmdlUID, __GO_ZOOM_ENABLED__, jni_bool, (void **)&piTmp);
660             zoom = iTmp;
661
662             setGraphicObjectProperty(iObjUID, __GO_AUTO_CLEAR__, &autoClear, jni_bool, 1);
663             setGraphicObjectProperty(iObjUID, __GO_AUTO_SCALE__, &autoScale, jni_bool, 1);
664             setGraphicObjectProperty(iObjUID, __GO_ZOOM_ENABLED__, &zoom, jni_bool, 1);
665
666             /*
667              * Internal state: used to avoid accessing the parent's pixel drawing mode
668              * obsolete ? Not implemented yet within the MVC
669              */
670
671             getGraphicObjectProperty(iAxesmdlUID, __GO_PIXEL_DRAWING_MODE__, jni_bool, (void **)&piTmp);
672             xormode = iTmp;
673
674             setGraphicObjectProperty(iObjUID, __GO_PIXEL_DRAWING_MODE__, &xormode, jni_int, 1);
675         }
676     }
677
678     /* Deactivated */
679 #if 0
680 case SCI_TEXT:
681 case SCI_LEGEND:
682 case SCI_ARC:
683 case SCI_SEGS:
684 case SCI_FEC:
685 case SCI_GRAYPLOT:
686 case SCI_POLYLINE:
687 case SCI_RECTANGLE:
688 case SCI_SURFACE:
689 case SCI_AXES:
690 case SCI_AGREG:
691 case SCI_LABEL:                /* F.Leray 28.05.04 */
692 case SCI_UIMENU:
693 default:
694     sciprint(_("This object has not any graphic mode\n"));
695     return -1;
696     break;
697 #endif
698
699     return 0;
700 }
701
702 /*---------------------------------------------------------------------------------*/
703 /* allocate and set a new label to default values */
704 int initLabel(int iParentObjUID)
705 {
706     int iNewLabel = 0;
707     int iHidden = 1;
708     int autoPosition = 1;
709
710     iNewLabel = createGraphicObject(__GO_LABEL__);
711
712     /* Hide Label as they are non explicit children */
713     setGraphicObjectProperty(iNewLabel, __GO_HIDDEN__, &iHidden, jni_bool, 1);
714     setGraphicObjectProperty(iNewLabel, __GO_AUTO_POSITION__, &autoPosition, jni_bool, 1);
715     setGraphicObjectProperty(iNewLabel, __GO_AUTO_ROTATION__, &autoPosition, jni_bool, 1);
716
717     /* Sets the label's parent */
718     setGraphicObjectRelationship(iParentObjUID, iNewLabel);
719
720     cloneGraphicContext(iParentObjUID, iNewLabel);
721     cloneFontContext(iParentObjUID, iNewLabel);
722
723     return iNewLabel;
724 }
725 /*---------------------------------------------------------------------------------*/