667f9cca32d3a9d2e310db11311d74f221f2c7d1
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_triangles_property.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2004-2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Allan Cornet
5  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
6  * Copyright (C) 2010 - DIGITEO - Manuel Juliachs
7  *
8  * This file must be used under the terms of the CeCILL.
9  * This source file is licensed as described in the file COPYING, which
10  * you should have received as part of this distribution.  The terms
11  * are also available at
12  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
13  *
14  */
15
16 /*------------------------------------------------------------------------*/
17 /* file: set_triangles_property.c                                         */
18 /* desc : function to modify in Scilab the surface_color field of         */
19 /*        a handle                                                        */
20 /*------------------------------------------------------------------------*/
21
22 #include <string.h>
23
24 #include "setHandleProperty.h"
25 #include "SetProperty.h"
26 #include "getPropertyAssignedValue.h"
27 #include "SetPropertyStatus.h"
28 #include "GetProperty.h"
29 #include "Scierror.h"
30 #include "localization.h"
31
32 #include "getGraphicObjectProperty.h"
33 #include "setGraphicObjectProperty.h"
34 #include "graphicObjectProperties.h"
35
36 /*------------------------------------------------------------------------*/
37 int set_triangles_property(void* _pvCtx, char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol )
38 {
39     char* type = NULL;
40     BOOL result = FALSE;
41     double* pnoeud = NULL;
42
43     if ( !isParameterDoubleMatrix( valueType ) )
44     {
45         Scierror(999, _("Wrong type for '%s' property: Real matrix expected.\n"), "triangles");
46         return SET_PROPERTY_ERROR;
47     }
48
49     /*
50      * Discriminating between a failed allocation and the non-existing property case
51      * is not done for now.
52      * To be implemented/corrected.
53      */
54     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_string, (void **)&type);
55
56     if (strcmp(type, __GO_FEC__) != 0)
57     {
58         Scierror(999, _("'%s' property does not exist for this handle.\n"),"triangles");
59         return SET_PROPERTY_ERROR;
60     }
61
62     if ( nbCol != 5 )
63     {
64         Scierror(999, _("Wrong size for '%s' property: Must have %d columns.\n"), "triangles", 5);
65         return SET_PROPERTY_ERROR;
66     }
67
68     /* Resizes the triangle array if required */
69     result  = setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_INDICES__, &nbRow, jni_int, 1);
70
71     if (result == FALSE)
72     {
73         Scierror(999, _("%s: No more memory.\n"),"set_triangles_property");
74         return SET_PROPERTY_ERROR;
75     }
76
77     pnoeud = getDoubleMatrixFromStack(stackPointer);
78
79     setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_FEC_TRIANGLES__, pnoeud, jni_double_vector, nbRow);
80
81     return SET_PROPERTY_SUCCEED;
82 }
83 /*------------------------------------------------------------------------*/