14
14
15
15
#include < jni.h>
16
16
17
+ #include < array>
17
18
#include < utility>
18
19
19
20
#include " ink/geometry/angle.h"
20
21
#include " ink/geometry/envelope.h"
21
22
#include " ink/geometry/internal/jni/rect_jni_helper.h"
22
23
#include " ink/geometry/internal/jni/vec_jni_helper.h"
24
+ #include " ink/geometry/point.h"
23
25
#include " ink/geometry/quad.h"
24
26
#include " ink/geometry/vec.h"
25
27
#include " ink/jni/internal/jni_defines.h"
@@ -28,14 +30,15 @@ namespace {
28
30
29
31
using ::ink::Angle;
30
32
using ::ink::Envelope;
33
+ using ::ink::Point;
31
34
using ::ink::Quad;
32
35
using ::ink::Vec;
33
36
34
37
} // namespace
35
38
36
39
extern " C" {
37
40
38
- JNI_METHOD (geometry , ParallelogramNative, jobject, nativeCreateBoundingBox )
41
+ JNI_METHOD (geometry_internal , ParallelogramNative, jobject, createBoundingBox )
39
42
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
40
43
jfloat height, jfloat rotation, jfloat shear_factor,
41
44
jclass immutable_box_class, jclass immutable_vec_class) {
@@ -48,7 +51,7 @@ JNI_METHOD(geometry, ParallelogramNative, jobject, nativeCreateBoundingBox)
48
51
immutable_vec_class);
49
52
}
50
53
51
- JNI_METHOD (geometry , ParallelogramNative, void , nativePopulateBoundingBox )
54
+ JNI_METHOD (geometry_internal , ParallelogramNative, void , populateBoundingBox )
52
55
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
53
56
jfloat height, jfloat rotation, jfloat shear_factor, jobject mutable_box) {
54
57
Quad quad = Quad::FromCenterDimensionsRotationAndShear (
@@ -59,7 +62,7 @@ JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateBoundingBox)
59
62
Envelope (quad).AsRect ().value ());
60
63
}
61
64
62
- JNI_METHOD (geometry , ParallelogramNative, jobjectArray, nativeCreateSemiAxes )
65
+ JNI_METHOD (geometry_internal , ParallelogramNative, jobjectArray, createSemiAxes )
63
66
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
64
67
jfloat height, jfloat rotation, jfloat shear_factor,
65
68
jclass immutable_vec_class) {
@@ -78,7 +81,7 @@ JNI_METHOD(geometry, ParallelogramNative, jobjectArray, nativeCreateSemiAxes)
78
81
return vector_array;
79
82
}
80
83
81
- JNI_METHOD (geometry , ParallelogramNative, void , nativePopulateSemiAxes )
84
+ JNI_METHOD (geometry_internal , ParallelogramNative, void , populateSemiAxes )
82
85
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
83
86
jfloat height, jfloat rotation, jfloat shear_factor, jobject out_axis1,
84
87
jobject out_axis2) {
@@ -90,4 +93,46 @@ JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateSemiAxes)
90
93
ink::FillJMutableVecFromVec (env, out_axis2, axes.second );
91
94
}
92
95
96
+ JNI_METHOD (geometry_internal, ParallelogramNative, jobjectArray, createCorners)
97
+ (JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
98
+ jfloat height, jfloat rotation, jfloat shear_factor,
99
+ jclass immutable_vec_class) {
100
+ Quad quad = Quad::FromCenterDimensionsRotationAndShear (
101
+ {center_x, center_y}, width, height, Angle::Radians (rotation),
102
+ shear_factor);
103
+ std::array<Point, 4 > corners = quad.Corners ();
104
+ jobjectArray vector_array =
105
+ env->NewObjectArray (4 , immutable_vec_class, nullptr );
106
+ for (int i = 0 ; i < 4 ; ++i) {
107
+ env->SetObjectArrayElement (vector_array, i,
108
+ ink::CreateJImmutableVecFromPoint (
109
+ env, corners[i], immutable_vec_class));
110
+ }
111
+ return vector_array;
112
+ }
113
+
114
+ JNI_METHOD (geometry_internal, ParallelogramNative, void , populateCorners)
115
+ (JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
116
+ jfloat height, jfloat rotation, jfloat shear_factor, jobject out_corner1,
117
+ jobject out_corner2, jobject out_corner3, jobject out_corner4) {
118
+ Quad quad = Quad::FromCenterDimensionsRotationAndShear (
119
+ {center_x, center_y}, width, height, Angle::Radians (rotation),
120
+ shear_factor);
121
+ std::array<Point, 4 > corners = quad.Corners ();
122
+ ink::FillJMutableVecFromPoint (env, out_corner1, corners[0 ]);
123
+ ink::FillJMutableVecFromPoint (env, out_corner2, corners[1 ]);
124
+ ink::FillJMutableVecFromPoint (env, out_corner3, corners[2 ]);
125
+ ink::FillJMutableVecFromPoint (env, out_corner4, corners[3 ]);
126
+ }
127
+
128
+ JNI_METHOD (geometry_internal, ParallelogramNative, jboolean, contains)
129
+ (JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
130
+ jfloat height, jfloat rotation, jfloat shear_factor, jfloat point_x,
131
+ jfloat point_y) {
132
+ Quad quad = Quad::FromCenterDimensionsRotationAndShear (
133
+ {center_x, center_y}, width, height, Angle::Radians (rotation),
134
+ shear_factor);
135
+ return quad.Contains ({point_x, point_y});
136
+ }
137
+
93
138
} // extern "C"
0 commit comments