ed080603dff1369f1c8eb8f69e46d8ba68535678
[scilab.git] / scilab / modules / graphic_objects / src / jni / SurfaceData.i
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - Pedro Arthur dos S. Souza
4  * Copyright (C) 2012 - Caio Lucas dos S. Souza
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 %module SurfaceData
18  
19
20 %pragma(java) jniclasscode=%{
21   static {
22     try {
23         System.loadLibrary("scigraphic_objects");
24     } catch (UnsatisfiedLinkError e) {
25       System.err.println("Native library failed to load. \n" + e);
26       System.exit(1);
27     }
28   }
29 %}
30
31 %typemap(jni) double * "jobject"
32 %typemap(jtype) double * "Object"
33 %typemap(jstype) double * "Object"
34 %typemap(javain) double * "$javainput"
35 %typemap(javaout) double * { return $jnicall; }
36
37 %typemap(in) double * getSurfDataX {
38         $1 = (*jenv)->GetDoubleArrayElements(jenv, $input, NULL);
39 }
40 %typemap(argout) double * getSurfDataX {
41         (*jenv)->ReleaseDoubleArrayElements(jenv, $input, $1, 0);
42 }
43 %typemap(out) double * getSurfDataX {
44         $result = (*jenv)->NewDoubleArray(jenv, getDataSizeX(arg1));
45         (*jenv)->SetDoubleArrayRegion(jenv, $result, 0, getDataSizeX(arg1), $1);
46 }
47
48 %typemap(in) double * getSurfDataY {
49         $1 = (*jenv)->GetDoubleArrayElements(jenv, $input, NULL);
50 }
51 %typemap(argout) double * getSurfDataY {
52         (*jenv)->ReleaseDoubleArrayElements(jenv, $input, $1, 0);
53 }
54 %typemap(out) double * getSurfDataY {
55         $result = (*jenv)->NewDoubleArray(jenv, getDataSizeY(arg1));
56         (*jenv)->SetDoubleArrayRegion(jenv, $result, 0, getDataSizeY(arg1), $1);
57 }
58
59 %typemap(in) double * getSurfDataZ {
60         $1 = (*jenv)->GetDoubleArrayElements(jenv, $input, NULL);
61 }
62 %typemap(argout) double * getSurfDataZ {
63         (*jenv)->ReleaseDoubleArrayElements(jenv, $input, $1, 0);
64 }
65 %typemap(out) double * getSurfDataZ {
66         $result = (*jenv)->NewDoubleArray(jenv, getDataSizeZ(arg1));
67         (*jenv)->SetDoubleArrayRegion(jenv, $result, 0, getDataSizeZ(arg1), $1);
68 }
69
70 %{
71 #include "returnType.h"
72 #include "getGraphicObjectProperty.h"
73 #include "setGraphicObjectProperty.h"
74 #include "graphicObjectProperties.h"
75 %}
76
77 %{
78 double * getSurfDataX(int uid)
79 {
80         double * X;
81         getGraphicObjectProperty(uid, __GO_DATA_MODEL_X__, jni_double_vector, (void**) &X);
82         return X;
83 }
84
85 int getDataSizeX(int uid)
86 {
87         int type, size = 0, nGon = 0, nVert = 0;
88         int * pType = &type;
89         int * pSize = &size;
90         int * pNGon = &nGon;
91         int * pNVert = &nVert;
92         getGraphicObjectProperty(uid, __GO_TYPE__, jni_int, (void**) &pType);
93
94         switch(type)
95         {
96                 case __GO_PLOT3D__:
97                 case __GO_GRAYPLOT__:
98                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_X__, jni_int, (void**) &pSize);
99                         break;
100                 case __GO_FAC3D__:
101                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_GONS__, jni_int, (void**) &pNGon);
102                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_VERTICES_PER_GON__, jni_int, (void**) &pNVert);
103                         size = nGon * nVert;
104                         break;
105         }
106         return size;
107 }
108 %}
109
110 %{
111 double * getSurfDataY(int uid)
112 {
113         double * Y;
114         getGraphicObjectProperty(uid, __GO_DATA_MODEL_Y__, jni_double_vector, (void**) &Y);
115         return Y;
116 }
117
118 int getDataSizeY(int uid)
119 {
120         int type, size = 0, nGon = 0, nVert = 0;
121         int * pType = &type;
122         int * pSize = &size;
123         int * pNGon = &nGon;
124         int * pNVert = &nVert;
125         getGraphicObjectProperty(uid, __GO_TYPE__, jni_int, (void**) &pType);
126
127         switch(type)
128         {
129                 case __GO_PLOT3D__:
130                 case __GO_GRAYPLOT__:
131                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_Y__, jni_int, (void**) &pSize);
132                         break;
133                 case __GO_FAC3D__:
134                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_GONS__, jni_int, (void**) &pNGon);
135                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_VERTICES_PER_GON__, jni_int, (void**) &pNVert);
136                         size = nGon * nVert;
137                         break;
138         }
139         return size;
140 }
141 %}
142
143 %{
144 double * getSurfDataZ(int uid)
145 {
146         double * Z;
147         getGraphicObjectProperty(uid, __GO_DATA_MODEL_Z__, jni_double_vector, (void**) &Z);
148         return Z;
149 }
150
151 int getDataSizeZ(int uid)
152 {
153         int type, size = 0, nGon = 0, nVert = 0;
154         int * pType = &type;
155         int * pSize = &size;
156         int * pNGon = &nGon;
157         int * pNVert = &nVert;
158         getGraphicObjectProperty(uid, __GO_TYPE__, jni_int, (void**) &pType);
159
160         switch(type)
161         {
162                 case __GO_PLOT3D__:
163                 case __GO_GRAYPLOT__:
164                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_Z__, jni_int, (void**) &pSize);
165                         break;
166                 case __GO_FAC3D__:
167                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_GONS__, jni_int, (void**) &pNGon);
168                         getGraphicObjectProperty(uid, __GO_DATA_MODEL_NUM_VERTICES_PER_GON__, jni_int, (void**) &pNVert);
169                         size = nGon * nVert;
170                         break;
171         }
172         return size;
173 }
174 %}
175
176 %{
177 extern int createObject3dData(int obj, int newObj, int type);
178 extern double pickSurface(int uid, double x, double y,  double z, double dx, double dy, double dz, double mx, double my, double mz, double mw);
179 %}
180
181
182 double * getSurfDataX(int uid);
183 double * getSurfDataY(int uid);
184 double * getSurfDataZ(int uid);
185 int createObject3dData(int obj, int newObj, int type);
186 double pickSurface(int uid, double x, double y,  double z, double dx, double dy, double dz, double mx, double my, double mz, double mw);
187
188
189