8feded7a52854d63fe7b2d7e478f726714fac31a
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_param3d.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 /*------------------------------------------------------------------------*/
18 /* file: sci_param3d.c                                                    */
19 /* desc : interface for param3d routine                                   */
20 /*------------------------------------------------------------------------*/
21
22 #include "gw_graphics.h"
23 #include "GetCommandArg.h"
24 #include "BuildObjects.h"
25 #include "sciCall.h"
26 #include "api_scilab.h"
27 #include "localization.h"
28 #include "Scierror.h"
29 /*------------------------------------------------------------------------*/
30 int sci_param3d(char * fname, void *pvApiCtx)
31 {
32     SciErr sciErr;
33     int izcol = 0, isfac = 0;
34     static double  ebox_def[6] = { 0, 1, 0, 1, 0, 1};
35     double *ebox = ebox_def;
36     static int iflag_def[3] = {1, 2, 4};
37     int iflag[3], *ifl = NULL, ix1 = 0, one = 1;
38     double  alpha_def = 35.0 , theta_def = 45.0;
39     double *alpha = &alpha_def, *theta = &theta_def;
40     int m1 = 0, n1 = 0, m2 = 0, n2 = 0, m3 = 0, n3 = 0;
41     int m3n = 0, n3n = 0; /* F.Leray 19.03.04*/
42
43     static rhs_opts opts[] =
44     {
45         { -1, "alpha", -1, 0, 0, NULL},
46         { -1, "ebox", -1, 0, 0, NULL},
47         { -1, "flag", -1, 0, 0, NULL},
48         { -1, "leg", -1, 0, 0, NULL},
49         { -1, "theta", -1, 0, 0, NULL},
50         { -1, NULL, -1, 0, 0, NULL}
51     };
52
53     char * labels = NULL;
54
55     int* piAddr1 = NULL;
56     int* piAddr2 = NULL;
57     int* piAddr3 = NULL;
58
59     double* l1 = NULL;
60     double* l2 = NULL;
61     double* l3 = NULL;
62
63     if (nbInputArgument(pvApiCtx) <= 0)
64     {
65         sci_demo(fname, pvApiCtx);
66         return 0;
67     }
68
69     CheckInputArgument(pvApiCtx, 3, 8);
70
71     if (getOptionals(pvApiCtx, fname, opts) == 0)
72     {
73         ReturnArguments(pvApiCtx);
74         return 0;
75     }
76     if (FirstOpt(pvApiCtx) < 4)
77     {
78         Scierror(999, _("%s: Misplaced optional argument: #%d must be at position %d.\n"), fname, 1, 4);
79         return (0);
80     }
81
82     //get variable address
83     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1);
84     if (sciErr.iErr)
85     {
86         printError(&sciErr, 0);
87         return 1;
88     }
89
90     // Retrieve a matrix of double at position 1.
91     sciErr = getMatrixOfDouble(pvApiCtx, piAddr1, &m1, &n1, &l1);
92     if (sciErr.iErr)
93     {
94         Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 1);
95         printError(&sciErr, 0);
96         return 1;
97     }
98
99     if (m1 * n1 == 0)
100     {
101         AssignOutputVariable(pvApiCtx, 1) = 0;
102         ReturnArguments(pvApiCtx);
103         return 0;
104     }
105     //get variable address
106     sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr2);
107     if (sciErr.iErr)
108     {
109         printError(&sciErr, 0);
110         return 1;
111     }
112
113     // Retrieve a matrix of double at position 2.
114     sciErr = getMatrixOfDouble(pvApiCtx, piAddr2, &m2, &n2, &l2);
115     if (sciErr.iErr)
116     {
117         Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 2);
118         printError(&sciErr, 0);
119         return 1;
120     }
121
122     //get variable address
123     sciErr = getVarAddressFromPosition(pvApiCtx, 3, &piAddr3);
124     if (sciErr.iErr)
125     {
126         printError(&sciErr, 0);
127         return 1;
128     }
129
130     // Retrieve a matrix of double at position 3.
131     sciErr = getMatrixOfDouble(pvApiCtx, piAddr3, &m3, &n3, &l3);
132     if (sciErr.iErr)
133     {
134         Scierror(202, _("%s: Wrong type for argument #%d: A real expected.\n"), fname, 3);
135         printError(&sciErr, 0);
136         return 1;
137     }
138
139     //CheckSameDims
140     if (m1 != m2 || n1 != n2)
141     {
142         Scierror(999, _("%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n"), fname, 1, m1, n1);
143         return 1;
144     }
145
146     //CheckSameDims
147     if (m2 != m3 || n2 != n3)
148     {
149         Scierror(999, _("%s: Wrong size for input argument #%d: %d-by-%d matrix expected.\n"), fname, 2, m2, n2);
150         return 1;
151     }
152
153
154     if (get_optional_double_arg(pvApiCtx, fname, 4, "theta", &theta, 1, opts) == 0)
155     {
156         return 0;
157     }
158     if (get_optional_double_arg(pvApiCtx, fname, 5, "alpha", &alpha, 1, opts) == 0)
159     {
160         return 0;
161     }
162     if (get_labels_arg(pvApiCtx, fname, 6, opts, &labels) == 0)
163     {
164         return 0;
165     }
166
167     iflag_def[1] = 8;
168     ifl = &(iflag_def[1]);
169     if (get_optional_int_arg(pvApiCtx, fname, 7, "flag", &ifl, 2, opts) == 0)
170     {
171         return 0;
172     }
173     iflag[0] = iflag_def[0];
174     iflag[1] = ifl[0];
175     iflag[2] = ifl[1];
176     if (get_optional_double_arg(pvApiCtx, fname, 8, "ebox", &ebox, 6, opts) == 0)
177     {
178         return 0;
179     }
180
181     getOrCreateDefaultSubwin();
182
183     ix1 = m1 * n1;
184
185     /* NG beg */
186     isfac = -1;
187     izcol = 0;
188
189     Objplot3d (fname, &isfac, &izcol, (l1), (l2), (l3), (double *) NULL, &ix1, &one, theta, alpha, labels, iflag, ebox, &m1, &n1, &m2, &n2, &m3, &n3, &m3n, &n3n); /*Adding F.Leray 12.03.04 */
190
191
192     /* NG end */
193     AssignOutputVariable(pvApiCtx, 1) = 0;
194     ReturnArguments(pvApiCtx);
195     return 0;
196 }
197 /*------------------------------------------------------------------------*/